<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "http://bugs.gentoo.org/bugzilla.dtd">

<bugzilla version="2.22.7"
          urlbase="http://bugs.gentoo.org/"
          maintainer="bugzilla@gentoo.org"
>

    <bug>
          <bug_id>166086</bug_id>
          
          <creation_ts>2007-02-09 14:58 0000</creation_ts>
          <short_desc>sys-kernel/gentoo-sources-2.6.20 doesn&apos;t compile</short_desc>
          <delta_ts>2007-03-10 04:46:32 0000</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>Gentoo Linux</product>
          <component>Applications</component>
          <version>unspecified</version>
          <rep_platform>AMD64</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          <bug_file_loc>http://forums.gentoo.org/viewtopic-t-537880-highlight-.html</bug_file_loc>
          
          
          <priority>P2</priority>
          <bug_severity>normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          
          <everconfirmed>1</everconfirmed>
          <reporter>pacho@gentoo.org</reporter>
          <assigned_to>kernel@gentoo.org</assigned_to>
          <cc>m.debruijne@matrict.nl</cc>
    
    <cc>pacho@gentoo.org</cc>

      

      
          <long_desc isprivate="0">
            <who>pacho@gentoo.org</who>
            <bug_when>2007-02-09 14:58:52 0000</bug_when>
            <thetext>I get the following errors:
  CC [M]  drivers/char/speakup/speakup_keyhelp.o
  CC [M]  drivers/char/speakup/speakup.o
drivers/char/speakup/speakup.c: In function &apos;say_line&apos;:
drivers/char/speakup/speakup.c:900: warning: format &apos;%d&apos; expects type &apos;int&apos;, but argument 3 has type &apos;long int&apos;
drivers/char/speakup/speakup.c:900: warning: format &apos;%d&apos; expects type &apos;int&apos;, but argument 3 has type &apos;long int&apos;
drivers/char/speakup/speakup.c: At top level:
drivers/char/speakup/speakup.c:2031: error: expected identifier or &apos;(&apos; before &apos;{&apos; token
make[3]: *** [drivers/char/speakup/speakup.o] Error 1
make[2]: *** [drivers/char/speakup] Error 2
make[1]: *** [drivers/char] Error 2
make: *** [drivers] Error 2

My emerge --info:
Portage 2.1.1-r2 (default-linux/amd64/2006.1, gcc-4.1.1, glibc-2.4-r4, 2.6.19-gentoo-r5 x86_64)
=================================================================
System uname: 2.6.19-gentoo-r5 x86_64 AMD Athlon(tm) 64 Processor 3200+
Gentoo Base System release 1.12.8
Last Sync: Fri, 09 Feb 2007 08:50:01 +0000
ccache version 2.4 [enabled]
app-admin/eselect-compiler: [Not Present]
dev-java/java-config: 1.3.7, 2.0.31
dev-lang/python:     2.4.3-r4
dev-python/pycrypto: 2.0.1-r5
dev-util/ccache:     2.4-r6
dev-util/confcache:  [Not Present]
sys-apps/sandbox:    1.2.17
sys-devel/autoconf:  2.13, 2.61
sys-devel/automake:  1.4_p6, 1.5, 1.6.3, 1.7.9-r1, 1.8.5-r3, 1.9.6-r2, 1.10
sys-devel/binutils:  2.16.1-r3
sys-devel/gcc-config: 1.3.14
sys-devel/libtool:   1.5.22
virtual/os-headers:  2.6.19.2-r2
ACCEPT_KEYWORDS=&quot;amd64&quot;
AUTOCLEAN=&quot;yes&quot;
CBUILD=&quot;x86_64-pc-linux-gnu&quot;
CFLAGS=&quot;-march=k8 -O2 -pipe -msse3&quot;
CHOST=&quot;x86_64-pc-linux-gnu&quot;
CONFIG_PROTECT=&quot;/etc /usr/kde/3.5/env /usr/kde/3.5/share/config /usr/kde/3.5/shutdown /usr/share/X11/xkb /usr/share/config&quot;
CONFIG_PROTECT_MASK=&quot;/etc/env.d /etc/env.d/java/ /etc/gconf /etc/java-config/vms/ /etc/revdep-rebuild /etc/splash /etc/terminfo /etc/texmf/web2c&quot;
CXXFLAGS=&quot;-march=k8 -O2 -pipe -msse3&quot;
DISTDIR=&quot;/usr/portage/distfiles&quot;
FEATURES=&quot;autoconfig ccache distlocks metadata-transfer parallel-fetch sandbox sfperms strict&quot;
GENTOO_MIRRORS=&quot;http://ftp.club-internet.fr/pub/mirrors/gentoo&quot;
LANG=&quot;es_ES.UTF-8&quot;
LC_ALL=&quot;es_ES.UTF-8&quot;
LINGUAS=&quot;es en_US&quot;
MAKEOPTS=&quot;-j2&quot;
PKGDIR=&quot;/usr/portage/packages&quot;
PORTAGE_RSYNC_OPTS=&quot;--recursive --links --safe-links --perms --times --compress --force --whole-file --delete --delete-after --stats --timeout=180 --exclude=&apos;/distfiles&apos; --exclude=&apos;/local&apos; --exclude=&apos;/packages&apos;&quot;
PORTAGE_TMPDIR=&quot;/var/tmp&quot;
PORTDIR=&quot;/usr/portage&quot;
PORTDIR_OVERLAY=&quot;/usr/portage/local/layman/sunrise /usr/portage/local/layman/armagetron /usr/local/portage&quot;
SYNC=&quot;rsync://rsync.europe.gentoo.org/gentoo-portage&quot;
USE=&quot;X a52 aac aalib acpi alsa alsa_cards_ali5451 alsa_cards_als4000 alsa_cards_atiixp alsa_cards_atiixp-modem alsa_cards_bt87x alsa_cards_ca0106 alsa_cards_cmipci alsa_cards_emu10k1x alsa_cards_ens1370 alsa_cards_ens1371 alsa_cards_es1938 alsa_cards_es1968 alsa_cards_fm801 alsa_cards_hda-intel alsa_cards_intel8x0 alsa_cards_intel8x0m alsa_cards_maestro3 alsa_cards_trident alsa_cards_usb-audio alsa_cards_via82xx alsa_cards_via82xx-modem alsa_cards_ymfpci alsa_pcm_plugins_adpcm alsa_pcm_plugins_alaw alsa_pcm_plugins_asym alsa_pcm_plugins_copy alsa_pcm_plugins_dmix alsa_pcm_plugins_dshare alsa_pcm_plugins_dsnoop alsa_pcm_plugins_empty alsa_pcm_plugins_extplug alsa_pcm_plugins_file alsa_pcm_plugins_hooks alsa_pcm_plugins_iec958 alsa_pcm_plugins_ioplug alsa_pcm_plugins_ladspa alsa_pcm_plugins_lfloat alsa_pcm_plugins_linear alsa_pcm_plugins_meter alsa_pcm_plugins_mulaw alsa_pcm_plugins_multi alsa_pcm_plugins_null alsa_pcm_plugins_plug alsa_pcm_plugins_rate alsa_pcm_plugins_route alsa_pcm_plugins_share alsa_pcm_plugins_shm alsa_pcm_plugins_softvol amd64 apache2 arts asf audiofile bash-completion beagle bitmap-fonts bzip2 bzlib cairo caps cdb cdda cddb cdparanoia cdr cli cpdflib cracklib cross crypt cscope cups curl dbus dga divx4linux dlloader dri dts dvb dvb_cards_usb-dib0700 dvd dvdr dvdread elibc_glibc encode erandom escreen esd evo evolution exif fam fbcon flac foomaticdb fortran ftp galago gb gcj ggi gif gimp gimpprint glitz glut glx gnome gnome-print gphoto2 gpm gstreamer gtk gtk2 gtkhtml hal iconv idn imagemagick imlib input_devices_keyboard input_devices_mouse isdnlog ithreads jabber jack java jpeg kde kdeenablefinal kdehiddenvisibility kernel_linux latex lcd_devices_bayrad lcd_devices_cfontz lcd_devices_cfontz633 lcd_devices_glk lcd_devices_hd44780 lcd_devices_lb216 lcd_devices_lcdm001 lcd_devices_mtxorb lcd_devices_ncurses lcd_devices_text lcms libg++ libnotify linguas_en_US linguas_es logrotate mad madwifi midi mikmod mime mng mono motif mp3 mpeg mpi mplayer musepack musicbrainz nas nautilus ncurses nethack network nls nocardbus nptl nptlonly nvidia ogg oggvorbis openal opengl oss pam pcre pdf perl pic plotutils png posix ppds pppd python qt3 qt4 quicktime readline reflection rtc ruby scanner sdl seamonkey session slang slp sockets spell spl ssl svg sysvipc tcltk tcpd tetex theora threads tiff timidity tk totem trayicon truetype truetype-fonts type1-fonts udev unicode usb userland_GNU v4l v4l2 vcd video_cards_fbdev video_cards_nv video_cards_nvidia video_cards_vesa video_cards_vga videos vim vorbis wma wmf xcomposite xine xml xml2 xorg xpm xv xvid zlib&quot;
Unset:  CTARGET, EMERGE_DEFAULT_OPTS, INSTALL_MASK, LDFLAGS, PORTAGE_RSYNC_EXTRA_OPTS


Reproducible: Always</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>dsd@gentoo.org</who>
            <bug_when>2007-02-09 15:09:24 0000</bug_when>
            <thetext>Please attach kernel .config</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>pacho@gentoo.org</who>
            <bug_when>2007-02-09 15:41:23 0000</bug_when>
            <thetext>Created an attachment (id=109648)
config

</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>pacho@gentoo.org</who>
            <bug_when>2007-02-18 12:29:33 0000</bug_when>
            <thetext>Seems that more people has the same problem, disable console speech is not the properly fix for this bug :-(

Thanks a lot</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>count0nz@gmail.com</who>
            <bug_when>2007-02-19 22:16:40 0000</bug_when>
            <thetext>(In reply to comment #3)
&gt; Seems that more people has the same problem, disable console speech is not the
&gt; properly fix for this bug :-(
&gt; 
&gt; Thanks a lot
&gt; 

Same problem here AMD64 also.
listed Temp fix works. </thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>dsd@gentoo.org</who>
            <bug_when>2007-02-24 18:13:06 0000</bug_when>
            <thetext>Can&apos;t reproduce here. In /usr/src/linux/drivers/char/speakup.c, find these lines at  the top:

#include &lt;linux/selection.h&gt;
#include &lt;asm/uaccess.h&gt; /* copy_from|to|user( ) and others */
#include &lt;linux/unistd.h&gt;

Add another line under that which says:

#include &lt;linux/console_struct.h&gt;

Does that help?</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>pacho@gentoo.org</who>
            <bug_when>2007-02-24 19:11:44 0000</bug_when>
            <thetext>The problem persists (In reply to comment #5)
&gt; Can&apos;t reproduce here. In /usr/src/linux/drivers/char/speakup.c, find these
&gt; lines at  the top:
&gt; 
&gt; #include &lt;linux/selection.h&gt;
&gt; #include &lt;asm/uaccess.h&gt; /* copy_from|to|user( ) and others */
&gt; #include &lt;linux/unistd.h&gt;
&gt; 
&gt; Add another line under that which says:
&gt; 
&gt; #include &lt;linux/console_struct.h&gt;
&gt; 
&gt; Does that help?
&gt; 

The problem persists. I am on amd64 arch

Thanks</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>pacho@gentoo.org</who>
            <bug_when>2007-03-04 14:21:42 0000</bug_when>
            <thetext>The problem doesn&apos;t affect to vanilla-sources and ck-sources, I think that the problem is caused by 4400_speakup-20070204.patch provided in genpatches-2.6.20-1.extras.tar.bz2

Thanks</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>pacho@gentoo.org</who>
            <bug_when>2007-03-04 14:26:53 0000</bug_when>
            <thetext>Created an attachment (id=112063)
4400_speakup-20070204.patch

I attach the problematic patch</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>dsd@gentoo.org</who>
            <bug_when>2007-03-04 17:03:12 0000</bug_when>
            <thetext>Indeed, that was already known. Problem is that I can&apos;t reproduce it -- have specifically tested on 4 systems.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>pacho@gentoo.org</who>
            <bug_when>2007-03-04 17:18:42 0000</bug_when>
            <thetext>(In reply to comment #9)
&gt; Indeed, that was already known. Problem is that I can&apos;t reproduce it -- have
&gt; specifically tested on 4 systems.
&gt; 

I am really surprised :-O

I have run:
emerge -C sys-kernel/gentoo-sources-2.6.20
cd /usr/src
rm -rf linux-2.6.20-gentoo
emerge gentoo-sources

And the problem persists :-/
</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>pacho@gentoo.org</who>
            <bug_when>2007-03-04 17:51:48 0000</bug_when>
            <thetext>It works regenerating the config, this is the diff:

&lt; CONFIG_SPEAKUP=m
---
&gt; CONFIG_SPEAKUP=y

Seems that CONFIG_SPEAKUP cannot be compiled as a module, if I compile it into the kernel, it works. Is this the normal behavior? :-|

Thanks a lot</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>m.debruijne@matrict.nl</who>
            <bug_when>2007-03-05 07:25:54 0000</bug_when>
            <thetext>(In reply to comment #9)
&gt; Indeed, that was already known. Problem is that I can&apos;t reproduce it -- have
&gt; specifically tested on 4 systems.
&gt; 

FWIW; I was unable to reproduce the problem on any i386 (kernel architecture not actually an i386), but on every x86_x64 I have tested I was able to reproduce this problem.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>dsd@gentoo.org</who>
            <bug_when>2007-03-06 18:31:47 0000</bug_when>
            <thetext>Thanks for the hint, I can reproduce this with the modular build</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>dsd@gentoo.org</who>
            <bug_when>2007-03-10 04:46:32 0000</bug_when>
            <thetext>This was fixed in gentoo-sources-2.6.20-r1</thetext>
          </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>109648</attachid>
            <date>2007-02-09 15:41 0000</date>
            <desc>config</desc>
            <filename>.config</filename>
            <type>text/plain</type>
            <data encoding="base64">IwojIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CiMgTGlu
dXgga2VybmVsIHZlcnNpb246IDIuNi4yMC1nZW50b28KIyBGcmkgRmViICA5IDE1OjUzOjQ1IDIw
MDcKIwpDT05GSUdfWDg2XzY0PXkKQ09ORklHXzY0QklUPXkKQ09ORklHX1g4Nj15CkNPTkZJR19a
T05FX0RNQTMyPXkKQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CkNPTkZJR19TVEFDS1RSQUNFX1NV
UFBPUlQ9eQpDT05GSUdfU0VNQVBIT1JFX1NMRUVQRVJTPXkKQ09ORklHX01NVT15CkNPTkZJR19S
V1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CkNPTkZJR19H
RU5FUklDX0NBTElCUkFURV9ERUxBWT15CkNPTkZJR19YODZfQ01QWENIRz15CkNPTkZJR19FQVJM
WV9QUklOVEs9eQpDT05GSUdfR0VORVJJQ19JU0FfRE1BPXkKQ09ORklHX0dFTkVSSUNfSU9NQVA9
eQpDT05GSUdfQVJDSF9NQVlfSEFWRV9QQ19GREM9eQpDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9E
RV9NQVA9eQpDT05GSUdfRE1JPXkKQ09ORklHX0FVRElUX0FSQ0g9eQpDT05GSUdfR0VORVJJQ19C
VUc9eQojIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAojIENPTkZJR19BUkNI
X0hBU19JTE9HMl9VNjQgaXMgbm90IHNldApDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9k
dWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgoKIwojIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0
aW9ucwojCkNPTkZJR19FWFBFUklNRU5UQUw9eQpDT05GSUdfQlJPS0VOX09OX1NNUD15CkNPTkZJ
R19JTklUX0VOVl9BUkdfTElNSVQ9MzIKCiMKIyBHZW5lcmFsIHNldHVwCiMKQ09ORklHX0xPQ0FM
VkVSU0lPTj0iIgojIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTyBpcyBub3Qgc2V0CkNPTkZJR19T
V0FQPXkKQ09ORklHX1NZU1ZJUEM9eQojIENPTkZJR19JUENfTlMgaXMgbm90IHNldAojIENPTkZJ
R19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAojIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5v
dCBzZXQKIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKIyBDT05GSUdfVVRTX05TIGlzIG5v
dCBzZXQKIyBDT05GSUdfQVVESVQgaXMgbm90IHNldApDT05GSUdfSUtDT05GSUc9eQpDT05GSUdf
SUtDT05GSUdfUFJPQz15CkNPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKIyBDT05GSUdfUkVMQVkg
aXMgbm90IHNldApDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgojIENPTkZJR19DQ19PUFRJTUla
RV9GT1JfU0laRSBpcyBub3Qgc2V0CkNPTkZJR19TWVNDVEw9eQojIENPTkZJR19FTUJFRERFRCBp
cyBub3Qgc2V0CkNPTkZJR19VSUQxNj15CkNPTkZJR19TWVNDVExfU1lTQ0FMTD15CkNPTkZJR19L
QUxMU1lNUz15CiMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldApDT05GSUdf
SE9UUExVRz15CkNPTkZJR19QUklOVEs9eQpDT05GSUdfQlVHPXkKQ09ORklHX0VMRl9DT1JFPXkK
Q09ORklHX0JBU0VfRlVMTD15CkNPTkZJR19GVVRFWD15CkNPTkZJR19FUE9MTD15CkNPTkZJR19T
SE1FTT15CkNPTkZJR19TTEFCPXkKQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKQ09ORklHX1JU
X01VVEVYRVM9eQojIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKQ09ORklHX0JBU0VfU01B
TEw9MAojIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKCiMKIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9y
dAojCkNPTkZJR19NT0RVTEVTPXkKQ09ORklHX01PRFVMRV9VTkxPQUQ9eQojIENPTkZJR19NT0RV
TEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKQ09ORklHX01PRFZFUlNJT05TPXkKIyBDT05GSUdf
TU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKQ09ORklHX0tNT0Q9eQoKIwojIEJsb2Nr
IGxheWVyCiMKQ09ORklHX0JMT0NLPXkKIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qg
c2V0CgojCiMgSU8gU2NoZWR1bGVycwojCkNPTkZJR19JT1NDSEVEX05PT1A9eQpDT05GSUdfSU9T
Q0hFRF9BUz1tCkNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKQ09ORklHX0lPU0NIRURfQ0ZRPW0K
IyBDT05GSUdfREVGQVVMVF9BUyBpcyBub3Qgc2V0CkNPTkZJR19ERUZBVUxUX0RFQURMSU5FPXkK
IyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAojIENPTkZJR19ERUZBVUxUX05PT1AgaXMg
bm90IHNldApDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJkZWFkbGluZSIKCiMKIyBQcm9jZXNzb3Ig
dHlwZSBhbmQgZmVhdHVyZXMKIwpDT05GSUdfWDg2X1BDPXkKIyBDT05GSUdfWDg2X1ZTTVAgaXMg
bm90IHNldApDT05GSUdfTUs4PXkKIyBDT05GSUdfTVBTQyBpcyBub3Qgc2V0CiMgQ09ORklHX01D
T1JFMiBpcyBub3Qgc2V0CiMgQ09ORklHX0dFTkVSSUNfQ1BVIGlzIG5vdCBzZXQKQ09ORklHX1g4
Nl9MMV9DQUNIRV9CWVRFUz02NApDT05GSUdfWDg2X0wxX0NBQ0hFX1NISUZUPTYKQ09ORklHX1g4
Nl9JTlRFUk5PREVfQ0FDSEVfQllURVM9NjQKQ09ORklHX1g4Nl9UU0M9eQpDT05GSUdfWDg2X0dP
T0RfQVBJQz15CiMgQ09ORklHX01JQ1JPQ09ERSBpcyBub3Qgc2V0CkNPTkZJR19YODZfTVNSPXkK
Q09ORklHX1g4Nl9DUFVJRD15CkNPTkZJR19YODZfSU9fQVBJQz15CkNPTkZJR19YODZfTE9DQUxf
QVBJQz15CkNPTkZJR19NVFJSPXkKIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKIyBDT05GSUdfUFJF
RU1QVF9OT05FIGlzIG5vdCBzZXQKQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZPXkKIyBDT05GSUdf
UFJFRU1QVCBpcyBub3Qgc2V0CkNPTkZJR19BUkNIX1NQQVJTRU1FTV9FTkFCTEU9eQpDT05GSUdf
QVJDSF9GTEFUTUVNX0VOQUJMRT15CkNPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQ09ORklH
X0ZMQVRNRU1fTUFOVUFMPXkKIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0
CiMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldApDT05GSUdfRkxBVE1FTT15CkNP
TkZJR19GTEFUX05PREVfTUVNX01BUD15CiMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90
IHNldApDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NApDT05GSUdfUkVTT1VSQ0VTXzY0QklUPXkK
Q09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKQ09ORklHX0hQRVRfVElNRVI9eQpD
T05GSUdfSFBFVF9FTVVMQVRFX1JUQz15CkNPTkZJR19JT01NVT15CkNPTkZJR19DQUxHQVJZX0lP
TU1VPXkKQ09ORklHX0NBTEdBUllfSU9NTVVfRU5BQkxFRF9CWV9ERUZBVUxUPXkKQ09ORklHX1NX
SU9UTEI9eQpDT05GSUdfWDg2X01DRT15CiMgQ09ORklHX1g4Nl9NQ0VfSU5URUwgaXMgbm90IHNl
dApDT05GSUdfWDg2X01DRV9BTUQ9eQojIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiMgQ09ORklH
X0NSQVNIX0RVTVAgaXMgbm90IHNldApDT05GSUdfUEhZU0lDQUxfU1RBUlQ9MHgyMDAwMDAKQ09O
RklHX1NFQ0NPTVA9eQojIENPTkZJR19DQ19TVEFDS1BST1RFQ1RPUiBpcyBub3Qgc2V0CiMgQ09O
RklHX0haXzEwMCBpcyBub3Qgc2V0CiMgQ09ORklHX0haXzI1MCBpcyBub3Qgc2V0CiMgQ09ORklH
X0haXzMwMCBpcyBub3Qgc2V0CkNPTkZJR19IWl8xMDAwPXkKQ09ORklHX0haPTEwMDAKQ09ORklH
X1JFT1JERVI9eQpDT05GSUdfSzhfTkI9eQpDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CkNPTkZJ
R19HRU5FUklDX0lSUV9QUk9CRT15CkNPTkZJR19JU0FfRE1BX0FQST15CgojCiMgUG93ZXIgbWFu
YWdlbWVudCBvcHRpb25zCiMKQ09ORklHX1BNPXkKQ09ORklHX1BNX0xFR0FDWT15CiMgQ09ORklH
X1BNX0RFQlVHIGlzIG5vdCBzZXQKIyBDT05GSUdfUE1fU1lTRlNfREVQUkVDQVRFRCBpcyBub3Qg
c2V0CkNPTkZJR19TT0ZUV0FSRV9TVVNQRU5EPXkKQ09ORklHX1BNX1NURF9QQVJUSVRJT049Ii9k
ZXYvaGRhMiIKCiMKIyBBQ1BJIChBZHZhbmNlZCBDb25maWd1cmF0aW9uIGFuZCBQb3dlciBJbnRl
cmZhY2UpIFN1cHBvcnQKIwpDT05GSUdfQUNQST15CkNPTkZJR19BQ1BJX1NMRUVQPXkKQ09ORklH
X0FDUElfU0xFRVBfUFJPQ19GUz15CiMgQ09ORklHX0FDUElfU0xFRVBfUFJPQ19TTEVFUCBpcyBu
b3Qgc2V0CiMgQ09ORklHX0FDUElfQUMgaXMgbm90IHNldAojIENPTkZJR19BQ1BJX0JBVFRFUlkg
aXMgbm90IHNldApDT05GSUdfQUNQSV9CVVRUT049eQpDT05GSUdfQUNQSV9WSURFTz15CiMgQ09O
RklHX0FDUElfSE9US0VZIGlzIG5vdCBzZXQKQ09ORklHX0FDUElfRkFOPW0KIyBDT05GSUdfQUNQ
SV9ET0NLIGlzIG5vdCBzZXQKQ09ORklHX0FDUElfUFJPQ0VTU09SPW0KQ09ORklHX0FDUElfVEhF
Uk1BTD1tCiMgQ09ORklHX0FDUElfQVNVUyBpcyBub3Qgc2V0CiMgQ09ORklHX0FDUElfSUJNIGlz
IG5vdCBzZXQKIyBDT05GSUdfQUNQSV9UT1NISUJBIGlzIG5vdCBzZXQKQ09ORklHX0FDUElfQkxB
Q0tMSVNUX1lFQVI9MAojIENPTkZJR19BQ1BJX0RFQlVHIGlzIG5vdCBzZXQKQ09ORklHX0FDUElf
RUM9eQpDT05GSUdfQUNQSV9QT1dFUj15CkNPTkZJR19BQ1BJX1NZU1RFTT15CkNPTkZJR19YODZf
UE1fVElNRVI9eQojIENPTkZJR19BQ1BJX0NPTlRBSU5FUiBpcyBub3Qgc2V0CiMgQ09ORklHX0FD
UElfU0JTIGlzIG5vdCBzZXQKCiMKIyBDUFUgRnJlcXVlbmN5IHNjYWxpbmcKIwpDT05GSUdfQ1BV
X0ZSRVE9eQpDT05GSUdfQ1BVX0ZSRVFfVEFCTEU9eQojIENPTkZJR19DUFVfRlJFUV9ERUJVRyBp
cyBub3Qgc2V0CkNPTkZJR19DUFVfRlJFUV9TVEFUPW0KQ09ORklHX0NQVV9GUkVRX1NUQVRfREVU
QUlMUz15CkNPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9QRVJGT1JNQU5DRT15CiMgQ09ORklH
X0NQVV9GUkVRX0RFRkFVTFRfR09WX1VTRVJTUEFDRSBpcyBub3Qgc2V0CkNPTkZJR19DUFVfRlJF
UV9HT1ZfUEVSRk9STUFOQ0U9eQpDT05GSUdfQ1BVX0ZSRVFfR09WX1BPV0VSU0FWRT1tCkNPTkZJ
R19DUFVfRlJFUV9HT1ZfVVNFUlNQQUNFPW0KQ09ORklHX0NQVV9GUkVRX0dPVl9PTkRFTUFORD15
CkNPTkZJR19DUFVfRlJFUV9HT1ZfQ09OU0VSVkFUSVZFPW0KCiMKIyBDUFVGcmVxIHByb2Nlc3Nv
ciBkcml2ZXJzCiMKQ09ORklHX1g4Nl9QT1dFUk5PV19LOD15CiMgQ09ORklHX1g4Nl9TUEVFRFNU
RVBfQ0VOVFJJTk8gaXMgbm90IHNldApDT05GSUdfWDg2X0FDUElfQ1BVRlJFUT1tCgojCiMgc2hh
cmVkIG9wdGlvbnMKIwojIENPTkZJR19YODZfQUNQSV9DUFVGUkVRX1BST0NfSU5URiBpcyBub3Qg
c2V0CiMgQ09ORklHX1g4Nl9TUEVFRFNURVBfTElCIGlzIG5vdCBzZXQKCiMKIyBCdXMgb3B0aW9u
cyAoUENJIGV0Yy4pCiMKQ09ORklHX1BDST15CkNPTkZJR19QQ0lfRElSRUNUPXkKQ09ORklHX1BD
SV9NTUNPTkZJRz15CiMgQ09ORklHX1BDSUVQT1JUQlVTIGlzIG5vdCBzZXQKIyBDT05GSUdfUENJ
X01TSSBpcyBub3Qgc2V0CkNPTkZJR19IVF9JUlE9eQoKIwojIFBDQ0FSRCAoUENNQ0lBL0NhcmRC
dXMpIHN1cHBvcnQKIwojIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAoKIwojIFBDSSBIb3RwbHVn
IFN1cHBvcnQKIwojIENPTkZJR19IT1RQTFVHX1BDSSBpcyBub3Qgc2V0CgojCiMgRXhlY3V0YWJs
ZSBmaWxlIGZvcm1hdHMgLyBFbXVsYXRpb25zCiMKQ09ORklHX0JJTkZNVF9FTEY9eQpDT05GSUdf
QklORk1UX01JU0M9eQpDT05GSUdfSUEzMl9FTVVMQVRJT049eQpDT05GSUdfSUEzMl9BT1VUPXkK
Q09ORklHX0NPTVBBVD15CkNPTkZJR19TWVNWSVBDX0NPTVBBVD15CgojCiMgTmV0d29ya2luZwoj
CkNPTkZJR19ORVQ9eQoKIwojIE5ldHdvcmtpbmcgb3B0aW9ucwojCiMgQ09ORklHX05FVERFQlVH
IGlzIG5vdCBzZXQKQ09ORklHX1BBQ0tFVD15CiMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBz
ZXQKQ09ORklHX1VOSVg9eQpDT05GSUdfWEZSTT15CiMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qg
c2V0CiMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CiMgQ09ORklHX05FVF9LRVkg
aXMgbm90IHNldApDT05GSUdfSU5FVD15CiMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0
CiMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CkNPTkZJR19JUF9GSUJfSEFT
SD15CiMgQ09ORklHX0lQX1BOUCBpcyBub3Qgc2V0CiMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBz
ZXQKIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0
CiMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKQ09ORklHX0lORVRfQUg9eQpDT05GSUdf
SU5FVF9FU1A9eQpDT05GSUdfSU5FVF9JUENPTVA9eQpDT05GSUdfSU5FVF9YRlJNX1RVTk5FTD15
CkNPTkZJR19JTkVUX1RVTk5FTD15CkNPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQpD
T05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9
eQpDT05GSUdfSU5FVF9ESUFHPXkKQ09ORklHX0lORVRfVENQX0RJQUc9eQojIENPTkZJR19UQ1Bf
Q09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CkNPTkZJR19UQ1BfQ09OR19DVUJJQz15CkNPTkZJR19E
RUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CiMg
Q09ORklHX0lQVjYgaXMgbm90IHNldAojIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qg
c2V0CiMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0CiMgQ09ORklHX05FVFdPUktfU0VD
TUFSSyBpcyBub3Qgc2V0CiMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CgojCiMgRENDUCBD
b25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCiMKIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0
CgojCiMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCiMKIyBDT05GSUdfSVBfU0NU
UCBpcyBub3Qgc2V0CgojCiMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCiMKIyBD
T05GSUdfVElQQyBpcyBub3Qgc2V0CiMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CkNPTkZJR19CUklE
R0U9bQpDT05GSUdfVkxBTl84MDIxUT1tCiMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CkNPTkZJ
R19MTEM9bQojIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQK
IyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAojIENPTkZJR19YMjUgaXMgbm90IHNldAojIENPTkZJ
R19MQVBCIGlzIG5vdCBzZXQKIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKIyBDT05GSUdfV0FO
X1JPVVRFUiBpcyBub3Qgc2V0CgojCiMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCiMKIyBDT05G
SUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKCiMKIyBOZXR3b3JrIHRlc3RpbmcKIwojIENPTkZJR19O
RVRfUEtUR0VOIGlzIG5vdCBzZXQKIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAojIENPTkZJ
R19JUkRBIGlzIG5vdCBzZXQKIyBDT05GSUdfQlQgaXMgbm90IHNldAojIENPTkZJR19JRUVFODAy
MTEgaXMgbm90IHNldApDT05GSUdfV0lSRUxFU1NfRVhUPXkKCiMKIyBEZXZpY2UgRHJpdmVycwoj
CgojCiMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwojCkNPTkZJR19TVEFOREFMT05FPXkKQ09ORklH
X1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQpDT05GSUdfRldfTE9BREVSPXkKIyBDT05GSUdfU1lT
X0hZUEVSVklTT1IgaXMgbm90IHNldAoKIwojIENvbm5lY3RvciAtIHVuaWZpZWQgdXNlcnNwYWNl
IDwtPiBrZXJuZWxzcGFjZSBsaW5rZXIKIwojIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAoK
IwojIE1lbW9yeSBUZWNobm9sb2d5IERldmljZXMgKE1URCkKIwojIENPTkZJR19NVEQgaXMgbm90
IHNldAoKIwojIFBhcmFsbGVsIHBvcnQgc3VwcG9ydAojCkNPTkZJR19QQVJQT1JUPW0KQ09ORklH
X1BBUlBPUlRfUEM9bQpDT05GSUdfUEFSUE9SVF9TRVJJQUw9bQpDT05GSUdfUEFSUE9SVF9QQ19G
SUZPPXkKQ09ORklHX1BBUlBPUlRfUENfU1VQRVJJTz15CiMgQ09ORklHX1BBUlBPUlRfR1NDIGlz
IG5vdCBzZXQKIyBDT05GSUdfUEFSUE9SVF9BWDg4Nzk2IGlzIG5vdCBzZXQKQ09ORklHX1BBUlBP
UlRfMTI4ND15CkNPTkZJR19QQVJQT1JUX05PVF9QQz15CgojCiMgUGx1ZyBhbmQgUGxheSBzdXBw
b3J0CiMKQ09ORklHX1BOUD15CiMgQ09ORklHX1BOUF9ERUJVRyBpcyBub3Qgc2V0CgojCiMgUHJv
dG9jb2xzCiMKQ09ORklHX1BOUEFDUEk9eQoKIwojIEJsb2NrIGRldmljZXMKIwpDT05GSUdfQkxL
X0RFVl9GRD15CiMgQ09ORklHX1BBUklERSBpcyBub3Qgc2V0CiMgQ09ORklHX0JMS19DUFFfREEg
aXMgbm90IHNldAojIENPTkZJR19CTEtfQ1BRX0NJU1NfREEgaXMgbm90IHNldAojIENPTkZJR19C
TEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0CiMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0
CiMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CkNPTkZJR19CTEtfREVWX0xP
T1A9eQojIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAojIENPTkZJR19CTEtf
REVWX05CRCBpcyBub3Qgc2V0CiMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKIyBDT05G
SUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CkNPTkZJR19CTEtfREVWX1JBTT15CkNPTkZJR19CTEtf
REVWX1JBTV9DT1VOVD0xNgpDT05GSUdfQkxLX0RFVl9SQU1fU0laRT04MTkyCkNPTkZJR19CTEtf
REVWX1JBTV9CTE9DS1NJWkU9MTAyNApDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQpDT05GSUdfQ0RS
T01fUEtUQ0RWRD15CkNPTkZJR19DRFJPTV9QS1RDRFZEX0JVRkZFUlM9OAojIENPTkZJR19DRFJP
TV9QS1RDRFZEX1dDQUNIRSBpcyBub3Qgc2V0CiMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qg
c2V0CgojCiMgTWlzYyBkZXZpY2VzCiMKIyBDT05GSUdfSUJNX0FTTSBpcyBub3Qgc2V0CiMgQ09O
RklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKCiMK
IyBBVEEvQVRBUEkvTUZNL1JMTCBzdXBwb3J0CiMKQ09ORklHX0lERT15CkNPTkZJR19CTEtfREVW
X0lERT15CgojCiMgUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2lkZS50eHQgZm9yIGhlbHAvaW5m
byBvbiBJREUgZHJpdmVzCiMKIyBDT05GSUdfQkxLX0RFVl9JREVfU0FUQSBpcyBub3Qgc2V0CiMg
Q09ORklHX0JMS19ERVZfSERfSURFIGlzIG5vdCBzZXQKQ09ORklHX0JMS19ERVZfSURFRElTSz15
CkNPTkZJR19JREVESVNLX01VTFRJX01PREU9eQpDT05GSUdfQkxLX0RFVl9JREVDRD15CiMgQ09O
RklHX0JMS19ERVZfSURFVEFQRSBpcyBub3Qgc2V0CkNPTkZJR19CTEtfREVWX0lERUZMT1BQWT15
CkNPTkZJR19CTEtfREVWX0lERVNDU0k9bQpDT05GSUdfSURFX1RBU0tfSU9DVEw9eQoKIwojIElE
RSBjaGlwc2V0IHN1cHBvcnQvYnVnZml4ZXMKIwpDT05GSUdfSURFX0dFTkVSSUM9eQojIENPTkZJ
R19CTEtfREVWX0NNRDY0MCBpcyBub3Qgc2V0CiMgQ09ORklHX0JMS19ERVZfSURFUE5QIGlzIG5v
dCBzZXQKQ09ORklHX0JMS19ERVZfSURFUENJPXkKQ09ORklHX0lERVBDSV9TSEFSRV9JUlE9eQoj
IENPTkZJR19CTEtfREVWX09GRkJPQVJEIGlzIG5vdCBzZXQKQ09ORklHX0JMS19ERVZfR0VORVJJ
Qz15CiMgQ09ORklHX0JMS19ERVZfT1BUSTYyMSBpcyBub3Qgc2V0CiMgQ09ORklHX0JMS19ERVZf
UloxMDAwIGlzIG5vdCBzZXQKQ09ORklHX0JMS19ERVZfSURFRE1BX1BDST15CkNPTkZJR19CTEtf
REVWX0lERURNQV9GT1JDRUQ9eQpDT05GSUdfSURFRE1BX1BDSV9BVVRPPXkKIyBDT05GSUdfSURF
RE1BX09OTFlESVNLIGlzIG5vdCBzZXQKIyBDT05GSUdfQkxLX0RFVl9BRUM2MlhYIGlzIG5vdCBz
ZXQKIyBDT05GSUdfQkxLX0RFVl9BTEkxNVgzIGlzIG5vdCBzZXQKIyBDT05GSUdfQkxLX0RFVl9B
TUQ3NFhYIGlzIG5vdCBzZXQKIyBDT05GSUdfQkxLX0RFVl9BVElJWFAgaXMgbm90IHNldAojIENP
TkZJR19CTEtfREVWX0NNRDY0WCBpcyBub3Qgc2V0CiMgQ09ORklHX0JMS19ERVZfVFJJRkxFWCBp
cyBub3Qgc2V0CiMgQ09ORklHX0JMS19ERVZfQ1k4MkM2OTMgaXMgbm90IHNldAojIENPTkZJR19C
TEtfREVWX0NTNTUyMCBpcyBub3Qgc2V0CiMgQ09ORklHX0JMS19ERVZfQ1M1NTMwIGlzIG5vdCBz
ZXQKIyBDT05GSUdfQkxLX0RFVl9IUFQzNFggaXMgbm90IHNldAojIENPTkZJR19CTEtfREVWX0hQ
VDM2NiBpcyBub3Qgc2V0CiMgQ09ORklHX0JMS19ERVZfSk1JQ1JPTiBpcyBub3Qgc2V0CiMgQ09O
RklHX0JMS19ERVZfU0MxMjAwIGlzIG5vdCBzZXQKIyBDT05GSUdfQkxLX0RFVl9QSUlYIGlzIG5v
dCBzZXQKIyBDT05GSUdfQkxLX0RFVl9JVDgyMVggaXMgbm90IHNldAojIENPTkZJR19CTEtfREVW
X05TODc0MTUgaXMgbm90IHNldAojIENPTkZJR19CTEtfREVWX1BEQzIwMlhYX09MRCBpcyBub3Qg
c2V0CiMgQ09ORklHX0JMS19ERVZfUERDMjAyWFhfTkVXIGlzIG5vdCBzZXQKIyBDT05GSUdfQkxL
X0RFVl9TVldLUyBpcyBub3Qgc2V0CiMgQ09ORklHX0JMS19ERVZfU0lJTUFHRSBpcyBub3Qgc2V0
CiMgQ09ORklHX0JMS19ERVZfU0lTNTUxMyBpcyBub3Qgc2V0CiMgQ09ORklHX0JMS19ERVZfU0xD
OTBFNjYgaXMgbm90IHNldAojIENPTkZJR19CTEtfREVWX1RSTTI5MCBpcyBub3Qgc2V0CkNPTkZJ
R19CTEtfREVWX1ZJQTgyQ1hYWD15CiMgQ09ORklHX0lERV9BUk0gaXMgbm90IHNldApDT05GSUdf
QkxLX0RFVl9JREVETUE9eQpDT05GSUdfSURFRE1BX0lWQj15CkNPTkZJR19JREVETUFfQVVUTz15
CiMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAoKIwojIFNDU0kgZGV2aWNlIHN1cHBvcnQK
IwojIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKQ09ORklHX1NDU0k9eQojIENPTkZJR19T
Q1NJX1RHVCBpcyBub3Qgc2V0CkNPTkZJR19TQ1NJX05FVExJTks9eQpDT05GSUdfU0NTSV9QUk9D
X0ZTPXkKCiMKIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQojCkNPTkZJ
R19CTEtfREVWX1NEPXkKIyBDT05GSUdfQ0hSX0RFVl9TVCBpcyBub3Qgc2V0CiMgQ09ORklHX0NI
Ul9ERVZfT1NTVCBpcyBub3Qgc2V0CkNPTkZJR19CTEtfREVWX1NSPXkKQ09ORklHX0JMS19ERVZf
U1JfVkVORE9SPXkKQ09ORklHX0NIUl9ERVZfU0c9eQpDT05GSUdfQ0hSX0RFVl9TQ0g9eQoKIwoj
IFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVO
cwojCiMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKIyBDT05GSUdfU0NTSV9DT05T
VEFOVFMgaXMgbm90IHNldAojIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAojIENPTkZJ
R19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAoKIwojIFNDU0kgVHJhbnNwb3J0cwojCkNPTkZJ
R19TQ1NJX1NQSV9BVFRSUz1tCkNPTkZJR19TQ1NJX0ZDX0FUVFJTPW0KIyBDT05GSUdfU0NTSV9J
U0NTSV9BVFRSUyBpcyBub3Qgc2V0CiMgQ09ORklHX1NDU0lfU0FTX0FUVFJTIGlzIG5vdCBzZXQK
IyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKCiMKIyBTQ1NJIGxvdy1sZXZlbCBk
cml2ZXJzCiMKIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKIyBDT05GSUdfQkxLX0RFVl8z
V19YWFhYX1JBSUQgaXMgbm90IHNldAojIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAoj
IENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKIyBDT05GSUdfU0NTSV9BQUNSQUlEIGlzIG5v
dCBzZXQKIyBDT05GSUdfU0NTSV9BSUM3WFhYIGlzIG5vdCBzZXQKIyBDT05GSUdfU0NTSV9BSUM3
WFhYX09MRCBpcyBub3Qgc2V0CiMgQ09ORklHX1NDU0lfQUlDNzlYWCBpcyBub3Qgc2V0CiMgQ09O
RklHX1NDU0lfQUlDOTRYWCBpcyBub3Qgc2V0CiMgQ09ORklHX1NDU0lfQVJDTVNSIGlzIG5vdCBz
ZXQKIyBDT05GSUdfTUVHQVJBSURfTkVXR0VOIGlzIG5vdCBzZXQKIyBDT05GSUdfTUVHQVJBSURf
TEVHQUNZIGlzIG5vdCBzZXQKIyBDT05GSUdfTUVHQVJBSURfU0FTIGlzIG5vdCBzZXQKIyBDT05G
SUdfU0NTSV9IUFRJT1AgaXMgbm90IHNldAojIENPTkZJR19TQ1NJX0JVU0xPR0lDIGlzIG5vdCBz
ZXQKIyBDT05GSUdfU0NTSV9ETVgzMTkxRCBpcyBub3Qgc2V0CiMgQ09ORklHX1NDU0lfRUFUQSBp
cyBub3Qgc2V0CiMgQ09ORklHX1NDU0lfRlVUVVJFX0RPTUFJTiBpcyBub3Qgc2V0CiMgQ09ORklH
X1NDU0lfR0RUSCBpcyBub3Qgc2V0CiMgQ09ORklHX1NDU0lfSVBTIGlzIG5vdCBzZXQKIyBDT05G
SUdfU0NTSV9JTklUSU8gaXMgbm90IHNldAojIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNl
dAojIENPTkZJR19TQ1NJX1BQQSBpcyBub3Qgc2V0CiMgQ09ORklHX1NDU0lfSU1NIGlzIG5vdCBz
ZXQKIyBDT05GSUdfU0NTSV9TVEVYIGlzIG5vdCBzZXQKIyBDT05GSUdfU0NTSV9TWU01M0M4WFhf
MiBpcyBub3Qgc2V0CiMgQ09ORklHX1NDU0lfUUxPR0lDXzEyODAgaXMgbm90IHNldAojIENPTkZJ
R19TQ1NJX1FMQV9GQyBpcyBub3Qgc2V0CiMgQ09ORklHX1NDU0lfUUxBX0lTQ1NJIGlzIG5vdCBz
ZXQKIyBDT05GSUdfU0NTSV9MUEZDIGlzIG5vdCBzZXQKIyBDT05GSUdfU0NTSV9EQzM5NXggaXMg
bm90IHNldAojIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CiMgQ09ORklHX1NDU0lfREVC
VUcgaXMgbm90IHNldAojIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CgojCiMgU2VyaWFsIEFU
QSAocHJvZCkgYW5kIFBhcmFsbGVsIEFUQSAoZXhwZXJpbWVudGFsKSBkcml2ZXJzCiMKIyBDT05G
SUdfQVRBIGlzIG5vdCBzZXQKCiMKIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZN
KQojCiMgQ09ORklHX01EIGlzIG5vdCBzZXQKCiMKIyBGdXNpb24gTVBUIGRldmljZSBzdXBwb3J0
CiMKIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKIyBDT05GSUdfRlVTSU9OX1NQSSBpcyBub3Qg
c2V0CiMgQ09ORklHX0ZVU0lPTl9GQyBpcyBub3Qgc2V0CiMgQ09ORklHX0ZVU0lPTl9TQVMgaXMg
bm90IHNldAoKIwojIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKIwpDT05GSUdfSUVFRTEz
OTQ9bQoKIwojIFN1YnN5c3RlbSBPcHRpb25zCiMKIyBDT05GSUdfSUVFRTEzOTRfVkVSQk9TRURF
QlVHIGlzIG5vdCBzZXQKIyBDT05GSUdfSUVFRTEzOTRfT1VJX0RCIGlzIG5vdCBzZXQKQ09ORklH
X0lFRUUxMzk0X0VYVFJBX0NPTkZJR19ST01TPXkKQ09ORklHX0lFRUUxMzk0X0NPTkZJR19ST01f
SVAxMzk0PXkKIyBDT05GSUdfSUVFRTEzOTRfRVhQT1JUX0ZVTExfQVBJIGlzIG5vdCBzZXQKCiMK
IyBEZXZpY2UgRHJpdmVycwojCiMgQ09ORklHX0lFRUUxMzk0X1BDSUxZTlggaXMgbm90IHNldApD
T05GSUdfSUVFRTEzOTRfT0hDSTEzOTQ9bQoKIwojIFByb3RvY29sIERyaXZlcnMKIwpDT05GSUdf
SUVFRTEzOTRfVklERU8xMzk0PW0KQ09ORklHX0lFRUUxMzk0X1NCUDI9bQpDT05GSUdfSUVFRTEz
OTRfRVRIMTM5ND1tCkNPTkZJR19JRUVFMTM5NF9EVjEzOTQ9bQpDT05GSUdfSUVFRTEzOTRfUkFX
SU89bQoKIwojIEkyTyBkZXZpY2Ugc3VwcG9ydAojCiMgQ09ORklHX0kyTyBpcyBub3Qgc2V0Cgoj
CiMgTmV0d29yayBkZXZpY2Ugc3VwcG9ydAojCkNPTkZJR19ORVRERVZJQ0VTPXkKIyBDT05GSUdf
RFVNTVkgaXMgbm90IHNldAojIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKIyBDT05GSUdfRVFV
QUxJWkVSIGlzIG5vdCBzZXQKIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKIyBDT05GSUdfTkVUX1NC
MTAwMCBpcyBub3Qgc2V0CgojCiMgQVJDbmV0IGRldmljZXMKIwojIENPTkZJR19BUkNORVQgaXMg
bm90IHNldAoKIwojIFBIWSBkZXZpY2Ugc3VwcG9ydAojCiMgQ09ORklHX1BIWUxJQiBpcyBub3Qg
c2V0CgojCiMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCiMKQ09ORklHX05FVF9FVEhFUk5FVD15
CkNPTkZJR19NSUk9eQojIENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAojIENPTkZJR19TVU5H
RU0gaXMgbm90IHNldAojIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKIyBDT05GSUdfTkVUX1ZF
TkRPUl8zQ09NIGlzIG5vdCBzZXQKCiMKIyBUdWxpcCBmYW1pbHkgbmV0d29yayBkZXZpY2Ugc3Vw
cG9ydAojCiMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0CiMgQ09ORklHX0hQMTAwIGlzIG5v
dCBzZXQKQ09ORklHX05FVF9QQ0k9eQojIENPTkZJR19QQ05FVDMyIGlzIG5vdCBzZXQKIyBDT05G
SUdfQU1EODExMV9FVEggaXMgbm90IHNldAojIENPTkZJR19BREFQVEVDX1NUQVJGSVJFIGlzIG5v
dCBzZXQKIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKIyBDT05GSUdfRk9SQ0VERVRIIGlzIG5vdCBz
ZXQKIyBDT05GSUdfREdSUyBpcyBub3Qgc2V0CiMgQ09ORklHX0VFUFJPMTAwIGlzIG5vdCBzZXQK
IyBDT05GSUdfRTEwMCBpcyBub3Qgc2V0CiMgQ09ORklHX0ZFQUxOWCBpcyBub3Qgc2V0CiMgQ09O
RklHX05BVFNFTUkgaXMgbm90IHNldAojIENPTkZJR19ORTJLX1BDSSBpcyBub3Qgc2V0CiMgQ09O
RklHXzgxMzlDUCBpcyBub3Qgc2V0CiMgQ09ORklHXzgxMzlUT08gaXMgbm90IHNldAojIENPTkZJ
R19TSVM5MDAgaXMgbm90IHNldAojIENPTkZJR19FUElDMTAwIGlzIG5vdCBzZXQKIyBDT05GSUdf
U1VOREFOQ0UgaXMgbm90IHNldAojIENPTkZJR19WSUFfUkhJTkUgaXMgbm90IHNldAojIENPTkZJ
R19ORVRfUE9DS0VUIGlzIG5vdCBzZXQKCiMKIyBFdGhlcm5ldCAoMTAwMCBNYml0KQojCiMgQ09O
RklHX0FDRU5JQyBpcyBub3Qgc2V0CiMgQ09ORklHX0RMMksgaXMgbm90IHNldAojIENPTkZJR19F
MTAwMCBpcyBub3Qgc2V0CiMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAojIENPTkZJR19IQU1B
Q0hJIGlzIG5vdCBzZXQKIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKIyBDT05GSUdfUjgx
NjkgaXMgbm90IHNldAojIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAojIENPTkZJR19TS0dFIGlz
IG5vdCBzZXQKIyBDT05GSUdfU0tZMiBpcyBub3Qgc2V0CiMgQ09ORklHX1NLOThMSU4gaXMgbm90
IHNldApDT05GSUdfVklBX1ZFTE9DSVRZPXkKIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKIyBD
T05GSUdfQk5YMiBpcyBub3Qgc2V0CiMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAoKIwojIEV0
aGVybmV0ICgxMDAwMCBNYml0KQojCiMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldAojIENP
TkZJR19JWEdCIGlzIG5vdCBzZXQKIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0CiMgQ09ORklHX01Z
UkkxMEdFIGlzIG5vdCBzZXQKIyBDT05GSUdfTkVUWEVOX05JQyBpcyBub3Qgc2V0CgojCiMgVG9r
ZW4gUmluZyBkZXZpY2VzCiMKIyBDT05GSUdfVFIgaXMgbm90IHNldAoKIwojIFdpcmVsZXNzIExB
TiAobm9uLWhhbXJhZGlvKQojCkNPTkZJR19ORVRfUkFESU89eQojIENPTkZJR19ORVRfV0lSRUxF
U1NfUlRORVRMSU5LIGlzIG5vdCBzZXQKCiMKIyBPYnNvbGV0ZSBXaXJlbGVzcyBjYXJkcyBzdXBw
b3J0IChwcmUtODAyLjExKQojCiMgQ09ORklHX1NUUklQIGlzIG5vdCBzZXQKCiMKIyBXaXJlbGVz
cyA4MDIuMTFiIElTQS9QQ0kgY2FyZHMgc3VwcG9ydAojCiMgQ09ORklHX0lQVzIxMDAgaXMgbm90
IHNldAojIENPTkZJR19JUFcyMjAwIGlzIG5vdCBzZXQKIyBDT05GSUdfQUlSTyBpcyBub3Qgc2V0
CiMgQ09ORklHX0hFUk1FUyBpcyBub3Qgc2V0CiMgQ09ORklHX0FUTUVMIGlzIG5vdCBzZXQKCiMK
IyBQcmlzbSBHVC9EdWV0dGUgODAyLjExKGEvYi9nKSBQQ0kvQ2FyZGJ1cyBzdXBwb3J0CiMKIyBD
T05GSUdfUFJJU001NCBpcyBub3Qgc2V0CiMgQ09ORklHX1VTQl9aRDEyMDEgaXMgbm90IHNldAoj
IENPTkZJR19IT1NUQVAgaXMgbm90IHNldApDT05GSUdfTkVUX1dJUkVMRVNTPXkKCiMKIyBXYW4g
aW50ZXJmYWNlcwojCiMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CiMgQ09ORklHX0ZEREkgaXMgbm90
IHNldAojIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0CkNPTkZJR19QTElQPW0KQ09ORklHX1BQUD1t
CkNPTkZJR19QUFBfTVVMVElMSU5LPXkKQ09ORklHX1BQUF9GSUxURVI9eQpDT05GSUdfUFBQX0FT
WU5DPW0KQ09ORklHX1BQUF9TWU5DX1RUWT1tCkNPTkZJR19QUFBfREVGTEFURT1tCkNPTkZJR19Q
UFBfQlNEQ09NUD1tCiMgQ09ORklHX1BQUF9NUFBFIGlzIG5vdCBzZXQKQ09ORklHX1BQUE9FPW0K
Q09ORklHX1NMSVA9bQpDT05GSUdfU0xJUF9DT01QUkVTU0VEPXkKQ09ORklHX1NMSEM9bQpDT05G
SUdfU0xJUF9TTUFSVD15CkNPTkZJR19TTElQX01PREVfU0xJUDY9eQojIENPTkZJR19ORVRfRkMg
aXMgbm90IHNldAojIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAojIENPTkZJR19ORVRDT05TT0xF
IGlzIG5vdCBzZXQKIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CiMgQ09ORklHX05FVF9QT0xM
X0NPTlRST0xMRVIgaXMgbm90IHNldAoKIwojIElTRE4gc3Vic3lzdGVtCiMKIyBDT05GSUdfSVNE
TiBpcyBub3Qgc2V0CgojCiMgVGVsZXBob255IFN1cHBvcnQKIwojIENPTkZJR19QSE9ORSBpcyBu
b3Qgc2V0CgojCiMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKIwpDT05GSUdfSU5QVVQ9eQojIENPTkZJ
R19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKCiMKIyBVc2VybGFuZCBpbnRlcmZhY2VzCiMK
Q09ORklHX0lOUFVUX01PVVNFREVWPXkKQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYPXkKQ09O
RklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEyODAKQ09ORklHX0lOUFVUX01PVVNFREVWX1ND
UkVFTl9ZPTEwMjQKIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKIyBDT05GSUdfSU5Q
VVRfVFNERVYgaXMgbm90IHNldApDT05GSUdfSU5QVVRfRVZERVY9bQojIENPTkZJR19JTlBVVF9F
VkJVRyBpcyBub3Qgc2V0CgojCiMgSW5wdXQgRGV2aWNlIERyaXZlcnMKIwpDT05GSUdfSU5QVVRf
S0VZQk9BUkQ9eQpDT05GSUdfS0VZQk9BUkRfQVRLQkQ9eQpDT05GSUdfS0VZQk9BUkRfU1VOS0JE
PW0KQ09ORklHX0tFWUJPQVJEX0xLS0JEPW0KQ09ORklHX0tFWUJPQVJEX1hUS0JEPW0KQ09ORklH
X0tFWUJPQVJEX05FV1RPTj1tCiMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQK
Q09ORklHX0lOUFVUX01PVVNFPXkKQ09ORklHX01PVVNFX1BTMj1tCkNPTkZJR19NT1VTRV9TRVJJ
QUw9bQojIENPTkZJR19NT1VTRV9WU1hYWEFBIGlzIG5vdCBzZXQKIyBDT05GSUdfSU5QVVRfSk9Z
U1RJQ0sgaXMgbm90IHNldAojIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CkNP
TkZJR19JTlBVVF9NSVNDPXkKQ09ORklHX0lOUFVUX1BDU1BLUj1tCiMgQ09ORklHX0lOUFVUX1VJ
TlBVVCBpcyBub3Qgc2V0CgojCiMgSGFyZHdhcmUgSS9PIHBvcnRzCiMKQ09ORklHX1NFUklPPXkK
Q09ORklHX1NFUklPX0k4MDQyPXkKQ09ORklHX1NFUklPX1NFUlBPUlQ9bQojIENPTkZJR19TRVJJ
T19DVDgyQzcxMCBpcyBub3Qgc2V0CiMgQ09ORklHX1NFUklPX1BBUktCRCBpcyBub3Qgc2V0CiMg
Q09ORklHX1NFUklPX1BDSVBTMiBpcyBub3Qgc2V0CkNPTkZJR19TRVJJT19MSUJQUzI9eQpDT05G
SUdfU0VSSU9fUkFXPXkKIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAoKIwojIENoYXJhY3Rl
ciBkZXZpY2VzCiMKQ09ORklHX1ZUPXkKQ09ORklHX1ZUX0NPTlNPTEU9eQpDT05GSUdfSFdfQ09O
U09MRT15CiMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0CiMgQ09ORklH
X1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CgojCiMgU2VyaWFsIGRyaXZlcnMKIwpDT05G
SUdfU0VSSUFMXzgyNTA9eQpDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CkNPTkZJR19TRVJJ
QUxfODI1MF9QQ0k9eQpDT05GSUdfU0VSSUFMXzgyNTBfUE5QPXkKQ09ORklHX1NFUklBTF84MjUw
X05SX1VBUlRTPTQKQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NApDT05GSUdfU0VS
SUFMXzgyNTBfRVhURU5ERUQ9eQpDT05GSUdfU0VSSUFMXzgyNTBfTUFOWV9QT1JUUz15CkNPTkZJ
R19TRVJJQUxfODI1MF9TSEFSRV9JUlE9eQojIENPTkZJR19TRVJJQUxfODI1MF9ERVRFQ1RfSVJR
IGlzIG5vdCBzZXQKQ09ORklHX1NFUklBTF84MjUwX1JTQT15CgojCiMgTm9uLTgyNTAgc2VyaWFs
IHBvcnQgc3VwcG9ydAojCkNPTkZJR19TRVJJQUxfQ09SRT15CkNPTkZJR19TRVJJQUxfQ09SRV9D
T05TT0xFPXkKIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CkNPTkZJR19VTklYOThfUFRZ
Uz15CiMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKQ09ORklHX1BSSU5URVI9bQojIENP
TkZJR19MUF9DT05TT0xFIGlzIG5vdCBzZXQKIyBDT05GSUdfUFBERVYgaXMgbm90IHNldAojIENP
TkZJR19USVBBUiBpcyBub3Qgc2V0CgojCiMgSVBNSQojCiMgQ09ORklHX0lQTUlfSEFORExFUiBp
cyBub3Qgc2V0CgojCiMgV2F0Y2hkb2cgQ2FyZHMKIwojIENPTkZJR19XQVRDSERPRyBpcyBub3Qg
c2V0CkNPTkZJR19IV19SQU5ET009eQpDT05GSUdfSFdfUkFORE9NX0lOVEVMPXkKQ09ORklHX0hX
X1JBTkRPTV9BTUQ9eQpDT05GSUdfSFdfUkFORE9NX0dFT0RFPXkKQ09ORklHX05WUkFNPXkKQ09O
RklHX1JUQz15CiMgQ09ORklHX0RUTEsgaXMgbm90IHNldAojIENPTkZJR19SMzk2NCBpcyBub3Qg
c2V0CiMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKQ09ORklHX0FHUD15CkNPTkZJR19BR1Bf
QU1ENjQ9eQojIENPTkZJR19BR1BfSU5URUwgaXMgbm90IHNldAojIENPTkZJR19BR1BfU0lTIGlz
IG5vdCBzZXQKQ09ORklHX0FHUF9WSUE9eQojIENPTkZJR19EUk0gaXMgbm90IHNldAojIENPTkZJ
R19NV0FWRSBpcyBub3Qgc2V0CiMgQ09ORklHX1BDODczNnhfR1BJTyBpcyBub3Qgc2V0CkNPTkZJ
R19SQVdfRFJJVkVSPW0KQ09ORklHX01BWF9SQVdfREVWUz0yNTYKQ09ORklHX0hQRVQ9eQojIENP
TkZJR19IUEVUX1JUQ19JUlEgaXMgbm90IHNldApDT05GSUdfSFBFVF9NTUFQPXkKIyBDT05GSUdf
SEFOR0NIRUNLX1RJTUVSIGlzIG5vdCBzZXQKCiMKIyBUUE0gZGV2aWNlcwojCiMgQ09ORklHX1RD
R19UUE0gaXMgbm90IHNldAojIENPTkZJR19URUxDTE9DSyBpcyBub3Qgc2V0CgojCiMgSTJDIHN1
cHBvcnQKIwpDT05GSUdfSTJDPW0KQ09ORklHX0kyQ19DSEFSREVWPW0KCiMKIyBJMkMgQWxnb3Jp
dGhtcwojCkNPTkZJR19JMkNfQUxHT0JJVD1tCkNPTkZJR19JMkNfQUxHT1BDRj1tCkNPTkZJR19J
MkNfQUxHT1BDQT1tCgojCiMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0CiMKIyBDT05GSUdfSTJD
X0FMSTE1MzUgaXMgbm90IHNldAojIENPTkZJR19JMkNfQUxJMTU2MyBpcyBub3Qgc2V0CiMgQ09O
RklHX0kyQ19BTEkxNVgzIGlzIG5vdCBzZXQKIyBDT05GSUdfSTJDX0FNRDc1NiBpcyBub3Qgc2V0
CiMgQ09ORklHX0kyQ19BTUQ4MTExIGlzIG5vdCBzZXQKIyBDT05GSUdfSTJDX0k4MDEgaXMgbm90
IHNldAojIENPTkZJR19JMkNfSTgxMCBpcyBub3Qgc2V0CiMgQ09ORklHX0kyQ19QSUlYNCBpcyBu
b3Qgc2V0CiMgQ09ORklHX0kyQ19ORk9SQ0UyIGlzIG5vdCBzZXQKIyBDT05GSUdfSTJDX09DT1JF
UyBpcyBub3Qgc2V0CiMgQ09ORklHX0kyQ19QQVJQT1JUIGlzIG5vdCBzZXQKIyBDT05GSUdfSTJD
X1BBUlBPUlRfTElHSFQgaXMgbm90IHNldApDT05GSUdfSTJDX1BST1NBVkFHRT1tCiMgQ09ORklH
X0kyQ19TQVZBR0U0IGlzIG5vdCBzZXQKIyBDT05GSUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldAoj
IENPTkZJR19JMkNfU0lTNjMwIGlzIG5vdCBzZXQKIyBDT05GSUdfSTJDX1NJUzk2WCBpcyBub3Qg
c2V0CiMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKQ09ORklHX0kyQ19WSUE9bQpDT05GSUdf
STJDX1ZJQVBSTz1tCiMgQ09ORklHX0kyQ19WT09ET08zIGlzIG5vdCBzZXQKIyBDT05GSUdfSTJD
X1BDQV9JU0EgaXMgbm90IHNldAoKIwojIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAoj
CiMgQ09ORklHX1NFTlNPUlNfRFMxMzM3IGlzIG5vdCBzZXQKIyBDT05GSUdfU0VOU09SU19EUzEz
NzQgaXMgbm90IHNldApDT05GSUdfU0VOU09SU19FRVBST009bQojIENPTkZJR19TRU5TT1JTX1BD
Rjg1NzQgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAojIENP
TkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX01BWDY4NzUg
aXMgbm90IHNldAojIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiMgQ09ORklHX0ky
Q19ERUJVR19BTEdPIGlzIG5vdCBzZXQKIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0
CiMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKCiMKIyBTUEkgc3VwcG9ydAojCiMg
Q09ORklHX1NQSSBpcyBub3Qgc2V0CiMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAoKIwoj
IERhbGxhcydzIDEtd2lyZSBidXMKIwojIENPTkZJR19XMSBpcyBub3Qgc2V0CgojCiMgSGFyZHdh
cmUgTW9uaXRvcmluZyBzdXBwb3J0CiMKQ09ORklHX0hXTU9OPXkKIyBDT05GSUdfSFdNT05fVklE
IGlzIG5vdCBzZXQKQ09ORklHX1NFTlNPUlNfQUJJVFVHVVJVPXkKIyBDT05GSUdfU0VOU09SU19B
RE0xMDIxIGlzIG5vdCBzZXQKIyBDT05GSUdfU0VOU09SU19BRE0xMDI1IGlzIG5vdCBzZXQKIyBD
T05GSUdfU0VOU09SU19BRE0xMDI2IGlzIG5vdCBzZXQKIyBDT05GSUdfU0VOU09SU19BRE0xMDMx
IGlzIG5vdCBzZXQKIyBDT05GSUdfU0VOU09SU19BRE05MjQwIGlzIG5vdCBzZXQKIyBDT05GSUdf
U0VOU09SU19LOFRFTVAgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX0FTQjEwMCBpcyBub3Qg
c2V0CiMgQ09ORklHX1NFTlNPUlNfQVRYUDEgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX0RT
MTYyMSBpcyBub3Qgc2V0CiMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0CiMgQ09O
RklHX1NFTlNPUlNfRlNDSEVSIGlzIG5vdCBzZXQKIyBDT05GSUdfU0VOU09SU19GU0NQT1MgaXMg
bm90IHNldAojIENPTkZJR19TRU5TT1JTX0dMNTE4U00gaXMgbm90IHNldAojIENPTkZJR19TRU5T
T1JTX0dMNTIwU00gaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAoj
IENPTkZJR19TRU5TT1JTX0xNNjMgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX0xNNzUgaXMg
bm90IHNldAojIENPTkZJR19TRU5TT1JTX0xNNzcgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JT
X0xNNzggaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX0xNODAgaXMgbm90IHNldAojIENPTkZJ
R19TRU5TT1JTX0xNODMgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX0xNODUgaXMgbm90IHNl
dAojIENPTkZJR19TRU5TT1JTX0xNODcgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX0xNOTAg
aXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX0xNOTIgaXMgbm90IHNldAojIENPTkZJR19TRU5T
T1JTX01BWDE2MTkgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNl
dAojIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX1NJ
UzU1OTUgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKIyBD
T05GSUdfU0VOU09SU19TTVNDNDdNMTkyIGlzIG5vdCBzZXQKIyBDT05GSUdfU0VOU09SU19TTVND
NDdCMzk3IGlzIG5vdCBzZXQKIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKIyBD
T05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX1ZUODIzMSBp
cyBub3Qgc2V0CiMgQ09ORklHX1NFTlNPUlNfVzgzNzgxRCBpcyBub3Qgc2V0CiMgQ09ORklHX1NF
TlNPUlNfVzgzNzkxRCBpcyBub3Qgc2V0CiMgQ09ORklHX1NFTlNPUlNfVzgzNzkyRCBpcyBub3Qg
c2V0CiMgQ09ORklHX1NFTlNPUlNfVzgzNzkzIGlzIG5vdCBzZXQKIyBDT05GSUdfU0VOU09SU19X
ODNMNzg1VFMgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQK
IyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX0hE
QVBTIGlzIG5vdCBzZXQKIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CgojCiMg
TXVsdGltZWRpYSBkZXZpY2VzCiMKQ09ORklHX1ZJREVPX0RFVj15CkNPTkZJR19WSURFT19WNEwx
PXkKQ09ORklHX1ZJREVPX1Y0TDFfQ09NUEFUPXkKQ09ORklHX1ZJREVPX1Y0TDI9eQoKIwojIFZp
ZGVvIENhcHR1cmUgQWRhcHRlcnMKIwoKIwojIFZpZGVvIENhcHR1cmUgQWRhcHRlcnMKIwojIENP
TkZJR19WSURFT19BRFZfREVCVUcgaXMgbm90IHNldAojIENPTkZJR19WSURFT19IRUxQRVJfQ0hJ
UFNfQVVUTyBpcyBub3Qgc2V0CgojCiMgRW5jb2RlcnMvZGVjb2RlcnMgYW5kIG90aGVyIGhlbHBl
ciBjaGlwcwojCgojCiMgQXVkaW8gZGVjb2RlcnMKIwojIENPTkZJR19WSURFT19UVkFVRElPIGlz
IG5vdCBzZXQKIyBDT05GSUdfVklERU9fVERBNzQzMiBpcyBub3Qgc2V0CiMgQ09ORklHX1ZJREVP
X1REQTk4NDAgaXMgbm90IHNldAojIENPTkZJR19WSURFT19UREE5ODc1IGlzIG5vdCBzZXQKIyBD
T05GSUdfVklERU9fVEVBNjQxNUMgaXMgbm90IHNldAojIENPTkZJR19WSURFT19URUE2NDIwIGlz
IG5vdCBzZXQKIyBDT05GSUdfVklERU9fTVNQMzQwMCBpcyBub3Qgc2V0CiMgQ09ORklHX1ZJREVP
X0NTNTNMMzJBIGlzIG5vdCBzZXQKIyBDT05GSUdfVklERU9fVExWMzIwQUlDMjNCIGlzIG5vdCBz
ZXQKIyBDT05GSUdfVklERU9fV004Nzc1IGlzIG5vdCBzZXQKIyBDT05GSUdfVklERU9fV004NzM5
IGlzIG5vdCBzZXQKCiMKIyBWaWRlbyBkZWNvZGVycwojCiMgQ09ORklHX1ZJREVPX0JUODE5IGlz
IG5vdCBzZXQKIyBDT05GSUdfVklERU9fQlQ4NTYgaXMgbm90IHNldAojIENPTkZJR19WSURFT19C
VDg2NiBpcyBub3Qgc2V0CiMgQ09ORklHX1ZJREVPX0tTMDEyNyBpcyBub3Qgc2V0CiMgQ09ORklH
X1ZJREVPX09WNzY3MCBpcyBub3Qgc2V0CiMgQ09ORklHX1ZJREVPX1NBQTcxMTAgaXMgbm90IHNl
dAojIENPTkZJR19WSURFT19TQUE3MTExIGlzIG5vdCBzZXQKIyBDT05GSUdfVklERU9fU0FBNzEx
NCBpcyBub3Qgc2V0CiMgQ09ORklHX1ZJREVPX1NBQTcxMVggaXMgbm90IHNldAojIENPTkZJR19W
SURFT19TQUE3MTkxIGlzIG5vdCBzZXQKIyBDT05GSUdfVklERU9fVFZQNTE1MCBpcyBub3Qgc2V0
CiMgQ09ORklHX1ZJREVPX1ZQWDMyMjAgaXMgbm90IHNldAoKIwojIFZpZGVvIGFuZCBhdWRpbyBk
ZWNvZGVycwojCiMgQ09ORklHX1ZJREVPX0NYMjU4NDAgaXMgbm90IHNldAoKIwojIE1QRUcgdmlk
ZW8gZW5jb2RlcnMKIwojIENPTkZJR19WSURFT19DWDIzNDFYIGlzIG5vdCBzZXQKCiMKIyBWaWRl
byBlbmNvZGVycwojCiMgQ09ORklHX1ZJREVPX1NBQTcxMjcgaXMgbm90IHNldAojIENPTkZJR19W
SURFT19TQUE3MTg1IGlzIG5vdCBzZXQKIyBDT05GSUdfVklERU9fQURWNzE3MCBpcyBub3Qgc2V0
CiMgQ09ORklHX1ZJREVPX0FEVjcxNzUgaXMgbm90IHNldAoKIwojIFZpZGVvIGltcHJvdmVtZW50
IGNoaXBzCiMKIyBDT05GSUdfVklERU9fVVBENjQwMzFBIGlzIG5vdCBzZXQKIyBDT05GSUdfVklE
RU9fVVBENjQwODMgaXMgbm90IHNldAojIENPTkZJR19WSURFT19WSVZJIGlzIG5vdCBzZXQKIyBD
T05GSUdfVklERU9fQlQ4NDggaXMgbm90IHNldAojIENPTkZJR19WSURFT19CV1FDQU0gaXMgbm90
IHNldAojIENPTkZJR19WSURFT19DUUNBTSBpcyBub3Qgc2V0CiMgQ09ORklHX1ZJREVPX1c5OTY2
IGlzIG5vdCBzZXQKIyBDT05GSUdfVklERU9fQ1BJQSBpcyBub3Qgc2V0CiMgQ09ORklHX1ZJREVP
X0NQSUEyIGlzIG5vdCBzZXQKIyBDT05GSUdfVklERU9fU0FBNTI0NkEgaXMgbm90IHNldAojIENP
TkZJR19WSURFT19TQUE1MjQ5IGlzIG5vdCBzZXQKIyBDT05GSUdfVFVORVJfMzAzNiBpcyBub3Qg
c2V0CiMgQ09ORklHX1ZJREVPX1NUUkFESVMgaXMgbm90IHNldAojIENPTkZJR19WSURFT19aT1JB
TiBpcyBub3Qgc2V0CiMgQ09ORklHX1ZJREVPX1NBQTcxMzQgaXMgbm90IHNldAojIENPTkZJR19W
SURFT19NWEIgaXMgbm90IHNldAojIENPTkZJR19WSURFT19EUEMgaXMgbm90IHNldAojIENPTkZJ
R19WSURFT19IRVhJVU1fT1JJT04gaXMgbm90IHNldAojIENPTkZJR19WSURFT19IRVhJVU1fR0VN
SU5JIGlzIG5vdCBzZXQKIyBDT05GSUdfVklERU9fQ1g4OCBpcyBub3Qgc2V0CiMgQ09ORklHX1ZJ
REVPX0NBRkVfQ0NJQyBpcyBub3Qgc2V0CgojCiMgVjRMIFVTQiBkZXZpY2VzCiMKIyBDT05GSUdf
VklERU9fUFZSVVNCMiBpcyBub3Qgc2V0CiMgQ09ORklHX1ZJREVPX0VNMjhYWCBpcyBub3Qgc2V0
CiMgQ09ORklHX1ZJREVPX1VTQlZJU0lPTiBpcyBub3Qgc2V0CiMgQ09ORklHX1VTQl9WSUNBTSBp
cyBub3Qgc2V0CiMgQ09ORklHX1VTQl9JQk1DQU0gaXMgbm90IHNldAojIENPTkZJR19VU0JfS09O
SUNBV0MgaXMgbm90IHNldAojIENPTkZJR19VU0JfUVVJQ0tDQU1fTUVTU0VOR0VSIGlzIG5vdCBz
ZXQKIyBDT05GSUdfVVNCX0VUNjFYMjUxIGlzIG5vdCBzZXQKIyBDT05GSUdfVklERU9fT1ZDQU1D
SElQIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNCX1c5OTY4Q0YgaXMgbm90IHNldAojIENPTkZJR19V
U0JfT1Y1MTEgaXMgbm90IHNldAojIENPTkZJR19VU0JfU0U0MDEgaXMgbm90IHNldAojIENPTkZJ
R19VU0JfU045QzEwMiBpcyBub3Qgc2V0CiMgQ09ORklHX1VTQl9TVFY2ODAgaXMgbm90IHNldAoj
IENPTkZJR19VU0JfWkMwMzAxIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNCX1BXQyBpcyBub3Qgc2V0
CgojCiMgUmFkaW8gQWRhcHRlcnMKIwojIENPTkZJR19SQURJT19HRU1URUtfUENJIGlzIG5vdCBz
ZXQKIyBDT05GSUdfUkFESU9fTUFYSVJBRElPIGlzIG5vdCBzZXQKIyBDT05GSUdfUkFESU9fTUFF
U1RSTyBpcyBub3Qgc2V0CiMgQ09ORklHX1VTQl9EU0JSIGlzIG5vdCBzZXQKCiMKIyBEaWdpdGFs
IFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCiMKIyBDT05GSUdfRFZCIGlzIG5vdCBzZXQKIyBD
T05GSUdfVVNCX0RBQlVTQiBpcyBub3Qgc2V0CgojCiMgR3JhcGhpY3Mgc3VwcG9ydAojCkNPTkZJ
R19GSVJNV0FSRV9FRElEPXkKQ09ORklHX0ZCPXkKIyBDT05GSUdfRkJfRERDIGlzIG5vdCBzZXQK
Q09ORklHX0ZCX0NGQl9GSUxMUkVDVD15CkNPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQpDT05GSUdf
RkJfQ0ZCX0lNQUdFQkxJVD15CiMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKIyBDT05G
SUdfRkJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKQ09ORklHX0ZCX01PREVfSEVMUEVSUz15CiMgQ09O
RklHX0ZCX1RJTEVCTElUVElORyBpcyBub3Qgc2V0CiMgQ09ORklHX0ZCX0NJUlJVUyBpcyBub3Qg
c2V0CiMgQ09ORklHX0ZCX1BNMiBpcyBub3Qgc2V0CiMgQ09ORklHX0ZCX0NZQkVSMjAwMCBpcyBu
b3Qgc2V0CiMgQ09ORklHX0ZCX0FSQyBpcyBub3Qgc2V0CiMgQ09ORklHX0ZCX0FTSUxJQU5UIGlz
IG5vdCBzZXQKIyBDT05GSUdfRkJfSU1TVFQgaXMgbm90IHNldApDT05GSUdfRkJfVkdBMTY9eQpD
T05GSUdfRkJfVkVTQT15CkNPTkZJR19GQl9WRVNBX1NURD15CiMgQ09ORklHX0ZCX1ZFU0FfVE5H
IGlzIG5vdCBzZXQKQ09ORklHX1ZJREVPX1NFTEVDVD15CiMgQ09ORklHX0ZCX0hHQSBpcyBub3Qg
c2V0CiMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKIyBDT05GSUdfRkJfTlZJRElBIGlz
IG5vdCBzZXQKIyBDT05GSUdfRkJfUklWQSBpcyBub3Qgc2V0CiMgQ09ORklHX0ZCX0lOVEVMIGlz
IG5vdCBzZXQKIyBDT05GSUdfRkJfTUFUUk9YIGlzIG5vdCBzZXQKIyBDT05GSUdfRkJfUkFERU9O
IGlzIG5vdCBzZXQKIyBDT05GSUdfRkJfQVRZMTI4IGlzIG5vdCBzZXQKIyBDT05GSUdfRkJfQVRZ
IGlzIG5vdCBzZXQKIyBDT05GSUdfRkJfU0FWQUdFIGlzIG5vdCBzZXQKIyBDT05GSUdfRkJfU0lT
IGlzIG5vdCBzZXQKIyBDT05GSUdfRkJfTkVPTUFHSUMgaXMgbm90IHNldAojIENPTkZJR19GQl9L
WVJPIGlzIG5vdCBzZXQKIyBDT05GSUdfRkJfM0RGWCBpcyBub3Qgc2V0CiMgQ09ORklHX0ZCX1ZP
T0RPTzEgaXMgbm90IHNldAojIENPTkZJR19GQl9UUklERU5UIGlzIG5vdCBzZXQKIyBDT05GSUdf
RkJfR0VPREUgaXMgbm90IHNldAojIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKCiMKIyBD
b25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKIwpDT05GSUdfVkdBX0NPTlNPTEU9eQojIENP
TkZJR19WR0FDT05fU09GVF9TQ1JPTExCQUNLIGlzIG5vdCBzZXQKQ09ORklHX0RVTU1ZX0NPTlNP
TEU9eQpDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRT15CiMgQ09ORklHX0ZSQU1FQlVGRkVSX0NP
TlNPTEVfUk9UQVRJT04gaXMgbm90IHNldAojIENPTkZJR19GT05UUyBpcyBub3Qgc2V0CkNPTkZJ
R19GT05UXzh4OD15CkNPTkZJR19GT05UXzh4MTY9eQoKIwojIExvZ28gY29uZmlndXJhdGlvbgoj
CkNPTkZJR19MT0dPPXkKIyBDT05GSUdfTE9HT19MSU5VWF9NT05PIGlzIG5vdCBzZXQKIyBDT05G
SUdfTE9HT19MSU5VWF9WR0ExNiBpcyBub3Qgc2V0CkNPTkZJR19MT0dPX0xJTlVYX0NMVVQyMjQ9
eQojIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldApDT05GSUdfRkJfU1BM
QVNIPXkKCiMKIyBTcGVha3VwIGNvbnNvbGUgc3BlZWNoCiMKQ09ORklHX1NQRUFLVVA9bQojIENP
TkZJR19TUEVBS1VQX0FDTlRTQSBpcyBub3Qgc2V0CiMgQ09ORklHX1NQRUFLVVBfQUNOVFBDIGlz
IG5vdCBzZXQKIyBDT05GSUdfU1BFQUtVUF9BUE9MTE8gaXMgbm90IHNldAojIENPTkZJR19TUEVB
S1VQX0FVRFBUUiBpcyBub3Qgc2V0CiMgQ09ORklHX1NQRUFLVVBfQk5TIGlzIG5vdCBzZXQKIyBD
T05GSUdfU1BFQUtVUF9ERUNUTEsgaXMgbm90IHNldAojIENPTkZJR19TUEVBS1VQX0RFQ0VYVCBp
cyBub3Qgc2V0CiMgQ09ORklHX1NQRUFLVVBfREVDUEMgaXMgbm90IHNldAojIENPTkZJR19TUEVB
S1VQX0RUTEsgaXMgbm90IHNldAojIENPTkZJR19TUEVBS1VQX0tFWVBDIGlzIG5vdCBzZXQKIyBD
T05GSUdfU1BFQUtVUF9MVExLIGlzIG5vdCBzZXQKIyBDT05GSUdfU1BFQUtVUF9TRlRTWU4gaXMg
bm90IHNldAojIENPTkZJR19TUEVBS1VQX1NQS09VVCBpcyBub3Qgc2V0CiMgQ09ORklHX1NQRUFL
VVBfVFhQUlQgaXMgbm90IHNldAoKIwojIEVudGVyIHRoZSAzIHRvIDYgY2hhcmFjdGVyIGtleXdv
cmQgZnJvbSB0aGUgbGlzdCBhYm92ZSwgb3Igbm9uZSBmb3Igbm8gZGVmYXVsdCBzeW50aGVzaXpl
ciBvbiBib290IHVwLgojCkNPTkZJR19TUEVBS1VQX0RFRkFVTFQ9Im5vbmUiCgojCiMgU291bmQK
IwpDT05GSUdfU09VTkQ9bQoKIwojIEFkdmFuY2VkIExpbnV4IFNvdW5kIEFyY2hpdGVjdHVyZQoj
CkNPTkZJR19TTkQ9bQpDT05GSUdfU05EX1RJTUVSPW0KQ09ORklHX1NORF9QQ009bQpDT05GSUdf
U05EX0hXREVQPW0KQ09ORklHX1NORF9SQVdNSURJPW0KQ09ORklHX1NORF9TRVFVRU5DRVI9bQpD
T05GSUdfU05EX1NFUV9EVU1NWT1tCkNPTkZJR19TTkRfT1NTRU1VTD15CkNPTkZJR19TTkRfTUlY
RVJfT1NTPW0KQ09ORklHX1NORF9QQ01fT1NTPW0KQ09ORklHX1NORF9QQ01fT1NTX1BMVUdJTlM9
eQpDT05GSUdfU05EX1NFUVVFTkNFUl9PU1M9eQpDT05GSUdfU05EX1JUQ1RJTUVSPW0KQ09ORklH
X1NORF9TRVFfUlRDVElNRVJfREVGQVVMVD15CiMgQ09ORklHX1NORF9EWU5BTUlDX01JTk9SUyBp
cyBub3Qgc2V0CkNPTkZJR19TTkRfU1VQUE9SVF9PTERfQVBJPXkKQ09ORklHX1NORF9WRVJCT1NF
X1BST0NGUz15CiMgQ09ORklHX1NORF9WRVJCT1NFX1BSSU5USyBpcyBub3Qgc2V0CiMgQ09ORklH
X1NORF9ERUJVRyBpcyBub3Qgc2V0CgojCiMgR2VuZXJpYyBkZXZpY2VzCiMKQ09ORklHX1NORF9N
UFU0MDFfVUFSVD1tCkNPTkZJR19TTkRfQUM5N19DT0RFQz1tCiMgQ09ORklHX1NORF9EVU1NWSBp
cyBub3Qgc2V0CiMgQ09ORklHX1NORF9WSVJNSURJIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX01U
UEFWIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX01UUzY0IGlzIG5vdCBzZXQKIyBDT05GSUdfU05E
X1NFUklBTF9VMTY1NTAgaXMgbm90IHNldAojIENPTkZJR19TTkRfTVBVNDAxIGlzIG5vdCBzZXQK
CiMKIyBQQ0kgZGV2aWNlcwojCiMgQ09ORklHX1NORF9BRDE4ODkgaXMgbm90IHNldAojIENPTkZJ
R19TTkRfQUxTMzAwIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX0FMUzQwMDAgaXMgbm90IHNldAoj
IENPTkZJR19TTkRfQUxJNTQ1MSBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9BVElJWFAgaXMgbm90
IHNldAojIENPTkZJR19TTkRfQVRJSVhQX01PREVNIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX0FV
ODgxMCBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9BVTg4MjAgaXMgbm90IHNldAojIENPTkZJR19T
TkRfQVU4ODMwIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX0FaVDMzMjggaXMgbm90IHNldAojIENP
TkZJR19TTkRfQlQ4N1ggaXMgbm90IHNldAojIENPTkZJR19TTkRfQ0EwMTA2IGlzIG5vdCBzZXQK
IyBDT05GSUdfU05EX0NNSVBDSSBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9DUzQyODEgaXMgbm90
IHNldAojIENPTkZJR19TTkRfQ1M0NlhYIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX0RBUkxBMjAg
aXMgbm90IHNldAojIENPTkZJR19TTkRfR0lOQTIwIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX0xB
WUxBMjAgaXMgbm90IHNldAojIENPTkZJR19TTkRfREFSTEEyNCBpcyBub3Qgc2V0CiMgQ09ORklH
X1NORF9HSU5BMjQgaXMgbm90IHNldAojIENPTkZJR19TTkRfTEFZTEEyNCBpcyBub3Qgc2V0CiMg
Q09ORklHX1NORF9NT05BIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX01JQSBpcyBub3Qgc2V0CiMg
Q09ORklHX1NORF9FQ0hPM0cgaXMgbm90IHNldAojIENPTkZJR19TTkRfSU5ESUdPIGlzIG5vdCBz
ZXQKIyBDT05GSUdfU05EX0lORElHT0lPIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX0lORElHT0RK
IGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX0VNVTEwSzEgaXMgbm90IHNldAojIENPTkZJR19TTkRf
RU1VMTBLMVggaXMgbm90IHNldAojIENPTkZJR19TTkRfRU5TMTM3MCBpcyBub3Qgc2V0CiMgQ09O
RklHX1NORF9FTlMxMzcxIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX0VTMTkzOCBpcyBub3Qgc2V0
CiMgQ09ORklHX1NORF9FUzE5NjggaXMgbm90IHNldAojIENPTkZJR19TTkRfRk04MDEgaXMgbm90
IHNldAojIENPTkZJR19TTkRfSERBX0lOVEVMIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX0hEU1Ag
aXMgbm90IHNldAojIENPTkZJR19TTkRfSERTUE0gaXMgbm90IHNldAojIENPTkZJR19TTkRfSUNF
MTcxMiBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9JQ0UxNzI0IGlzIG5vdCBzZXQKIyBDT05GSUdf
U05EX0lOVEVMOFgwIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX0lOVEVMOFgwTSBpcyBub3Qgc2V0
CiMgQ09ORklHX1NORF9LT1JHMTIxMiBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9NQUVTVFJPMyBp
cyBub3Qgc2V0CiMgQ09ORklHX1NORF9NSVhBUlQgaXMgbm90IHNldAojIENPTkZJR19TTkRfTk0y
NTYgaXMgbm90IHNldAojIENPTkZJR19TTkRfUENYSFIgaXMgbm90IHNldAojIENPTkZJR19TTkRf
UklQVElERSBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9STUUzMiBpcyBub3Qgc2V0CiMgQ09ORklH
X1NORF9STUU5NiBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9STUU5NjUyIGlzIG5vdCBzZXQKIyBD
T05GSUdfU05EX1NPTklDVklCRVMgaXMgbm90IHNldAojIENPTkZJR19TTkRfVFJJREVOVCBpcyBu
b3Qgc2V0CkNPTkZJR19TTkRfVklBODJYWD1tCiMgQ09ORklHX1NORF9WSUE4MlhYX01PREVNIGlz
IG5vdCBzZXQKIyBDT05GSUdfU05EX1ZYMjIyIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX1lNRlBD
SSBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9BQzk3X1BPV0VSX1NBVkUgaXMgbm90IHNldAoKIwoj
IFVTQiBkZXZpY2VzCiMKQ09ORklHX1NORF9VU0JfQVVESU89bQojIENPTkZJR19TTkRfVVNCX1VT
WDJZIGlzIG5vdCBzZXQKCiMKIyBPcGVuIFNvdW5kIFN5c3RlbQojCiMgQ09ORklHX1NPVU5EX1BS
SU1FIGlzIG5vdCBzZXQKQ09ORklHX0FDOTdfQlVTPW0KCiMKIyBISUQgRGV2aWNlcwojCkNPTkZJ
R19ISUQ9eQoKIwojIFVTQiBzdXBwb3J0CiMKQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQpDT05G
SUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQpDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQpDT05GSUdf
VVNCPW0KIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKCiMKIyBNaXNjZWxsYW5lb3VzIFVT
QiBvcHRpb25zCiMKQ09ORklHX1VTQl9ERVZJQ0VGUz15CiMgQ09ORklHX1VTQl9CQU5EV0lEVEgg
aXMgbm90IHNldAojIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAojIENPTkZJ
R19VU0JfU1VTUEVORCBpcyBub3Qgc2V0CiMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAoKIwoj
IFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwojCkNPTkZJR19VU0JfRUhDSV9IQ0Q9bQojIENP
TkZJR19VU0JfRUhDSV9TUExJVF9JU08gaXMgbm90IHNldAojIENPTkZJR19VU0JfRUhDSV9ST09U
X0hVQl9UVCBpcyBub3Qgc2V0CiMgQ09ORklHX1VTQl9FSENJX1RUX05FV1NDSEVEIGlzIG5vdCBz
ZXQKIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKQ09ORklHX1VTQl9PSENJX0hD
RD1tCiMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU4gaXMgbm90IHNldApDT05GSUdfVVNCX09I
Q0lfTElUVExFX0VORElBTj15CkNPTkZJR19VU0JfVUhDSV9IQ0Q9bQojIENPTkZJR19VU0JfU0w4
MTFfSENEIGlzIG5vdCBzZXQKCiMKIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKIwpDT05GSUdf
VVNCX0FDTT1tCkNPTkZJR19VU0JfUFJJTlRFUj1tCgojCiMgTk9URTogVVNCX1NUT1JBR0UgZW5h
YmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JwojCgojCiMgbWF5IGFsc28gYmUgbmVl
ZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgojCkNPTkZJR19V
U0JfU1RPUkFHRT1tCiMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKQ09ORklH
X1VTQl9TVE9SQUdFX0RBVEFGQUI9eQpDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTT15CkNPTkZJ
R19VU0JfU1RPUkFHRV9JU0QyMDA9eQpDT05GSUdfVVNCX1NUT1JBR0VfRFBDTT15CiMgQ09ORklH
X1VTQl9TVE9SQUdFX1VTQkFUIGlzIG5vdCBzZXQKQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOT15
CkNPTkZJR19VU0JfU1RPUkFHRV9TRERSNTU9eQpDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1Q9
eQojIENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEgaXMgbm90IHNldAojIENPTkZJR19VU0JfU1RP
UkFHRV9LQVJNQSBpcyBub3Qgc2V0CiMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0Cgoj
CiMgVVNCIElucHV0IERldmljZXMKIwpDT05GSUdfVVNCX0hJRD1tCiMgQ09ORklHX1VTQl9ISURJ
TlBVVF9QT1dFUkJPT0sgaXMgbm90IHNldAojIENPTkZJR19ISURfRkYgaXMgbm90IHNldApDT05G
SUdfVVNCX0hJRERFVj15CgojCiMgVVNCIEhJRCBCb290IFByb3RvY29sIGRyaXZlcnMKIwojIENP
TkZJR19VU0JfS0JEIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNCX01PVVNFIGlzIG5vdCBzZXQKQ09O
RklHX1VTQl9BSVBURUs9bQpDT05GSUdfVVNCX1dBQ09NPW0KIyBDT05GSUdfVVNCX0FDRUNBRCBp
cyBub3Qgc2V0CkNPTkZJR19VU0JfS0JUQUI9bQojIENPTkZJR19VU0JfUE9XRVJNQVRFIGlzIG5v
dCBzZXQKIyBDT05GSUdfVVNCX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNCX1lF
QUxJTksgaXMgbm90IHNldAojIENPTkZJR19VU0JfWFBBRCBpcyBub3Qgc2V0CiMgQ09ORklHX1VT
Ql9BVElfUkVNT1RFIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNCX0FUSV9SRU1PVEUyIGlzIG5vdCBz
ZXQKIyBDT05GSUdfVVNCX0tFWVNQQU5fUkVNT1RFIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNCX0FQ
UExFVE9VQ0ggaXMgbm90IHNldAoKIwojIFVTQiBJbWFnaW5nIGRldmljZXMKIwpDT05GSUdfVVNC
X01EQzgwMD1tCkNPTkZJR19VU0JfTUlDUk9URUs9bQoKIwojIFVTQiBOZXR3b3JrIEFkYXB0ZXJz
CiMKQ09ORklHX1VTQl9DQVRDPW0KQ09ORklHX1VTQl9LQVdFVEg9bQpDT05GSUdfVVNCX1BFR0FT
VVM9bQpDT05GSUdfVVNCX1JUTDgxNTA9bQpDT05GSUdfVVNCX1VTQk5FVF9NSUk9bQpDT05GSUdf
VVNCX1VTQk5FVD1tCkNPTkZJR19VU0JfTkVUX0FYODgxN1g9bQpDT05GSUdfVVNCX05FVF9DRENF
VEhFUj1tCiMgQ09ORklHX1VTQl9ORVRfR0w2MjBBIGlzIG5vdCBzZXQKQ09ORklHX1VTQl9ORVRf
TkVUMTA4MD1tCiMgQ09ORklHX1VTQl9ORVRfUExVU0IgaXMgbm90IHNldAojIENPTkZJR19VU0Jf
TkVUX01DUzc4MzAgaXMgbm90IHNldAojIENPTkZJR19VU0JfTkVUX1JORElTX0hPU1QgaXMgbm90
IHNldAojIENPTkZJR19VU0JfTkVUX0NEQ19TVUJTRVQgaXMgbm90IHNldApDT05GSUdfVVNCX05F
VF9aQVVSVVM9bQpDT05GSUdfVVNCX01PTj15CgojCiMgVVNCIHBvcnQgZHJpdmVycwojCkNPTkZJ
R19VU0JfVVNTNzIwPW0KCiMKIyBVU0IgU2VyaWFsIENvbnZlcnRlciBzdXBwb3J0CiMKIyBDT05G
SUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0CgojCiMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycwoj
CkNPTkZJR19VU0JfRU1JNjI9bQpDT05GSUdfVVNCX0VNSTI2PW0KIyBDT05GSUdfVVNCX0FEVVRV
WCBpcyBub3Qgc2V0CkNPTkZJR19VU0JfQVVFUlNXQUxEPW0KQ09ORklHX1VTQl9SSU81MDA9bQpD
T05GSUdfVVNCX0xFR09UT1dFUj1tCkNPTkZJR19VU0JfTENEPW0KQ09ORklHX1VTQl9MRUQ9bQoj
IENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldApDT05GSUdfVVNCX0NZVEhFUk09
bQojIENPTkZJR19VU0JfUEhJREdFVCBpcyBub3Qgc2V0CiMgQ09ORklHX1VTQl9JRE1PVVNFIGlz
IG5vdCBzZXQKIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0CiMgQ09ORklHX1VTQl9B
UFBMRURJU1BMQVkgaXMgbm90IHNldAojIENPTkZJR19VU0JfU0lTVVNCVkdBIGlzIG5vdCBzZXQK
IyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlz
IG5vdCBzZXQKIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAoKIwojIFVTQiBEU0wgbW9kZW0g
c3VwcG9ydAojCgojCiMgVVNCIEdhZGdldCBTdXBwb3J0CiMKIyBDT05GSUdfVVNCX0dBREdFVCBp
cyBub3Qgc2V0CgojCiMgTU1DL1NEIENhcmQgc3VwcG9ydAojCiMgQ09ORklHX01NQyBpcyBub3Qg
c2V0CgojCiMgTEVEIGRldmljZXMKIwojIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CgojCiMg
TEVEIGRyaXZlcnMKIwoKIwojIExFRCBUcmlnZ2VycwojCgojCiMgSW5maW5pQmFuZCBzdXBwb3J0
CiMKIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0CgojCiMgRURBQyAtIGVycm9yIGRldGVj
dGlvbiBhbmQgcmVwb3J0aW5nIChSQVMpIChFWFBFUklNRU5UQUwpCiMKIyBDT05GSUdfRURBQyBp
cyBub3Qgc2V0CgojCiMgUmVhbCBUaW1lIENsb2NrCiMKQ09ORklHX1JUQ19MSUI9bQpDT05GSUdf
UlRDX0NMQVNTPW0KCiMKIyBSVEMgaW50ZXJmYWNlcwojCkNPTkZJR19SVENfSU5URl9TWVNGUz1t
CkNPTkZJR19SVENfSU5URl9QUk9DPW0KQ09ORklHX1JUQ19JTlRGX0RFVj1tCiMgQ09ORklHX1JU
Q19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0CgojCiMgUlRDIGRyaXZlcnMKIwojIENPTkZJ
R19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKIyBDT05GSUdfUlRDX0RSVl9EUzEzMDcgaXMgbm90
IHNldAojIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0CiMgQ09ORklHX1JUQ19EUlZf
SVNMMTIwOCBpcyBub3Qgc2V0CiMgQ09ORklHX1JUQ19EUlZfRFMxNjcyIGlzIG5vdCBzZXQKIyBD
T05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAojIENPTkZJR19SVENfRFJWX1BDRjg1NjMg
aXMgbm90IHNldAojIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAojIENPTkZJR19S
VENfRFJWX1JTNUMzNzIgaXMgbm90IHNldAojIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qg
c2V0CiMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0CiMgQ09ORklHX1JUQ19EUlZfVjMw
MjAgaXMgbm90IHNldAoKIwojIERNQSBFbmdpbmUgc3VwcG9ydAojCkNPTkZJR19ETUFfRU5HSU5F
PXkKCiMKIyBETUEgQ2xpZW50cwojCkNPTkZJR19ORVRfRE1BPXkKCiMKIyBETUEgRGV2aWNlcwoj
CkNPTkZJR19JTlRFTF9JT0FURE1BPW0KCiMKIyBWaXJ0dWFsaXphdGlvbgojCiMgQ09ORklHX0tW
TSBpcyBub3Qgc2V0CgojCiMgRmlybXdhcmUgRHJpdmVycwojCiMgQ09ORklHX0VERCBpcyBub3Qg
c2V0CiMgQ09ORklHX0RFTExfUkJVIGlzIG5vdCBzZXQKIyBDT05GSUdfRENEQkFTIGlzIG5vdCBz
ZXQKCiMKIyBGaWxlIHN5c3RlbXMKIwojIENPTkZJR19FWFQyX0ZTIGlzIG5vdCBzZXQKIyBDT05G
SUdfRVhUM19GUyBpcyBub3Qgc2V0CiMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldApDT05G
SUdfUkVJU0VSRlNfRlM9eQojIENPTkZJR19SRUlTRVJGU19DSEVDSyBpcyBub3Qgc2V0CiMgQ09O
RklHX1JFSVNFUkZTX1BST0NfSU5GTyBpcyBub3Qgc2V0CkNPTkZJR19SRUlTRVJGU19GU19YQVRU
Uj15CkNPTkZJR19SRUlTRVJGU19GU19QT1NJWF9BQ0w9eQpDT05GSUdfUkVJU0VSRlNfRlNfU0VD
VVJJVFk9eQojIENPTkZJR19KRlNfRlMgaXMgbm90IHNldApDT05GSUdfRlNfUE9TSVhfQUNMPXkK
IyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiMg
Q09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAoj
IENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CkNPTkZJR19JTk9USUZZPXkKQ09ORklHX0lOT1RJ
RllfVVNFUj15CiMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKQ09ORklHX0ROT1RJRlk9eQojIENP
TkZJR19BVVRPRlNfRlMgaXMgbm90IHNldApDT05GSUdfQVVUT0ZTNF9GUz1tCiMgQ09ORklHX0ZV
U0VfRlMgaXMgbm90IHNldAoKIwojIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKIwpDT05GSUdfSVNP
OTY2MF9GUz15CkNPTkZJR19KT0xJRVQ9eQpDT05GSUdfWklTT0ZTPXkKQ09ORklHX1pJU09GU19G
Uz15CkNPTkZJR19VREZfRlM9eQpDT05GSUdfVURGX05MUz15CgojCiMgRE9TL0ZBVC9OVCBGaWxl
c3lzdGVtcwojCkNPTkZJR19GQVRfRlM9eQpDT05GSUdfTVNET1NfRlM9eQpDT05GSUdfVkZBVF9G
Uz15CkNPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKQ09ORklHX0ZBVF9ERUZBVUxUX0lP
Q0hBUlNFVD0iaXNvODg1OS0xNSIKQ09ORklHX05URlNfRlM9bQojIENPTkZJR19OVEZTX0RFQlVH
IGlzIG5vdCBzZXQKQ09ORklHX05URlNfUlc9eQoKIwojIFBzZXVkbyBmaWxlc3lzdGVtcwojCkNP
TkZJR19QUk9DX0ZTPXkKQ09ORklHX1BST0NfS0NPUkU9eQpDT05GSUdfUFJPQ19TWVNDVEw9eQpD
T05GSUdfU1lTRlM9eQpDT05GSUdfVE1QRlM9eQojIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMg
bm90IHNldAojIENPTkZJR19IVUdFVExCRlMgaXMgbm90IHNldAojIENPTkZJR19IVUdFVExCX1BB
R0UgaXMgbm90IHNldApDT05GSUdfUkFNRlM9eQojIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qg
c2V0CgojCiMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwojCiMgQ09ORklHX0FERlNfRlMgaXMg
bm90IHNldAojIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKIyBDT05GSUdfSEZTX0ZTIGlzIG5v
dCBzZXQKIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CiMgQ09ORklHX0JFRlNfRlMgaXMg
bm90IHNldAojIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAojIENPTkZJR19FRlNfRlMgaXMgbm90
IHNldAojIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAojIENPTkZJR19TUVVBU0hGUyBpcyBub3Qg
c2V0CiMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAojIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBz
ZXQKIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qg
c2V0CiMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CgojCiMgTmV0d29yayBGaWxlIFN5c3RlbXMK
IwojIENPTkZJR19ORlNfRlMgaXMgbm90IHNldAojIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKIyBD
T05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CiMgQ09ORklH
X05DUF9GUyBpcyBub3Qgc2V0CiMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAojIENPTkZJR19B
RlNfRlMgaXMgbm90IHNldAojIENPTkZJR185UF9GUyBpcyBub3Qgc2V0CgojCiMgUGFydGl0aW9u
IFR5cGVzCiMKQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15CiMgQ09ORklHX0FDT1JOX1BBUlRJ
VElPTiBpcyBub3Qgc2V0CiMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAojIENPTkZJ
R19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAojIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMg
bm90IHNldAojIENPTkZJR19NQUNfUEFSVElUSU9OIGlzIG5vdCBzZXQKQ09ORklHX01TRE9TX1BB
UlRJVElPTj15CiMgQ09ORklHX0JTRF9ESVNLTEFCRUwgaXMgbm90IHNldAojIENPTkZJR19NSU5J
WF9TVUJQQVJUSVRJT04gaXMgbm90IHNldAojIENPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT04g
aXMgbm90IHNldAojIENPTkZJR19VTklYV0FSRV9ESVNLTEFCRUwgaXMgbm90IHNldApDT05GSUdf
TERNX1BBUlRJVElPTj15CiMgQ09ORklHX0xETV9ERUJVRyBpcyBub3Qgc2V0CiMgQ09ORklHX1NH
SV9QQVJUSVRJT04gaXMgbm90IHNldAojIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBz
ZXQKIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0CiMgQ09ORklHX0tBUk1BX1BBUlRJ
VElPTiBpcyBub3Qgc2V0CiMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAoKIwojIE5h
dGl2ZSBMYW5ndWFnZSBTdXBwb3J0CiMKQ09ORklHX05MUz15CkNPTkZJR19OTFNfREVGQVVMVD0i
dXRmOCIKQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQojIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3
IGlzIG5vdCBzZXQKIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0CiMgQ09ORklH
X05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAojIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlz
IG5vdCBzZXQKIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0CiMgQ09ORklHX05M
U19DT0RFUEFHRV84NTcgaXMgbm90IHNldAojIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5v
dCBzZXQKIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0CiMgQ09ORklHX05MU19D
T0RFUEFHRV84NjIgaXMgbm90IHNldAojIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBz
ZXQKIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0CiMgQ09ORklHX05MU19DT0RF
UEFHRV84NjUgaXMgbm90IHNldAojIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQK
IyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0CiMgQ09ORklHX05MU19DT0RFUEFH
RV85MzYgaXMgbm90IHNldAojIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKIyBD
T05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0CiMgQ09ORklHX05MU19DT0RFUEFHRV85
NDkgaXMgbm90IHNldAojIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKIyBDT05G
SUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0CiMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlz
IG5vdCBzZXQKIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldApDT05GSUdfTkxT
X0FTQ0lJPXkKQ09ORklHX05MU19JU084ODU5XzE9eQojIENPTkZJR19OTFNfSVNPODg1OV8yIGlz
IG5vdCBzZXQKIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0CiMgQ09ORklHX05MU19J
U084ODU5XzQgaXMgbm90IHNldAojIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKIyBD
T05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0CiMgQ09ORklHX05MU19JU084ODU5XzcgaXMg
bm90IHNldAojIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKIyBDT05GSUdfTkxTX0lT
Tzg4NTlfMTMgaXMgbm90IHNldAojIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0CkNP
TkZJR19OTFNfSVNPODg1OV8xNT15CiMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAojIENP
TkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKQ09ORklHX05MU19VVEY4PW0KCiMKIyBEaXN0cmli
dXRlZCBMb2NrIE1hbmFnZXIKIwojIENPTkZJR19ETE0gaXMgbm90IHNldAoKIwojIEluc3RydW1l
bnRhdGlvbiBTdXBwb3J0CiMKIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKIyBDT05GSUdf
S1BST0JFUyBpcyBub3Qgc2V0CgojCiMgS2VybmVsIGhhY2tpbmcKIwpDT05GSUdfVFJBQ0VfSVJR
RkxBR1NfU1VQUE9SVD15CiMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKIyBDT05GSUdf
RU5BQkxFX01VU1RfQ0hFQ0sgaXMgbm90IHNldAojIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qg
c2V0CiMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKIyBDT05GSUdfREVCVUdfRlMg
aXMgbm90IHNldAojIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKIyBDT05GSUdfREVC
VUdfS0VSTkVMIGlzIG5vdCBzZXQKQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKQ09ORklHX0RFQlVH
X0JVR1ZFUkJPU0U9eQoKIwojIFNlY3VyaXR5IG9wdGlvbnMKIwojIENPTkZJR19LRVlTIGlzIG5v
dCBzZXQKIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAoKIwojIENyeXB0b2dyYXBoaWMgb3B0
aW9ucwojCkNPTkZJR19DUllQVE89eQpDT05GSUdfQ1JZUFRPX0FMR0FQST15CkNPTkZJR19DUllQ
VE9fQkxLQ0lQSEVSPXkKQ09ORklHX0NSWVBUT19IQVNIPXkKQ09ORklHX0NSWVBUT19NQU5BR0VS
PXkKQ09ORklHX0NSWVBUT19ITUFDPXkKIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAoj
IENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CiMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90
IHNldApDT05GSUdfQ1JZUFRPX01ENT15CkNPTkZJR19DUllQVE9fU0hBMT15CkNPTkZJR19DUllQ
VE9fU0hBMjU2PW0KQ09ORklHX0NSWVBUT19TSEE1MTI9bQojIENPTkZJR19DUllQVE9fV1A1MTIg
aXMgbm90IHNldAojIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKIyBDT05GSUdfQ1JZ
UFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKQ09ORklHX0NSWVBUT19FQ0I9bQpDT05GSUdfQ1JZUFRP
X0NCQz15CiMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldApDT05GSUdfQ1JZUFRPX0RFUz15
CkNPTkZJR19DUllQVE9fQkxPV0ZJU0g9bQpDT05GSUdfQ1JZUFRPX1RXT0ZJU0g9bQpDT05GSUdf
Q1JZUFRPX1RXT0ZJU0hfQ09NTU9OPW0KIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0hfWDg2XzY0IGlz
IG5vdCBzZXQKQ09ORklHX0NSWVBUT19TRVJQRU5UPW0KIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBu
b3Qgc2V0CiMgQ09ORklHX0NSWVBUT19BRVNfWDg2XzY0IGlzIG5vdCBzZXQKQ09ORklHX0NSWVBU
T19DQVNUNT1tCkNPTkZJR19DUllQVE9fQ0FTVDY9bQpDT05GSUdfQ1JZUFRPX1RFQT1tCkNPTkZJ
R19DUllQVE9fQVJDND1tCkNPTkZJR19DUllQVE9fS0hBWkFEPW0KQ09ORklHX0NSWVBUT19BTlVC
SVM9bQpDT05GSUdfQ1JZUFRPX0RFRkxBVEU9eQpDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPW0K
Q09ORklHX0NSWVBUT19DUkMzMkM9bQojIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0Cgoj
CiMgSGFyZHdhcmUgY3J5cHRvIGRldmljZXMKIwoKIwojIExpYnJhcnkgcm91dGluZXMKIwpDT05G
SUdfQklUUkVWRVJTRT15CkNPTkZJR19DUkNfQ0NJVFQ9eQojIENPTkZJR19DUkMxNiBpcyBub3Qg
c2V0CkNPTkZJR19DUkMzMj15CkNPTkZJR19MSUJDUkMzMkM9bQpDT05GSUdfWkxJQl9JTkZMQVRF
PXkKQ09ORklHX1pMSUJfREVGTEFURT15CkNPTkZJR19QTElTVD15CkNPTkZJR19JT01BUF9DT1BZ
PXkK
</data>        

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>112063</attachid>
            <date>2007-03-04 14:26 0000</date>
            <desc>4400_speakup-20070204.patch</desc>
            <filename>4400_speakup-20070204.patch</filename>
            <type>text/plain</type>
            <data encoding="base64">c3BlYWt1cCBDVlMgZm9yIExpbnV4IDIuNi4yMApHZW5lcmF0ZWQgYnkgZHNkIG9uIFN1biBGZWIg
IDQgMTY6MDk6MjEgRVNUIDIwMDcKZGlmZiAtLWV4Y2x1ZGU9Jyoub3JpZycgLS1leGNsdWRlPScq
LnBhdGNoJyAtdXJOcCBsaW51eC0yLjYuMjAvYXJjaC9hcm0vS2NvbmZpZyBsaW51eC0yLjYuMjAt
c3BrL2FyY2gvYXJtL0tjb25maWcKLS0tIGxpbnV4LTIuNi4yMC9hcmNoL2FybS9LY29uZmlnCTIw
MDctMDItMDQgMTY6MDg6MDAuMDAwMDAwMDAwIC0wNTAwCisrKyBsaW51eC0yLjYuMjAtc3BrL2Fy
Y2gvYXJtL0tjb25maWcJMjAwNy0wMi0wNCAxNjowOToyMS4wMDAwMDAwMDAgLTA1MDAKQEAgLTk1
MSw2ICs5NTEsNyBAQCBzb3VyY2UgImRyaXZlcnMvbGVkcy9LY29uZmlnIgogc291cmNlICJkcml2
ZXJzL21lZGlhL0tjb25maWciCiAKIHNvdXJjZSAiZHJpdmVycy92aWRlby9LY29uZmlnIgorc291
cmNlICJkcml2ZXJzL2NoYXIvc3BlYWt1cC9LY29uZmlnIgogCiBzb3VyY2UgInNvdW5kL0tjb25m
aWciCiAKZGlmZiAtLWV4Y2x1ZGU9Jyoub3JpZycgLS1leGNsdWRlPScqLnBhdGNoJyAtdXJOcCBs
aW51eC0yLjYuMjAvRG9jdW1lbnRhdGlvbi9zcGVha3VwL0RlZmF1bHRLZXlBc3NpZ25tZW50cyBs
aW51eC0yLjYuMjAtc3BrL0RvY3VtZW50YXRpb24vc3BlYWt1cC9EZWZhdWx0S2V5QXNzaWdubWVu
dHMKLS0tIGxpbnV4LTIuNi4yMC9Eb2N1bWVudGF0aW9uL3NwZWFrdXAvRGVmYXVsdEtleUFzc2ln
bm1lbnRzCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKyBsaW51eC0yLjYu
MjAtc3BrL0RvY3VtZW50YXRpb24vc3BlYWt1cC9EZWZhdWx0S2V5QXNzaWdubWVudHMJMjAwNy0w
Mi0wNCAxNjowOToyMS4wMDAwMDAwMDAgLTA1MDAKQEAgLTAsMCArMSw0NiBAQAorVGhpcyBmaWxl
IGlzIGludGVuZGVkIHRvIGdpdmUgeW91IGFuIG92ZXJ2aWV3IG9mIHRoZSBkZWZhdWx0IGtleXMg
dXNlZAorYnkgc3BlYWt1cCBmb3IgaXQncyByZXZpZXcgZnVuY3Rpb25zLiAgWW91IG1heSBjaGFu
Z2UgdGhlbSB0byBiZQorYW55dGhpbmcgeW91IHdhbnQgYnV0IHRoYXQgd2lsbCB0YWtlIHNvbWUg
ZmFtaWxpYXJpdHkgd2l0aCBrZXkKK21hcHBpbmcuCisKK1dlIGhhdmUgcmVtYXBwZWQgdGhlIGlu
c2VydCBvciB6ZXJvIGtleSBvbiB0aGUga2V5cGFkIHRvIGFjdCBhcyBhCitzaGlmdCBrZXkuICBX
ZWxsLCBhY3R1YWxseSBhcyBhbiBhbHRnciBrZXkuICBTbyBpbiB0aGUgZm9sbG93aW5nIGxpc3QK
K0luc0tleVBhZC1wZXJpb2QgbWVhbnMgaG9sZCBkb3duIHRoZSBpbnNlcnQga2V5IGxpa2UgYSBz
aGlmdCBrZXkgYW5kCitoaXQgdGhlIGtleXBhZCBwZXJpb2QuCisKK0tleVBhZC04CQlTYXkgY3Vy
cmVudCBMaW5lCitJbnNLZXlQYWQtOAkJc2F5IGZyb20gdG9wIG9mIHNjcmVlbiB0byByZWFkaW5n
IGN1cnNvci4KK0tleVBhZC03CQlTYXkgUHJldmlvdXMgTGluZSAoVVAgb25lIGxpbmUpCitLZXlQ
YWQtOQkJU2F5IE5leHQgTGluZSAoZG93biBvbmUgbGluZSkKK0tleVBhZC01CQlTYXkgQ3VycmVu
dCBXb3JkCitJbnNLZXlQYWQtNQkJU3BlbGwgQ3VycmVudCBXb3JkCitLZXlQYWQtNAkJU2F5IFBy
ZXZpb3VzIFdvcmQgKGxlZnQgb25lIHdvcmQpCitJbnNLZXlQYWQtNAkJc2F5IGZyb20gbGVmdCBl
ZGdlIG9mIGxpbmUgdG8gcmVhZGluZyBjdXJzb3IuCitLZXlQYWQtNgkJU2F5IE5leHQgV29yZCAo
cmlnaHQgb25lIHdvcmQpCitJbnNLZXlQYWQtNgkJU2F5IGZyb20gcmVhZGluZyBjdXJzb3IgdG8g
cmlnaHQgZWRnZSBvZiBsaW5lLgorS2V5UGFkLTIJCVNheSBDdXJyZW50IExldHRlcgorSW5zS2V5
UGFkLTIJCXNheSBjdXJyZW50IGxldHRlciBwaG9uZXRpY2FsbHkKK0tleVBhZC0xCQlTYXkgUHJl
dmlvdXMgQ2hhcmFjdGVyIChsZWZ0IG9uZSBsZXR0ZXIpCitLZXlQYWQtMwkJU2F5IE5leHQgQ2hh
cmFjdGVyIChyaWdodCBvbmUgbGV0dGVyKQorS2V5UGFkLXBsdXMJCVNheSBFbnRpcmUgU2NyZWVu
CitJbnNLZXlQYWQtcGx1cwkJU2F5IGZyb20gcmVhZGluZyBjdXJzb3IgbGluZSB0byBib3R0b20g
b2Ygc2NyZWVuLgorS2V5UGFkLU1pbnVzCQlQYXJrIHJlYWRpbmcgY3Vyc29yICh0b2dnbGUpCitJ
bnNLZXlQYWQtbWludXMJCVNheSBjaGFyYWN0ZXIgaGV4IGFuZCBkZWNpbWFsIHZhbHVlLgorS2V5
UGFkLXBlcmlvZAkJU2F5IFBvc2l0aW9uIChjdXJyZW50IGxpbmUsIHBvc2l0aW9uIGFuZCBjb25z
b2xlKQorSW5zS2V5UGFkLXBlcmlvZAlzYXkgY29sb3VyIGF0dHJpYnV0ZXMgb2YgY3VycmVudCBw
b3NpdGlvbi4KK0luc0tleVBhZC05CQlNb3ZlIHJlYWRpbmcgY3Vyc29yIHRvIHRvcCBvZiBzY3Jl
ZW4gKGluc2VydCBwZ3VwKQorSW5zS2V5UGFkLTMJCU1vdmUgcmVhZGluZyBjdXJzb3IgdG8gYm90
dG9tIG9mIHNjcmVlbiAoaW5zZXJ0IHBnZG4pCitJbnNLZXlQYWQtNwkJTW92ZSByZWFkaW5nIGN1
cnNvciB0byBsZWZ0IGVkZ2Ugb2Ygc2NyZWVuIChpbnNlcnQgaG9tZSkKK0luc0tleVBhZC0xCQlN
b3ZlIHJlYWRpbmcgY3Vyc29yIHRvIHJpZ2h0IGVkZ2Ugb2Ygc2NyZWVuIChpbnNlcnQgZW5kKQor
Q29udHJvbEtleVBhZC0xCQlNb3ZlIHJlYWRpbmcgY3Vyc29yIHRvIGxhc3QgY2hhcmFjdGVyIG9u
IGN1cnJlbnQgbGluZS4KK0tleVBhZC1FbnRlcgkJU2h1dCBVcCAodW50aWwgYW5vdGhlciBrZXkg
aXMgaGl0KSBhbmQgc3luYyByZWFkaW5nIGN1cnNvcgorSW5zS2V5UGFkLUVudGVyCQlTaHV0IFVw
ICh1bnRpbCB0b2dnbGVkIGJhY2sgb24pLgorSW5zS2V5UGFkLXN0YXIgbjx4fHk+CWdvIHRvIGxp
bmUgKHkpIG9yIGNvbHVtbiAoeCkuIFdoZXJlICduJyBpcyBhbnkKKwkJYWxsb3dlZCB2YWx1ZSBm
b3IgdGhlIHJvdyBvciBjb2x1bW4gZm9yIHlvdXIgY3VycmVudCBzY3JlZW4uCitLZXlQYWQtLwkJ
TWFyayBhbmQgQ3V0IHNjcmVlbiByZWdpb24uCitJbnNLZXlQYWQtLwkJUGFzdGUgc2NyZWVuIHJl
Z2lvbiBpbnRvIGFueSBjb25zb2xlLgorCitIaXR0aW5nIGFueSBrZXkgd2hpbGUgc3BlYWt1cCBp
cyBvdXRwdXR0aW5nIHNwZWVjaCB3aWxsIHF1aWV0IHRoZQorc3ludGggdW50aWwgaXQgaGFzIGNh
dWdodCB1cCB3aXRoIHdoYXQgaXMgYmVpbmcgcHJpbnRlZCBvbiB0aGUKK2NvbnNvbGUuCisKZGlm
ZiAtLWV4Y2x1ZGU9Jyoub3JpZycgLS1leGNsdWRlPScqLnBhdGNoJyAtdXJOcCBsaW51eC0yLjYu
MjAvRG9jdW1lbnRhdGlvbi9zcGVha3VwL0lOU1RBTExBVElPTiBsaW51eC0yLjYuMjAtc3BrL0Rv
Y3VtZW50YXRpb24vc3BlYWt1cC9JTlNUQUxMQVRJT04KLS0tIGxpbnV4LTIuNi4yMC9Eb2N1bWVu
dGF0aW9uL3NwZWFrdXAvSU5TVEFMTEFUSU9OCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAw
IC0wNTAwCisrKyBsaW51eC0yLjYuMjAtc3BrL0RvY3VtZW50YXRpb24vc3BlYWt1cC9JTlNUQUxM
QVRJT04JMjAwNy0wMi0wNCAxNjowOToyMS4wMDAwMDAwMDAgLTA1MDAKQEAgLTAsMCArMSwxMDgg
QEAKK1RoaXMgZG9jdW1lbnQgYXNzdW1lcyB5b3UgaGF2ZSBoYWQgc29tZSBleHBlcmllbmNlIHdp
dGgga2VybmVsCitjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uLiAgSWYgeW91IGhhdmUgbm90
LCBJIHJlY29tbWVuZCB5b3UgZ2V0Cit0aGUga2VybmVsIHNvdXJjZSBhbmQgcmVhZCB0aGUgUkVB
RE1FIGFuZCB2YXJpb3VzIGRvY3VtZW50cyBpbiB0aGUKK2xpbnV4L0RvY3VtZW50YXRpb24gZGly
ZWN0b3J5LiAgSW4gcGFydGljdWxhciB0aGUgQ2hhbmdlcyBmaWxlIHRvIG1ha2UKK3N1cmUgeW91
IGhhdmUgdGhlIGFwcHJvcHJpYXRlIHV0aWxpdGllcyBuZWVkZWQgZm9yIGluc3RhbGxpbmcgYSAy
LjIueHgKK29yIDIuNHh4IGtlcm5lbC4gIEl0IGlzbid0IGFzIGRpZmZpY3VsdCBhcyB5b3UgbWln
aHQgdGhpbmsuICBUaGUKK2tlcm5lbCBSRUFETUUgaXMgaW50aW1pZGF0aW5nIHRoZSBmaXJzdCB0
aW1lIGJ1dCBvbmNlIHlvdSBnZXQgdGhlCitzdGVwcyBkb3duLCBpdCdzIHJlYWxseSBwcmV0dHkg
ZWFzeS4gIEdldHRpbmcgdGhyb3VnaCB0aGUgIm1ha2UKK2NvbmZpZyIgaXMgdGhlIHRlZGlvdXMg
Yml0LgorCitUaGUgZmlyc3QgdGhpbmcgdG8gZG8gaXMgdG8gcGxhY2UgYSBjb3B5IG9mIHRoZSB0
YXJiYWxsIGluIHRoZSAvdXNyL3NyYworZGlyZWN0b3J5IHdoaWNoIGlzIHRoZSBkaXJlY3Rvcnkg
dGhlIGxpbnV4IHRyZWUgaXMgbG9jYXRlZCBpbiBhcyB3ZWxsLgorTmV4dCB1bnRhciBzcGVha3Vw
IGJ5IHR5cGluZzoKKwordGFyIHp4ZiBzcGVha3VwLTEuMDAudGFyLmd6CitjZCBzcGVha3VwLTEu
MDAKKy4vaW5zdGFsbAorCitOb3RlIHRoZSBkb3Qtc2xhc2ggYmVmb3JlIHRoZSBpbnN0YWxsLiAg
VGhpcyB3aWxsIGNvcHkgdGhlIHNwZWFrdXAKK2RpcmVjdG9yeSB0byB0aGUga2VybmVsIHRyZWUg
YW5kIGFwcGx5IHRoZSB2YXJpb3VzIHBhdGNoZXMgYW5kCitjb21wb25lbnRzIHRvIHRoZSBhcHBy
b3ByaWF0ZSBrZXJuZWwgZmlsZXMuICBEZXBlbmRpbmcgb24gaG93CitleHBlcmllbmNlZCB5b3Ug
YXJlIHdpdGgga2VybmVsIGNvbXBpbGluZyBhbmQgaGFja2luZyB3aWxsIGRldGVybWluZQord2hl
dGhlciB5b3Ugc2hvdWxkIGJvdGhlciBsb29raW5nIGF0IGFueSBmYWlsZWQgcGF0Y2hlcy4gIElm
IHRoaXMKK2hhcHBlbnMsIHlvdSBzaG91bGQgcHJvYmFibHkgd3JpdGUgdG8gdGhlIHNwZWFrdXAg
bWFpbGluZyBsaXN0IGZvcgoraGVscCBvciBteXNlbGYuCisKK0lmIGFsbCBvZiB0aGUgcGF0Y2gg
aHVua3MgYXBwbHkgc3VjY2Vzc2Z1bGx5IHRoZW4ganVzdCBjb250aW51ZSB3aXRoCit0aGUgc3Rh
bmRhcmQgc3RlcHMgdG8gY29tcGlsZSB0aGUga2VybmVsIHdpdGg6CisKK21ha2UgbXJwcm9wZXIK
K21ha2UgY29uZmlnCisKK1doZW4geW91IGdldCB0byB0aGUgc2VjdGlvbiBjb25zb2xlIHNwZWVj
aCBvdXRwdXQsIGFuc3dlciAneScgdG8gdGhlCitDT05GSUdfU1BFQUtVUCBwcm9tcHQuICBZb3Ug
d2lsbCBiZSBnaXZlbiBhIHN1Ym1lbnUgd2l0aCB0aGUgbGlzdCBvZgorc3ludGhlc2l6ZXJzIHdo
aWNoIGFyZSBjdXJyZW50bHkgc3VwcG9ydGVkLiAgWW91IGNhbiBpbmNsdWRlIGFzIG1hbnkKK3N5
bnRocyBpbiB0aGUga2VybmVsIGFzIHlvdSB3aXNoIGJ1dCByZW1lbWJlciBlYWNoIG9uZSB0YWtl
cyB1cCBrZXJuZWwKK3NwYWNlLiAgWW91IGNhbiBvbmx5IGNob29zZSBvbmUgb2YgdGhlIHN5bnRo
cyBhcyB0aGUgZGVmYXVsdCBvciBub25lLAorc28ganVzdCB0eXBlIGR0bGsgb3Igd2hhdGV2ZXIg
aXMgdGhlIGNvcnJlY3Qgc3RyaW5nIGZvciB0aGUKK3N5bnRoZXNpemVyIHlvdSBoYXZlLiAgWW91
IHdpbGwgYWxzbyBiZSBhc2tlZCBpZiB5b3Ugd2lzaCB0byBidWlsZC1pbgorYSBzcGVha3VwIGtl
eSBtYXAuICBJZiB5b3UgZG8gbm90IHNheSAneScgdG8gdGhpcyBvcHRpb24geW91IHdpbGwgbmVl
ZAordG8gbG9hZCBhIHNwZWFrdXAgbWFwIGF0IGJvb3QgdGltZSB3aXRoIHdoaWNoZXZlciBtZWNo
YW5pc20geW91cgorZGlzdHJpYnV0aW9uIHVzZXMgZm9yIGxvYWRpbmcga2V5IG1hcHMuCisKK1dl
IGhhdmUgcGxhY2VkIHRoZSBzcGVha3VwIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBpbiBtYWtlIGNv
bmZpZyBqdXN0CithZnRlciB0aGUgdmdhIGNvbnNvbGUgY2hvaWNlLiAgRm9yIHRoZSBEb3VibGVU
YWxrIFBDIGRyaXZlciBpbmNsdWRlZAorYnkgSmltIFZhbiBaYW5kdC4gIEkgcmVjb21tZW5kIHlv
dSBzYXkgbm8gdG8gdGhhdCBvcHRpb24uICBJIGhhdmUgbm90Cit0cmllZCBjb25maWd1cmluZyB0
aGVtIGJvdGggaW4sIGJ1dCBJIHdvdWxkbid0IGJlIGF0IGFsbCBzdXJwcmlzZWQgaWYKK2l0IGRp
ZG4ndCB3b3JrLgorCitJZiBhbGwgZ29lcyB3ZWxsIHVwIHRvIHRoaXMgcG9pbnQgeW91IGNhbiBj
b250aW51ZSB3aXRoIHRoZSBjb21waWxpbmcKK3Byb2Nlc3MgYnkgZG9pbmc6CisKK21ha2UgZGVw
ID5kZXAuZmlsZSAyPiYxICYKK21ha2UgYnpJbWFnZSA+Y2MuZmlsZSAyPiYxICYKK21ha2UgbW9k
dWxlcyA+bW9kLmZpbGUgMj4mMSAmCisKK0kgYWx3YXlzIHJlZGlyZWN0IG91dHB1dCB0byB0aGUg
ZmlsZXMgZGVwLmZpbGUgYW5kIGNjLmZpbGUgc28gSSBjYW4KK2xvb2sgb3ZlciB0aGUgY29tcGls
YXRpb24gcmVjb3JkIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gZXJyb3JzIGFuZAord2Fybmlu
Z3MuCisKK09rYXksIHlvdSBhcmUgcmVhZHkgdG8gaW5zdGFsbCB0aGUgbmV3bHkgY29tcGlsZWQg
a2VybmVsLiAgTWFrZSBzdXJlCit5b3UgbWFrZSBhbiBsaW51eC5vbGQgZW50cnkgaW4geW91ciBs
aWxvLmNvbmYgZmlsZSBzbyB5b3UgY2FuIHJlY292ZXIKK2lmIGl0IGJsb3dzIHVwLiAgbmV4dCBh
cyByb290IHJ1biAibWFrZSBtb2R1bGVzX2luc3RhbGwiIHRvIGluc3RhbGwKK3doYXRldmVyIG1v
ZHVsZXMgeW91IGNvbXBpbGVkIGFuZCBtb3ZlIHRoZSBiekltYWdlIGZyb20KKy91c3Ivc3JjL2xp
bnV4L2FyY2gvaTM4Ni9ib290IHRvIHdoZXJldmVyIHlvdXIga2VybmVsIGxpdmVzLiAgQWxzbwor
bW92ZSB0aGUgU3lzdGVtLm1hcCBmcm9tIC91c3Ivc3JjL2xpbnV4IHRvIHdoZXJlIHlvdXIgU3lz
dGVtLm1hcAorbGl2ZXMuICBPbiBvdXIgc3lzdGVtcyB3ZSB1c2UgZGViaWFuIHNvIHdlIGNyZWF0
ZSBhbiB2bWxpbnV6LXNwZWFrdXAKK2FuZCBTeXN0ZW0ubWFwLXNwZWFrdXAgaW4gb3VyIC9ib290
IGRpcmVjdG9yeSBhbmQgc2V0IHRoZSBzeW1ib2xpYworbGlua3Mgdm1saW51eiBhbmQgU3lzdGVt
Lm1hcCBpbiB0aGUgcm9vdCAoLykgZGlyZWN0b3J5IHRvIHBvaW50IHRvIHRoZQoraW1hZ2VzLiAg
Tm93IHR5cGUgbGlsbyB0byB0ZWxsIGxpbG8gdG8gYnVpbGQgdGhlIG5ldyBib290ZXIgZmlsZSBh
bmQKK2luc3RhbGwgaXQuCisKK0FzIG9mIHZlcnNpb24gMC4wNywgdGhlIGtleW1hcCBmb3Igc3Bl
YWt1cCBpcyBhdXRvbWF0aWNhbGx5IGJ1aWx0IGluCithdCBjb21waWxlIHRpbWUuICBJZiB5b3Ug
aGF2ZSBvdGhlciBrZXltYXBzIGluc3RhbGxlZCBhdCBib290IHRpbWUsCit5b3UgbWlnaHQgd2Fu
dCB0byBjb25zaWRlciByZW1vdmluZyB0aGVtIGJlZm9yZSB5b3UgcmVib290IHRoZSBzeXN0ZW0u
CisKK0lmIGV2ZXJ5dGhpbmcgaGFzIGdvbmUgT0sgdXAgdW50aWwgbm93LCBjcm9zcyB5b3VyIGZp
bmdlcnMgYW5kIHR5cGU6CisKK3NodXRkb3duIC1yIG5vdworCitZb3VyIHN5c3RlbSBzaG91bGQg
c3RhcnQgdGFsa2luZyB0byB5b3UgYXMgc29vbiBhcyBpdCBzdGFydHMgYm9vdGluZy4KK0l0IHdp
bGwgdGFsayBhbmQgdGFsayBhbmQgLi4uIHdlbGwsIHlvdSBtaWdodCB3YW50IHRvIGhpdCB0aGUK
K2tleXBhZC1lbnRlciBrZXkgdG8gdGVsbCBpdCB0byBzaHV0IHVwLiAgWW91IHNob3VsZCBhbHNv
IHJlYWQgdGhlCitEZWZhdWx0S2V5QXNzaWdubWVudHMgZmlsZSB0byBsZWFybiB0aGUgdmFyaW91
cyByZXZpZXcgZnVuY3Rpb25zCithdmFpbGFibGUuCisKK0FzIG9mIHYtMC4xMCB0aGUgc3BlYWt1
cCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGluIHRoZQorL3Byb2Mvc3BlYWt1cCBzdWJ0cmVl
LiAgVGhlIGluZGl2aWR1YWwgb3B0aW9ucyBzaG91bGQgYmUgZmFpcmx5CitvYnZpb3VzIGJ5IHRo
ZWlyIG5hbWVzIHN1Y2ggYXMgcmF0ZSwgdm9sdW1lLCBwdW5jX2xldmVsIGFuZCBzbyBmb3J0aC4K
K1lvdSBjYW4gbWFuaXB1bGF0ZSB0aGVtIGJ5IGNhdCdpbmcgb3IgZWNob2luZyBuZXcgdmFsdWVz
IHRvIHRoZW0gc3VjaAorYXM6CisKK2VjaG8gOSA+L3Byb2Mvc3BlYWt1cC9yYXRlCisKK1lvdSBj
YW4gc2VlIHdoYXQgdGhlIGN1cnJlbnQgdmFsdWVzIGFyZSBieSBjYXQnaW5nIHRob3NlIGZpbGVz
IHRvIHRoZSBjb25zb2xlOgorCitjYXQgL3Byb2Mvc3BlYWt1cC9yYXRlCisKK0kgaGF2ZSBwcm9i
YWJseSBtYW5hZ2VkIHRvIG92ZXJsb29rIGEgd2hvbGUgd2hhY2sgb2YgdGhpbmdzIGJlY2F1c2UK
K3RoaXMgaXMgdGhlLCBlbnRlciB2ZXJzaW9uIG51bWJlciBoZXJlLCBkcmFmdC4gIERvbid0IHdv
cnJ5IHdlJ2xsIGdldAoraXQgcmlnaHQgZXZlbnR1YWxseS4gIElmIHlvdSBsaWtlIHRoZSBwYWNr
YWdlIHlvdSByZWFsbHkgc2hvdWxkIGdldCBvbgordGhlIG1haWxpbmcgbGlzdCBhbmQgc3RhcnQg
cGFydGljaXBhdGluZyBpbiBpdCdzIGRldmVsb3BtZW50LgorCisgIEtpcmsKKworZW1haWw6IGtp
cmtAYnJhaWxsZS51d28uY2EKK3Bob25lOiAoNTE5KSA2NzktNjg0NSAoaG9tZSkKKwpkaWZmIC0t
ZXhjbHVkZT0nKi5vcmlnJyAtLWV4Y2x1ZGU9JyoucGF0Y2gnIC11ck5wIGxpbnV4LTIuNi4yMC9E
b2N1bWVudGF0aW9uL3NwZWFrdXAva2V5bWFwLXR1dG9yaWFsIGxpbnV4LTIuNi4yMC1zcGsvRG9j
dW1lbnRhdGlvbi9zcGVha3VwL2tleW1hcC10dXRvcmlhbAotLS0gbGludXgtMi42LjIwL0RvY3Vt
ZW50YXRpb24vc3BlYWt1cC9rZXltYXAtdHV0b3JpYWwJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAw
MDAwMDAgLTA1MDAKKysrIGxpbnV4LTIuNi4yMC1zcGsvRG9jdW1lbnRhdGlvbi9zcGVha3VwL2tl
eW1hcC10dXRvcmlhbAkyMDA3LTAyLTA0IDE2OjA5OjIxLjAwMDAwMDAwMCAtMDUwMApAQCAtMCww
ICsxLDE0MCBAQAorCQkgICAgICAgU3BlYWt1cCBLZXltYXAgVHV0b3JpYWwKKworVGhpcyBpcyBt
ZWFudCB0byBiZSBhIGJhc2ljIHR1dG9yaWFsIG9uIGhvdyB0byBjaGFuZ2UgdGhlIExpbnV4IGtl
eW1hcAorZmlsZSB0byBhc3NpZ24gc3BlYWt1cCByZXZpZXcgZnVuY3Rpb25zIHRvIGRlc2lyZWQg
a2V5cy4gIEl0IGlzIG5vdAoraW50ZW5kZWQgdG8gYmUgYSByZXBsYWNlbWVudCBmb3IgdGhlIGxv
YWRrZXlzKDgpIG9yIGtleW1hcCg1KSBtYW4KK3BhZ2VzLgorCitUaGUgYmFzaWMgbGF5LW91dCBv
ZiB0aGUga2V5bWFwIGZpbGUgaXMgYSBzZXJpZXMgb2YgbGluZXMgd2l0aCB0aGUKK2ZvbGxvd2lu
ZyBmaWVsZHMuICBUaGUga2V5d29yZCBrZXljb2RlIGluZGljYXRlcyB0aGlzIGlzIHRoZSBzdGFy
dCBvZgorYSBuZXcga2V5IGFzc2lnbm1lbnQuICBJdCBpcyB0aGVuIGZvbGxvd2VkIGJ5IGEgbnVt
YmVyIHdoaWNoCityZXByZXNlbnRzIHRoZSBhY3R1YWwga2V5IG9uIHRoZSBrZXlib2FyZC4gIFRo
YXQgbnVtYmVyIGlzIGZvbGxvd2VkIGJ5Cit0aGUgZXF1YWxzICc9JyBvcGVyYXRvciBhbmQgZmlu
YWxseSBhIGxpc3Qgb2Yga2V5d29yZHMgcmVwcmVzZW50aW5nCitrZXkgbmFtZXMgc3VjaCBhcyBr
ZXlwYWQ1LiAgRWFjaCBsaW5lIGNhbiBoYXZlIHF1aXRlIGEgZmV3IGtleQorZnVuY3Rpb25zIG9u
IGl0LiAgVGhleSBhcmUgaW50ZXJwcmV0ZWQgYnkgbG9hZGtleXMgaW4gb3JkZXIgYW5kCithc3Np
Z25lZCB0byBrZXkgc2hpZnQgc3RhdGVzIGRlcGVuZGluZyBvbiB0aGUgb3JkZXIgdGhleSBhcmUK
K2VuY291bnRlcmVkLiAgU28gZm9yIGV4YW1wbGUsIHRoZSBmaXJzdCB2YWx1ZSBhZnRlciB0aGUg
ZXF1YWxzIGlzIHRoZQora2V5cyB1bnNoaWZ0ZWQgc3RhdGUsIHdoaWxlIHRoZSBzZWNvbmQgaXMg
dGhlIGtleXMgc2hpZnRlZCBzdGF0ZS4gIElmCit5b3Ugd2lzaCB0byBsZWFybiB0aGUgb3JkZXIg
dGhleSBhcmUgaW50ZXJwcmV0ZWQgaW4gcmVhZCB0aGUKK2xvYWRrZXlzKDgpIGFuZCBrZXltYXAo
NSkgbWFuIHBhZ2VzLgorCitZb3UgY2FuIGhhdmUgc3Vic2VxdWVudCBsaW5lcyB3aGljaCBhcmUg
aW5kZW50ZWQgYW5kIHN0YXJ0IHdpdGgKK2Fub3RoZXIga2V5d29yZCBmb3IgdGhlIHZhcmlvdXMg
c2hpZnRlZCBzdGF0ZXMuICBUaGlzIHdheSB5b3UgY2FuCithc3NpZ24gc29tZSBvZiB0aGUgc3Rh
dGVzIHdpdGhvdXQgaGF2aW5nIHRvIHNwZWNpZnkgdGhlbSBhbGwgaW4gb3JkZXIKK3VwIHVudGls
IHlvdSBnZXQgdG8gdGhlIG9uZSB5b3Ugd2FudCB0byBhc3NpZ24uCisKK0luIHNwZWFrdXAsIHdl
IGhhdmUgYXNzaWduZWQgdGhlIGluc2VydCBrZXkgb24gdGhlIG51bWJlciBwYWQgdG8gdGhlCith
bHRnciBrZXl3b3JkLiAgVGhpcyBpcyBub3QgcmVxdWlyZWQ7IHlvdSBjb3VsZCBjaG9vc2UgYW55
IG90aGVyCitzaGlmdGVkIHN0YXRlIGtleXdvcmQuICBXZSB1c2VkIGFsdGdyIGJlY2F1c2UgaXQg
dHlwaWNhbGx5IHJlcHJlc2VudHMKK3RoZSByaWdodCBoYW5kIGFsdCBrZXkuICBJbiBMaW51eCBl
YWNoIHNoaWZ0IGtleSBpcyBzZXBhcmF0ZSBhbmQKK2luZGVwZW5kZW50LCBzbyB0aGUgbGVmdCBz
aGlmdCBhbmQgdGhlIHJpZ2h0IHNoaWZ0IGtleXMgYXJlIG5vdAorbmVjZXNzYXJpbHkgdGhlIHNh
bWUuICBUaGUgYWx0Z3Iga2V5IGlzIG5vdCByZWFsbHkgdXNlZCBmb3IgYW55dGhpbmcKK2ltcG9y
dGFudCwgc28gd2Ugc3RlZWwgaXQuCisKK0hlcmUgYXJlIHRoZSBkZWZhdWx0IGtleSBhc3NpZ25t
ZW50cyBmb3IgdGhlIG51bWJlciBlaWdodCBvbiB0aGUKK2tleXBhZDoKKwora2V5Y29kZSAgNzIg
PSBLUF84ICAgICAgICAgICAgCisJYWx0ICAgICBrZXljb2RlICA3MiA9IEFzY2lpXzggICAgICAg
ICAKKworQXMgeW91IGNhbiBzZWUsIHRoZSBmaXJzdCBsaW5lIHN0YXJ0cyB3aXRoIGtleWNvZGUg
Zm9sbG93ZWQgYnkgNzIKK3doaWNoIGlzIHRoZSBhY3R1YWwgbnVtYmVyIGFzc2lnbmVkIHRvIHRo
ZSBrZXkgd2hlbiB0aGUga2V5Ym9hcmQgcG9ydAoraXMgcmVhZC4gIFRoZSBLUF84IGFmdGVyIHRo
ZSBlcXVhbCBzaWduLCBpcyB0aGUgc3ltYm9saWMgcmVwcmVzZW50YXRpb24KK29mIHRoZSBmdW5j
dGlvbiBjYWxsZWQgd2hlbiB0aGF0IGtleSBpcyBoaXQuCisKK1RoZSBzZWNvbmQgbGluZSBpcyB0
aGUgc2FtZSBmb3JtYXQgZXhjZXB0IGl0IHN0YXJ0cyB3aXRoIHRoZSBrZXl3b3JkCithbHQgd2hp
Y2ggaXMgaW5kZW50ZWQuICBUaGF0IG1lYW5zIHRoYXQgdGhlIGZ1bmN0aW9uIGF0IHRoZSBlbmQg
b2YKK3RoYXQgbGluZSBBc2NpaV84IGlzIGFwcGxpZWQgdG8gdGhlIGFsdC1zaGlmdGVkIGVpZ2h0
IGtleS4KKworTm93IGhlcmUgYXJlIHRoZSBzcGVha3VwIGFzc2lnbm1lbnRzIGZvciB0aGF0IGtl
eToKKwora2V5Y29kZSAgNzIgPSAweDBkMGEKKwlhbHRnciBrZXljb2RlIDcyID0gMHgwZDIwCisj
a2V5Y29kZSAgNzIgPSBLUF84ICAgICAgICAgICAgCisJYWx0ICAgICBrZXljb2RlICA3MiA9IEFz
Y2lpXzggICAgICAgICAKKworTm90aWNlIHRoYXQgdGhlIG9ubHkgdGhpbmcgd2hpY2ggaGFzIGNo
YW5nZWQgb24gdGhlIGZpcnN0IGxpbmUgaXMgdGhlCitmdW5jdGlvbiBjYWxsZWQgd2hlbiB0aGUg
a2V5IGlzIHN0cnVjay4gIEl0IGlzIGEgaGV4YWRlY2ltYWwgbnVtYmVyCitpZGVudGlmeWluZyB0
aGUgZnVuY3Rpb24gY2FsbGVkIGluIGEgbG9vayB1cCB0YWJsZS4gIEl0IGlzIG5vdCBhCitzeW1i
b2xpYyByZXByZXNlbnRhdGlvbiB5ZXQgYmVjYXVzZSB0aGF0IG1lYW5zIHdlIG5lZWQgdG8gY2hh
bmdlIHRoZQorbG9hZGtleXMgcHJvZ3JhbSB0byB1bmRlcnN0YW5kIG91ciBzeW1ib2xpYyBuYW1l
cy4gIFdlIHdpbGwgZG8gdGhpcyBpbgordGhlIGZ1dHVyZSBidXQgZm9yIG5vdyBpdCBpcyBtb3Jl
IGV4cGVkaWVudCB0byBqdXN0IHVzZSB0aGUgdGFibGUKK2luZGljZXMuICBZb3Ugd2lsbCBmaW5k
IGEgdGFibGUgYXQgdGhlIGJvdHRvbSBvZiB0aGlzIGRvY3VtZW50CitsaXN0aW5nIHRoZSByZXZp
ZXcgZnVuY3Rpb25zIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nIGhleCBsb29rdXBzLgorCitUaGUg
MHgwZDBhIGluIHRoZSBmaXJzdCBsaW5lIGFib3ZlIGlzIHNwZWFrdXAncyBzYXkgbGluZSBmdW5j
dGlvbi4KK1RoZSBzZWNvbmQgbGluZSBlbmRzIHdpdGggMHgwZDIwIHdoaWNoIGlzIHNwZWFrdXAn
cyByZWFkIGZyb20gdG9wIG9mCitzY3JlZW4gdG8gcmVhZGluZyBjdXJzb3IgbGluZS4KKworVGhl
IHRoaXJkIGxpbmUgaXMgdGhlIG9yaWdpbmFsIGtleSBhc3NpZ25tZW50IGNvbW1lbnRlZCBvdXQg
d2l0aCBhCitudW1iZXItc2lnbiAnIycgYXQgdGhlIGJlZ2lubmluZy4gIEkgZG8gdGhhdCBzbyBJ
IGNhbiBlYXNpbHkgZmluZCB0aGUKK2tleXMgSSB3YW50IHRvIGFmZmVjdCBieSBzeW1ib2xpYyBu
YW1lLiAgT3RoZXJ3aXNlIEkgd291bGQgbmVlZCB0bwora2VlcCBhIGxvb2sgdXAgdGFibGUgZm9y
IGFsbCB0aGUga2V5Y29kZXMuICBJIHJlY29tbWVuZCB5b3UgZG8gdGhpcyBhcword2VsbCBvciB5
b3UnbGwgYmUgdmVyeSBzb3JyeSBhdCBzb21lIHBvaW50IGluIHRoZSBmdXR1cmUuCisKK1RoZSBm
b3J0aCBsaW5lIGlzIGp1c3QgdGhlIHN0YW5kYXJkIGtleSBhc3NpZ25tZW50IGZvciB0aGUgbGVm
dCBoYW5kCithbHQga2V5LgorCitOb3cgbGV0J3Mgc2F5IHdlIHdhbnQgdG8gZGVzaWduIGEgZGlm
ZmVyZW50IGtleWJvYXJkIGxheW91dC4gIEknbGwgdXNlCithbiBleGFtcGxlIGZvciB0aGUgSkFX
UyBzdHlsZSBrZXlwYWQgYmVjYXVzZSBJJ3ZlIHNwZWNpZmljYWxseSBiZWVuCithc2tlZCB0byBo
ZWxwIHdpdGggdGhhdC4gIEpBV1MgdXNlcyB0aGUgZWlnaHQgb24gdGhlIGtleXBhZCB0byBtb3Zl
IHVwCithIGxpbmUgb3IgdGhlIHNwZWFrdXAgZnVuY3Rpb24gdG8gcmVhZCBwcmV2aW91cyBsaW5l
LiAgSkFXUyBhbHNvIHVzZXMKK3RoZSBrZXlwYWRfOCBrZXkgaW4gYSBzaGlmdGVkIG1vZGUgdG8g
cmVhZCB0aGUgY3VycmVudCBsaW5lLiAgSQorYXBvbG9naXplIGlmIHRoZXNlIGFyZSBub3QgcXVp
dGUgcmlnaHQuICBJdCBoYXMgYmVlbiBhIGxvbmcgdGltZSBzaW5jZQorSSB1c2VkIEpBV1MuICBT
byB3ZSB3b3VsZCBoYXZlIHRoZSBmb2xsb3dpbmcgdHdvIGxpbmVzOgorCitrZXljb2RlICA3MiA9
IDB4MGQwYgorCWFsdGdyIGtleWNvZGUgNzIgPSAweDBkMGEKKworVGhlIGhleCB2YWx1ZSAweDBk
MGIgaW4gdGhlIGZpcnN0IGxpbmUgaXMgc3BlYWt1cCdzIFNBWV9QUkVWSU9VU19MSU5FCitmdW5j
dGlvbi4gIFRoZSAweDBkMGEgaW4gdGhlIHNlY29uZCBsaW5lIGlzIHRoZSBzYW1lIHNheV9saW5l
IGZ1bmN0aW9uCithcyB3ZSBoYWQgZWFybGllci4gIFNvIHdoZW4gdGhlIG51bWJlciBlaWdodCBp
cyBoaXQgb24gdGhlIGtleXBhZAorc3BlYWt1cCB3aWxsIHJlYWQgdGhlIHByZXZpb3VzIGxpbmUg
YW5kIHdoZW4gdGhlIG51bWJlciBlaWdodCBpcworc2hpZnRlZCB3aXRoIHRoZSBpbnNlcnQga2V5
IG9uIHRoZSBrZXlwYWQgaXQgd2lsbCByZWFkIHRoZSBjdXJyZW50CitsaW5lLgorCitBcyB5b3Ug
Y2FuIHRlbGwsIGl0IGlzIG5vdCByZWFsbHkgdmVyeSBkaWZmaWN1bHQgdG8gcmVhc3NpZ24gdGhl
IGtleXMKK3RvIGRpZmZlcmVudCByZXZpZXcgZnVuY3Rpb25zLgorCitPbmNlIHlvdSBoYXZlIGNh
cmVmdWxseSBlZGl0ZWQgdGhlIGtleW1hcCBmaWxlLCBjYWxsZWQgZGVmYXVsdC5tYXAgaW4KK3Ro
ZSBzcGVha3VwIGRpc3RyaWJ1dGlvbiwgeW91IGNvcHkgaXQgaW50byB0aGUgL2V0Yy9rYmQgZGly
ZWN0b3J5LgorTWFrZSBzdXJlIHlvdSBiYWNrIHVwIHRoZSBvcmlnaW5hbCBkZWZhdWx0Lm1hcCBm
cm9tIHRoYXQgZGlyZWN0b3J5CitmaXJzdCwgaWYgdGhlcmUgaXMgb25lLiAgVGhlbiB5b3UgcnVu
IGxvYWRrZXlzIHRvIGxvYWQgdGhlIG5ldyBtYXAKK2ludG8gdGhlIGtlcm5lbDoKKworbG9hZGtl
eXMgL2V0Yy9rYmQvZGVmYXVsdC5tYXAKKworSWYgeW91IHdpc2ggdG8gYnVpbGQgeW91ciBuZXcg
a2V5Ym9hcmQgbGF5LW91dCBpbnRvIHRoZSBrZXJuZWwsIGFmdGVyCit0ZXN0aW5nIGl0LCBjb3B5
IHRoZSBkZWZhdWx0Lm1hcCBmaWxlIGludG8gdGhlIGRyaXZlcnMvY2hhciBkaXJlY3RvcnksCit3
aXRoIHRoZSBuYW1lIGRlZmtleW1hcC5tYXAsIG9mIHlvdXIgTGludXggc291cmNlIHRyZWUuICBU
aGVuIHJtIHRoZQorZGVma2V5bWFwLmMgZmlsZSBhbmQgcmVjb21waWxlIHRoZSBrZXJuZWwuICBC
ZWNhdXNlIHRoZXJlIGlzIG5vCitkZWZrZXltYXAuYyBgbWFrZScgd2lsbCByZWJ1aWxkIGl0IG9u
IHRoZSBuZXh0IGNvbXBpbGUuCisKK0hlcmUgaXMgYSBsaXN0IG9mIHRoZSBhdmFpbGFibGUgc3Bl
YWt1cCByZXZpZXcgZnVuY3Rpb25zIGF0IHRoaXMgcG9pbnQKK2luIHRpbWUuCisKK1NBWV9DSEFS
IDB4MGQwNCAvKiBzYXkgdGhpcyBjaGFyYWN0ZXIgKi8KK1NBWV9QUkVWX0NIQVIgMHgwZDA1IC8q
IHNheSBjaGFyYWN0ZXIgbGVmdCBvZiB0aGlzIGNoYXIgKi8KK1NBWV9ORVhUX0NIQVIgMHgwZDA2
IC8qIHNheSBjaGFyIHJpZ2h0IG9mIHRoaXMgY2hhciAqLworU0FZX1dPUkQgMHgwZDA3IC8qIHNh
eSB0aGlzIHdvcmQgdW5kZXIgcmVhZGluZyBjdXJzb3IgKi8KK1NBWV9QUkVWX1dPUkQgMHgwZDA4
CitTQVlfTkVYVF9XT1JEIDB4MGQwOQorU0FZX0xJTkUgMHgwZDBhIC8qIHNheSB0aGlzIGxpbmUg
Ki8KK1NBWV9QUkVWX0xJTkUgMHgwZDBiIC8qIHNheSBsaW5lIGFib3ZlIHRoaXMgbGluZSAqLwor
U0FZX05FWFRfTElORSAweDBkMGMKK1RPUF9FREdFIDB4MGQwZCAvKiBtb3ZlIHRvIHRvcCBlZGdl
IG9mIHNjcmVlbiAqLworQk9UVE9NX0VER0UgMHgwZDBlCitMRUZUX0VER0UgMHgwZDBmCitSSUdI
VF9FREdFIDB4MGQxMAorU0FZX1BIT05FVElDX0NIQVIgMHgwZDExIC8qIHNheSB0aGlzIGNoYXJh
Y3RlciBwaG9uZXRpY2FsbHkgKi8KK1NQRUxMX1dPUkQgMHgwZDEyIC8qIHNwZWxsIHRoaXMgd29y
ZCBsZXR0ZXIgYnkgbGV0dGVyICovCitTQVlfU0NSRUVOIDB4MGQxNAorU0FZX1BPU0lUSU9OIDB4
MGQxYgorU1BFRUNIX09GRiAweDBkMWMKK1NBWV9BVFRSSUJVVEVTIDB4MGQxZAorU1BFQUtVUF9Q
QVJLRUQgMHgwZDFlCitTQVlfRlJPTV9UT1AgMHgwZDIwCitTQVlfVE9fQk9UVE9NIDB4MGQyMQor
U0FZX0ZST01fTEVGVCAweDBkMjIKK1NBWV9UT19SSUdIVCAweDBkMjMKKwpkaWZmIC0tZXhjbHVk
ZT0nKi5vcmlnJyAtLWV4Y2x1ZGU9JyoucGF0Y2gnIC11ck5wIGxpbnV4LTIuNi4yMC9Eb2N1bWVu
dGF0aW9uL3NwZWFrdXAvUkVBRE1FIGxpbnV4LTIuNi4yMC1zcGsvRG9jdW1lbnRhdGlvbi9zcGVh
a3VwL1JFQURNRQotLS0gbGludXgtMi42LjIwL0RvY3VtZW50YXRpb24vc3BlYWt1cC9SRUFETUUJ
MTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrIGxpbnV4LTIuNi4yMC1zcGsv
RG9jdW1lbnRhdGlvbi9zcGVha3VwL1JFQURNRQkyMDA3LTAyLTA0IDE2OjA5OjIxLjAwMDAwMDAw
MCAtMDUwMApAQCAtMCwwICsxLDk4IEBACitXZWxjb21lIHRvIHRoZSBzcGVha3VwIHByb2plY3Qg
Zm9yIHRoZSBTcGVha3VwIHNwZWVjaCBwYWNrYWdlIGZvciBMaW51eC4KKworU3BlYWt1cCBpcyB3
cml0dGVuIGJ5IEtpcmsgUmVpc2VyIGFuZCBBbmR5IEJlcmRhbi4gIEl0IGlzIGxpY2Vuc2VkCit1
bmRlciB0aGUgR1BMLiAgSWYgeW91IGRvbid0IGFscmVhZHkga25vdywgdGhlIEdQTCBzdGFuZHMg
Zm9yIHRoZSBHTlUKK0dlbmVyYWwgUHVibGljIExpY2Vuc2UuICBXaGljaCBiYXNpY2FsbHkgc3Rh
dGVzIHRoYXQgdGhpcyBjb2RlIGlzIGZyZWUgdG8KK2NvcHksIG1vZGlmeSBhbmQgZGlzdHJpYnV0
ZSB0byBhbnlvbmUgaW50ZXJlc3RlZCBpbiBwbGF5aW5nIHdpdGggaXQuCitUaGUgb25lIHRoaW5n
IHlvdSBtYXkgbm90IGRvIGlzIHR1cm4gYW55IHBhcnQgb2YgaXQgaW50byBwcm9wcmlldGFyeQor
b3IgY29tbWVyY2lhbCBjb2RlIHdpdGhvdXQgdGhlIHBlcm1pc3Npb24gb2YgdGhlIGF1dGhvci4g
IFRoYXQncyBtZS4KKworSWYgeW91IGFyZSBpbnRlcmVzdGVkIGluIGJlaW5nIGludm9sdmVkIHdp
dGggdGhlIGRldmVsb3BtZW50IG9mIHNwZWVjaAorb3V0cHV0IGZvciBMaW51eCB5b3UgY2FuIHN1
YnNjcmliZSB0byB0aGUgU3BlYWt1cCBtYWlsaW5nIGxpc3QgYnkKK3NlbmRpbmcgYSBtZXNzYWdl
IHRvIHNwZWFrdXAtcmVxdWVzdEBicmFpbGxlLnV3by5jYSB3aXRoIHRoZSBsaW5lOiBzdWJzY3Jp
YmUuICBZb3UgY2FuIGFsc28gc3Vic2NyaWJlIGJ5IGdvaW5nIHRvIHRoZSBzcGVha3VwIHdlYiBw
YWdlIGFuZCBmb2xsb3dpbmcgdGhlIGxpbmtzIGF0IGh0dHA6Ly93d3cubGludXgtc3BlYWt1cC5v
cmcuCisKK1dlIGFyZSBhdCBhIHZlcnkgZWFybHkgc3RhZ2UgaW4gdGhlIGRldmVsb3BtZW50IG9m
IHRoaXMgcGFja2FnZS4KK0hvcGVmdWxseSBjaGFuZ2VzIHdpbGwgaGFwcGVuIG9mdGVuIGFuZCBt
YW55LiAgVGhlIGN1cnJlbnQgZmlsZXMgaW4KK3RoaXMgZGlyZWN0b3J5IGFyZToKKworRGVmYXVs
dEtleUFzc2lnbm1lbnRzCQkjIHNwZWFrdXAncyBkZWZhdWx0IHJldmlldyBrZXlzCitJTlNUQUxM
QVRJT04JCQkjICBmb3IgaW5zdGFsbGluZyBzcGVha3VwIGZyb20gdGhlIHRhciBiYWxsLgorUkVB
RE1FCQkJCSMgdGhpcyBmaWxlCitrZXltYXAtdHV0b3JpYWwJCQkjIGEgdHV0b3JpYWwgb24gaG93
IHRvIGxheW91dCB0aGUga2V5Ym9hcmQKKworUmVhZCB0aGUgSU5TVEFMTEFUSU9OIGZpbGUgdG8g
bGVhcm4gaG93IHRvIGFwcGx5IHRoZSBwYXRjaGVzIGFuZCB0aGUKK2RlZmF1bHQubWFwIGZvciB0
aGUga2V5Ym9hcmQuICBZb3Ugc2hvdWxkIGFsc28gcmVhZCB0aGUgQ2hhbmdlcyBmaWxlLgorSXQg
cmVhbGx5IGhhcyBhbnkgbmV3IHRoaW5ncyBJJ3ZlIGFkZGVkIHNpbmNlIGxhc3QgdGltZS4KKwor
VGhlcmUgaXMgbm8gZG9jdW1lbnRhdGlvbiBpbiBhbnkgb2YgdGhlc2UgZmlsZXMgdG8gaW5zdHJ1
Y3QgeW91IHdoYXQKK3RvIGRvIGlmIHNvbWV0aGluZyBnb2VzIHdyb25nIHdpdGggdGhlIHBhdGNo
aW5nIG9yIGNvbXBpbGF0aW9uLiAgSWYKK3lvdSB3b3VsZCBsaWtlIHRoYXQgaW5mb3JtYXRpb24g
eW91IHdpbGwgbmVlZCB0byBzdWJzY3JpYmUgdG8gdGhlCittYWlsaW5nIGxpc3QgYW5kIGFzayBm
b3IgaGVscCwgb3Igd3JpdGUgbWUga2lya0BicmFpbGxlLnV3by5jYSBmb3IKK2hlbHAuICBJIHN1
Z2dlc3QgdGhlIG1haWxpbmcgbGlzdCBiZWNhdXNlIEkgd2lsbCBwcm9iYWJseSB0aXJlIHF1aWNr
bHkKK29mIGFuc3dlcmluZyB0aGUgc2FtZSBxdWVzdGlvbnMgb3ZlciBhbmQgb3Zlci4gIFlvdSBj
b3VsZCBhbHdheXMKK2RlY2lkZSB0byBkaWctaW4gYW5kIHRha2Ugb24gdGhlIHRhc2ssIGFuZCB3
cml0ZSBkb2N1bWVudGF0aW9uIHRvIGhlbHAKK290aGVycy4KKworVGhlcmUgYWxzbyBpcyBhIHNw
ZWFrdXAgcmVmbGVjdG9yIGZvciB0aGUgU3BlYWsgRnJlZWx5IHBhY2thZ2UsIHdoaWNoCittYW55
IG9mIHVzIGhhbmcgb3V0IG9uIGFuZCBkaXNjdXNzIGFsbCBzb3J0cyBvZiB0b3BpY3MgZnJvbSBz
cGVha3VwCitwcm9ibGVtcyB0byBBTFNBIGRyaXZlciBpbnN0YWxsYXRpb24gYW5kIGp1c3QgYWJv
dXQgYW55dGhpbmcgZWxzZQoreW91J2QgbGlrZSB0byB0YWxrIGFib3V0LiAgVGhlIHJlZmxlY3Rv
ciBpcyBhdCBsd2wuYnJhaWxsZS51d28uY2E6NDA3NAord2l0aCBpdCdzIGx3bCBwYWdlIGF0IGx3
bC5icmFpbGxlLnV3by5jYS9zcGVha3VwLmh0bWwuICBDb21lIGFuZCBqb2luCit1cywgaXQncyBm
dW4hCisKK0Fja25vd2xlZGdlbWVudHM6CisKK0kgYW0gcmVhbGx5IHZlcnkgbmV3IGF0IGtlcm5l
bCBoYWNraW5nIGFuZCBzY3JlZW4gcmV2aWV3IHBhY2thZ2UKK3dyaXRpbmcsIHNvIEkgaGF2ZSBk
ZXBlbmRlZCBoZWF2aWx5IG9uIG90aGVyIGZvbGtzIGtpbmRuZXNzIHRvIGhlbHAgbWUKK2EgbG9u
Zy4gIE5vIGRvdWJ0IEkgd2lsbCBjb250aW51ZSB0byBhYnVzZSB0aGVtIGZyZWVseSBhbmQgb3Ro
ZXJzCitiZWZvcmUgdGhpcyBpcyBhIHJlYWxseSBnb29kIHNwZWVjaCBzb2x1dGlvbiBmb3IgTGlu
dXguICAoT2ggV2VsbCEsCitzb21lYm9keSdzIGdvdCB0byBkbyBpdC4pCisKK1RoZW9kb3JlIFRz
J28uICBIZSBnYXZlIG1lIGEgZ29vZCBkaXNjdXNzaW9uIG9mIHVuaWNvZGUgYW5kIFVURiBhbmQK
K3RoZSBsaWtlLiAgSGUgZG9lc24ndCBldmVuIHJlbWVtYmVyIHdyaXRpbmcgbWUgYWJvdXQgaXQu
CisKK0FsYW4gQ294LiAgSGUgaGFzIGFuc3dlcmVkIG1hbnkgcXVlc3Rpb25zIGFib3V0IHNjaGVk
dWxpbmcgYW5kIHdhaXQKK3F1ZXVlcyBhbmQgdGltZXJzIGFsb25nIHdpdGggY29kZSBmcmFnbWVu
dHMgYW5kIHNvIG9uLiAgSSBqdXN0IHdpc2ggSQordW5kZXJzdG9vZCBpdCBhbGwgdG90YWxseS4g
IEhlIGhhcyBhbHNvIGhlbHBlZCBpbW1lbnNlbHkgaW4gbW92aW5nCit0aGlzIHBhY2thZ2UgdG93
YXJkIGluY2x1c2lvbiBpbiB0aGUgc3RhbmRhcmQga2VybmVsIHRyZWUuIChNYXliZSBuZXh0City
ZWxlYXNlISkKKworTWFydGluIE1hcmVzLiAgSGUgcG9pbnRlZCBtZSBpbiB0aGUgcmlnaHQgZGly
ZWN0aW9uIHRvIGZpZ3VyaW5nIG91dAordGhlIGNvbG91ciBhdHRyaWJ1dGVzIGFuZCBvdGhlciB1
c2VmdWwgdGlkYml0cy4KKworUGF1bCBNY0Rlcm1vdHQuICBIZSByZWFsbHkgaXMgdGhlIGNhdGFs
eXN0IGZvciBtZSB0byBhY3R1YWxseSBnZXQKK3RoaXMgYWxsIHdvcmtpbmcuICBCZXNpZGVzIEkg
bGlrZSBzZWVpbmcgaGltIGJvdW5jZSBhcm91bmQgYW5kIGdldCBhbGwKK2V4Y2l0ZWQgZXZlcnkg
dGltZSBJIGhhdmUgc29tZXRoaW5nIG5ldyB3b3JraW5nLgorCitKb2huIENvdmljaSwgSGUgd2Fz
IHRoZSBmaXJzdCBwZXJzb24gdG8gYWN0dWFsbHkgYXR0ZW1wdCB3cml0aW5nCithbm90aGVyIHN5
bnRoZXNpemVyIGRyaXZlciBmb3Igc3BlYWt1cC4gIEl0IHdhcyB0aGUgU3BlYWtvdXQgZHJpdmVy
IHNvCitpdCB3YXMgYWxzbyB0aGUgZmlyc3Qgc2VyaWFsIGRyaXZlci4KKworQnJpYW4gQm9yb3dz
a2ksIGhlIHdhcyB0aGUgZmlyc3QgcGVyc29uIHRvIGFjdHVhbGx5IHdyaXRlIGEgc3BlYWt1cAor
ZnVuY3Rpb24gb3RoZXIgdGhhbiBBbmR5IGFuZCBJLgorCitKaW0gRGFubGV5LCBoZSBoYXMgbW9y
ZSBvciBsZXNzIGJlY29tZSBteSBtYWluIG1hbiBpbiBoZWxwaW5nIHRlc3QKK2NvZGUsIGFkZCBu
ZXcgZmVhdHVyZXMsIGJvdW5jZSBpZGVhcyBvZmYgYW5kIGdlbmVyYWxseSBiZWNvbWUgYSBnb29k
CitmcmllbmQuCisKK01hdHQgQ2FtcGJlbGwsIGhlIGJhc2ljYWxseSByZXdyb3RlIHRoZSBkcml2
ZXJzIHRvIGJlIGFibGUgdG8gaW5jbHVkZQorYWxsIHN5bnRocyBpbiB0aGUga2VybmVsIGF0IHRo
ZSBzYW1lIHRpbWUuICBUaGUgZGlzdHJpYnV0aW9uCittYWludGFpbmVycyBhcHByZWNpYXRlIGhp
bSBhIGxvdCBhcyB3ZWxsLgorCitHZW5lIENvbGxpbnMsIGhlIHdhcyB2ZXJ5IGhlbHBmdWwgZGVi
dWdnaW5nIHRoZSBjdXJyZW50IHJlbGVhc2UgcHJpb3IKK3RvIGl0cyBwdWJsaWMgc2hvd2luZy4g
IEhlIGhhcyBhbHNvIHdvcmtlZCBoYXJkIGVkdWNhdGluZyBvdGhlcnMgb24KK3RoZSBsaXN0IGFu
ZCB3cml0aW5nIHRoZSBBTFNBIG1pbmkgaG93dG8uCisKK0kgd291bGQgYWxzbyBsaWtlIHRvIHJl
YWxseSB0aGFuayB0aGUgZm9sa3MgdGhhdCBoYW5kbGUgdGhlCitkaXN0cmlidXRpb24gcGFja2Fn
ZXMuICBJIGFuZCBtYW55IG90aGVyIHBlb3BsZSB3b3VsZCBub3QgZmluZCBhY2Nlc3MKK3RvIHNw
ZWFrdXAgbmVhcmx5IHNvIGNvbnZlbmllbnQgd2l0aG91dCB0aGVpciBlZmZvcnRzLiAgVGhleSBp
bmNsdWRlCitCaWxsIEFja2VyLCBUb20gTW9vcmUsIE1hdHQgQ2FtcGJlbGwsIEpvZSBOb3J0b24g
YW5kIEpvc2h1YSBMYW1iZXJ0LgorCitUaGVyZSBhcmUgcHJvYmFibHkgbWFueSBtb3JlIEkgYW0g
Zm9yZ2V0dGluZyByaWdodCBub3cuICBJIGd1ZXNzIEknbGwKK2p1c3QgaGF2ZSB0byBhZGQgeW91
IGFsbCBsYXRlci4KKworCitIYXBweSBIYWNraW5nIQorCisgIEtpcmsKKwpkaWZmIC0tZXhjbHVk
ZT0nKi5vcmlnJyAtLWV4Y2x1ZGU9JyoucGF0Y2gnIC11ck5wIGxpbnV4LTIuNi4yMC9Eb2N1bWVu
dGF0aW9uL3NwZWFrdXAvc3BrZ3VpZGUudHh0IGxpbnV4LTIuNi4yMC1zcGsvRG9jdW1lbnRhdGlv
bi9zcGVha3VwL3Nwa2d1aWRlLnR4dAotLS0gbGludXgtMi42LjIwL0RvY3VtZW50YXRpb24vc3Bl
YWt1cC9zcGtndWlkZS50eHQJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysr
IGxpbnV4LTIuNi4yMC1zcGsvRG9jdW1lbnRhdGlvbi9zcGVha3VwL3Nwa2d1aWRlLnR4dAkyMDA3
LTAyLTA0IDE2OjA5OjIxLjAwMDAwMDAwMCAtMDUwMApAQCAtMCwwICsxLDEyNzkgQEAKKworVGhl
IFNwZWFrdXAgVXNlcidzIEd1aWRlCitGb3IgU3BlYWt1cCAyLjAgYW5kIExhdGVyCitCeSBHZW5l
IENvbGxpbnMKK0xhc3QgbW9kaWZpZWQgb24gVHVlIE1hciAyOSAxMDo1NDoxOSAyMDA1CitEb2N1
bWVudCB2ZXJzaW9uIDEuMAorCitDb3B5cmlnaHQgKGMpIDIwMDUgIEdlbmUgQ29sbGlucworCitQ
ZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRo
aXMgZG9jdW1lbnQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlv
biBMaWNlbnNlLCBWZXJzaW9uIDEuMiBvcgorYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdpdGggbm8KK0ludmFyaWFudCBTZWN0aW9u
cywgbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCBubyBCYWNrLUNvdmVyIFRleHRzLiBBCitjb3B5
IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkICJHTlUg
RnJlZQorRG9jdW1lbnRhdGlvbiBMaWNlbnNlIi4KKworUHJlZmFjZQorCitUaGUgcHVycG9zZSBv
ZiB0aGlzIGRvY3VtZW50IGlzIHRvIGZhbWlsaWFyaXplIHVzZXJzIHdpdGggdGhlIHVzZXIKK2lu
dGVyZmFjZSB0byBTcGVha3VwLCBhIExpbnV4IFNjcmVlbiBSZWFkZXIuICBJZiB5b3UgbmVlZCBp
bnN0cnVjdGlvbnMKK2ZvciBpbnN0YWxsaW5nIG9yIG9idGFpbmluZyBTcGVha3VwLCB2aXNpdCB0
aGUgd2ViIHNpdGUgYXQKK2h0dHA6Ly9saW51eC1zcGVha3VwLm9yZy8uICBTcGVha3VwIGlzIGEg
c2V0IG9mIHBhdGNoZXMgdG8gdGhlIHN0YW5kYXJkCitMaW51eCBrZXJuZWwgc291cmNlIHRyZWUu
ICBJdCBjYW4gYmUgYnVpbHQgYXMgYSBzZXJpZXMgb2YgbW9kdWxlcywgb3IgYXMKK2EgcGFydCBv
ZiBhIG1vbm9saXRoaWMga2VybmVsLiAgVGhlc2UgZGV0YWlscyBhcmUgYmV5b25kIHRoZSBzY29w
ZSBvZgordGhpcyBtYW51YWwsIGJ1dCB0aGUgdXNlciBtYXkgbmVlZCB0byBiZSBhd2FyZSBvZiB0
aGUgbW9kdWxlCitjYXBhYmlsaXRpZXMsIGRlcGVuZGluZyBvbiBob3cgeW91ciBzeXN0ZW0gYWRt
aW5pc3RyYXRvciBoYXMgaW5zdGFsbGVkCitTcGVha3VwLiAgSWYgU3BlYWt1cCBpcyBidWlsdCBh
cyBhIHBhcnQgb2YgYSBtb25vbGl0aGljIGtlcm5lbCwgYW5kIHRoZQordXNlciBpcyB1c2luZyBh
IGhhcmR3YXJlIHN5bnRoZXNpemVyLCB0aGVuIFNwZWFrdXAgd2lsbCBiZSBhYmxlIHRvCitwcm92
aWRlIHNwZWVjaCBhY2Nlc3MgZnJvbSB0aGUgdGltZSB0aGUga2VybmVsIGlzIGxvYWRlZCwgdW50
aWwgdGhlIHRpbWUKK3RoZSBzeXN0ZW0gaXMgc2h1dGRvd24uICBUaGlzIG1lYW5zIHRoYXQgaWYg
eW91IGhhdmUgb2J0YWluZWQgTGludXgKK2luc3RhbGxhdGlvbiBtZWRpYSBmb3IgYSBkaXN0cmli
dXRpb24gd2hpY2ggaW5jbHVkZXMgU3BlYWt1cCBhcyBhIHBhcnQKK29mIGl0cyBrZXJuZWwsIHlv
dSB3aWxsIGJlIGFibGUsIGFzIGEgYmxpbmQgcGVyc29uLCB0byBpbnN0YWxsIExpbnV4Cit3aXRo
IHNwZWVjaCBhY2Nlc3MgdW5haWRlZCBieSBhIHNpZ2h0ZWQgcGVyc29uLiAgQWdhaW4sIHRoZXNl
IGRldGFpbHMKK2FyZSBiZXlvbmQgdGhlIHNjb3BlIG9mIHRoaXMgbWFudWFsLCBidXQgdGhlIHVz
ZXIgc2hvdWxkIGJlIGF3YXJlIG9mCit0aGVtLiAgU2VlIHRoZSB3ZWIgc2l0ZSBtZW50aW9uZWQg
YWJvdmUgZm9yIGZ1cnRoZXIgZGV0YWlscy4KKworMS4gIFN0YXJ0aW5nIFNwZWFrdXAKKworSWYg
eW91ciBzeXN0ZW0gYWRtaW5pc3RyYXRvciBoYXMgaW5zdGFsbGVkIFNwZWFrdXAgdG8gd29yayB3
aXRoIHlvdXIKK3NwZWNpZmljIHN5bnRoZXNpemVyIGJ5IGRlZmF1bHQsIHRoZW4gYWxsIHlvdSBu
ZWVkIHRvIGRvIHRvIHVzZSBTcGVha3VwCitpcyB0byBib290IHlvdXIgc3lzdGVtLCBhbmQgU3Bl
YWt1cCBzaG91bGQgY29tZSB1cCB0YWxraW5nLiAgVGhpcworYXNzdW1lcyBvZiBjb3Vyc2UgIHRo
YXQgeW91ciBzeW50aGVzaXplciBpcyBhIHN1cHBvcnRlZCBoYXJkd2FyZQorc3ludGhlc2l6ZXIs
IGFuZCB0aGF0IGl0IGlzIGVpdGhlciBpbnN0YWxsZWQgaW4gb3IgY29ubmVjdGVkIHRvIHlvdXIK
K3N5c3RlbSwgYW5kIGlzIGlmIG5lY2Vzc2FyeSBwb3dlcmVkIG9uLgorCitJdCBpcyBwb3NzaWJs
ZSwgaG93ZXZlciwgdGhhdCBTcGVha3VwIG1heSBoYXZlIGJlZW4gY29tcGlsZWQgaW50byB0aGUK
K2tlcm5lbCB3aXRoIG5vIGRlZmF1bHQgc3ludGhlc2l6ZXIuICBJdCBpcyBldmVuIHBvc3NpYmxl
IHRoYXQgeW91cgora2VybmVsIGhhcyBiZWVuIGNvbXBpbGVkIHdpdGggc3VwcG9ydCBmb3Igc29t
ZSBvZiB0aGUgc3VwcG9ydGVkCitzeW50aGVzaXplcnMgYW5kIG5vdCBvdGhlcnMuICBJZiB5b3Ug
ZmluZCB0aGF0IHRoaXMgaXMgdGhlIGNhc2UsIGFuZAoreW91ciBzeW50aGVzaXplciBpcyBzdXBw
b3J0ZWQgYnV0IG5vdCBhdmFpbGFibGUsIGNvbXBsYWluIHRvIHRoZSBwZXJzb24KK3dobyBjb21w
aWxlZCBhbmQgaW5zdGFsbGVkIHlvdXIga2VybmVsLiAgT3IgYmV0dGVyIHlldCwgZ28gdG8gdGhl
IHdlYgorc2l0ZSwgYW5kIGxlYXJuIGhvdyB0byBwYXRjaCBTcGVha3VwIGludG8geW91ciBvd24g
a2VybmVsIHNvdXJjZSwgYW5kCitidWlsZCBhbmQgaW5zdGFsbCB5b3VyIG93biBrZXJuZWwuCisK
K0lmIHlvdXIga2VybmVsIGhhcyBiZWVuIGNvbXBpbGVkIHdpdGggU3BlYWt1cCwgYW5kIGhhcyBu
byBkZWZhdWx0CitzeW50aGVzaXplciBzZXQsIG9yIHlvdSB3b3VsZCBsaWtlIHRvIHVzZSBhIGRp
ZmZlcmVudCBzeW50aGVzaXplciB0aGFuCit0aGUgZGVmYXVsdCBvbmUsIHRoZW4geW91IG1heSBp
c3N1ZSB0aGUgZm9sbG93aW5nIGNvbW1hbmQgYXQgdGhlIGJvb3QKK3Byb21wdCBvZiB5b3VyIGJv
b3QgbG9hZGVyLgorCitsaW51eCBzcGVha3VwX3N5bnRoPWx0bGsKKworVGhpcyBjb21tYW5kIHdv
dWxkIHRlbGwgU3BlYWt1cCB0byBsb29rIGZvciBhbmQgdXNlIGEgTGl0ZVRhbGsgb3IKK0RvdWJs
ZVRhbGsgTFQgYXQgYm9vdCB1cC4gIFlvdSBtYXkgcmVwbGFjZSB0aGUgbHRsayBzeW50aGVzaXpl
ciBrZXl3b3JkCit3aXRoIHRoZSBrZXl3b3JkIGZvciB3aGF0ZXZlciBzeW50aGVzaXplciB5b3Ug
d2lzaCB0byB1c2UuICBUaGUKK3NwZWFrdXBfc3ludGggcGFyYW1ldGVyIHdpbGwgYWNjZXB0IHRo
ZSBmb2xsb3dpbmcga2V5d29yZHMsIHByb3ZpZGVkCit0aGF0IHN1cHBvcnQgZm9yIHRoZSByZWxh
dGVkIHN5bnRoZXNpemVycyBoYXMgYmVlbiBidWlsdCBpbnRvIHRoZQora2VybmVsLgorCithY250
c2EgLS0gQWNjZW50IFNBCithY250cGMgLS0gQWNjZW50IFBDCithcG9sbyAtLSBBcG9sbworYXVk
cHRyIC0tIEF1ZGFwdGVyCitibnMgLS0gQnJhaWxsZSAnbiBTcGVhaworZGVjdGxrIC0tIERlY1Rh
bGsgRXhwcmVzcyAob2xkIGFuZCBuZXcsIGRiOSBzZXJpYWwgb25seSkKK2RlY2V4dCAtLSBEZWNU
YWxrIChvbGQpIEV4dGVybmFsCitkdGxrIC0tIERvdWJsZVRhbGsgUEMKK2tleXBjIC0tIEtleW5v
dGUgR29sZCBQQworbHRsayAtLSBEb3VibGVUYWxrIExULCBMaXRlVGFsaywgb3IgZXh0ZXJuYWwg
VHJpcGxldGFsayAoZGI5IHNlcmlhbCBvbmx5KQorc3Brb3V0IC0tIFNwZWFrIE91dAordHhwcnQg
LS0gVHJhbnNwb3J0CisKK05vdGU6IFNwZWFrdXAgZG9lcyAqIE5PVCAqIHN1cHBvcnQgdXNiIGNv
bm5lY3Rpb25zISAgU3BlYWt1cCBhbHNvIGRvZXMgKgorTk9UICogc3VwcG9ydCB0aGUgaW50ZXJu
YWwgVHJpcGxldGFsayEKKworU3BlYWt1cCBkb2VzIHN1cHBvcnQgdHdvIG90aGVyIHN5bnRoZXNp
emVycywgYnV0IGJlY2F1c2UgdGhleSB3b3JrIGluCitjb25qdW5jdGlvbiB3aXRoIG90aGVyIHNv
ZnR3YXJlLCB0aGV5IG11c3QgYmUgbG9hZGVkIGFzIG1vZHVsZXMgYWZ0ZXIKK3RoZWlyIHJlbGF0
ZWQgc29mdHdhcmUgaXMgbG9hZGVkLCBhbmQgc28gYXJlIG5vdCBhdmFpbGFibGUgYXQgYm9vdCB1
cC4gCitUaGVzZSBhcmUgYXMgZm9sbG93czoKKworZGVjcGMgLS0gRGVjVGFsayBQQyAobm90IGF2
YWlsYWJsZSBhdCBib290IHVwKQorc2Z0c3luIC0tIE9uZSBvZiBzZXZlcmFsIHNvZnR3YXJlIHN5
bnRoZXNpemVycyAobm90IGF2YWlsYWJsZSBhdCBib290IHVwKQorCitTZWUgdGhlIHNlY3Rpb25z
IG9uIGxvYWRpbmcgbW9kdWxlcyBhbmQgc29mdHdhcmUgc3ludGhlc2l6ZXJzIGxhdGVyIGluCit0
aGlzIG1hbnVhbCBmb3IgZnVydGhlciBkZXRhaWxzLiAgSXQgc2hvdWxkIGJlIG5vdGVkIGhlcmUg
dGhhdCB0aGUKK3NwZWFrdXBfc3ludGggYm9vdCBwYXJhbWV0ZXIgd2lsbCBoYXZlIG5vIGVmZmVj
dCBpZiBTcGVha3VwIGhhcyBiZWVuCitjb21waWxlZCBhcyBtb2R1bGVzLiAgSW4gb3JkZXIgZm9y
IFNwZWFrdXAgbW9kdWxlcyB0byBiZSBsb2FkZWQgZHVyaW5nCit0aGUgYm9vdCBwcm9jZXNzLCBz
dWNoIGFjdGlvbiBtdXN0IGJlIGNvbmZpZ3VyZWQgYnkgeW91ciBzeXN0ZW0KK2FkbWluaXN0cmF0
b3IuICBUaGlzIHdpbGwgbWVhbiB0aGF0IHlvdSB3aWxsIGhlYXIgc29tZSwgYnV0IG5vdCBhbGws
ICBvZgordGhlIGJvb3R1cCBtZXNzYWdlcy4KKworMi4gIEJhc2ljIG9wZXJhdGlvbgorCitPbmNl
IHlvdSBoYXZlIGJvb3RlZCB0aGUgc3lzdGVtLCBhbmQgaWYgbmVjZXNzYXJ5LCBoYXZlIHN1cHBs
aWVkIHRoZQorcHJvcGVyIGJvb3R1cCBwYXJhbWV0ZXIgZm9yIHlvdXIgc3ludGhlc2l6ZXIsIFNw
ZWFrdXAgd2lsbCBiZWdpbgordGFsa2luZyBhcyBzb29uIGFzIHRoZSBrZXJuZWwgaXMgbG9hZGVk
LiAgSW4gZmFjdCwgaXQgd2lsbCB0YWxrIGEgbG90ISAKK0l0IHdpbGwgc3BlYWsgYWxsIHRoZSBi
b290IHVwIG1lc3NhZ2VzIHRoYXQgdGhlIGtlcm5lbCBwcmludHMgb24gdGhlCitzY3JlZW4gZHVy
aW5nIHRoZSBib290IHByb2Nlc3MuICBUaGlzIGlzIGJlY2F1c2UgU3BlYWt1cCBpcyBub3QgYQor
c2VwYXJhdGUgc2NyZWVuIHJlYWRlciwgYnV0IGlzIGFjdHVhbGx5IGJ1aWx0IGludG8gdGhlIG9w
ZXJhdGluZworc3lzdGVtLiAgU2luY2UgYWxtb3N0IGFsbCBjb25zb2xlIGFwcGxpY2F0aW9ucyBt
dXN0IHByaW50IHRleHQgb24gdGhlCitzY3JlZW4gdXNpbmcgdGhlIGtlcm5lbCwgYW5kIG11c3Qg
Z2V0IHRoZWlyIGtleWJvYXJkIGlucHV0IHRocm91Z2ggdGhlCitrZXJuZWwsIHRoZXkgYXJlIGF1
dG9tYXRpY2FsbHkgaGFuZGxlZCBwcm9wZXJseSBieSBTcGVha3VwLiAgVGhlcmUgYXJlIGEKK2Zl
dyBleGNlcHRpb25zLCBidXQgd2UnbGwgY29tZSB0byB0aG9zZSBsYXRlci4KKworTm90ZTogIElu
IHRoaXMgZ3VpZGUgSSB3aWxsIHJlZmVyIHRvIHRoZSBudW1lcmljIGtleXBhZCBhcyB0aGUga2V5
cGFkLiAKK1RoaXMgaXMgZG9uZSBiZWNhdXNlIHRoZSBzcGVha3VwbWFwLm1hcCBmaWxlIHJlZmVy
cmVkIHRvIGxhdGVyIGluIHRoaXMKK21hbnVhbCB1c2VzIHRoZSB0ZXJtIGtleXBhZCBpbnN0ZWFk
IG9mIG51bWVyaWMga2V5cGFkLiAgQWxzbyBJJ20gbGF6eQorYW5kIHdvdWxkIHJhdGhlciBvbmx5
IHR5cGUgb25lIHdvcmQuICBTbyBrZXlwYWQgaXQgaXMuICBHb3QgaXQ/ICBHb29kLgorCitNb3N0
IG9mIHRoZSBTcGVha3VwIHJldmlldyBrZXlzIGFyZSBsb2NhdGVkIG9uIHRoZSBrZXlwYWQgYXQg
dGhlIGZhcgorcmlnaHQgb2YgdGhlIGtleWJvYXJkLiAgVGhlIG51bWxvY2sga2V5IHNob3VsZCBi
ZSBvZmYsIGluIG9yZGVyIGZvciB0aGVzZQordG8gd29yay4gIElmIHlvdSB0b2dnbGUgdGhlIG51
bWxvY2sgb24sIHRoZSBrZXlwYWQgd2lsbCBwcm9kdWNlIG51bWJlcnMsCit3aGljaCBpcyBleGFj
dGx5IHdoYXQgeW91IHdhbnQgZm9yIHNwcmVhZHNoZWV0cyBhbmQgc3VjaC4gIEZvciB0aGUKK3B1
cnBvc2VzIG9mIHRoaXMgZ3VpZGUsIHlvdSBzaG91bGQgaGF2ZSB0aGUgbnVtbG9jayB0dXJuZWQg
b2ZmLCB3aGljaCBpcworaXRzIGRlZmF1bHQgc3RhdGUgYXQgYm9vdHVwLgorCitZb3UgcHJvYmFi
bHkgd29uJ3Qgd2FudCB0byBsaXN0ZW4gdG8gYWxsIHRoZSBib290dXAgbWVzc2FnZXMgZXZlcnkg
dGltZQoreW91IHN0YXJ0IHlvdXIgc3lzdGVtLCB0aG91Z2ggaXQncyBhIGdvb2QgaWRlYSB0byBs
aXN0ZW4gdG8gdGhlbSBhdAorbGVhc3Qgb25jZSwganVzdCBzbyB5b3UnbGwga25vdyB3aGF0IGtp
bmQgb2YgaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlIHRvCit5b3UgZHVyaW5nIHRoZSBib290IHBy
b2Nlc3MuICBZb3UgY2FuIGFsd2F5cyByZXZpZXcgdGhlc2UgbWVzc2FnZXMgYWZ0ZXIKK2Jvb3R1
cCB3aXRoIHRoZSBjb21tYW5kOgorCitkbWVzZyB8IG1vcmUKKworSW4gb3JkZXIgdG8gc3BlZWQg
dGhlIGJvb3QgcHJvY2VzcywgYW5kIHRvIHNpbGVuY2UgdGhlIHNwZWFraW5nIG9mIHRoZQorYm9v
dHVwIG1lc3NhZ2VzLCBqdXN0IHByZXNzIHRoZSBrZXlwYWQgZW50ZXIga2V5LiAgVGhpcyBrZXkg
aXMgbG9jYXRlZAoraW4gdGhlIGJvdHRvbSByaWdodCBjb3JuZXIgb2YgdGhlIGtleXBhZC4gIFNw
ZWFrdXAgd2lsbCBzaHV0IHVwIGFuZCBzdGF5Cit0aGF0IHdheSwgdW50aWwgeW91IHByZXNzIGFu
b3RoZXIga2V5LgorCitZb3UgY2FuIGNoZWNrIHRvIHNlZSBpZiB0aGUgYm9vdCBwcm9jZXNzIGhh
cyBjb21wbGV0ZWQgYnkgcHJlc3NpbmcgdGhlIDgKK2tleSBvbiB0aGUga2V5cGFkLCB3aGljaCBy
ZWFkcyB0aGUgY3VycmVudCBsaW5lLiAgVGhpcyBhbHNvIGhhcyB0aGUKK2VmZmVjdCBvZiBzdGFy
dGluZyBTcGVha3VwIHRhbGtpbmcgYWdhaW4sIHNvIHlvdSBjYW4gcHJlc3Mga2V5cGFkIGVudGVy
Cit0byBzaWxlbmNlIGl0IGFnYWluIGlmIHRoZSBib290IHByb2Nlc3MgaGFzIG5vdCBjb21wbGV0
ZWQuICAKKworV2hlbiB0aGUgYm9vdCBwcm9jZXNzIGlzIGNvbXBsZXRlLCB5b3Ugd2lsbCBhcnJp
dmUgYXQgYSAibG9naW4iIHByb21wdC4KK0F0IHRoaXMgcG9pbnQsIHlvdSdsbCBuZWVkIHRvIHR5
cGUgaW4geW91ciB1c2VyIGlkIGFuZCBwYXNzd29yZCwgYXMKK3Byb3ZpZGVkIGJ5IHlvdXIgc3lz
dGVtIGFkbWluaXN0cmF0b3IuICBZb3Ugd2lsbCBoZWFyIFNwZWFrdXAgc3BlYWsgdGhlCitsZXR0
ZXJzIG9mIHlvdXIgdXNlciBpZCBhcyB5b3UgdHlwZSBpdCwgYnV0IG5vdCB0aGUgcGFzc3dvcmQu
ICBUaGlzIGlzCitiZWNhdXNlIHRoZSBwYXNzd29yZCBpcyBub3QgZGlzcGxheWVkIG9uIHRoZSBz
Y3JlZW4gZm9yIHNlY3VyaXR5CityZWFzb25zLiAgVGhpcyBoYXMgbm90aGluZyB0byBkbyB3aXRo
IFNwZWFrdXAsIGl0J3MgYSBMaW51eCBzZWN1cml0eQorZmVhdHVyZS4KKworT25jZSB5b3UndmUg
bG9nZ2VkIGluLCB5b3UgY2FuIHJ1biBhbnkgTGludXggY29tbWFuZCBvciBwcm9ncmFtIHdoaWNo
IGlzCithbGxvd2VkIGJ5IHlvdXIgdXNlciBpZC4gIE5vcm1hbCB1c2VycyB3aWxsIG5vdCBiZSBh
YmxlIHRvIHJ1biBwcm9ncmFtcword2hpY2ggcmVxdWlyZSByb290IHByaXZpbGVnZXMuCisKK1do
ZW4geW91IGFyZSBydW5uaW5nIGEgcHJvZ3JhbSBvciBjb21tYW5kLCBTcGVha3VwIHdpbGwgYXV0
b21hdGljYWxseQorc3BlYWsgbmV3IHRleHQgYXMgaXQgYXJyaXZlcyBvbiB0aGUgc2NyZWVuLiAg
WW91IGNhbiBhdCBhbnkgdGltZSBzaWxlbmNlCit0aGUgc3BlZWNoIHdpdGgga2V5cGFkIGVudGVy
LCBvciB1c2UgYW55IG9mIHRoZSBTcGVha3VwIHJldmlldyBrZXlzLiAKKworSGVyZSBhcmUgc29t
ZSBiYXNpYyBTcGVha3VwIHJldmlldyBrZXlzLCBhbmQgYSBzaG9ydCBkZXNjcmlwdGlvbiBvZiB3
aGF0Cit0aGV5IGRvLgorCitrZXlwYWQgMSAtLSByZWFkIHByZXZpb3VzIGNoYXJhY3Rlcgora2V5
cGFkIDIgLS0gcmVhZCBjdXJyZW50IGNoYXJhY3RlciAocHJlc3Npbmcga2V5cGFkIDIgdHdpY2Ug
cmFwaWRseSB3aWxsIHNwZWFrCisJdGhlIGN1cnJlbnQgY2hhcmFjdGVyIHBob25ldGljYWxseSkK
K2tleXBhZCAzIC0tIHJlYWQgbmV4dCBjaGFyYWN0ZXIKK2tleXBhZCA0IC0tIHJlYWQgcHJldmlv
dXMgd29yZAora2V5cGFkIDUgLS0gcmVhZCBjdXJyZW50IHdvcmQgKHByZXNzIHR3aWNlIHJhcGlk
bHkgdG8gc3BlbGwgdGhlIGN1cnJlbnQgd29yZCkKK2tleXBhZCA2IC0tIHJlYWQgbmV4dCB3b3Jk
CitrZXlwYWQgNyAtLSByZWFkIHByZXZpb3VzIGxpbmUKK2tleXBhZCA4IC0tIHJlYWQgY3VycmVu
dCBsaW5lIChwcmVzcyB0d2ljZSByYXBpZGx5IHRvIGhlYXIgaG93IG11Y2ggdGhlCisJdGV4dCBv
biB0aGUgY3VycmVudCBsaW5lIGlzIGluZGVudGVkKQora2V5cGFkIDkgLS0gcmVhZCBuZXh0IGxp
bmUKK2tleXBhZCBwZXJpb2QgLS0gc3BlYWsgY3VycmVudCBjdXJzb3IgcG9zaXRpb24gYW5kIGFu
bm91bmNlIGN1cnJlbnQKKwl2aXJ0dWFsIGNvbnNvbGUKKworSXQncyBhbHNvIHdvcnRoIG5vdGlu
ZyB0aGF0IHRoZSBpbnNlcnQga2V5IG9uIHRoZSBrZXlwYWQgaXMgbWFwcGVkCithcyB0aGUgc3Bl
YWt1cCBrZXkuICBJbnN0ZWFkIG9mIHByZXNzaW5nIGFuZCByZWxlYXNpbmcgdGhpcyBrZXksIGFz
IHlvdQorZG8gdW5kZXIgRE9TIG9yIFdpbmRvd3MsIHlvdSBob2xkIGl0IGxpa2UgYSBzaGlmdCBr
ZXksIGFuZCBwcmVzcyBvdGhlcgora2V5cyBpbiBjb21iaW5hdGlvbiB3aXRoIGl0LiAgRm9yIGV4
YW1wbGUsIHJlcGVhdGVkbHkgaG9sZGluZyBrZXlwYWQKK2luc2VydCwgZnJvbSBub3cgb24gY2Fs
bGVkIHNwZWFrdXAsIGFuZCBrZXlwYWQgZW50ZXIgd2lsbCB0b2dnbGUgdGhlCitzcGVha2luZyBv
ZiBuZXcgdGV4dCBvbiB0aGUgc2NyZWVuIG9uIGFuZCBvZmYuICBUaGlzIGlzIG5vdCB0aGUgc2Ft
ZSBhcworanVzdCBwcmVzc2luZyBrZXlwYWQgZW50ZXIgYnkgaXRzZWxmLCB3aGljaCBqdXN0IHNp
bGVuY2VzIHRoZSBzcGVlY2gKK3VudGlsIHlvdSBoaXQgYW5vdGhlciBrZXkuICBXaGVuIHlvdSBo
aXQgc3BlYWt1cCBwbHVzIGtleXBhZCBlbnRlciwKK1NwZWFrdXAgd2lsbCBzYXksICJZb3UgdHVy
bmVkIG1lIG9mZi4iLCBvciAiSGV5LCB0aGF0J3MgYmV0dGVyLiIgIFdoZW4KK1NwZWFrdXAgaXMg
dHVybmVkIG9mZiwgbm8gbmV3IHRleHQgb24gdGhlIHNjcmVlbiB3aWxsIGJlIHNwb2tlbi4gIFlv
dQorY2FuIHN0aWxsIHVzZSB0aGUgcmVhZGluZyBjb250cm9scyB0byByZXZpZXcgdGhlIHNjcmVl
biBob3dldmVyLgorCiszLiAgVXNpbmcgdGhlIFNwZWFrdXAgSGVscCBTeXN0ZW0KKworU3BlYWt1
cCBoYXMgYSBoZWxwIHN5c3RlbSwgd2hpY2ggaXMgY29tcGlsZWQgYXMgYSBtb2R1bGUuICBJdCBp
cyBsb2FkZWQKK2F1dG9tYXRpY2FsbHkgd2hlbmV2ZXIgdGhlIFNwZWFrdXAgaGVscCBzeXN0ZW0g
aXMgaW52b2tlZCBmb3IgdGhlIGZpcnN0Cit0aW1lLCBhbmQgcmVtYWlucyBsb2FkZWQgYWZ0ZXIg
dGhhdCwgdW50aWwgc3BlYWt1cCBpcyB1bmxvYWRlZC4gIE5vdGUKK3RoYXQgaWYgc3BlYWt1cCB3
YXMgY29tcGlsZWQgaW50byBhIG1vbm9saXRoaWMga2VybmVsIG9uIHlvdXIgc3lzdGVtLAoreW91
IHdpbGwgbm90IGJlIGFibGUgdG8gdW5sb2FkIFNwZWFrdXAgZnJvbSB5b3VyIGtlcm5lbC4gIElm
IHlvdSB0cnkgdG8KK3VzZSB0aGUgaGVscCBzeXN0ZW0sIGFuZCBmaW5kIHRoYXQgaXQgaXMgdW5h
dmFpbGFibGUsIHRoZW4geW91ciBzeXN0ZW0KK2FkbWluaXN0cmF0b3IgaGFzIG5vdCBpbnN0YWxs
ZWQgdGhlIFNwZWFrdXAgaGVscCBtb2R1bGUsIHdoaWNoIGlzIGNhbGxlZAorc3BlYWt1cF9oZWxw
LiAgQ29tcGxhaW4gdG8geW91ciBzeXN0ZW0gYWRtaW5pc3RyYXRvciBhYm91dCB0aGlzLgorCitJ
biBvcmRlciB0byBlbnRlciB0aGUgU3BlYWt1cCBoZWxwIHN5c3RlbSwgcHJlc3MgYW5kIGhvbGQg
dGhlIHNwZWFrdXAKK2tleSAocmVtZW1iZXIgdGhhdCB0aGlzIGlzIHRoZSBrZXlwYWQgaW5zZXJ0
IGtleSksIGFuZCBwcmVzcyB0aGUgZjEga2V5LgorWW91IHdpbGwgaGVhciB0aGUgbWVzc2FnZToK
KworIlByZXNzIHNwYWNlIHRvIGxlYXZlIGhlbHAsIGN1cnNvciB1cCBvciBkb3duIHRvIHNjcm9s
bCwgb3IgYSBsZXR0ZXIgdG8KK2dvIHRvIGNvbW1hbmRzIGluIGxpc3QuIgorCitXaGVuIHlvdSBw
cmVzcyB0aGUgc3BhY2ViYXIgdG8gbGVhdmUgdGhlIGhlbHAgc3lzdGVtLCB5b3Ugd2lsbCBoZWFy
OgorCisiTGVhdmluZyBoZWxwLiIKKworV2hpbGUgeW91IGFyZSBpbiB0aGUgU3BlYWt1cCBoZWxw
IHN5c3RlbSwgeW91IGNhbiBzY3JvbGwgdXAgb3IgZG93bgordGhyb3VnaCB0aGUgbGlzdCBvZiBh
dmFpbGFibGUgY29tbWFuZHMgdXNpbmcgdGhlIGN1cnNvciBrZXlzLiAgVGhlIGxpc3QKK29mIGNv
bW1hbmRzIGlzIGFycmFuZ2VkIGluIGFscGhhYmV0aWNhbCBvcmRlci4gIElmIHlvdSB3aXNoIHRv
IGp1bXAgdG8KK2NvbW1hbmRzIGluIGEgc3BlY2lmaWMgcGFydCBvZiB0aGUgYWxwaGFiZXQsIHlv
dSBtYXkgcHJlc3MgdGhlIGxldHRlciBvZgordGhlIGFscGhhYmV0IHlvdSB3aXNoIHRvIGp1bXAg
dG8uCisKK1lvdSBjYW4gYWxzbyBqdXN0IGV4cGxvcmUgYnkgdHlwaW5nIGtleWJvYXJkIGtleXMu
ICBQcmVzc2luZyBrZXlzIHdpbGwKK2NhdXNlIFNwZWFrdXAgdG8gc3BlYWsgdGhlIGNvbW1hbmQg
YXNzb2NpYXRlZCB3aXRoIHRoYXQga2V5LiAgRm9yCitleGFtcGxlLCBpZiB5b3UgcHJlc3MgdGhl
IGtleXBhZCA4IGtleSwgeW91IHdpbGwgaGVhcjoKKworIktleXBhZCA4IGlzIGxpbmUsIHNheSBj
dXJyZW50LiIKKworWW91J2xsIG5vdGljZSB0aGF0IHNvbWUgY29tbWFuZHMgZG8gbm90IGhhdmUg
a2V5cyBhc3NpZ25lZCB0byB0aGVtLiAKK1RoaXMgaXMgYmVjYXVzZSB0aGV5IGFyZSB2ZXJ5IGlu
ZnJlcXVlbnRseSB1c2VkIGNvbW1hbmRzLCBhbmQgYXJlIGFsc28KK2FjY2Vzc2libGUgdGhyb3Vn
aCB0aGUgcHJvYyBzeXN0ZW0uICBXZSdsbCBkaXNjdXNzIHRoZSBwcm9jIHN5c3RlbSBsYXRlcgor
aW4gdGhpcyBtYW51YWwuCisKK1lvdSdsbCBhbHNvIG5vdGljZSB0aGF0IHNvbWUgY29tbWFuZHMg
aGF2ZSB0d28ga2V5cyBhc3NpZ25lZCB0byB0aGVtLiAKK1RoaXMgaXMgYmVjYXVzZSBTcGVha3Vw
IGhhcyBhIGJ1aWx0IGluIHNldCBvZiBhbHRlcm5hdGl2ZSBrZXkgYmluZGluZ3MKK2ZvciBsYXB0
b3AgdXNlcnMuICBUaGUgYWx0ZXJuYXRlIHNwZWFrdXAga2V5IGlzIHRoZSBjYXBzIGxvY2sga2V5
LiAgWW91CitjYW4gcHJlc3MgYW5kIGhvbGQgdGhlIGNhcHMgbG9jayBrZXksIHdoaWxlIHByZXNz
aW5nIGFuIGFsdGVybmF0ZQorc3BlYWt1cCBjb21tYW5kIGtleSB0byBhY3RpdmF0ZSB0aGUgY29t
bWFuZC4gIE9uIG1vc3QgbGFwdG9wcywgdGhlCitudW1lcmljIGtleXBhZCBpcyBkZWZpbmVkIGFz
IHRoZSBrZXlzIGluIHRoZSBqIGsgbCBhcmVhIG9mIHRoZSBrZXlib2FyZC4KKworVGhlcmUgaXMg
dXN1YWxseSBhIGZ1bmN0aW9uIGtleSB3aGljaCB0dXJucyB0aGlzIGtleXBhZCBmdW5jdGlvbiBv
biBhbmQKK29mZiwgYW5kIHNvbWUgb3RoZXIga2V5IHdoaWNoIGNvbnRyb2xzIHRoZSBudW1sb2Nr
IHN0YXRlLiAgVG9nZ2xpbmcgdGhlCitrZXlwYWQgZnVuY3Rpb25hbGl0eSBvbiBhbmQgb2ZmIGNh
biBiZWNvbWUgYSByb3lhbCBwYWluLiAgU28sIFNwZWFrdXAKK2dpdmVzIHlvdSBhIHNpbXBsZSB3
YXkgdG8gZ2V0IGF0IGFuIGFsdGVybmF0aXZlIHNldCBvZiBrZXkgbWFwcGluZ3MgZm9yCit5b3Vy
IGxhcHRvcC4gIFRoZXNlIGFyZSBhbHNvIGF2YWlsYWJsZSBieSBkZWZhdWx0IG9uIGRlc2t0b3Ag
c3lzdGVtcywKK2JlY2F1c2UgU3BlYWt1cCBkb2VzIG5vdCBrbm93IHdoZXRoZXIgaXQgaXMgcnVu
bmluZyBvbiBhIGRlc2t0b3Agb3IKK2xhcHRvcC4gIFNvIHlvdSBtYXkgY2hvb3NlIHdoaWNoIHNl
dCBvZiBTcGVha3VwIGtleXMgdG8gdXNlLiAgU29tZQorc3lzdGVtIGFkbWluaXN0cmF0b3JzIG1h
eSBoYXZlIGNob3NlbiB0byBjb21waWxlIFNwZWFrdXAgZm9yIGEgZGVza3RvcAorc3lzdGVtIHdp
dGhvdXQgdGhpcyBzZXQgb2YgYWx0ZXJuYXRlIGtleSBiaW5kaW5ncywgYnV0IHRoZXNlIGRldGFp
bHMgYXJlCitiZXlvbmQgdGhlIHNjb3BlIG9mIHRoaXMgbWFudWFsLiAgVG8gdXNlIHRoZSBjYXBz
IGxvY2sgZm9yIGl0cyBub3JtYWwKK3B1cnBvc2UsIGhvbGQgdGhlIHNoaWZ0IGtleSB3aGlsZSB0
b2dnbGluZyB0aGUgY2FwcyBsb2NrIG9uIGFuZCBvZmYuICBXZQorc2hvdWxkIG5vdGUgaGVyZSwg
dGhhdCBob2xkaW5nIHRoZSBjYXBzIGxvY2sga2V5IGFuZCBwcmVzc2luZyB0aGUgeiBrZXkKK3dp
bGwgdG9nZ2xlIHRoZSBhbHRlcm5hdGUgaiBrIGwga2V5cGFkIG9uIGFuZCBvZmYuCisKKzQuICBL
ZXlzIGFuZCBUaGVpciBBc3NpZ25lZCBDb21tYW5kcworCitJbiB0aGlzIHNlY3Rpb24sIHdlJ2xs
IGdvIHRocm91Z2ggYSBsaXN0IG9mIGFsbCB0aGUgc3BlYWt1cCBrZXlzIGFuZAorY29tbWFuZHMu
ICBZb3UgY2FuIGFsc28gZ2V0IGEgbGlzdCBvZiBjb21tYW5kcyBhbmQgYXNzaWduZWQga2V5cyBm
cm9tCit0aGUgaGVscCBzeXN0ZW0uCisKK1RoZSBmb2xsb3dpbmcgbGlzdCB3YXMgdGFrZW4gZnJv
bSB0aGUgc3BlYWt1cG1hcC5tYXAgZmlsZS4gIEtleQorYXNzaWdubWVudHMgYXJlIG9uIHRoZSBs
ZWZ0IG9mIHRoZSBlcXVhbCBzaWduLCBhbmQgdGhlIGFzc29jaWF0ZWQKK1NwZWFrdXAgY29tbWFu
ZHMgYXJlIG9uIHRoZSByaWdodC4gIFRoZSBkZXNpZ25hdGlvbiAic3BrIiBtZWFucyB0byBwcmVz
cworYW5kIGhvbGQgdGhlIHNwZWFrdXAga2V5LCBhLmsuYS4ga2V5cGFkIGluc2VydCwgYS5rLmEu
IGNhcHMgbG9jaywgd2hpbGUKK3ByZXNzaW5nIHRoZSBvdGhlciBzcGVjaWZpZWQga2V5LgorCitz
cGsga2V5X2Y5ID0gcHVuY19sZXZlbF9kZWMKK3NwayBrZXlfZjEwID0gcHVuY19sZXZlbF9pbmMK
K3NwayBrZXlfZjExID0gcmVhZGluZ19wdW5jX2RlYworc3BrIGtleV9mMTIgPSByZWFkaW5nX3B1
bmNfaW5jCitzcGsga2V5XzEgPSB2b2xfZGVjCitzcGsga2V5XzIgPSAgdm9sX2luYworc3BrIGtl
eV8zID0gcGl0Y2hfZGVjCitzcGsga2V5XzQgPSBwaXRjaF9pbmMKK3NwayBrZXlfNSA9IHJhdGVf
ZGVjCitzcGsga2V5XzYgPSByYXRlX2luYwora2V5X2twYXN0ZXJpc2sgPSB0b2dnbGVfY3Vyc29y
aW5nCitzcGsga2V5X2twYXN0ZXJpc2sgPSBzcGVha3VwX2dvdG8KK3NwayBrZXlfZjEgPSBzcGVh
a3VwX2hlbHAKK3NwayBrZXlfZjIgPSBzZXRfd2luCitzcGsga2V5X2YzID0gY2xlYXJfd2luCitz
cGsga2V5X2Y0ID0gZW5hYmxlX3dpbgorc3BrIGtleV9mNSA9IGVkaXRfc29tZQorc3BrIGtleV9m
NiA9IGVkaXRfbW9zdAorc3BrIGtleV9mNyA9IGVkaXRfZGVsaW0KK3NwayBrZXlfZjggPSBlZGl0
X3JlcGVhdAorc2hpZnQgc3BrIGtleV9mOSA9IGVkaXRfZXhudW0KKyBrZXlfa3A3ID0gc2F5X3By
ZXZfbGluZQorc3BrIGtleV9rcDcgPSBsZWZ0X2VkZ2UKKyBrZXlfa3A4ID0gc2F5X2xpbmUKK2Rv
dWJsZSAga2V5X2twOCA9IHNheV9saW5lX2luZGVudAorc3BrIGtleV9rcDggPSBzYXlfZnJvbV90
b3AKKyBrZXlfa3A5ID0gc2F5X25leHRfbGluZQorc3BrICBrZXlfa3A5ID0gdG9wX2VkZ2UKKyBr
ZXlfa3BtaW51cyA9IHNwZWFrdXBfcGFya2VkCitzcGsga2V5X2twbWludXMgPSBzYXlfY2hhcl9u
dW0KKyBrZXlfa3A0ID0gc2F5X3ByZXZfd29yZAorc3BrIGtleV9rcDQgPSBzYXlfZnJvbV9sZWZ0
Cisga2V5X2twNSA9IHNheV93b3JkCitkb3VibGUga2V5X2twNSA9IHNwZWxsX3dvcmQKK3NwayBr
ZXlfa3A1ID0gc3BlbGxfcGhvbmV0aWMKKyBrZXlfa3A2ID0gc2F5X25leHRfd29yZAorc3BrIGtl
eV9rcDYgPSBzYXlfdG9fcmlnaHQKKyBrZXlfa3BwbHVzID0gc2F5X3NjcmVlbgorc3BrIGtleV9r
cHBsdXMgPSBzYXlfd2luCisga2V5X2twMSA9IHNheV9wcmV2X2NoYXIgCitzcGsga2V5X2twMSA9
IHJpZ2h0X2VkZ2UKKyBrZXlfa3AyID0gc2F5X2NoYXIKK3NwayBrZXlfa3AyID0gc2F5X3RvX2Jv
dHRvbQorZG91YmxlIGtleV9rcDIgPSBzYXlfcGhvbmV0aWNfY2hhcgorIGtleV9rcDMgPSBzYXlf
bmV4dF9jaGFyICAKK3NwayAga2V5X2twMyA9IGJvdHRvbV9lZGdlCisga2V5X2twMCA9IHNwa19r
ZXkKKyBrZXlfa3Bkb3QgPSBzYXlfcG9zaXRpb24KK3NwayBrZXlfa3Bkb3QgPSBzYXlfYXR0cmli
dXRlcwora2V5X2twZW50ZXIgPSBzcGVha3VwX3F1aWV0CitzcGsga2V5X2twZW50ZXIgPSBzcGVh
a3VwX29mZgora2V5X3N5c3JxID0gc3BlZWNoX2tpbGwKKyBrZXlfa3BzbGFzaCA9IHNwZWFrdXBf
Y3V0CitzcGsga2V5X2twc2xhc2ggPSBzcGVha3VwX3Bhc3RlCitzcGsga2V5X3BhZ2V1cCA9IHNh
eV9maXJzdF9jaGFyCitzcGsga2V5X3BhZ2Vkb3duID0gc2F5X2xhc3RfY2hhcgora2V5X2NhcHNs
b2NrID0gc3BrX2tleQorIHNwayBrZXlfeiA9IHNwa19sb2NrCitrZXlfbGVmdG1ldGEgPSBzcGtf
a2V5CitjdHJsIHNwayBrZXlfMCA9IHNwZWFrdXBfZ290bworc3BrIGtleV91ID0gc2F5X3ByZXZf
bGluZQorc3BrIGtleV9pID0gc2F5X2xpbmUKK2RvdWJsZSBzcGsga2V5X2kgPSBzYXlfbGluZV9p
bmRlbnQKK3NwayBrZXlfbyA9IHNheV9uZXh0X2xpbmUKK3NwayBrZXlfbWludXMgPSBzcGVha3Vw
X3BhcmtlZAorc2hpZnQgc3BrIGtleV9taW51cyA9IHNheV9jaGFyX251bQorc3BrIGtleV9qID0g
c2F5X3ByZXZfd29yZAorc3BrIGtleV9rID0gc2F5X3dvcmQKK2RvdWJsZSBzcGsga2V5X2sgPSBz
cGVsbF93b3JkCitzcGsga2V5X2wgPSBzYXlfbmV4dF93b3JkCitzcGsga2V5X20gPSBzYXlfcHJl
dl9jaGFyCitzcGsga2V5X2NvbW1hID0gc2F5X2NoYXIKK2RvdWJsZSBzcGsga2V5X2NvbW1hID0g
c2F5X3Bob25ldGljX2NoYXIKK3NwayBrZXlfZG90ID0gc2F5X25leHRfY2hhcgorc3BrIGtleV9u
ID0gc2F5X3Bvc2l0aW9uCisgY3RybCBzcGsga2V5X20gPSBsZWZ0X2VkZ2UKKyBjdHJsIHNwayBr
ZXlfeSA9IHRvcF9lZGdlCisgY3RybCBzcGsga2V5X2RvdCA9IHJpZ2h0X2VkZ2UKK2N0cmwgc3Br
IGtleV9wID0gYm90dG9tX2VkZ2UKK3NwayBrZXlfYXBvc3Ryb3BoZSA9IHNheV9zY3JlZW4KK3Nw
ayBrZXlfaCA9IHNheV9mcm9tX2xlZnQKK3NwayBrZXlfeSA9IHNheV9mcm9tX3RvcAorc3BrIGtl
eV9zZW1pY29sb24gPSBzYXlfdG9fcmlnaHQKK3NwayBrZXlfcCA9IHNheV90b19ib3R0b20KK3Nw
ayBrZXlfc2xhc2ggPSBzYXlfYXR0cmlidXRlcworIHNwayBrZXlfZW50ZXIgPSBzcGVha3VwX3F1
aWV0CisgY3RybCAgc3BrIGtleV9lbnRlciA9IHNwZWFrdXBfb2ZmCisgc3BrIGtleV85ID0gc3Bl
YWt1cF9jdXQKK3NwayBrZXlfOCA9IHNwZWFrdXBfcGFzdGUKK3NoaWZ0IHNwayBrZXlfbSA9IHNh
eV9maXJzdF9jaGFyCisgY3RybCBzcGsga2V5X3NlbWljb2xvbiA9IHNheV9sYXN0X2NoYXIKKwor
NS4gIFRoZSBTcGVha3VwIFByb2MgU3lzdGVtCisKK1RoZSBTcGVha3VwIHNjcmVlbiByZWFkZXIg
YWxzbyBjcmVhdGVzIGEgc3BlYWt1cCBzdWJkaXJlY3RvcnkgYXMgYSBwYXJ0CitvZiB0aGUgcHJv
YyBzeXN0ZW0uICBZb3UgY2FuIHNlZSB0aGVzZSBlbnRyaWVzIGJ5IHR5cGluZyB0aGUgY29tbWFu
ZDoKKworbHMgLTEgL3Byb2Mvc3BlYWt1cC8qCisKK0lmIHlvdSBpc3N1ZSB0aGUgYWJvdmUgbHMg
Y29tbWFuZCwgeW91IHdpbGwgZ2V0IGJhY2sgc29tZXRoaW5nIGxpa2UKK3RoaXM6CisKKy9wcm9j
L3NwZWFrdXAvYXR0cmliX2JsZWVwCisvcHJvYy9zcGVha3VwL2JlbGxfcG9zCisvcHJvYy9zcGVh
a3VwL2JsZWVwX3RpbWUKKy9wcm9jL3NwZWFrdXAvYmxlZXBzCisvcHJvYy9zcGVha3VwL2NhcHNf
c3RhcnQKKy9wcm9jL3NwZWFrdXAvY2Fwc19zdG9wCisvcHJvYy9zcGVha3VwL2NoYXJhY3RlcnMK
Ky9wcm9jL3NwZWFrdXAvY3Vyc29yX3RpbWUKKy9wcm9jL3NwZWFrdXAvZGVsYXlfdGltZQorL3By
b2Mvc3BlYWt1cC9kZWxpbWl0ZXJzCisvcHJvYy9zcGVha3VwL2V4X251bQorL3Byb2Mvc3BlYWt1
cC9mcmVxCisvcHJvYy9zcGVha3VwL2Z1bGxfdGltZQorL3Byb2Mvc3BlYWt1cC9qaWZmeV9kZWx0
YQorL3Byb2Mvc3BlYWt1cC9rZXlfZWNobworL3Byb2Mvc3BlYWt1cC9rZXltYXAKKy9wcm9jL3Nw
ZWFrdXAvbm9faW50ZXJydXB0CisvcHJvYy9zcGVha3VwL3BpdGNoCisvcHJvYy9zcGVha3VwL3B1
bmNfYWxsCisvcHJvYy9zcGVha3VwL3B1bmNfbGV2ZWwKKy9wcm9jL3NwZWFrdXAvcHVuY19tb3N0
CisvcHJvYy9zcGVha3VwL3B1bmNfc29tZQorL3Byb2Mvc3BlYWt1cC9wdW5jdAorL3Byb2Mvc3Bl
YWt1cC9yYXRlCisvcHJvYy9zcGVha3VwL3JlYWRpbmdfcHVuYworL3Byb2Mvc3BlYWt1cC9yZXBl
YXRzCisvcHJvYy9zcGVha3VwL3NheV9jb250cm9sCisvcHJvYy9zcGVha3VwL3NheV93b3JkX2N0
bAorL3Byb2Mvc3BlYWt1cC9zaWxlbnQKKy9wcm9jL3NwZWFrdXAvc3BlbGxfZGVsYXkKKy9wcm9j
L3NwZWFrdXAvc3ludGhfZGlyZWN0CisvcHJvYy9zcGVha3VwL3N5bnRoX25hbWUKKy9wcm9jL3Nw
ZWFrdXAvdG9uZQorL3Byb2Mvc3BlYWt1cC90cmlnZ2VyX3RpbWUKKy9wcm9jL3NwZWFrdXAvdmVy
c2lvbgorL3Byb2Mvc3BlYWt1cC92b2ljZQorL3Byb2Mvc3BlYWt1cC92b2wKKworSW4gYWRkaXRp
b24gdG8gdXNpbmcgdGhlIFNwZWFrdXAgaG90IGtleXMgdG8gY2hhbmdlIHN1Y2ggdGhpbmdzIGFz
Cit2b2x1bWUsIHBpdGNoLCBhbmQgcmF0ZSwgeW91IGNhbiBhbHNvIGVjaG8gdmFsdWVzIHRvIHRo
ZSBhcHByb3ByaWF0ZQorZW50cnkgaW4gdGhlIC9wcm9jL3NwZWFrdXAgZGlyZWN0b3J5LiAgVGhp
cyBpcyB2ZXJ5IHVzZWZ1bCwgc2luY2UgaXQKK2xldHMgeW91IGNvbnRyb2wgU3BlYWt1cCBwYXJh
bWV0ZXJzIGZyb20gd2l0aGluIGEgc2NyaXB0LiAgSG93IHlvdQord291bGQgd3JpdGUgc3VjaCBz
Y3JpcHRzIGlzIHNvbWV3aGF0IGJleW9uZCB0aGUgc2NvcGUgb2YgdGhpcyBtYW51YWwsCitidXQg
SSB3aWxsIGluY2x1ZGUgYSBjb3VwbGUgb2Ygc2ltcGxlIGV4YW1wbGVzIGhlcmUgdG8gZ2l2ZSB5
b3UgYQorZ2VuZXJhbCBpZGVhIG9mIHdoYXQgc3VjaCBzY3JpcHRzIGNhbiBkby4KKworU3VwcG9z
ZSBmb3IgZXhhbXBsZSwgdGhhdCB5b3Ugd2FudGVkIHRvIGNvbnRyb2wgYm90aCB0aGUgcHVuY3R1
YXRpb24KK2xldmVsIGFuZCB0aGUgcmVhZGluZyBwdW5jdHVhdGlvbiBsZXZlbCBhdCB0aGUgc2Ft
ZSB0aW1lLiAgRm9yCitzaW1wbGljaXR5LCB3ZSdsbCBjYWxsIHRoZW0gcHVuYzAsIHB1bmMxLCBw
dW5jMiwgYW5kIHB1bmMzLiAgVGhlIHNjcmlwdHMKK21pZ2h0IGxvb2sgc29tZXRoaW5nIGxpa2Ug
dGhpczoKKworIyEvYmluL2Jhc2gKKyMgcHVuYzAKKyMgc2V0IHB1bmMgYW5kIHJlYWRpbmcgcHVu
YyBsZXZlbHMgdG8gMAorZWNobyAwID4vcHJvYy9zcGVha3VwL3B1bmNfbGV2ZWwKK2VjaG8gMCA+
L3Byb2Mvc3BlYWt1cC9yZWFkaW5nX3B1bmMKK2VjaG8gUHVuY3R1YXRpb24gbGV2ZWwgc2V0IHRv
IDAuCisKKyMhL2Jpbi9iYXNoCisjIHB1bmMxCisjIHNldCBwdW5jIGFuZCByZWFkaW5nIHB1bmMg
bGV2ZWxzIHRvIDEKK2VjaG8gMSA+L3Byb2Mvc3BlYWt1cC9wdW5jX2xldmVsCitlY2hvIDEgPi9w
cm9jL3NwZWFrdXAvcmVhZGluZ19wdW5jCitlY2hvIFB1bmN0dWF0aW9uIGxldmVsIHNldCB0byAx
LgorCisjIS9iaW4vYmFzaAorIyBwdW5jMgorIyBzZXQgcHVuYyBhbmQgcmVhZGluZyBwdW5jIGxl
dmVscyB0byAyCitlY2hvIDIgPi9wcm9jL3NwZWFrdXAvcHVuY19sZXZlbAorZWNobyAyID4vcHJv
Yy9zcGVha3VwL3JlYWRpbmdfcHVuYworZWNobyBQdW5jdHVhdGlvbiBsZXZlbCBzZXQgdG8gMi4K
KworIyEvYmluL2Jhc2gKKyMgcHVuYzMKKyMgc2V0IHB1bmMgYW5kIHJlYWRpbmcgcHVuYyBsZXZl
bHMgdG8gMworZWNobyAzID4vcHJvYy9zcGVha3VwL3B1bmNfbGV2ZWwKK2VjaG8gMyA+L3Byb2Mv
c3BlYWt1cC9yZWFkaW5nX3B1bmMKK2VjaG8gUHVuY3R1YXRpb24gbGV2ZWwgc2V0IHRvIDMuCisK
K0lmIHlvdSB3ZXJlIHRvIHN0b3JlIHRoZXNlIGZvdXIgc21hbGwgc2NyaXB0cyBpbiBhIGRpcmVj
dG9yeSBpbiB5b3VyCitwYXRoLCBwZXJoYXBzIC91c3IvbG9jYWwvYmluLCBhbmQgc2V0IHRoZSBw
ZXJtaXNzaW9ucyB0byA3NTUgd2l0aCB0aGUKK2NobW9kIGNvbW1hbmQsIHRoZW4geW91IGNvdWxk
IGNoYW5nZSB0aGUgZGVmYXVsdCByZWFkaW5nIHB1bmMgYW5kCitwdW5jdHVhdGlvbiBsZXZlbHMg
YXQgdGhlIHNhbWUgdGltZSBieSBpc3N1aW5nIGp1c3Qgb25lIGNvbW1hbmQuICBGb3IKK2V4YW1w
bGUsIGlmIHlvdSB3ZXJlIHRvIGV4ZWN1dGUgdGhlIHB1bmMzIGNvbW1hbmQgYXQgeW91ciBzaGVs
bCBwcm9tcHQsCit0aGVuIHRoZSByZWFkaW5nIHB1bmMgYW5kIHB1bmMgbGV2ZWwgd291bGQgYm90
aCBnZXQgc2V0IHRvIDMuCisKK0kgc2hvdWxkIG5vdGUgdGhhdCB0aGUgYWJvdmUgc2NyaXB0cyB3
ZXJlIHdyaXR0ZW4gdG8gd29yayB3aXRoIGJhc2gsIGJ1dAorcmVnYXJkbGVzcyBvZiB3aGljaCBz
aGVsbCB5b3UgdXNlLCB5b3Ugc2hvdWxkIGJlIGFibGUgdG8gZG8gc29tZXRoaW5nCitzaW1pbGFy
LgorCitUaGUgU3BlYWt1cCBwcm9jIHN5c3RlbSBhbHNvIGhhcyBhbm90aGVyIGludGVyZXN0aW5n
IHVzZS4gIFlvdSBjYW4gZWNobworU3BlYWt1cCBwYXJhbWV0ZXJzIGludG8gdGhlIHByb2Mgc3lz
dGVtIGluIGEgc2NyaXB0IGR1cmluZyBzeXN0ZW0KK3N0YXJ0dXAsIGFuZCBzcGVha3VwIHdpbGwg
cmV0dXJuIHRvIHlvdXIgcHJlZmVycmVkIHBhcmFtZXRlcnMgZXZlcnkgdGltZQordGhlIHN5c3Rl
bSBpcyByZWJvb3RlZC4KKworTW9zdCBvZiB0aGUgU3BlYWt1cCBwcm9jIHBhcmFtZXRlcnMgY2Fu
IGJlIG1hbmlwdWxhdGVkIGJ5IGEgcmVndWxhciB1c2VyCitvbiB0aGUgc3lzdGVtLiAgSG93ZXZl
ciwgdGhlcmUgYXJlIGEgZmV3IHBhcmFtZXRlcnMgdGhhdCBhcmUgZGFuZ2Vyb3VzCitlbm91Z2gg
dGhhdCB0aGV5IHNob3VsZCBvbmx5IGJlIG1hbmlwdWxhdGVkIGJ5IHRoZSByb290IHVzZXIgb24g
eW91cgorc3lzdGVtLiAgVGhlcmUgYXJlIGV2ZW4gc29tZSBwYXJhbWV0ZXJzIHRoYXQgYXJlIHJl
YWQgb25seSwgYW5kIGNhbm5vdAorYmUgd3JpdHRlbiB0byBhdCBhbGwuICBGb3IgZXhhbXBsZSwg
dGhlIHZlcnNpb24gZW50cnkgaW4gdGhlIFNwZWFrdXAKK3Byb2Mgc3lzdGVtIGlzIHJlYWQgb25s
eS4gIFRoaXMgaXMgYmVjYXVzZSB0aGVyZSBpcyBubyByZWFzb24gZm9yIGEgdXNlcgordG8gdGFt
cGVyIHdpdGggdGhlIHZlcnNpb24gbnVtYmVyIHdoaWNoIGlzIHJlcG9ydGVkIGJ5IFNwZWFrdXAu
ICBEb2luZworYW4gbHMgLWwgb24gL3Byb2Mvc3BlYWt1cC92ZXJzaW9uIHdpbGwgcmV0dXJuIHRo
aXM6CisKKy1yLS1yLS1yLS0gICAgMSByb290ICAgICByb290ICAgICAgICAgICAgMCBNYXIgMjEg
MTM6NDYgL3Byb2Mvc3BlYWt1cC92ZXJzaW9uCisKK0FzIHlvdSBjYW4gc2VlLCB0aGUgdmVyc2lv
biBlbnRyeSBpbiB0aGUgU3BlYWt1cCBwcm9jIHN5c3RlbSBpcyByZWFkCitvbmx5LCBpcyBvd25l
ZCBieSByb290LCBhbmQgYmVsb25ncyB0byB0aGUgcm9vdCBncm91cC4gIERvaW5nIGEgY2F0IG9m
CisvcHJvYy9zcGVha3VwL3ZlcnNpb24gd2lsbCBkaXNwbGF5IHRoZSBTcGVha3VwIHZlcnNpb24g
bnVtYmVyLCBsaWtlCit0aGlzOgorCitjYXQgL3Byb2Mvc3BlYWt1cC92ZXJzaW9uCitTcGVha3Vw
IHYtMi4wMCBDVlM6IFRodSBPY3QgMjEgMTA6Mzg6MjEgRURUIDIwMDQgCitzeW50aCBkdGxrIHZl
cnNpb24gMS4xCisKK1RoZSBkaXNwbGF5IHNob3dzIHRoZSBTcGVha3VwIHZlcnNpb24gbnVtYmVy
LCBhbG9uZyB3aXRoIHRoZSB2ZXJzaW9uCitudW1iZXIgb2YgdGhlIGRyaXZlciBmb3IgdGhlIGN1
cnJlbnQgc3ludGhlc2l6ZXIuCisKK0xvb2tpbmcgYXQgZW50cmllcyBpbiB0aGUgU3BlYWt1cCBw
cm9jIHN5c3RlbSBjYW4gYmUgdXNlZnVsIGluIG1hbnkKK3dheXMuICBGb3IgZXhhbXBsZSwgeW91
IG1pZ2h0IHdpc2ggdG8ga25vdyB3aGF0IGxldmVsIHlvdXIgdm9sdW1lIGlzIHNldAorYXQuICBZ
b3UgY291bGQgdHlwZToKKworY2F0IC9wcm9jL3NwZWFrdXAvdm9sCis1CisKK1RoZSBudW1iZXIg
Zml2ZSB3aGljaCBjb21lcyBiYWNrIGlzIHRoZSBsZXZlbCBhdCB3aGljaCB0aGUgc3ludGhlc2l6
ZXIKK3ZvbHVtZSBpcyBzZXQgYXQuCisKK0FsbCB0aGUgZW50cmllcyBpbiB0aGUgU3BlYWt1cCBw
cm9jIHN5c3RlbSBhcmUgcmVhZGFibGUsIHNvbWUgYXJlCit3cml0YWJsZSBieSByb290IG9ubHks
IGFuZCBzb21lIGFyZSB3cml0YWJsZSBieSBldmVyeW9uZS4gIFVubGVzcyB5b3UKK2tub3cgd2hh
dCB5b3UgYXJlIGRvaW5nLCB5b3Ugc2hvdWxkIHByb2JhYmx5IGxlYXZlIHRoZSBvbmVzIHRoYXQg
YXJlCit3cml0YWJsZSBieSByb290IG9ubHkgYWxvbmUuICBNb3N0IG9mIHRoZSBuYW1lcyBhcmUg
c2VsZiBleHBsYW5hdG9yeS4gCitWb2wgZm9yIGNvbnRyb2xsaW5nIHZvbHVtZSwgcGl0Y2ggZm9y
IHBpdGNoLCByYXRlIGZvciBjb250cm9sbGluZyBzcGVha2luZworcmF0ZSwgZXRjLiAgSWYgeW91
IGZpbmQgb25lIHlvdSBhcmVuJ3Qgc3VyZSBhYm91dCwgeW91IGNhbiBwb3N0IGEgcXVlcnkKK29u
IHRoZSBTcGVha3VwIGxpc3QuCisKKzYuICBDaGFuZ2luZyBTeW50aGVzaXplcnMKKworSXQgaXMg
cG9zc2libGUgdG8gY2hhbmdlIHRvIGEgZGlmZmVyZW50IHN5bnRoZXNpemVyIHdoaWxlIHNwZWFr
dXAgaXMKK3J1bm5pbmcuICBJbiBvdGhlciB3b3JkcywgaXQgaXMgbm90IG5lY2Vzc2FyeSB0byBy
ZWJvb3QgdGhlIHN5c3RlbQoraW4gb3JkZXIgdG8gdXNlIGEgZGlmZmVyZW50IHN5bnRoZXNpemVy
LiAgWW91IGNhbiBzaW1wbHkgZWNobyB0aGUKK3N5bnRoZXNpemVyIGtleXdvcmQgdG8gdGhlIC9w
cm9jL3NwZWFrdXAvc3ludGhfbmFtZSBwcm9jIGVudHJ5LiAKK0RlcGVuZGluZyBvbiB5b3VyIHNp
dHVhdGlvbiwgeW91IG1heSB3aXNoIHRvIGVjaG8gbm9uZSB0byB0aGUgc3ludGhfbmFtZQorcHJv
YyBlbnRyeSwgdG8gZGlzYWJsZSBzcGVlY2ggd2hpbGUgb25lIHN5bnRoZXNpemVyIGlzIGRpc2Nv
bm5lY3RlZCBhbmQKK2Egc2Vjb25kIG9uZSBpcyBjb25uZWN0ZWQgaW4gaXRzIHBsYWNlLiAgVGhl
biBlY2hvIHRoZSBrZXl3b3JkIGZvciB0aGUKK25ldyBzeW50aGVzaXplciBpbnRvIHRoZSBzeW50
aF9uYW1lIHByb2MgZW50cnkgaW4gb3JkZXIgdG8gc3RhcnQgc3BlZWNoCit3aXRoIHRoZSBuZXds
eSBjb25uZWN0ZWQgc3ludGhlc2l6ZXIuICBTZWUgdGhlIGxpc3Qgb2Ygc3ludGhlc2l6ZXIKK2tl
eXdvcmRzIGluIHNlY3Rpb24gMSB0byBmaW5kIHRoZSBrZXl3b3JkIHdoaWNoIG1hdGNoZXMgeW91
ciBzeW50aC4KKworNy4gIExvYWRpbmcgbW9kdWxlcworCitBcyBtZW50aW9uZWQgZWFybGllciwg
U3BlYWt1cCBjYW4gZWl0aGVyIGJlIGNvbXBsZXRlbHkgY29tcGlsZWQgaW50byB0aGUKK2tlcm5l
bCwgd2l0aCB0aGUgZXhjZXB0aW9uIG9mIHRoZSBoZWxwIG1vZHVsZSwgb3IgaXQgY2FuIGJlIGNv
bXBpbGVkIGFzCithIHNlcmllcyBvZiBtb2R1bGVzLiAgIFdoZW4gY29tcGlsZWQgYXMgbW9kdWxl
cywgU3BlYWt1cCB3aWxsIG9ubHkgYmUKK2FibGUgdG8gc3BlYWsgc29tZSBvZiB0aGUgYm9vdHVw
IG1lc3NhZ2VzIGlmIHlvdXIgc3lzdGVtIGFkbWluaXN0cmF0b3IKK2hhcyBjb25maWd1cmVkIHRo
ZSBzeXN0ZW0gdG8gbG9hZCB0aGUgbW9kdWxlcyBhdCBib28gdGltZS4gVGhlIG1vZHVsZXMKK2Nh
biAgYmUgbG9hZGVkIGFmdGVyIHRoZSBmaWxlIHN5c3RlbXMgaGF2ZSBiZWVuIGNoZWNrZWQgYW5k
IG1vdW50ZWQsIG9yCitmcm9tIGFuIGluaXRyZC4gIFRoZXJlIGlzIGEgdGhpcmQgcG9zc2liaWxp
dHkuICBTcGVha3VwIGNhbiBiZSBjb21waWxlZAord2l0aCBzb21lIGNvbXBvbmVudHMgYnVpbHQg
aW50byB0aGUga2VybmVsLCBhbmQgb3RoZXJzIGFzIG1vZHVsZXMuICBBcword2UnbGwgc2VlIGlu
IHRoZSBuZXh0IHNlY3Rpb24sIHRoaXMgaXMgcGFydGljdWxhcmx5IHVzZWZ1bCB3aGVuIHlvdSBh
cmUKK3dvcmtpbmcgd2l0aCBzb2Z0d2FyZSBzeW50aGVzaXplcnMuCisKK0lmIFNwZWFrdXAgaXMg
Y29tcGxldGVseSBjb21waWxlZCBhcyBtb2R1bGVzLCB0aGVuIHlvdSBtdXN0IHVzZSB0aGUKK21v
ZHByb2JlIGNvbW1hbmQgdG8gbG9hZCBTcGVha3VwLiAgWW91IGRvIHRoaXMgYnkgbG9hZGluZyB0
aGUgbW9kdWxlIGZvcgordGhlIHN5bnRoZXNpemVyIGRyaXZlciB5b3Ugd2lzaCB0byB1c2UuICBU
aGUgZHJpdmVyIG1vZHVsZXMgYXJlIGFsbAorbmFtZWQgc3BlYWt1cF88a2V5d29yZD4sIHdoZXJl
IDxrZXl3b3JkPiBpcyB0aGUga2V5d29yZCBmb3IgdGhlCitzeW50aGVzaXplciB5b3Ugd2FudC4g
IFNvLCBpbiBvcmRlciB0byBsb2FkIHRoZSBkcml2ZXIgZm9yIHRoZSBEZWNUYWxrCitFeHByZXNz
LCB5b3Ugd291bGQgdHlwZSB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6CisKK21vZHByb2JlIHNwZWFr
dXBfZGVjdGxrCisKK0lzc3VpbmcgdGhpcyBjb21tYW5kIHdvdWxkIGxvYWQgdGhlIERlY1RhbGsg
RXhwcmVzcyBkcml2ZXIgYW5kIGFsbCBvdGhlcgorcmVsYXRlZCBTcGVha3VwIG1vZHVsZXMgbmVj
ZXNzYXJ5IHRvIGdldCBTcGVha3VwIHVwIGFuZCBydW5uaW5nLgorCitUbyBjb21wbGV0ZWx5IHVu
bG9hZCBTcGVha3VwLCBhZ2FpbiBwcmVzdW1pbmcgdGhhdCBpdCBpcyBlbnRpcmVseSBidWlsdAor
YXMgbW9kdWxlcywgeW91IHdvdWxkIGdpdmUgdGhlIGNvbW1hbmQ6CisKK21vZHByb2JlIC1yIHNw
ZWFrdXBfZGVjdGxrCisKK1RoZSBhYm92ZSBjb21tYW5kIGFzc3VtZXMgeW91IHdlcmUgcnVubmlu
ZyBhIERlY1RhbGsgRXhwcmVzcy4gIElmIHlvdQord2VyZSB1c2luZyBhIGRpZmZlcmVudCBzeW50
aCwgdGhlbiB5b3Ugd291bGQgc3Vic3RpdHV0ZSBpdHMga2V5d29yZCBpbgorcGxhY2Ugb2YgZGVj
dGxrLgorCitCdXQgbm93LCBzdXBwb3NlIHdlIGhhdmUgYSBzaXR1YXRpb24gd2hlcmUgdGhlIG1h
aW4gU3BlYWt1cCBjb21wb25lbnQKK2lzIGJ1aWx0IGludG8gdGhlIGtlcm5lbCwgYW5kIHNvbWUg
b3IgYWxsIG9mIHRoZSBkcml2ZXJzIGFyZSBidWlsdCBhcworbW9kdWxlcy4gIFNpbmNlIHRoZSBt
YWluIHBhcnQgb2YgU3BlYWt1cCBpcyBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwsIGEKK3BhcnRp
YWwgU3BlYWt1cCBwcm9jIHN5c3RlbSBoYXMgYmVlbiBjcmVhdGVkIHdoaWNoIHdlIGNhbiB0YWtl
IGFkdmFudGFnZQorb2YgYnkgc2ltcGx5IGVjaG9pbmcgdGhlIHN5bnRoZXNpemVyIGtleXdvcmQg
aW50byB0aGUKKy9wcm9jL3NwZWFrdXAvc3ludGhfbmFtZSBwcm9jIGVudHJ5LiAgVGhpcyB3aWxs
IGNhdXNlIHRoZSBrZXJuZWwgdG8KK2F1dG9tYXRpY2FsbHkgbG9hZCB0aGUgYXBwcm9wcmlhdGUg
ZHJpdmVyIG1vZHVsZSwgYW5kIHN0YXJ0IFNwZWFrdXAKK3RhbGtpbmcuICBUbyBzd2l0Y2ggdG8g
YW5vdGhlciBzeW50aCwganVzdCBlY2hvIGEgbmV3IGtleXdvcmQgdG8gdGhlCitzeW50aF9uYW1l
IHByb2MgZW50cnkuICBGb3IgZXhhbXBsZSwgdG8gbG9hZCB0aGUgRG91YmxlVGFsayBMVCBkcml2
ZXIsCit5b3Ugd291bGQgdHlwZToKKworZWNobyBsdGxrID4vcHJvYy9zcGVha3VwL3N5bnRoX25h
bWUKKworWW91IGNhbiB1c2UgdGhlIG1vZHByb2JlIC1yIGNvbW1hbmQgdG8gdW5sb2FkIGRyaXZl
ciBtb2R1bGVzLCByZWdhcmRsZXNzCitvZiB3aGV0aGVyIHRoZSBtYWluIHBhcnQgb2YgU3BlYWt1
cCBoYXMgYmVlbiBidWlsdCBpbnRvIHRoZSBrZXJuZWwgb3IKK25vdC4KKworOC4gIFVzaW5nIFNv
ZnR3YXJlIFN5bnRoZXNpemVycworCitVc2luZyBhIHNvZnR3YXJlIHN5bnRoZXNpemVyIHJlcXVp
cmVzIHRoYXQgc29tZSBvdGhlciBzb2Z0d2FyZSBiZQoraW5zdGFsbGVkIGFuZCBydW5uaW5nIG9u
IHlvdXIgc3lzdGVtLiAgRm9yIHRoaXMgcmVhc29uLCBzb2Z0d2FyZQorc3ludGhlc2l6ZXJzIGFy
ZSBub3QgYXZhaWxhYmxlIGZvciB1c2UgYXQgYm9vdHVwLCBvciBkdXJpbmcgYSBzeXN0ZW0KK2lu
c3RhbGxhdGlvbiBwcm9jZXNzLgorCitJbiBvcmRlciB0byB1c2UgYSBzb2Z0d2FyZSBzeW50aGVz
aXplciwgeW91IG11c3QgaGF2ZSBhIHBhY2thZ2UgY2FsbGVkCitTcGVlY2ggRGlzcGF0Y2hlciBy
dW5uaW5nIG9uIHlvdXIgc3lzdGVtLCBhbmQgaXQgbXVzdCBiZSBjb25maWd1cmVkIHRvCit3b3Jr
IHdpdGggb25lIG9mIGl0cyBzdXBwb3J0ZWQgc29mdHdhcmUgc3ludGhlc2l6ZXJzLgorCitUd28g
b3BlbiBzb3VyY2Ugc3ludGhlc2l6ZXJzIHlvdSBtaWdodCB1c2UgYXJlIEZsaXRlIGFuZCBGZXN0
aXZhbC4gIFlvdQorbWlnaHQgYWxzbyBjaG9vc2UgdG8gcHVyY2hhc2UgdGhlIFNvZnR3YXJlIERl
Y1RhbGsgZnJvbSBGb25peCBTYWxlcyBJbmMuCitJZiB5b3UgcnVuIGEgZ29vZ2xlIHNlYXJjaCBm
b3IgRm9uaXgsIHlvdSdsbCBmaW5kIHRoZWlyIHdlYiBzaXRlLgorCitZb3UgY2FuIG9idGFpbiBh
IGNvcHkgb2YgU3BlZWNoIERpc3BhdGNoZXIgZnJvbSBmcmVlKGIpc29mdCBhdAoraHR0cDovL3d3
dy5mcmVlYnNvZnQub3JnLy4gIEZvbGxvdyB0aGUgaW5zdGFsbGF0aW9uIGluc3RydWN0aW9ucyB0
aGF0Citjb21lIHdpdGggU3BlZWNoIERpc3BhdGNoZXIgaW4gb3JkZXIgdG8gaW5zdGFsbCBhbmQg
Y29uZmlndXJlIFNwZWVjaAorRGlzcGF0Y2hlci4gIFlvdSBjYW4gY2hlY2sgb3V0IHRoZSB3ZWIg
c2l0ZSBmb3IgeW91ciBMaW51eCBkaXN0cmlidXRpb24KK2luIG9yZGVyIHRvIGdldCBhIGNvcHkg
b2YgZWl0aGVyIEZsaXRlIG9yIEZlc3RpdmFsLiAgWW91ciBMaW51eAorZGlzdHJpYnV0aW9uIG1h
eSBhbHNvIGhhdmUgYSBwcmVjb21waWxlZCBTcGVlY2ggRGlzcGF0Y2hlciBwYWNrYWdlLgorCitP
bmNlIHlvdSd2ZSBpbnN0YWxsZWQsIGNvbmZpZ3VyZWQsIGFuZCB0ZXN0ZWQgU3BlZWNoIERpc3Bh
dGNoZXIgd2l0aCB5b3VyCitjaG9zZW4gc29mdHdhcmUgc3ludGhlc2l6ZXIsIHlvdSBzdGlsbCBu
ZWVkIG9uZSBtb3JlIHBpZWNlIG9mIHNvZnR3YXJlCitpbiBvcmRlciB0byBtYWtlIHRoaW5ncyB3
b3JrLiAgWW91IG5lZWQgYSBwYWNrYWdlIGNhbGxlZCBzcGVlY2hkLXVwLiAKK1lvdSBnZXQgaXQg
ZnJvbSB0aGUgZnJlZShiKXNvZnQgd2ViIHNpdGUgbWVudGlvbmVkIGFib3ZlLiAgQWZ0ZXIgeW91
J3ZlCitjb21waWxlZCBhbmQgaW5zdGFsbGVkIHNwZWVjaGQtdXAsIHlvdSBhcmUgYWxtb3N0IHJl
YWR5IHRvIGJlZ2luIHVzaW5nCit5b3VyIHNvZnR3YXJlIHN5bnRoZXNpemVyLgorCitCZWZvcmUg
eW91IGNhbiB1c2UgYSBzb2Z0d2FyZSBzeW50aGVzaXplciwgeW91IG11c3QgaGF2ZSBjcmVhdGVk
IHRoZQorL2Rldi9zb2Z0c3ludGggZGV2aWNlLiAgSWYgeW91IGhhdmUgbm90IGFscmVhZHkgZG9u
ZSBzbywgaXNzdWUgdGhlCitmb2xsb3dpbmcgY29tbWFuZHMgYXMgcm9vdDoKKworY2QgL2Rldgor
bWtub2Qgc29mdHN5bnRoIGMgMTAgMjYKKworV2hpbGUgd2UgYXJlIGF0IGl0LCB3ZSBtaWdodCBq
dXN0IGFzIHdlbGwgY3JlYXRlIHRoZSAvZGV2L3N5bnRoIGRldmljZSwKK3doaWNoIGNhbiBiZSB1
c2VkIHRvIGxldCB1c2VyIHNwYWNlIHByb2dyYW1zIHNlbmQgaW5mb3JtYXRpb24gdG8geW91cgor
c3ludGhlc2l6ZXIuICBUbyBjcmVhdGUgL2Rldi9zeW50aCwgY2hhbmdlIHRvIHRoZSAvZGV2IGRp
cmVjdG9yeSwgYW5kCitpc3N1ZSB0aGUgZm9sbG93aW5nIGNvbW1hbmQgYXMgcm9vdDoKKworbWtu
b2Qgc3ludGggYyAxMCAyNQorCitOb3cgeW91IGNhbiBiZWdpbiB1c2luZyB5b3VyIHNvZnR3YXJl
IHN5bnRoZXNpemVyLiAgSW4gb3JkZXIgdG8gZG8gc28sCitlY2hvIHRoZSBzZnRzeW4ga2V5d29y
ZCB0byB0aGUgc3ludGhfbmFtZSBwcm9jIGVudHJ5IGxpa2UgdGhpczoKKworZWNobyBzZnRzeW4g
Pi9wcm9jL3NwZWFrdXAvc3ludGhfbmFtZQorCitOZXh0IHJ1biB0aGUgc3BlZWNoZF91cCBjb21t
YW5kIGxpa2UgdGhpczoKKworc3BlZWNoZF91cCAmCisKK1lvdXIgc3ludGggc2hvdWxkIG5vdyBz
dGFydCB0YWxraW5nLCBhbmQgeW91IHNob3VsZCBiZSBhYmxlIHRvIGFkanVzdAordGhlIHBpdGNo
LCByYXRlLCBldGMuCisKK0luIHRoaXMgc2VjdGlvbiwgd2UgaGF2ZSBhc3N1bWVkIHRoYXQgeW91
ciBjb3B5IG9mIFNwZWFrdXAgd2FzIGNvbXBpbGVkCit3aXRoIHRoZSBzcGVha3VwX3NmdHN5biBj
b21wb25lbnQgZWl0aGVyIGJ1aWx0IGludG8gdGhlIGtlcm5lbCwgb3IKK2NvbXBpbGVkIGFzIGEg
bW9kdWxlLgorCis5LiAgVXNpbmcgVGhlIERlY1RhbGsgUEMgQ2FyZAorCitUaGUgRGVjVGFsayBQ
QyBjYXJkIGlzIGFuIElTQSBjYXJkIHRoYXQgaXMgaW5zZXJ0ZWQgaW50byBvbmUgb2YgdGhlIElT
QQorc2xvdHMgaW4geW91ciBjb21wdXRlci4gIEl0IHJlcXVpcmVzIHRoYXQgdGhlIERlY1RhbGsg
UEMgc29mdHdhcmUgYmUKK2luc3RhbGxlZCBvbiB5b3VyIGNvbXB1dGVyLCBhbmQgdGhhdCB0aGUg
c29mdHdhcmUgYmUgbG9hZGVkIG9udG8gdGhlCitEZWN0YWxrIFBDIGNhcmQgYmVmb3JlIGl0IGNh
biBiZSB1c2VkLgorCitZb3UgY2FuIGdldCB0aGUgZGVjX3BjLnRneiBmaWxlIGZyb20gdGhlIGxp
bnV4LXNwZWFrdXAub3JnIHNpdGUuICBUaGUKK2RlY19wYy50Z3ogZmlsZSBpcyBpbiB0aGUgfmZ0
cC9wdWIvbGludXgvc3BlYWt1cCBkaXJlY3RvcnkuCisKK0FmdGVyIHlvdSBoYXZlIGRvd25sb2Fk
ZWQgdGhlIGRlY19wYy50Z3ogZmlsZSwgdW50YXIgaXQgaW4geW91ciBob21lCitkaXJlY3Rvcnks
IGFuZCByZWFkIHRoZSBSZWFkbWUgZmlsZSBpbiB0aGUgbmV3bHkgY3JlYXRlZCBkZWNfcGMKK2Rp
cmVjdG9yeS4KKworVGhlIGVhc2llc3Qgd2F5IHRvIGdldCB0aGUgc29mdHdhcmUgd29ya2luZyBp
cyB0byBjb3B5IHRoZSBlbnRpcmUgZGVjX3BjCitkaXJlY3RvcnkgaW50byAvdXNlci9sb2NhbC9s
aWIuICBUbyBkbyB0aGlzLCBzdSB0byByb290IGluIHlvdXIgaG9tZQorZGlyZWN0b3J5LCBhbmQg
aXNzdWUgdGhlIGNvbW1hbmQ6CisKK2NwIGRlY19wYyAvdXNyL2xvY2FsL2xpYgorCitZb3Ugd2ls
bCBuZWVkIHRvIGNvcHkgdGhlIGR0bG9hZCBjb21tYW5kIGZyb20gdGhlIGRlY19wYyBkaXJlY3Rv
cnkgdG8gYQorZGlyZWN0b3J5IGluIHlvdXIgcGF0aC4gIEVpdGhlciAvdXNyL2JpbiBvciAvdXNy
L2xvY2FsL2JpbiBpcyBhIGdvb2QKK2Nob2ljZS4KKworWW91IGNhbiBub3cgcnVuIHRoZSBkdGxv
YWQgY29tbWFuZCBpbiBvcmRlciB0byBsb2FkIHRoZSBEZWNUYWxrIFBDCitzb2Z0d2FyZSBvbnRv
IHRoZSBjYXJkLiAgQWZ0ZXIgeW91IGhhdmUgZG9uZSB0aGlzLCBlY2hvIHRoZSBkZWNwYwora2V5
d29yZCB0byB0aGUgc3ludGhfbmFtZSBlbnRyeSBpbiB0aGUgcHJvYyBzeXN0ZW0gbGlrZSB0aGlz
OgorCitlY2hvIGRlY3BjID4vcHJvYy9zcGVha3VwL3N5bnRoX25hbWUKKworWW91ciBEZWNUYWxr
IFBDIHNob3VsZCBzdGFydCB0YWxraW5nLCBhbmQgdGhlbiB5b3UgY2FuIGFkanVzdCB0aGUgcGl0
Y2gsCityYXRlLCB2b2x1bWUsIHZvaWNlLCBldGMuICBUaGUgdm9pY2UgZW50cnkgaW4gdGhlIFNw
ZWFrdXAgcHJvYyBzeXN0ZW0KK3dpbGwgYWNjZXB0IGEgbnVtYmVyIGZyb20gMCB0aHJvdWdoIDcg
Zm9yIHRoZSBEZWNUYWxrIFBDIHN5bnRoZXNpemVyLAord2hpY2ggd2lsbCBnaXZlIHlvdSBhY2Nl
c3MgdG8gc29tZSBvZiB0aGUgRGVjVGFsayB2b2ljZXMuCisKKzEwLiAgVXNpbmcgQ3Vyc29yIFRy
YWNraW5nCisKK0luIFNwZWFrdXAgdmVyc2lvbiAyLjAgYW5kIGxhdGVyLCBjdXJzb3IgdHJhY2tp
bmcgaXMgdHVybmVkIG9uIGJ5CitkZWZhdWx0LiAgVGhpcyBtZWFucyB0aGF0IHdoZW4geW91IGFy
ZSB1c2luZyBhbiBlZGl0b3IsIFNwZWFrdXAgd2lsbAorYXV0b21hdGljYWxseSBzcGVhayBjaGFy
YWN0ZXJzIGFzIHlvdSBtb3ZlIGxlZnQgYW5kIHJpZ2h0IHdpdGggdGhlCitjdXJzb3Iga2V5cywg
YW5kIGxpbmVzIGFzIHlvdSBtb3ZlIHVwIGFuZCBkb3duIHdpdGggdGhlIGN1cnNvciBrZXlzLgor
CitUaGlzIGlzIGV4dHJlbWVseSB1c2VmdWwsIGFuZCBtYWtlcyBlZGl0aW5nIGZpbGVzIGEgc25h
cC4gIEJ1dCB0aGVyZSBhcmUKK3RpbWVzIHdoZW4gY3Vyc29yIHRyYWNraW5nIGNhbiBnZXQgaW4g
eW91ciB3YXkuICBTbyBTcGVha3VwIHByb3ZpZGVzIGEKK3RvZ2dsZSB0byB0dXJuIGN1cnNvciB0
cmFja2luZyBvbiBhbmQgb2ZmLiAgWW91IGRvIHRoaXMgd2l0aCB0aGUga2V5cGFkCithc3Rlcmlz
ayBrZXkuICBQcmVzc2luZyB0aGlzIGtleSByZXBlYXRlZGx5IHdpbGwgdG9nZ2xlIHRoZSBjdXJz
b3IKK3RyYWNraW5nIG9uIGFuZCBvZmYsIGFuZCB5b3Ugd2lsbCBoZWFyIFNwZWFrdXAgc2F5LCAi
Y3Vyc29yaW5nIG9mZiIsIGFuZAorImN1cnNvcmluZyBvbiIuCisKK1NvbWUgZm9sa3MgbGlrZSB0
byB0dXJuIGN1cnNvciB0cmFja2luZyBvZmYgd2hpbGUgdGhleSBhcmUgdXNpbmcgdGhlCitseW54
IHdlYiBicm93c2VyLiAgWW91IGRlZmluaXRlbHkgd2FudCB0byB0dXJuIGN1cnNvciB0cmFja2lu
ZyBvZmYgd2hlbgoreW91IGFyZSB1c2luZyB0aGUgYWxzYW1peGVyIGFwcGxpY2F0aW9uLiAgT3Ro
ZXJ3aXNlLCB5b3Ugd29uJ3QgYmUgYWJsZQordG8gaGVhciB5b3VyIG1peGVyIHNldHRpbmdzIHdo
aWxlIHlvdSBhcmUgdXNpbmcgdGhlIGFycm93IGtleXMuCisKKzExLiAgQ3V0IGFuZCBQYXN0ZQor
CitPbmUgb2YgU3BlYWt1cCdzIG1vcmUgdXNlZnVsIGZlYXR1cmVzIGlzIHRoZSBhYmlsaXR5IHRv
IGN1dCBhbmQgcGFzdGUKK3RleHQgb24gdGhlIHNjcmVlbi4gIFRoaXMgbWVhbnMgdGhhdCB5b3Ug
Y2FuIGNhcHR1cmUgaW5mb3JtYXRpb24gZnJvbSBhCitwcm9ncmFtLCBhbmQgcGFzdGUgdGhhdCBj
YXB0dXJlZCB0ZXh0IGludG8gYSBkaWZmZXJlbnQgcGxhY2UgaW4gdGhlCitwcm9ncmFtLCBvciBp
bnRvIGFuIGVudGlyZWx5IGRpZmZlcmVudCBwcm9ncmFtLCB3aGljaCBtYXkgZXZlbiBiZQorcnVu
bmluZyBvbiBhIGRpZmZlcmVudCBjb25zb2xlLgorCitGb3IgZXhhbXBsZSwgaW4gdGhpcyBtYW51
YWwsIHdlIGhhdmUgbWFkZSByZWZlcmVuY2VzIHRvIHNldmVyYWwgd2ViCitzaXRlcy4gIEl0IHdv
dWxkIGJlIG5pY2UgaWYgeW91IGNvdWxkIGN1dCBhbmQgcGFzdGUgdGhlc2UgdXJscyBpbnRvIHlv
dXIKK3dlYiBicm93c2VyLiAgU3BlYWt1cCBkb2VzIHRoaXMgcXVpdGUgbmljZWx5LiAgU3VwcG9z
ZSB5b3Ugd2FudGVkIHRvCitwYXN0IHRoZSBmb2xsb3dpbmcgdXJsIGludG8geW91ciBicm93c2Vy
OgorCitodHRwOi8vbGludXgtc3BlYWt1cC5vcmcvCisKK1VzZSB0aGUgc3BlYWt1cCByZXZpZXcg
a2V5cyB0byBwb3NpdGlvbiB0aGUgcmVhZGluZyBjdXJzb3Igb24gdGhlIGZpcnN0CitjaGFyYWN0
ZXIgb2YgdGhlIGFib3ZlIHVybC4gIFdoZW4gdGhlIHJlYWRpbmcgY3Vyc29yIGlzIGluIHBvc2l0
aW9uLAorcHJlc3MgdGhlIGtleXBhZCBzbGFzaCBrZXkgb25jZS4gIFNwZWFrdXAgd2lsbCBzYXks
ICJtYXJrIi4gIE5leHQsCitwb3NpdGlvbiB0aGUgcmVhZGluZyBjdXJzb3Igb24gdGhlIHJpZ2h0
bW9zdCBjaGFyYWN0ZXIgb2YgdGhlIGFib3ZlCit1cmwuIFByZXNzIHRoZSBrZXlwYWQgc2xhc2gg
a2V5IG9uY2UgYWdhaW4gdG8gYWN0dWFsbHkgY3V0IHRoZSB0ZXh0Citmcm9tIHRoZSBzY3JlZW4u
ICBTcGVha3VwIHdpbGwgc2F5LCAiY3V0Ii4gIEFsdGhvdWdoIHdlIGNhbGwgdGhpcworY3V0dGlu
ZywgU3BlYWt1cCBkb2VzIG5vdCBhY3R1YWxseSBkZWxldGUgdGhlIGN1dCB0ZXh0IGZyb20gdGhl
IHNjcmVlbi4gCitJdCBtYWtlcyBhIGNvcHkgb2YgdGhlIHRleHQgaW4gYSBzcGVjaWFsIGJ1ZmZl
ciBmb3IgbGF0ZXIgcGFzdGluZy4KKworTm93IHRoYXQgeW91IGhhdmUgdGhlIHVybCBjdXQgZnJv
bSB0aGUgc2NyZWVuLCB5b3UgY2FuIHBhc3RlIGl0IGludG8KK3lvdXIgYnJvd3Nlciwgb3IgZXZl
biBwYXN0ZSB0aGUgdXJsIG9uIGEgY29tbWFuZCBsaW5lIGFzIGFuIGFyZ3VtZW50IHRvCit5b3Vy
IGJyb3dzZXIuCisKK1N1cHBvc2UgeW91IHdhbnQgdG8gc3RhcnQgbHlueCBhbmQgZ28gdG8gdGhl
IFNwZWFrdXAgc2l0ZS4KKworWW91IGNhbiBzd2l0Y2ggdG8gYSBkaWZmZXJlbnQgY29uc29sZSB3
aXRoIHRoZSBhbHQgbGVmdCBhbmQgcmlnaHQKK2Fycm93cywgb3IgeW91IGNhbiBzd2l0Y2ggdG8g
YSBzcGVjaWZpYyBjb25zb2xlIGJ5IHR5cGluZyBhbHQgYW5kIGEKK2Z1bmN0aW9uIGtleS4gIFRo
ZXNlIGFyZSBub3QgU3BlYWt1cCBjb21tYW5kcywganVzdCBzdGFuZGFyZCBMaW51eAorY29uc29s
ZSBjYXBhYmlsaXRpZXMuCisKK09uY2UgeW91J3ZlIGNoYW5nZWQgdG8gYW4gYXBwcm9wcmlhdGUg
Y29uc29sZSwgYW5kIGFyZSBhdCBhIHNoZWxsIHByb21wdCwKK3R5cGUgdGhlIHdvcmQgbHlueCwg
Zm9sbG93ZWQgYnkgYSBzcGFjZS4gIE5vdyBwcmVzcyBhbmQgaG9sZCB0aGUgc3BlYWt1cAora2V5
LCB3aGlsZSB5b3UgdHlwZSB0aGUga2V5cGFkIHNsYXNoIGNoYXJhY3Rlci4gIFRoZSB1cmwgd2ls
bCBiZSBwYXN0ZWQKK29udG8gdGhlIGNvbW1hbmQgbGluZSwganVzdCBhcyB0aG91Z2ggeW91IGhh
ZCB0eXBlZCBpdCBpbi4gIFByZXNzIHRoZQorZW50ZXIga2V5IHRvIGV4ZWN1dGUgdGhlIGNvbW1h
bmQuCisKK1RoZSBwYXN0ZSBidWZmZXIgd2lsbCBjb250aW51ZSB0byBob2xkIHRoZSBjdXQgaW5m
b3JtYXRpb24sIHVudGlsIGEgbmV3CittYXJrIGFuZCBjdXQgb3BlcmF0aW9uIGlzIGNhcnJpZWQg
b3V0LiAgVGhpcyBtZWFucyB5b3UgY2FuIHBhc3RlIHRoZSBjdXQKK2luZm9ybWF0aW9uIGFzIG1h
bnkgdGltZXMgYXMgeW91IGxpa2UgYmVmb3JlIGRvaW5nIGFub3RoZXIgY3V0CitvcGVyYXRpb24u
CisKK1lvdSBhcmUgbm90IGxpbWl0ZWQgdG8gY3V0dGluZyBhbmQgcGFzdGluZyBvbmx5IG9uZSBs
aW5lIG9uIHRoZSBzY3JlZW4uCitZb3UgY2FuIGFsc28gY3V0IGFuZCBwYXN0ZSByZWN0YW5ndWxh
ciByZWdpb25zIG9mIHRoZSBzY3JlZW4uICBKdXN0Citwb3NpdGlvbiB0aGUgcmVhZGluZyBjdXJz
b3IgYXQgdGhlIHRvcCBsZWZ0IGNvcm5lciBvZiB0aGUgdGV4dCB0byBiZQorY3V0LCBtYXJrIGl0
IHdpdGggdGhlIGtleXBhZCBzbGFzaCBrZXksIHRoZW4gcG9zaXRpb24gdGhlIHJlYWRpbmcgY3Vy
c29yCithdCB0aGUgYm90dG9tIHJpZ2h0IGNvcm5lciBvZiB0aGUgcmVnaW9uIHRvIGJlIGN1dCwg
YW5kIGN1dCBpdCB3aXRoIHRoZQora2V5cGFkIHNsYXNoIGtleS4KKworMTIuICBDaGFuZ2luZyB0
aGUgUHJvbnVuY2lhdGlvbiBvZiBDaGFyYWN0ZXJzCisKK1Rocm91Z2ggdGhlIC9wcm9jL3NwZWFr
dXAvY2hhcnMgcHJvYyBlbnRyeSwgU3BlYWt1cCBnaXZlcyB5b3UgdGhlCithYmlsaXR5IHRvIGNo
YW5nZSBob3cgU3BlYWt1cCBwcm9ub3VuY2VzIGEgZ2l2ZW4gY2hhcmFjdGVyLiAgWW91IGNvdWxk
LAorZm9yIGV4YW1wbGUsIGNoYW5nZSBob3cgc29tZSBwdW5jdHVhdGlvbiBjaGFyYWN0ZXJzIGFy
ZSBzcG9rZW4uICBZb3UgY2FuCitldmVuIGNoYW5nZSBob3cgU3BlYWt1cCB3aWxsIHByb25vdW5j
ZSBjZXJ0YWluIGxldHRlcnMuCisKK1lvdSBtYXksIGZvciBleGFtcGxlLCB3aXNoIHRvIGNoYW5n
ZSBob3cgU3BlYWt1cCBwcm9ub3VuY2VzIHRoZSB6CitjaGFyYWN0ZXIuICBUaGUgYXV0aG9yIG9m
IFNwZWFrdXAsIEtpcmsgUmVpc2VyLCBpcyBDYW5hZGlhbiwgYW5kIHRodXMKK2JlbGlldmVzIHRo
YXQgdGhlIHogc2hvdWxkIGJlIHByb25vdW5jZWQgemVkLiAgSWYgeW91IGFyZSBhbiBBbWVyaWNh
biwKK3lvdSBtaWdodCB3aXNoIHRvIHVzZSB0aGUgemVlIHByb251bmNpYXRpb24gaW5zdGVhZCBv
ZiB6ZWQuICBZb3UgY2FuCitjaGFuZ2UgdGhlIHByb251bmNpYXRpb24gb2YgYm90aCB0aGUgdXBw
ZXIgYW5kIGxvd2VyIGNhc2UgeiB3aXRoIHRoZQorZm9sbG93aW5nIHR3byBjb21tYW5kczoKKwor
ZWNobyA5MCB6ZWUgPi9wcm9jL3NwZWFrdXAvY2hhcmFjdGVycworZWNobyAxMjIgemVlID4vcHJv
Yy9zcGVha3VwL2NoYXJhY3RlcnMKKworTGV0J3MgZXhhbWluZSB0aGUgcGFydHMgb2YgdGhlIHR3
byBwcmV2aW91cyBjb21tYW5kcy4gIFRoZXkgYXJlIGlzc3VlZAorYXQgdGhlIHNoZWxsIHByb21w
dCwgYW5kIGNvdWxkIGJlIHBsYWNlZCBpbiBhIHN0YXJ0dXAgc2NyaXB0LgorCitUaGUgd29yZCBl
Y2hvIHRlbGxzIHRoZSBzaGVsbCB0aGF0IHlvdSB3YW50IHRvIGhhdmUgaXQgZGlzcGxheSB0aGUK
K3N0cmluZyBvZiBjaGFyYWN0ZXJzIHRoYXQgZm9sbG93IHRoZSB3b3JkIGVjaG8uICBJZiB5b3Ug
d2VyZSB0byBqdXN0Cit0eXBlOgorCitlY2hvIGhlbGxvLgorCitZb3Ugd291bGQgZ2V0IHRoZSB3
b3JkIGhlbGxvIHByaW50ZWQgb24geW91ciBzY3JlZW4gYXMgc29vbiBhcyB5b3UKK3ByZXNzZWQg
dGhlIGVudGVyIGtleS4gIEluIHRoaXMgY2FzZSwgd2UgYXJlIGVjaG9pbmcgc3RyaW5ncyB0aGF0
IHdlCit3YW50IHRvIGJlIHJlZGlyZWN0ZWQgaW50byB0aGUgcHJvYyBzeXN0ZW0uCisKK1RoZSBu
dW1iZXJzIDkwIGFuZCAxMjIgaW4gdGhlIGFib3ZlIGVjaG8gY29tbWFuZHMgYXJlIHRoZSBhc2Np
aSBudW1lcmljCit2YWx1ZXMgZm9yIHRoZSB1cHBlciBhbmQgbG93ZXIgY2FzZSB6LCB0aGUgY2hh
cmFjdGVycyB3ZSB3aXNoIHRvIGNoYW5nZS4KKworVGhlIHN0cmluZyB6ZWUgaXMgdGhlIHByb251
bmNpYXRpb24gdGhhdCB3ZSB3YW50IFNwZWFrdXAgdG8gdXNlIGZvciB0aGUKK3VwcGVyIGFuZCBs
b3dlciBjYXNlIHouCisKK1RoZSA+IHN5bWJvbCByZWRpcmVjdHMgdGhlIG91dHB1dCBvZiB0aGUg
ZWNobyBjb21tYW5kIHRvIGEgZmlsZSwganVzdAorbGlrZSBpbiBET1MsIG9yIGF0IHRoZSBXaW5k
b3dzIGNvbW1hbmQgcHJvbXB0LgorCitBbmQgZmluYWxseSwgL3Byb2Mvc3BlYWt1cC9jaGFycyBp
cyB0aGUgZmlsZSBlbnRyeSBpbiB0aGUgcHJvYyBzeXN0ZW0KK3doZXJlIHdlIHdhbnQgdGhlIG91
dHB1dCB0byBiZSBkaXJlY3RlZC4gIFNwZWFrdXAgbG9va3MgYXQgdGhlIG51bWVyaWMKK3ZhbHVl
IG9mIHRoZSBjaGFyYWN0ZXIgd2Ugd2FudCB0byBjaGFuZ2UsIGFuZCBpbnNlcnRzIHRoZSBwcm9u
dW5jaWF0aW9uCitzdHJpbmcgaW50byBhbiBpbnRlcm5hbCB0YWJsZS4KKworWW91IGNhbiBsb29r
IGF0IHRoZSB3aG9sZSB0YWJsZSB3aXRoIHRoZSBmb2xsb3dpbmcgY29tbWFuZDoKKworY2F0IC9w
cm9jL3NwZWFrdXAvY2hhcnMKKworU3BlYWt1cCB3aWxsIHRoZW4gcHJpbnQgb3V0IHRoZSBlbnRp
cmUgY2hhcmFjdGVyIHByb251bmNpYXRpb24gdGFibGUuICBJCit3b24ndCBkaXNwbGF5IGl0IGhl
cmUsIGJ1dCBsZWF2ZSB5b3UgdG8gbG9vayBhdCBpdCBhdCB5b3VyIGNvbnZlbmllbmNlLgorCisx
My4gIE1hcHBpbmcgS2V5cworCitTcGVha3VwIGhhcyB0aGUgY2FwYWJpbGl0eSBvZiBhbGxvd2lu
ZyB5b3UgdG8gYXNzaWduIG9yICJtYXAiIGtleXMgdG8KK2ludGVybmFsIFNwZWFrdXAgY29tbWFu
ZHMuICBUaGlzIHNlY3Rpb24gbmVjZXNzYXJpbHkgYXNzdW1lcyB5b3UgaGF2ZSBhCitMaW51eCBr
ZXJuZWwgc291cmNlIHRyZWUgaW5zdGFsbGVkLCBhbmQgdGhhdCBpdCBoYXMgYmVlbiBwYXRjaGVk
IGFuZAorY29uZmlndXJlZCB3aXRoIFNwZWFrdXAuICBIb3cgeW91IGRvIHRoaXMgaXMgYmV5b25k
IHRoZSBzY29wZSBvZiB0aGlzCittYW51YWwuICBGb3IgdGhpcyBpbmZvcm1hdGlvbiwgdmlzaXQg
dGhlIFNwZWFrdXAgd2ViIHNpdGUgYXQKK2h0dHA6Ly9saW51eC1zcGVha3VwLm9yZy8uICBUaGUg
cmVhc29uIHlvdSdsbCBuZWVkIHRoZSBrZXJuZWwgc291cmNlCit0cmVlIHBhdGNoZWQgd2l0aCBT
cGVha3VwIGlzIHRoYXQgdGhlIGdlbm1hcCB1dGlsaXR5IHlvdSdsbCBuZWVkIGZvcgorcHJvY2Vz
c2luZyBrZXltYXBzIGlzIGluIHRoZQorL3Vzci9zcmMvbGludXgtPHZlcnNpb25fbnVtYmVyPi9k
cml2ZXJzL2NoYXIvc3BlYWt1cCBkaXJlY3RvcnkuICBUaGUKKzx2ZXJzaW9uX251bWJlcj4gaW4g
dGhlIGFib3ZlIGRpcmVjdG9yeSBwYXRoIGlzIHRoZSB2ZXJzaW9uIG51bWJlciBvZgordGhlIExp
bnV4IHNvdXJjZSB0cmVlIHlvdSBhcmUgd29ya2luZyB3aXRoLgorCitTbyBvaywgeW91J3ZlIGdv
bmUgb2ZmIGFuZCBnb3R0ZW4geW91ciBrZXJuZWwgc291cmNlIHRyZWUsIGFuZCBwYXRjaGVkCith
bmQgY29uZmlndXJlZCBpdC4gIE5vdyB5b3UgY2FuIHN0YXJ0IG1hbmlwdWxhdGluZyBrZXltYXBz
LgorCitZb3UgY2FuIGVpdGhlciB1c2UgdGhlCisvdXNyL3NyYy9saW51eC08dmVyc2lvbl9udW1i
ZXI+L2RyaXZlcnMvY2hhci9zcGVha3VwL3NwZWFrdXBtYXAubWFwIGZpbGUKK2luY2x1ZGVkIHdp
dGggdGhlIFNwZWFrdXAgc291cmNlLCBvciB5b3UgY2FuIGN1dCBhbmQgcGFzdGUgdGhlIGNvcHkg
aW4KK3NlY3Rpb24gNCBpbnRvIGEgc2VwYXJhdGUgZmlsZS4gIElmIHlvdSB1c2UgdGhlIG9uZSBp
biB0aGUgU3BlYWt1cAorc291cmNlIHRyZWUsIG1ha2Ugc3VyZSB5b3UgbWFrZSBhIGJhY2t1cCBv
ZiBpdCBiZWZvcmUgeW91IHN0YXJ0IG1ha2luZworY2hhbmdlcy4gIFlvdSBoYXZlIGJlZW4gd2Fy
bmVkIQorCitTdXBwb3NlIHRoYXQgeW91IHdhbnQgdG8gc3dhcCB0aGUga2V5IGFzc2lnbm1lbnRz
IGZvciB0aGUgU3BlYWt1cAorc2F5X2xhc3RfY2hhciBhbmQgdGhlIFNwZWFrdXAgc2F5X2ZpcnN0
X2NoYXIgY29tbWFuZHMuICBUaGUKK3NwZWFrdXBtYXAubWFwIGxpc3RzIHRoZSBrZXkgbWFwcGlu
Z3MgZm9yIHRoZXNlIHR3byBjb21tYW5kcyBhcyBmb2xsb3dzOgorCitzcGsga2V5X3BhZ2V1cCA9
IHNheV9maXJzdF9jaGFyCitzcGsga2V5X3BhZ2Vkb3duID0gc2F5X2xhc3RfY2hhcgorCitZb3Ug
Y2FuIGVkaXQgeW91ciBjb3B5IG9mIHRoZSBzcGVha3VwbWFwLm1hcCBmaWxlIGFuZCBzd2FwIHRo
ZSBjb21tYW5kCituYW1lcyBvbiB0aGUgcmlnaHQgc2lkZSBvZiB0aGUgPSAoZXF1YWxzKSBzaWdu
LiAgWW91IGRpZCBtYWtlIGEgYmFja3VwLAorcmlnaHQ/ICBUaGUgbmV3IGtleW1hcCBsaW5lcyB3
b3VsZCBsb29rIGxpa2UgdGhpczoKKworc3BrIGtleV9wYWdldXAgPSBzYXlfbGFzdF9jaGFyCitz
cGsga2V5X3BhZ2Vkb3duID0gc2F5X2ZpcnN0X2NoYXIKKworQWZ0ZXIgeW91IGVkaXQgeW91ciBj
b3B5IG9mIHRoZSBzcGVha3VwbWFwLm1hcCBmaWxlLCBzYXZlIGl0IHVuZGVyIGEgbmV3CitmaWxl
IG5hbWUsIHBlcmhhcHMgbmV3bWFwLm1hcC4gIFRoZW4gZXhpdCB5b3VyIGVkaXRvciBhbmQgcmV0
dXJuIHRvIHRoZQorc2hlbGwgcHJvbXB0LgorCitZb3UgYXJlIG5vdyByZWFkeSB0byBsb2FkIHlv
dXIga2V5bWFwIHdpdGggeW91ciBzd2FwcGVkIGtleSBhc3NpZ25tZW50cy4KKyBBc3N1bWluZyB0
aGF0IHlvdSBzYXZlZCB5b3VyIG5ldyBrZXltYXAgYXMgdGhlIGZpbGUgbmV3bWFwLm1hcCwgeW91
Cit3b3VsZCBsb2FkIHlvdXIga2V5bWFwIGludG8gdGhlIHByb2Mgc3lzdGVtIGxpa2UgdGhpczoK
KworL3Vzci9zcmMvbGludXgtPHZlcnNpb25fbnVtYmVyPi9kcml2ZXJzL2NoYXIvc3BlYWt1cC9n
ZW5tYXAgbmV3bWFwLm1hcAorPi9wcm9jL3NwZWFrdXAva2V5bWFwCisKK1JlbWVtYmVyIHRvIHN1
YnN0aXR1dGUgeW91ciBrZXJuZWwgdmVyc2lvbiBudW1iZXIgZm9yIHRoZQorPHZlcnNpb25fbnVt
YmVyPiBpbiB0aGUgYWJvdmUgY29tbWFuZC4gIEFsc28gbm90ZSB0aGF0IGFsdGhvdWdoIHRoZQor
YWJvdmUgY29tbWFuZCB3cmFwcGVkIG9udG8gdHdvIGxpbmVzIGluIHRoaXMgZG9jdW1lbnQsIHlv
dSBzaG91bGQgdHlwZQoraXQgYWxsIG9uIG9uZSBsaW5lLgorCitZb3VyIHNheSBmaXJzdCBhbmQg
c2F5IGxhc3QgY2hhcmFjdGVycyBzaG91bGQgbm93IGJlIHN3YXBwZWQuICBQcmVzc2luZworc3Bl
YWt1cCBwYWdlZG93biBzaG91bGQgcmVhZCB5b3UgdGhlIGZpcnN0IG5vbi13aGl0ZXNwYWNlIGNo
YXJhY3RlciBvbgordGhlIGxpbmUgeW91ciByZWFkaW5nIGN1cnNvciBpcyBpbiwgYW5kIHByZXNz
aW5nIHNwZWFrdXAgcGFnZXVwIHNob3VsZAorcmVhZCB5b3UgdGhlIGxhc3QgY2hhcmFjdGVyIG9u
IHRoZSBsaW5lIHlvdXIgcmVhZGluZyBjdXJzb3IgaXMgaW4uCisKK1lvdSBzaG91bGQgbm90ZSB0
aGF0IHRoZXNlIG5ldyBtYXBwaW5ncyB3aWxsIG9ubHkgc3RheSBpbiBlZmZlY3QgdW50aWwKK3lv
dSByZWJvb3QsIG9yIHVudGlsIHlvdSBsb2FkIGFub3RoZXIga2V5bWFwLgorCitPbmUgZmluYWwg
d2FybmluZy4gIElmIHlvdSB0cnkgdG8gbG9hZCBhIHBhcnRpYWwgbWFwLCB5b3Ugd2lsbCBxdWlj
a2x5CitmaW5kIHRoYXQgYWxsIHRoZSBtYXBwaW5ncyB5b3UgZGlkbid0IGluY2x1ZGUgaW4geW91
ciBmaWxlIGdvdCBkZWxldGVkCitmcm9tIHRoZSB3b3JraW5nIG1hcC4gIEJlIGV4dHJlbWVseSBj
YXJlZnVsLCBhbmQgYWx3YXlzIG1ha2UgYSBiYWNrdXAhIAorWW91IGhhdmUgYmVlbiB3YXJuZWQh
CisKKzE0LiAgVXNpbmcgU3BlYWt1cCdzIFdpbmRvd2luZyBDYXBhYmlsaXR5CisKK1NwZWFrdXAg
aGFzIHRoZSBjYXBhYmlsaXR5IG9mIGRlZmluaW5nIGFuZCBtYW5pcHVsYXRpbmcgd2luZG93cyBv
biB0aGUKK3NjcmVlbi4gIFNwZWFrdXAgdXNlcyB0aGUgdGVybSAiV2luZG93IiwgdG8gbWVhbiBh
IHVzZXIgZGVmaW5lZCBhcmVhIG9mCit0aGUgc2NyZWVuLiAgVGhlIGtleSBzdHJva2VzIGZvciBk
ZWZpbmluZyBhbmQgbWFuaXB1bGF0aW5nIFNwZWFrdXAKK3dpbmRvd3MgYXJlIGFzIGZvbGxvd3M6
CisKK3NwZWFrdXAgKyBmMiAtLSBTZXQgdGhlIGJvdW5kcyBvZiB0aGUgd2luZG93LgorU3BlYWt1
cCArIGYzIC0tIGNsZWFyIHRoZSBjdXJyZW50IHdpbmRvdyBkZWZpbml0aW9uLgorc3BlYWt1cCAr
IGY0IC0tIFRvZ2dsZSB3aW5kb3cgc2lsZW5jZSBvbiBhbmQgb2ZmLgorc3BlYWt1cCArIGtleXBh
ZCBwbHVzIC0tIFNheSB0aGUgY3VycmVudGx5IGRlZmluZWQgd2luZG93LgorCitUaGVzZSBjYXBh
YmlsaXRpZXMgYXJlIHVzZWZ1bCBmb3IgdHJhY2tpbmcgYSBjZXJ0YWluIHBhcnQgb2YgdGhlIHNj
cmVlbgord2l0aG91dCByZXJlYWRpbmcgdGhlIHdob2xlIHNjcmVlbiwgb3IgZm9yIHNpbGVuY2lu
ZyBhIHBhcnQgb2YgdGhlCitzY3JlZW4gdGhhdCBpcyBjb25zdGFudGx5IGNoYW5naW5nLCBzdWNo
IGFzIGEgY2xvY2sgb3Igc3RhdHVzIGxpbmUuCisKK1RoZXJlIGlzIG5vIHdheSB0byBzYXZlIHRo
ZXNlIHdpbmRvdyBzZXR0aW5ncywgYW5kIHlvdSBjYW4gb25seSBoYXZlIG9uZQord2luZG93IGRl
ZmluZWQgZm9yIGVhY2ggdmlydHVhbCBjb25zb2xlLiAgVGhlcmUgaXMgYWxzbyBubyB3YXkgdG8g
aGF2ZQord2luZG93cyBhdXRvbWF0aWNseSBkZWZpbmVkIGZvciBzcGVjaWZpYyBhcHBsaWNhdGlv
bnMuCisKK0luIG9yZGVyIHRvIGRlZmluZSBhIHdpbmRvdywgdXNlIHRoZSByZXZpZXcga2V5cyB0
byBtb3ZlIHlvdXIgcmVhZGluZworY3Vyc29yIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGFyZWEg
eW91IHdhbnQgdG8gZGVmaW5lLiAgVGhlbiBwcmVzcworc3BlYWt1cCArIGYyLiAgU3BlYWt1cCB3
aWxsIHRlbGwgeW91IHRoYXQgdGhlIHdpbmRvdyBzdGFydHMgYXQgdGhlCitpbmRpY2F0ZWQgcm93
IGFuZCBjb2x1bW4gcG9zaXRpb24uICBUaGVuIG1vdmUgdGhlIHJlYWRpbmcgY3Vyc29yIHRvIHRo
ZQorZW5kIG9mIHRoZSBhcmVhIHRvIGJlIGRlZmluZWQgYXMgYSB3aW5kb3csIGFuZCBwcmVzcyBz
cGVha3VwICsgZjIgYWdhaW4uCisgSWYgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSBsaW5lIGluIHRo
ZSB3aW5kb3csIFNwZWFrdXAgd2lsbCB0ZWxsIHlvdQordGhhdCB0aGUgd2luZG93IGVuZHMgYXQg
dGhlIGluZGljYXRlZCByb3cgYW5kIGNvbHVtbiBwb3NpdGlvbi4gIElmIHRoZXJlCitpcyBvbmx5
IG9uZSBsaW5lIGluIHRoZSB3aW5kb3csIHRoZW4gU3BlYWt1cCB3aWxsIHRlbGwgeW91IHRoYXQg
dGhlCit3aW5kb3cgaXMgdGhlIHNwZWNpZmllZCBsaW5lIG9uIHRoZSBzY3JlZW4uICBJZiB5b3Ug
YXJlIG9ubHkgZGVmaW5pbmcgYQorb25lIGxpbmUgd2luZG93LCB5b3UgY2FuIGp1c3QgcHJlc3Mg
c3BlYWt1cCArIGYyIHR3aWNlIGFmdGVyIHBsYWNpbmcgdGhlCityZWFkaW5nIGN1cnNvciBvbiB0
aGUgbGluZSB5b3Ugd2FudCB0byBkZWZpbmUgYXMgYSB3aW5kb3cuICBJdCBpcyBub3QKK25lY2Vz
c2FyeSB0byBwb3NpdGlvbiB0aGUgcmVhZGluZyBjdXJzb3IgYXQgdGhlIGVuZCBvZiB0aGUgbGlu
ZSBpbiBvcmRlcgordG8gZGVmaW5lIHRoZSB3aG9sZSBsaW5lIGFzIGEgd2luZG93LgorCisgICAg
ICAgICAgICAgICAgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlCisgICAgICAgICAgICAg
ICAgICBWZXJzaW9uIDEuMiwgTm92ZW1iZXIgMjAwMgorCisKKyBDb3B5cmlnaHQgKEMpIDIwMDAs
MjAwMSwyMDAyICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgICAgNTkgVGVtcGxl
IFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorIEV2ZXJ5b25l
IGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcworIG9m
IHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLgor
CisKKzAuIFBSRUFNQkxFCisKK1RoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZSBpcyB0byBtYWtl
IGEgbWFudWFsLCB0ZXh0Ym9vaywgb3Igb3RoZXIKK2Z1bmN0aW9uYWwgYW5kIHVzZWZ1bCBkb2N1
bWVudCAiZnJlZSIgaW4gdGhlIHNlbnNlIG9mIGZyZWVkb206IHRvCithc3N1cmUgZXZlcnlvbmUg
dGhlIGVmZmVjdGl2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIHJlZGlzdHJpYnV0ZSBpdCwKK3dpdGgg
b3Igd2l0aG91dCBtb2RpZnlpbmcgaXQsIGVpdGhlciBjb21tZXJjaWFsbHkgb3Igbm9uY29tbWVy
Y2lhbGx5LgorU2Vjb25kYXJpbHksIHRoaXMgTGljZW5zZSBwcmVzZXJ2ZXMgZm9yIHRoZSBhdXRo
b3IgYW5kIHB1Ymxpc2hlciBhIHdheQordG8gZ2V0IGNyZWRpdCBmb3IgdGhlaXIgd29yaywgd2hp
bGUgbm90IGJlaW5nIGNvbnNpZGVyZWQgcmVzcG9uc2libGUKK2ZvciBtb2RpZmljYXRpb25zIG1h
ZGUgYnkgb3RoZXJzLgorCitUaGlzIExpY2Vuc2UgaXMgYSBraW5kIG9mICJjb3B5bGVmdCIsIHdo
aWNoIG1lYW5zIHRoYXQgZGVyaXZhdGl2ZQord29ya3Mgb2YgdGhlIGRvY3VtZW50IG11c3QgdGhl
bXNlbHZlcyBiZSBmcmVlIGluIHRoZSBzYW1lIHNlbnNlLiAgSXQKK2NvbXBsZW1lbnRzIHRoZSBH
TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgd2hpY2ggaXMgYSBjb3B5bGVmdAorbGljZW5zZSBk
ZXNpZ25lZCBmb3IgZnJlZSBzb2Z0d2FyZS4KKworV2UgaGF2ZSBkZXNpZ25lZCB0aGlzIExpY2Vu
c2UgaW4gb3JkZXIgdG8gdXNlIGl0IGZvciBtYW51YWxzIGZvciBmcmVlCitzb2Z0d2FyZSwgYmVj
YXVzZSBmcmVlIHNvZnR3YXJlIG5lZWRzIGZyZWUgZG9jdW1lbnRhdGlvbjogYSBmcmVlCitwcm9n
cmFtIHNob3VsZCBjb21lIHdpdGggbWFudWFscyBwcm92aWRpbmcgdGhlIHNhbWUgZnJlZWRvbXMg
dGhhdCB0aGUKK3NvZnR3YXJlIGRvZXMuICBCdXQgdGhpcyBMaWNlbnNlIGlzIG5vdCBsaW1pdGVk
IHRvIHNvZnR3YXJlIG1hbnVhbHM7CitpdCBjYW4gYmUgdXNlZCBmb3IgYW55IHRleHR1YWwgd29y
aywgcmVnYXJkbGVzcyBvZiBzdWJqZWN0IG1hdHRlciBvcgord2hldGhlciBpdCBpcyBwdWJsaXNo
ZWQgYXMgYSBwcmludGVkIGJvb2suICBXZSByZWNvbW1lbmQgdGhpcyBMaWNlbnNlCitwcmluY2lw
YWxseSBmb3Igd29ya3Mgd2hvc2UgcHVycG9zZSBpcyBpbnN0cnVjdGlvbiBvciByZWZlcmVuY2Uu
CisKKworMS4gQVBQTElDQUJJTElUWSBBTkQgREVGSU5JVElPTlMKKworVGhpcyBMaWNlbnNlIGFw
cGxpZXMgdG8gYW55IG1hbnVhbCBvciBvdGhlciB3b3JrLCBpbiBhbnkgbWVkaXVtLCB0aGF0Citj
b250YWlucyBhIG5vdGljZSBwbGFjZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXIgc2F5aW5nIGl0
IGNhbiBiZQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gIFN1
Y2ggYSBub3RpY2UgZ3JhbnRzIGEKK3dvcmxkLXdpZGUsIHJveWFsdHktZnJlZSBsaWNlbnNlLCB1
bmxpbWl0ZWQgaW4gZHVyYXRpb24sIHRvIHVzZSB0aGF0Cit3b3JrIHVuZGVyIHRoZSBjb25kaXRp
b25zIHN0YXRlZCBoZXJlaW4uICBUaGUgIkRvY3VtZW50IiwgYmVsb3csCityZWZlcnMgdG8gYW55
IHN1Y2ggbWFudWFsIG9yIHdvcmsuICBBbnkgbWVtYmVyIG9mIHRoZSBwdWJsaWMgaXMgYQorbGlj
ZW5zZWUsIGFuZCBpcyBhZGRyZXNzZWQgYXMgInlvdSIuICBZb3UgYWNjZXB0IHRoZSBsaWNlbnNl
IGlmIHlvdQorY29weSwgbW9kaWZ5IG9yIGRpc3RyaWJ1dGUgdGhlIHdvcmsgaW4gYSB3YXkgcmVx
dWlyaW5nIHBlcm1pc3Npb24KK3VuZGVyIGNvcHlyaWdodCBsYXcuCisKK0EgIk1vZGlmaWVkIFZl
cnNpb24iIG9mIHRoZSBEb2N1bWVudCBtZWFucyBhbnkgd29yayBjb250YWluaW5nIHRoZQorRG9j
dW1lbnQgb3IgYSBwb3J0aW9uIG9mIGl0LCBlaXRoZXIgY29waWVkIHZlcmJhdGltLCBvciB3aXRo
Cittb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkIGludG8gYW5vdGhlciBsYW5ndWFnZS4K
KworQSAiU2Vjb25kYXJ5IFNlY3Rpb24iIGlzIGEgbmFtZWQgYXBwZW5kaXggb3IgYSBmcm9udC1t
YXR0ZXIgc2VjdGlvbiBvZgordGhlIERvY3VtZW50IHRoYXQgZGVhbHMgZXhjbHVzaXZlbHkgd2l0
aCB0aGUgcmVsYXRpb25zaGlwIG9mIHRoZQorcHVibGlzaGVycyBvciBhdXRob3JzIG9mIHRoZSBE
b2N1bWVudCB0byB0aGUgRG9jdW1lbnQncyBvdmVyYWxsIHN1YmplY3QKKyhvciB0byByZWxhdGVk
IG1hdHRlcnMpIGFuZCBjb250YWlucyBub3RoaW5nIHRoYXQgY291bGQgZmFsbCBkaXJlY3RseQor
d2l0aGluIHRoYXQgb3ZlcmFsbCBzdWJqZWN0LiAgKFRodXMsIGlmIHRoZSBEb2N1bWVudCBpcyBp
biBwYXJ0IGEKK3RleHRib29rIG9mIG1hdGhlbWF0aWNzLCBhIFNlY29uZGFyeSBTZWN0aW9uIG1h
eSBub3QgZXhwbGFpbiBhbnkKK21hdGhlbWF0aWNzLikgIFRoZSByZWxhdGlvbnNoaXAgY291bGQg
YmUgYSBtYXR0ZXIgb2YgaGlzdG9yaWNhbAorY29ubmVjdGlvbiB3aXRoIHRoZSBzdWJqZWN0IG9y
IHdpdGggcmVsYXRlZCBtYXR0ZXJzLCBvciBvZiBsZWdhbCwKK2NvbW1lcmNpYWwsIHBoaWxvc29w
aGljYWwsIGV0aGljYWwgb3IgcG9saXRpY2FsIHBvc2l0aW9uIHJlZ2FyZGluZwordGhlbS4KKwor
VGhlICJJbnZhcmlhbnQgU2VjdGlvbnMiIGFyZSBjZXJ0YWluIFNlY29uZGFyeSBTZWN0aW9ucyB3
aG9zZSB0aXRsZXMKK2FyZSBkZXNpZ25hdGVkLCBhcyBiZWluZyB0aG9zZSBvZiBJbnZhcmlhbnQg
U2VjdGlvbnMsIGluIHRoZSBub3RpY2UKK3RoYXQgc2F5cyB0aGF0IHRoZSBEb2N1bWVudCBpcyBy
ZWxlYXNlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBJZiBhCitzZWN0aW9uIGRvZXMgbm90IGZpdCB0
aGUgYWJvdmUgZGVmaW5pdGlvbiBvZiBTZWNvbmRhcnkgdGhlbiBpdCBpcyBub3QKK2FsbG93ZWQg
dG8gYmUgZGVzaWduYXRlZCBhcyBJbnZhcmlhbnQuICBUaGUgRG9jdW1lbnQgbWF5IGNvbnRhaW4g
emVybworSW52YXJpYW50IFNlY3Rpb25zLiAgSWYgdGhlIERvY3VtZW50IGRvZXMgbm90IGlkZW50
aWZ5IGFueSBJbnZhcmlhbnQKK1NlY3Rpb25zIHRoZW4gdGhlcmUgYXJlIG5vbmUuCisKK1RoZSAi
Q292ZXIgVGV4dHMiIGFyZSBjZXJ0YWluIHNob3J0IHBhc3NhZ2VzIG9mIHRleHQgdGhhdCBhcmUg
bGlzdGVkLAorYXMgRnJvbnQtQ292ZXIgVGV4dHMgb3IgQmFjay1Db3ZlciBUZXh0cywgaW4gdGhl
IG5vdGljZSB0aGF0IHNheXMgdGhhdAordGhlIERvY3VtZW50IGlzIHJlbGVhc2VkIHVuZGVyIHRo
aXMgTGljZW5zZS4gIEEgRnJvbnQtQ292ZXIgVGV4dCBtYXkKK2JlIGF0IG1vc3QgNSB3b3Jkcywg
YW5kIGEgQmFjay1Db3ZlciBUZXh0IG1heSBiZSBhdCBtb3N0IDI1IHdvcmRzLgorCitBICJUcmFu
c3BhcmVudCIgY29weSBvZiB0aGUgRG9jdW1lbnQgbWVhbnMgYSBtYWNoaW5lLXJlYWRhYmxlIGNv
cHksCityZXByZXNlbnRlZCBpbiBhIGZvcm1hdCB3aG9zZSBzcGVjaWZpY2F0aW9uIGlzIGF2YWls
YWJsZSB0byB0aGUKK2dlbmVyYWwgcHVibGljLCB0aGF0IGlzIHN1aXRhYmxlIGZvciByZXZpc2lu
ZyB0aGUgZG9jdW1lbnQKK3N0cmFpZ2h0Zm9yd2FyZGx5IHdpdGggZ2VuZXJpYyB0ZXh0IGVkaXRv
cnMgb3IgKGZvciBpbWFnZXMgY29tcG9zZWQgb2YKK3BpeGVscykgZ2VuZXJpYyBwYWludCBwcm9n
cmFtcyBvciAoZm9yIGRyYXdpbmdzKSBzb21lIHdpZGVseSBhdmFpbGFibGUKK2RyYXdpbmcgZWRp
dG9yLCBhbmQgdGhhdCBpcyBzdWl0YWJsZSBmb3IgaW5wdXQgdG8gdGV4dCBmb3JtYXR0ZXJzIG9y
Citmb3IgYXV0b21hdGljIHRyYW5zbGF0aW9uIHRvIGEgdmFyaWV0eSBvZiBmb3JtYXRzIHN1aXRh
YmxlIGZvciBpbnB1dAordG8gdGV4dCBmb3JtYXR0ZXJzLiAgQSBjb3B5IG1hZGUgaW4gYW4gb3Ro
ZXJ3aXNlIFRyYW5zcGFyZW50IGZpbGUKK2Zvcm1hdCB3aG9zZSBtYXJrdXAsIG9yIGFic2VuY2Ug
b2YgbWFya3VwLCBoYXMgYmVlbiBhcnJhbmdlZCB0byB0aHdhcnQKK29yIGRpc2NvdXJhZ2Ugc3Vi
c2VxdWVudCBtb2RpZmljYXRpb24gYnkgcmVhZGVycyBpcyBub3QgVHJhbnNwYXJlbnQuCitBbiBp
bWFnZSBmb3JtYXQgaXMgbm90IFRyYW5zcGFyZW50IGlmIHVzZWQgZm9yIGFueSBzdWJzdGFudGlh
bCBhbW91bnQKK29mIHRleHQuICBBIGNvcHkgdGhhdCBpcyBub3QgIlRyYW5zcGFyZW50IiBpcyBj
YWxsZWQgIk9wYXF1ZSIuCisKK0V4YW1wbGVzIG9mIHN1aXRhYmxlIGZvcm1hdHMgZm9yIFRyYW5z
cGFyZW50IGNvcGllcyBpbmNsdWRlIHBsYWluCitBU0NJSSB3aXRob3V0IG1hcmt1cCwgVGV4aW5m
byBpbnB1dCBmb3JtYXQsIExhVGVYIGlucHV0IGZvcm1hdCwgU0dNTAorb3IgWE1MIHVzaW5nIGEg
cHVibGljbHkgYXZhaWxhYmxlIERURCwgYW5kIHN0YW5kYXJkLWNvbmZvcm1pbmcgc2ltcGxlCitI
VE1MLCBQb3N0U2NyaXB0IG9yIFBERiBkZXNpZ25lZCBmb3IgaHVtYW4gbW9kaWZpY2F0aW9uLiAg
RXhhbXBsZXMgb2YKK3RyYW5zcGFyZW50IGltYWdlIGZvcm1hdHMgaW5jbHVkZSBQTkcsIFhDRiBh
bmQgSlBHLiAgT3BhcXVlIGZvcm1hdHMKK2luY2x1ZGUgcHJvcHJpZXRhcnkgZm9ybWF0cyB0aGF0
IGNhbiBiZSByZWFkIGFuZCBlZGl0ZWQgb25seSBieQorcHJvcHJpZXRhcnkgd29yZCBwcm9jZXNz
b3JzLCBTR01MIG9yIFhNTCBmb3Igd2hpY2ggdGhlIERURCBhbmQvb3IKK3Byb2Nlc3NpbmcgdG9v
bHMgYXJlIG5vdCBnZW5lcmFsbHkgYXZhaWxhYmxlLCBhbmQgdGhlCittYWNoaW5lLWdlbmVyYXRl
ZCBIVE1MLCBQb3N0U2NyaXB0IG9yIFBERiBwcm9kdWNlZCBieSBzb21lIHdvcmQKK3Byb2Nlc3Nv
cnMgZm9yIG91dHB1dCBwdXJwb3NlcyBvbmx5LgorCitUaGUgIlRpdGxlIFBhZ2UiIG1lYW5zLCBm
b3IgYSBwcmludGVkIGJvb2ssIHRoZSB0aXRsZSBwYWdlIGl0c2VsZiwKK3BsdXMgc3VjaCBmb2xs
b3dpbmcgcGFnZXMgYXMgYXJlIG5lZWRlZCB0byBob2xkLCBsZWdpYmx5LCB0aGUgbWF0ZXJpYWwK
K3RoaXMgTGljZW5zZSByZXF1aXJlcyB0byBhcHBlYXIgaW4gdGhlIHRpdGxlIHBhZ2UuICBGb3Ig
d29ya3MgaW4KK2Zvcm1hdHMgd2hpY2ggZG8gbm90IGhhdmUgYW55IHRpdGxlIHBhZ2UgYXMgc3Vj
aCwgIlRpdGxlIFBhZ2UiIG1lYW5zCit0aGUgdGV4dCBuZWFyIHRoZSBtb3N0IHByb21pbmVudCBh
cHBlYXJhbmNlIG9mIHRoZSB3b3JrJ3MgdGl0bGUsCitwcmVjZWRpbmcgdGhlIGJlZ2lubmluZyBv
ZiB0aGUgYm9keSBvZiB0aGUgdGV4dC4KKworQSBzZWN0aW9uICJFbnRpdGxlZCBYWVoiIG1lYW5z
IGEgbmFtZWQgc3VidW5pdCBvZiB0aGUgRG9jdW1lbnQgd2hvc2UKK3RpdGxlIGVpdGhlciBpcyBw
cmVjaXNlbHkgWFlaIG9yIGNvbnRhaW5zIFhZWiBpbiBwYXJlbnRoZXNlcyBmb2xsb3dpbmcKK3Rl
eHQgdGhhdCB0cmFuc2xhdGVzIFhZWiBpbiBhbm90aGVyIGxhbmd1YWdlLiAgKEhlcmUgWFlaIHN0
YW5kcyBmb3IgYQorc3BlY2lmaWMgc2VjdGlvbiBuYW1lIG1lbnRpb25lZCBiZWxvdywgc3VjaCBh
cyAiQWNrbm93bGVkZ2VtZW50cyIsCisiRGVkaWNhdGlvbnMiLCAiRW5kb3JzZW1lbnRzIiwgb3Ig
Ikhpc3RvcnkiLikgIFRvICJQcmVzZXJ2ZSB0aGUgVGl0bGUiCitvZiBzdWNoIGEgc2VjdGlvbiB3
aGVuIHlvdSBtb2RpZnkgdGhlIERvY3VtZW50IG1lYW5zIHRoYXQgaXQgcmVtYWlucyBhCitzZWN0
aW9uICJFbnRpdGxlZCBYWVoiIGFjY29yZGluZyB0byB0aGlzIGRlZmluaXRpb24uCisKK1RoZSBE
b2N1bWVudCBtYXkgaW5jbHVkZSBXYXJyYW50eSBEaXNjbGFpbWVycyBuZXh0IHRvIHRoZSBub3Rp
Y2Ugd2hpY2gKK3N0YXRlcyB0aGF0IHRoaXMgTGljZW5zZSBhcHBsaWVzIHRvIHRoZSBEb2N1bWVu
dC4gIFRoZXNlIFdhcnJhbnR5CitEaXNjbGFpbWVycyBhcmUgY29uc2lkZXJlZCB0byBiZSBpbmNs
dWRlZCBieSByZWZlcmVuY2UgaW4gdGhpcworTGljZW5zZSwgYnV0IG9ubHkgYXMgcmVnYXJkcyBk
aXNjbGFpbWluZyB3YXJyYW50aWVzOiBhbnkgb3RoZXIKK2ltcGxpY2F0aW9uIHRoYXQgdGhlc2Ug
V2FycmFudHkgRGlzY2xhaW1lcnMgbWF5IGhhdmUgaXMgdm9pZCBhbmQgaGFzCitubyBlZmZlY3Qg
b24gdGhlIG1lYW5pbmcgb2YgdGhpcyBMaWNlbnNlLgorCisKKzIuIFZFUkJBVElNIENPUFlJTkcK
KworWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBEb2N1bWVudCBpbiBhbnkgbWVkaXVt
LCBlaXRoZXIKK2NvbW1lcmNpYWxseSBvciBub25jb21tZXJjaWFsbHksIHByb3ZpZGVkIHRoYXQg
dGhpcyBMaWNlbnNlLCB0aGUKK2NvcHlyaWdodCBub3RpY2VzLCBhbmQgdGhlIGxpY2Vuc2Ugbm90
aWNlIHNheWluZyB0aGlzIExpY2Vuc2UgYXBwbGllcwordG8gdGhlIERvY3VtZW50IGFyZSByZXBy
b2R1Y2VkIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IHlvdSBhZGQgbm8gb3RoZXIKK2NvbmRpdGlv
bnMgd2hhdHNvZXZlciB0byB0aG9zZSBvZiB0aGlzIExpY2Vuc2UuICBZb3UgbWF5IG5vdCB1c2UK
K3RlY2huaWNhbCBtZWFzdXJlcyB0byBvYnN0cnVjdCBvciBjb250cm9sIHRoZSByZWFkaW5nIG9y
IGZ1cnRoZXIKK2NvcHlpbmcgb2YgdGhlIGNvcGllcyB5b3UgbWFrZSBvciBkaXN0cmlidXRlLiAg
SG93ZXZlciwgeW91IG1heSBhY2NlcHQKK2NvbXBlbnNhdGlvbiBpbiBleGNoYW5nZSBmb3IgY29w
aWVzLiAgSWYgeW91IGRpc3RyaWJ1dGUgYSBsYXJnZSBlbm91Z2gKK251bWJlciBvZiBjb3BpZXMg
eW91IG11c3QgYWxzbyBmb2xsb3cgdGhlIGNvbmRpdGlvbnMgaW4gc2VjdGlvbiAzLgorCitZb3Ug
bWF5IGFsc28gbGVuZCBjb3BpZXMsIHVuZGVyIHRoZSBzYW1lIGNvbmRpdGlvbnMgc3RhdGVkIGFi
b3ZlLCBhbmQKK3lvdSBtYXkgcHVibGljbHkgZGlzcGxheSBjb3BpZXMuCisKKworMy4gQ09QWUlO
RyBJTiBRVUFOVElUWQorCitJZiB5b3UgcHVibGlzaCBwcmludGVkIGNvcGllcyAob3IgY29waWVz
IGluIG1lZGlhIHRoYXQgY29tbW9ubHkgaGF2ZQorcHJpbnRlZCBjb3ZlcnMpIG9mIHRoZSBEb2N1
bWVudCwgbnVtYmVyaW5nIG1vcmUgdGhhbiAxMDAsIGFuZCB0aGUKK0RvY3VtZW50J3MgbGljZW5z
ZSBub3RpY2UgcmVxdWlyZXMgQ292ZXIgVGV4dHMsIHlvdSBtdXN0IGVuY2xvc2UgdGhlCitjb3Bp
ZXMgaW4gY292ZXJzIHRoYXQgY2FycnksIGNsZWFybHkgYW5kIGxlZ2libHksIGFsbCB0aGVzZSBD
b3ZlcgorVGV4dHM6IEZyb250LUNvdmVyIFRleHRzIG9uIHRoZSBmcm9udCBjb3ZlciwgYW5kIEJh
Y2stQ292ZXIgVGV4dHMgb24KK3RoZSBiYWNrIGNvdmVyLiAgQm90aCBjb3ZlcnMgbXVzdCBhbHNv
IGNsZWFybHkgYW5kIGxlZ2libHkgaWRlbnRpZnkKK3lvdSBhcyB0aGUgcHVibGlzaGVyIG9mIHRo
ZXNlIGNvcGllcy4gIFRoZSBmcm9udCBjb3ZlciBtdXN0IHByZXNlbnQKK3RoZSBmdWxsIHRpdGxl
IHdpdGggYWxsIHdvcmRzIG9mIHRoZSB0aXRsZSBlcXVhbGx5IHByb21pbmVudCBhbmQKK3Zpc2li
bGUuICBZb3UgbWF5IGFkZCBvdGhlciBtYXRlcmlhbCBvbiB0aGUgY292ZXJzIGluIGFkZGl0aW9u
LgorQ29weWluZyB3aXRoIGNoYW5nZXMgbGltaXRlZCB0byB0aGUgY292ZXJzLCBhcyBsb25nIGFz
IHRoZXkgcHJlc2VydmUKK3RoZSB0aXRsZSBvZiB0aGUgRG9jdW1lbnQgYW5kIHNhdGlzZnkgdGhl
c2UgY29uZGl0aW9ucywgY2FuIGJlIHRyZWF0ZWQKK2FzIHZlcmJhdGltIGNvcHlpbmcgaW4gb3Ro
ZXIgcmVzcGVjdHMuCisKK0lmIHRoZSByZXF1aXJlZCB0ZXh0cyBmb3IgZWl0aGVyIGNvdmVyIGFy
ZSB0b28gdm9sdW1pbm91cyB0byBmaXQKK2xlZ2libHksIHlvdSBzaG91bGQgcHV0IHRoZSBmaXJz
dCBvbmVzIGxpc3RlZCAoYXMgbWFueSBhcyBmaXQKK3JlYXNvbmFibHkpIG9uIHRoZSBhY3R1YWwg
Y292ZXIsIGFuZCBjb250aW51ZSB0aGUgcmVzdCBvbnRvIGFkamFjZW50CitwYWdlcy4KKworSWYg
eW91IHB1Ymxpc2ggb3IgZGlzdHJpYnV0ZSBPcGFxdWUgY29waWVzIG9mIHRoZSBEb2N1bWVudCBu
dW1iZXJpbmcKK21vcmUgdGhhbiAxMDAsIHlvdSBtdXN0IGVpdGhlciBpbmNsdWRlIGEgbWFjaGlu
ZS1yZWFkYWJsZSBUcmFuc3BhcmVudAorY29weSBhbG9uZyB3aXRoIGVhY2ggT3BhcXVlIGNvcHks
IG9yIHN0YXRlIGluIG9yIHdpdGggZWFjaCBPcGFxdWUgY29weQorYSBjb21wdXRlci1uZXR3b3Jr
IGxvY2F0aW9uIGZyb20gd2hpY2ggdGhlIGdlbmVyYWwgbmV0d29yay11c2luZworcHVibGljIGhh
cyBhY2Nlc3MgdG8gZG93bmxvYWQgdXNpbmcgcHVibGljLXN0YW5kYXJkIG5ldHdvcmsgcHJvdG9j
b2xzCithIGNvbXBsZXRlIFRyYW5zcGFyZW50IGNvcHkgb2YgdGhlIERvY3VtZW50LCBmcmVlIG9m
IGFkZGVkIG1hdGVyaWFsLgorSWYgeW91IHVzZSB0aGUgbGF0dGVyIG9wdGlvbiwgeW91IG11c3Qg
dGFrZSByZWFzb25hYmx5IHBydWRlbnQgc3RlcHMsCit3aGVuIHlvdSBiZWdpbiBkaXN0cmlidXRp
b24gb2YgT3BhcXVlIGNvcGllcyBpbiBxdWFudGl0eSwgdG8gZW5zdXJlCit0aGF0IHRoaXMgVHJh
bnNwYXJlbnQgY29weSB3aWxsIHJlbWFpbiB0aHVzIGFjY2Vzc2libGUgYXQgdGhlIHN0YXRlZAor
bG9jYXRpb24gdW50aWwgYXQgbGVhc3Qgb25lIHllYXIgYWZ0ZXIgdGhlIGxhc3QgdGltZSB5b3Ug
ZGlzdHJpYnV0ZSBhbgorT3BhcXVlIGNvcHkgKGRpcmVjdGx5IG9yIHRocm91Z2ggeW91ciBhZ2Vu
dHMgb3IgcmV0YWlsZXJzKSBvZiB0aGF0CitlZGl0aW9uIHRvIHRoZSBwdWJsaWMuCisKK0l0IGlz
IHJlcXVlc3RlZCwgYnV0IG5vdCByZXF1aXJlZCwgdGhhdCB5b3UgY29udGFjdCB0aGUgYXV0aG9y
cyBvZiB0aGUKK0RvY3VtZW50IHdlbGwgYmVmb3JlIHJlZGlzdHJpYnV0aW5nIGFueSBsYXJnZSBu
dW1iZXIgb2YgY29waWVzLCB0byBnaXZlCit0aGVtIGEgY2hhbmNlIHRvIHByb3ZpZGUgeW91IHdp
dGggYW4gdXBkYXRlZCB2ZXJzaW9uIG9mIHRoZSBEb2N1bWVudC4KKworCis0LiBNT0RJRklDQVRJ
T05TCisKK1lvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSBhIE1vZGlmaWVkIFZlcnNpb24gb2Yg
dGhlIERvY3VtZW50IHVuZGVyCit0aGUgY29uZGl0aW9ucyBvZiBzZWN0aW9ucyAyIGFuZCAzIGFi
b3ZlLCBwcm92aWRlZCB0aGF0IHlvdSByZWxlYXNlCit0aGUgTW9kaWZpZWQgVmVyc2lvbiB1bmRl
ciBwcmVjaXNlbHkgdGhpcyBMaWNlbnNlLCB3aXRoIHRoZSBNb2RpZmllZAorVmVyc2lvbiBmaWxs
aW5nIHRoZSByb2xlIG9mIHRoZSBEb2N1bWVudCwgdGh1cyBsaWNlbnNpbmcgZGlzdHJpYnV0aW9u
CithbmQgbW9kaWZpY2F0aW9uIG9mIHRoZSBNb2RpZmllZCBWZXJzaW9uIHRvIHdob2V2ZXIgcG9z
c2Vzc2VzIGEgY29weQorb2YgaXQuICBJbiBhZGRpdGlvbiwgeW91IG11c3QgZG8gdGhlc2UgdGhp
bmdzIGluIHRoZSBNb2RpZmllZCBWZXJzaW9uOgorCitBLiBVc2UgaW4gdGhlIFRpdGxlIFBhZ2Ug
KGFuZCBvbiB0aGUgY292ZXJzLCBpZiBhbnkpIGEgdGl0bGUgZGlzdGluY3QKKyAgIGZyb20gdGhh
dCBvZiB0aGUgRG9jdW1lbnQsIGFuZCBmcm9tIHRob3NlIG9mIHByZXZpb3VzIHZlcnNpb25zCisg
ICAod2hpY2ggc2hvdWxkLCBpZiB0aGVyZSB3ZXJlIGFueSwgYmUgbGlzdGVkIGluIHRoZSBIaXN0
b3J5IHNlY3Rpb24KKyAgIG9mIHRoZSBEb2N1bWVudCkuICBZb3UgbWF5IHVzZSB0aGUgc2FtZSB0
aXRsZSBhcyBhIHByZXZpb3VzIHZlcnNpb24KKyAgIGlmIHRoZSBvcmlnaW5hbCBwdWJsaXNoZXIg
b2YgdGhhdCB2ZXJzaW9uIGdpdmVzIHBlcm1pc3Npb24uCitCLiBMaXN0IG9uIHRoZSBUaXRsZSBQ
YWdlLCBhcyBhdXRob3JzLCBvbmUgb3IgbW9yZSBwZXJzb25zIG9yIGVudGl0aWVzCisgICByZXNw
b25zaWJsZSBmb3IgYXV0aG9yc2hpcCBvZiB0aGUgbW9kaWZpY2F0aW9ucyBpbiB0aGUgTW9kaWZp
ZWQKKyAgIFZlcnNpb24sIHRvZ2V0aGVyIHdpdGggYXQgbGVhc3QgZml2ZSBvZiB0aGUgcHJpbmNp
cGFsIGF1dGhvcnMgb2YgdGhlCisgICBEb2N1bWVudCAoYWxsIG9mIGl0cyBwcmluY2lwYWwgYXV0
aG9ycywgaWYgaXQgaGFzIGZld2VyIHRoYW4gZml2ZSksCisgICB1bmxlc3MgdGhleSByZWxlYXNl
IHlvdSBmcm9tIHRoaXMgcmVxdWlyZW1lbnQuCitDLiBTdGF0ZSBvbiB0aGUgVGl0bGUgcGFnZSB0
aGUgbmFtZSBvZiB0aGUgcHVibGlzaGVyIG9mIHRoZQorICAgTW9kaWZpZWQgVmVyc2lvbiwgYXMg
dGhlIHB1Ymxpc2hlci4KK0QuIFByZXNlcnZlIGFsbCB0aGUgY29weXJpZ2h0IG5vdGljZXMgb2Yg
dGhlIERvY3VtZW50LgorRS4gQWRkIGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UgZm9y
IHlvdXIgbW9kaWZpY2F0aW9ucworICAgYWRqYWNlbnQgdG8gdGhlIG90aGVyIGNvcHlyaWdodCBu
b3RpY2VzLgorRi4gSW5jbHVkZSwgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIGNvcHlyaWdodCBub3Rp
Y2VzLCBhIGxpY2Vuc2Ugbm90aWNlCisgICBnaXZpbmcgdGhlIHB1YmxpYyBwZXJtaXNzaW9uIHRv
IHVzZSB0aGUgTW9kaWZpZWQgVmVyc2lvbiB1bmRlciB0aGUKKyAgIHRlcm1zIG9mIHRoaXMgTGlj
ZW5zZSwgaW4gdGhlIGZvcm0gc2hvd24gaW4gdGhlIEFkZGVuZHVtIGJlbG93LgorRy4gUHJlc2Vy
dmUgaW4gdGhhdCBsaWNlbnNlIG5vdGljZSB0aGUgZnVsbCBsaXN0cyBvZiBJbnZhcmlhbnQgU2Vj
dGlvbnMKKyAgIGFuZCByZXF1aXJlZCBDb3ZlciBUZXh0cyBnaXZlbiBpbiB0aGUgRG9jdW1lbnQn
cyBsaWNlbnNlIG5vdGljZS4KK0guIEluY2x1ZGUgYW4gdW5hbHRlcmVkIGNvcHkgb2YgdGhpcyBM
aWNlbnNlLgorSS4gUHJlc2VydmUgdGhlIHNlY3Rpb24gRW50aXRsZWQgIkhpc3RvcnkiLCBQcmVz
ZXJ2ZSBpdHMgVGl0bGUsIGFuZCBhZGQKKyAgIHRvIGl0IGFuIGl0ZW0gc3RhdGluZyBhdCBsZWFz
dCB0aGUgdGl0bGUsIHllYXIsIG5ldyBhdXRob3JzLCBhbmQKKyAgIHB1Ymxpc2hlciBvZiB0aGUg
TW9kaWZpZWQgVmVyc2lvbiBhcyBnaXZlbiBvbiB0aGUgVGl0bGUgUGFnZS4gIElmCisgICB0aGVy
ZSBpcyBubyBzZWN0aW9uIEVudGl0bGVkICJIaXN0b3J5IiBpbiB0aGUgRG9jdW1lbnQsIGNyZWF0
ZSBvbmUKKyAgIHN0YXRpbmcgdGhlIHRpdGxlLCB5ZWFyLCBhdXRob3JzLCBhbmQgcHVibGlzaGVy
IG9mIHRoZSBEb2N1bWVudCBhcworICAgZ2l2ZW4gb24gaXRzIFRpdGxlIFBhZ2UsIHRoZW4gYWRk
IGFuIGl0ZW0gZGVzY3JpYmluZyB0aGUgTW9kaWZpZWQKKyAgIFZlcnNpb24gYXMgc3RhdGVkIGlu
IHRoZSBwcmV2aW91cyBzZW50ZW5jZS4KK0ouIFByZXNlcnZlIHRoZSBuZXR3b3JrIGxvY2F0aW9u
LCBpZiBhbnksIGdpdmVuIGluIHRoZSBEb2N1bWVudCBmb3IKKyAgIHB1YmxpYyBhY2Nlc3MgdG8g
YSBUcmFuc3BhcmVudCBjb3B5IG9mIHRoZSBEb2N1bWVudCwgYW5kIGxpa2V3aXNlCisgICB0aGUg
bmV0d29yayBsb2NhdGlvbnMgZ2l2ZW4gaW4gdGhlIERvY3VtZW50IGZvciBwcmV2aW91cyB2ZXJz
aW9ucworICAgaXQgd2FzIGJhc2VkIG9uLiAgVGhlc2UgbWF5IGJlIHBsYWNlZCBpbiB0aGUgIkhp
c3RvcnkiIHNlY3Rpb24uCisgICBZb3UgbWF5IG9taXQgYSBuZXR3b3JrIGxvY2F0aW9uIGZvciBh
IHdvcmsgdGhhdCB3YXMgcHVibGlzaGVkIGF0CisgICBsZWFzdCBmb3VyIHllYXJzIGJlZm9yZSB0
aGUgRG9jdW1lbnQgaXRzZWxmLCBvciBpZiB0aGUgb3JpZ2luYWwKKyAgIHB1Ymxpc2hlciBvZiB0
aGUgdmVyc2lvbiBpdCByZWZlcnMgdG8gZ2l2ZXMgcGVybWlzc2lvbi4KK0suIEZvciBhbnkgc2Vj
dGlvbiBFbnRpdGxlZCAiQWNrbm93bGVkZ2VtZW50cyIgb3IgIkRlZGljYXRpb25zIiwKKyAgIFBy
ZXNlcnZlIHRoZSBUaXRsZSBvZiB0aGUgc2VjdGlvbiwgYW5kIHByZXNlcnZlIGluIHRoZSBzZWN0
aW9uIGFsbAorICAgdGhlIHN1YnN0YW5jZSBhbmQgdG9uZSBvZiBlYWNoIG9mIHRoZSBjb250cmli
dXRvciBhY2tub3dsZWRnZW1lbnRzCisgICBhbmQvb3IgZGVkaWNhdGlvbnMgZ2l2ZW4gdGhlcmVp
bi4KK0wuIFByZXNlcnZlIGFsbCB0aGUgSW52YXJpYW50IFNlY3Rpb25zIG9mIHRoZSBEb2N1bWVu
dCwKKyAgIHVuYWx0ZXJlZCBpbiB0aGVpciB0ZXh0IGFuZCBpbiB0aGVpciB0aXRsZXMuICBTZWN0
aW9uIG51bWJlcnMKKyAgIG9yIHRoZSBlcXVpdmFsZW50IGFyZSBub3QgY29uc2lkZXJlZCBwYXJ0
IG9mIHRoZSBzZWN0aW9uIHRpdGxlcy4KK00uIERlbGV0ZSBhbnkgc2VjdGlvbiBFbnRpdGxlZCAi
RW5kb3JzZW1lbnRzIi4gIFN1Y2ggYSBzZWN0aW9uCisgICBtYXkgbm90IGJlIGluY2x1ZGVkIGlu
IHRoZSBNb2RpZmllZCBWZXJzaW9uLgorTi4gRG8gbm90IHJldGl0bGUgYW55IGV4aXN0aW5nIHNl
Y3Rpb24gdG8gYmUgRW50aXRsZWQgIkVuZG9yc2VtZW50cyIKKyAgIG9yIHRvIGNvbmZsaWN0IGlu
IHRpdGxlIHdpdGggYW55IEludmFyaWFudCBTZWN0aW9uLgorTy4gUHJlc2VydmUgYW55IFdhcnJh
bnR5IERpc2NsYWltZXJzLgorCitJZiB0aGUgTW9kaWZpZWQgVmVyc2lvbiBpbmNsdWRlcyBuZXcg
ZnJvbnQtbWF0dGVyIHNlY3Rpb25zIG9yCithcHBlbmRpY2VzIHRoYXQgcXVhbGlmeSBhcyBTZWNv
bmRhcnkgU2VjdGlvbnMgYW5kIGNvbnRhaW4gbm8gbWF0ZXJpYWwKK2NvcGllZCBmcm9tIHRoZSBE
b2N1bWVudCwgeW91IG1heSBhdCB5b3VyIG9wdGlvbiBkZXNpZ25hdGUgc29tZSBvciBhbGwKK29m
IHRoZXNlIHNlY3Rpb25zIGFzIGludmFyaWFudC4gIFRvIGRvIHRoaXMsIGFkZCB0aGVpciB0aXRs
ZXMgdG8gdGhlCitsaXN0IG9mIEludmFyaWFudCBTZWN0aW9ucyBpbiB0aGUgTW9kaWZpZWQgVmVy
c2lvbidzIGxpY2Vuc2Ugbm90aWNlLgorVGhlc2UgdGl0bGVzIG11c3QgYmUgZGlzdGluY3QgZnJv
bSBhbnkgb3RoZXIgc2VjdGlvbiB0aXRsZXMuCisKK1lvdSBtYXkgYWRkIGEgc2VjdGlvbiBFbnRp
dGxlZCAiRW5kb3JzZW1lbnRzIiwgcHJvdmlkZWQgaXQgY29udGFpbnMKK25vdGhpbmcgYnV0IGVu
ZG9yc2VtZW50cyBvZiB5b3VyIE1vZGlmaWVkIFZlcnNpb24gYnkgdmFyaW91cworcGFydGllcy0t
Zm9yIGV4YW1wbGUsIHN0YXRlbWVudHMgb2YgcGVlciByZXZpZXcgb3IgdGhhdCB0aGUgdGV4dCBo
YXMKK2JlZW4gYXBwcm92ZWQgYnkgYW4gb3JnYW5pemF0aW9uIGFzIHRoZSBhdXRob3JpdGF0aXZl
IGRlZmluaXRpb24gb2YgYQorc3RhbmRhcmQuCisKK1lvdSBtYXkgYWRkIGEgcGFzc2FnZSBvZiB1
cCB0byBmaXZlIHdvcmRzIGFzIGEgRnJvbnQtQ292ZXIgVGV4dCwgYW5kIGEKK3Bhc3NhZ2Ugb2Yg
dXAgdG8gMjUgd29yZHMgYXMgYSBCYWNrLUNvdmVyIFRleHQsIHRvIHRoZSBlbmQgb2YgdGhlIGxp
c3QKK29mIENvdmVyIFRleHRzIGluIHRoZSBNb2RpZmllZCBWZXJzaW9uLiAgT25seSBvbmUgcGFz
c2FnZSBvZgorRnJvbnQtQ292ZXIgVGV4dCBhbmQgb25lIG9mIEJhY2stQ292ZXIgVGV4dCBtYXkg
YmUgYWRkZWQgYnkgKG9yCit0aHJvdWdoIGFycmFuZ2VtZW50cyBtYWRlIGJ5KSBhbnkgb25lIGVu
dGl0eS4gIElmIHRoZSBEb2N1bWVudCBhbHJlYWR5CitpbmNsdWRlcyBhIGNvdmVyIHRleHQgZm9y
IHRoZSBzYW1lIGNvdmVyLCBwcmV2aW91c2x5IGFkZGVkIGJ5IHlvdSBvcgorYnkgYXJyYW5nZW1l
bnQgbWFkZSBieSB0aGUgc2FtZSBlbnRpdHkgeW91IGFyZSBhY3Rpbmcgb24gYmVoYWxmIG9mLAor
eW91IG1heSBub3QgYWRkIGFub3RoZXI7IGJ1dCB5b3UgbWF5IHJlcGxhY2UgdGhlIG9sZCBvbmUs
IG9uIGV4cGxpY2l0CitwZXJtaXNzaW9uIGZyb20gdGhlIHByZXZpb3VzIHB1Ymxpc2hlciB0aGF0
IGFkZGVkIHRoZSBvbGQgb25lLgorCitUaGUgYXV0aG9yKHMpIGFuZCBwdWJsaXNoZXIocykgb2Yg
dGhlIERvY3VtZW50IGRvIG5vdCBieSB0aGlzIExpY2Vuc2UKK2dpdmUgcGVybWlzc2lvbiB0byB1
c2UgdGhlaXIgbmFtZXMgZm9yIHB1YmxpY2l0eSBmb3Igb3IgdG8gYXNzZXJ0IG9yCitpbXBseSBl
bmRvcnNlbWVudCBvZiBhbnkgTW9kaWZpZWQgVmVyc2lvbi4KKworCis1LiBDT01CSU5JTkcgRE9D
VU1FTlRTCisKK1lvdSBtYXkgY29tYmluZSB0aGUgRG9jdW1lbnQgd2l0aCBvdGhlciBkb2N1bWVu
dHMgcmVsZWFzZWQgdW5kZXIgdGhpcworTGljZW5zZSwgdW5kZXIgdGhlIHRlcm1zIGRlZmluZWQg
aW4gc2VjdGlvbiA0IGFib3ZlIGZvciBtb2RpZmllZAordmVyc2lvbnMsIHByb3ZpZGVkIHRoYXQg
eW91IGluY2x1ZGUgaW4gdGhlIGNvbWJpbmF0aW9uIGFsbCBvZiB0aGUKK0ludmFyaWFudCBTZWN0
aW9ucyBvZiBhbGwgb2YgdGhlIG9yaWdpbmFsIGRvY3VtZW50cywgdW5tb2RpZmllZCwgYW5kCits
aXN0IHRoZW0gYWxsIGFzIEludmFyaWFudCBTZWN0aW9ucyBvZiB5b3VyIGNvbWJpbmVkIHdvcmsg
aW4gaXRzCitsaWNlbnNlIG5vdGljZSwgYW5kIHRoYXQgeW91IHByZXNlcnZlIGFsbCB0aGVpciBX
YXJyYW50eSBEaXNjbGFpbWVycy4KKworVGhlIGNvbWJpbmVkIHdvcmsgbmVlZCBvbmx5IGNvbnRh
aW4gb25lIGNvcHkgb2YgdGhpcyBMaWNlbnNlLCBhbmQKK211bHRpcGxlIGlkZW50aWNhbCBJbnZh
cmlhbnQgU2VjdGlvbnMgbWF5IGJlIHJlcGxhY2VkIHdpdGggYSBzaW5nbGUKK2NvcHkuICBJZiB0
aGVyZSBhcmUgbXVsdGlwbGUgSW52YXJpYW50IFNlY3Rpb25zIHdpdGggdGhlIHNhbWUgbmFtZSBi
dXQKK2RpZmZlcmVudCBjb250ZW50cywgbWFrZSB0aGUgdGl0bGUgb2YgZWFjaCBzdWNoIHNlY3Rp
b24gdW5pcXVlIGJ5CithZGRpbmcgYXQgdGhlIGVuZCBvZiBpdCwgaW4gcGFyZW50aGVzZXMsIHRo
ZSBuYW1lIG9mIHRoZSBvcmlnaW5hbAorYXV0aG9yIG9yIHB1Ymxpc2hlciBvZiB0aGF0IHNlY3Rp
b24gaWYga25vd24sIG9yIGVsc2UgYSB1bmlxdWUgbnVtYmVyLgorTWFrZSB0aGUgc2FtZSBhZGp1
c3RtZW50IHRvIHRoZSBzZWN0aW9uIHRpdGxlcyBpbiB0aGUgbGlzdCBvZgorSW52YXJpYW50IFNl
Y3Rpb25zIGluIHRoZSBsaWNlbnNlIG5vdGljZSBvZiB0aGUgY29tYmluZWQgd29yay4KKworSW4g
dGhlIGNvbWJpbmF0aW9uLCB5b3UgbXVzdCBjb21iaW5lIGFueSBzZWN0aW9ucyBFbnRpdGxlZCAi
SGlzdG9yeSIKK2luIHRoZSB2YXJpb3VzIG9yaWdpbmFsIGRvY3VtZW50cywgZm9ybWluZyBvbmUg
c2VjdGlvbiBFbnRpdGxlZAorIkhpc3RvcnkiOyBsaWtld2lzZSBjb21iaW5lIGFueSBzZWN0aW9u
cyBFbnRpdGxlZCAiQWNrbm93bGVkZ2VtZW50cyIsCithbmQgYW55IHNlY3Rpb25zIEVudGl0bGVk
ICJEZWRpY2F0aW9ucyIuICBZb3UgbXVzdCBkZWxldGUgYWxsIHNlY3Rpb25zCitFbnRpdGxlZCAi
RW5kb3JzZW1lbnRzIi4KKworCis2LiBDT0xMRUNUSU9OUyBPRiBET0NVTUVOVFMKKworWW91IG1h
eSBtYWtlIGEgY29sbGVjdGlvbiBjb25zaXN0aW5nIG9mIHRoZSBEb2N1bWVudCBhbmQgb3RoZXIg
ZG9jdW1lbnRzCityZWxlYXNlZCB1bmRlciB0aGlzIExpY2Vuc2UsIGFuZCByZXBsYWNlIHRoZSBp
bmRpdmlkdWFsIGNvcGllcyBvZiB0aGlzCitMaWNlbnNlIGluIHRoZSB2YXJpb3VzIGRvY3VtZW50
cyB3aXRoIGEgc2luZ2xlIGNvcHkgdGhhdCBpcyBpbmNsdWRlZCBpbgordGhlIGNvbGxlY3Rpb24s
IHByb3ZpZGVkIHRoYXQgeW91IGZvbGxvdyB0aGUgcnVsZXMgb2YgdGhpcyBMaWNlbnNlIGZvcgor
dmVyYmF0aW0gY29weWluZyBvZiBlYWNoIG9mIHRoZSBkb2N1bWVudHMgaW4gYWxsIG90aGVyIHJl
c3BlY3RzLgorCitZb3UgbWF5IGV4dHJhY3QgYSBzaW5nbGUgZG9jdW1lbnQgZnJvbSBzdWNoIGEg
Y29sbGVjdGlvbiwgYW5kIGRpc3RyaWJ1dGUKK2l0IGluZGl2aWR1YWxseSB1bmRlciB0aGlzIExp
Y2Vuc2UsIHByb3ZpZGVkIHlvdSBpbnNlcnQgYSBjb3B5IG9mIHRoaXMKK0xpY2Vuc2UgaW50byB0
aGUgZXh0cmFjdGVkIGRvY3VtZW50LCBhbmQgZm9sbG93IHRoaXMgTGljZW5zZSBpbiBhbGwKK290
aGVyIHJlc3BlY3RzIHJlZ2FyZGluZyB2ZXJiYXRpbSBjb3B5aW5nIG9mIHRoYXQgZG9jdW1lbnQu
CisKKworNy4gQUdHUkVHQVRJT04gV0lUSCBJTkRFUEVOREVOVCBXT1JLUworCitBIGNvbXBpbGF0
aW9uIG9mIHRoZSBEb2N1bWVudCBvciBpdHMgZGVyaXZhdGl2ZXMgd2l0aCBvdGhlciBzZXBhcmF0
ZQorYW5kIGluZGVwZW5kZW50IGRvY3VtZW50cyBvciB3b3JrcywgaW4gb3Igb24gYSB2b2x1bWUg
b2YgYSBzdG9yYWdlIG9yCitkaXN0cmlidXRpb24gbWVkaXVtLCBpcyBjYWxsZWQgYW4gImFnZ3Jl
Z2F0ZSIgaWYgdGhlIGNvcHlyaWdodAorcmVzdWx0aW5nIGZyb20gdGhlIGNvbXBpbGF0aW9uIGlz
IG5vdCB1c2VkIHRvIGxpbWl0IHRoZSBsZWdhbCByaWdodHMKK29mIHRoZSBjb21waWxhdGlvbidz
IHVzZXJzIGJleW9uZCB3aGF0IHRoZSBpbmRpdmlkdWFsIHdvcmtzIHBlcm1pdC4KK1doZW4gdGhl
IERvY3VtZW50IGlzIGluY2x1ZGVkIGluIGFuIGFnZ3JlZ2F0ZSwgdGhpcyBMaWNlbnNlIGRvZXMg
bm90CithcHBseSB0byB0aGUgb3RoZXIgd29ya3MgaW4gdGhlIGFnZ3JlZ2F0ZSB3aGljaCBhcmUg
bm90IHRoZW1zZWx2ZXMKK2Rlcml2YXRpdmUgd29ya3Mgb2YgdGhlIERvY3VtZW50LgorCitJZiB0
aGUgQ292ZXIgVGV4dCByZXF1aXJlbWVudCBvZiBzZWN0aW9uIDMgaXMgYXBwbGljYWJsZSB0byB0
aGVzZQorY29waWVzIG9mIHRoZSBEb2N1bWVudCwgdGhlbiBpZiB0aGUgRG9jdW1lbnQgaXMgbGVz
cyB0aGFuIG9uZSBoYWxmIG9mCit0aGUgZW50aXJlIGFnZ3JlZ2F0ZSwgdGhlIERvY3VtZW50J3Mg
Q292ZXIgVGV4dHMgbWF5IGJlIHBsYWNlZCBvbgorY292ZXJzIHRoYXQgYnJhY2tldCB0aGUgRG9j
dW1lbnQgd2l0aGluIHRoZSBhZ2dyZWdhdGUsIG9yIHRoZQorZWxlY3Ryb25pYyBlcXVpdmFsZW50
IG9mIGNvdmVycyBpZiB0aGUgRG9jdW1lbnQgaXMgaW4gZWxlY3Ryb25pYyBmb3JtLgorT3RoZXJ3
aXNlIHRoZXkgbXVzdCBhcHBlYXIgb24gcHJpbnRlZCBjb3ZlcnMgdGhhdCBicmFja2V0IHRoZSB3
aG9sZQorYWdncmVnYXRlLgorCisKKzguIFRSQU5TTEFUSU9OCisKK1RyYW5zbGF0aW9uIGlzIGNv
bnNpZGVyZWQgYSBraW5kIG9mIG1vZGlmaWNhdGlvbiwgc28geW91IG1heQorZGlzdHJpYnV0ZSB0
cmFuc2xhdGlvbnMgb2YgdGhlIERvY3VtZW50IHVuZGVyIHRoZSB0ZXJtcyBvZiBzZWN0aW9uIDQu
CitSZXBsYWNpbmcgSW52YXJpYW50IFNlY3Rpb25zIHdpdGggdHJhbnNsYXRpb25zIHJlcXVpcmVz
IHNwZWNpYWwKK3Blcm1pc3Npb24gZnJvbSB0aGVpciBjb3B5cmlnaHQgaG9sZGVycywgYnV0IHlv
dSBtYXkgaW5jbHVkZQordHJhbnNsYXRpb25zIG9mIHNvbWUgb3IgYWxsIEludmFyaWFudCBTZWN0
aW9ucyBpbiBhZGRpdGlvbiB0byB0aGUKK29yaWdpbmFsIHZlcnNpb25zIG9mIHRoZXNlIEludmFy
aWFudCBTZWN0aW9ucy4gIFlvdSBtYXkgaW5jbHVkZSBhCit0cmFuc2xhdGlvbiBvZiB0aGlzIExp
Y2Vuc2UsIGFuZCBhbGwgdGhlIGxpY2Vuc2Ugbm90aWNlcyBpbiB0aGUKK0RvY3VtZW50LCBhbmQg
YW55IFdhcnJhbnR5IERpc2NsYWltZXJzLCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIGluY2x1ZGUK
K3RoZSBvcmlnaW5hbCBFbmdsaXNoIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIGFuZCB0aGUgb3Jp
Z2luYWwgdmVyc2lvbnMKK29mIHRob3NlIG5vdGljZXMgYW5kIGRpc2NsYWltZXJzLiAgSW4gY2Fz
ZSBvZiBhIGRpc2FncmVlbWVudCBiZXR3ZWVuCit0aGUgdHJhbnNsYXRpb24gYW5kIHRoZSBvcmln
aW5hbCB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSBvciBhIG5vdGljZQorb3IgZGlzY2xhaW1lciwg
dGhlIG9yaWdpbmFsIHZlcnNpb24gd2lsbCBwcmV2YWlsLgorCitJZiBhIHNlY3Rpb24gaW4gdGhl
IERvY3VtZW50IGlzIEVudGl0bGVkICJBY2tub3dsZWRnZW1lbnRzIiwKKyJEZWRpY2F0aW9ucyIs
IG9yICJIaXN0b3J5IiwgdGhlIHJlcXVpcmVtZW50IChzZWN0aW9uIDQpIHRvIFByZXNlcnZlCitp
dHMgVGl0bGUgKHNlY3Rpb24gMSkgd2lsbCB0eXBpY2FsbHkgcmVxdWlyZSBjaGFuZ2luZyB0aGUg
YWN0dWFsCit0aXRsZS4KKworCis5LiBURVJNSU5BVElPTgorCitZb3UgbWF5IG5vdCBjb3B5LCBt
b2RpZnksIHN1YmxpY2Vuc2UsIG9yIGRpc3RyaWJ1dGUgdGhlIERvY3VtZW50IGV4Y2VwdAorYXMg
ZXhwcmVzc2x5IHByb3ZpZGVkIGZvciB1bmRlciB0aGlzIExpY2Vuc2UuICBBbnkgb3RoZXIgYXR0
ZW1wdCB0bworY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlIG9yIGRpc3RyaWJ1dGUgdGhlIERvY3Vt
ZW50IGlzIHZvaWQsIGFuZCB3aWxsCithdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyIHJpZ2h0
cyB1bmRlciB0aGlzIExpY2Vuc2UuICBIb3dldmVyLAorcGFydGllcyB3aG8gaGF2ZSByZWNlaXZl
ZCBjb3BpZXMsIG9yIHJpZ2h0cywgZnJvbSB5b3UgdW5kZXIgdGhpcworTGljZW5zZSB3aWxsIG5v
dCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgc28gbG9uZyBhcyBzdWNoCitwYXJ0aWVz
IHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2UuCisKKworMTAuIEZVVFVSRSBSRVZJU0lPTlMgT0Yg
VEhJUyBMSUNFTlNFCisKK1RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2gg
bmV3LCByZXZpc2VkIHZlcnNpb25zCitvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNl
bnNlIGZyb20gdGltZSB0byB0aW1lLiAgU3VjaCBuZXcKK3ZlcnNpb25zIHdpbGwgYmUgc2ltaWxh
ciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwgYnV0IG1heQorZGlmZmVyIGluIGRl
dGFpbCB0byBhZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4gIFNlZQoraHR0cDovL3d3
dy5nbnUub3JnL2NvcHlsZWZ0Ly4KKworRWFjaCB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlIGlzIGdp
dmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuCitJZiB0aGUgRG9jdW1lbnQgc3Bl
Y2lmaWVzIHRoYXQgYSBwYXJ0aWN1bGFyIG51bWJlcmVkIHZlcnNpb24gb2YgdGhpcworTGljZW5z
ZSAib3IgYW55IGxhdGVyIHZlcnNpb24iIGFwcGxpZXMgdG8gaXQsIHlvdSBoYXZlIHRoZSBvcHRp
b24gb2YKK2ZvbGxvd2luZyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZWl0aGVyIG9mIHRoYXQg
c3BlY2lmaWVkIHZlcnNpb24gb3IKK29mIGFueSBsYXRlciB2ZXJzaW9uIHRoYXQgaGFzIGJlZW4g
cHVibGlzaGVkIChub3QgYXMgYSBkcmFmdCkgYnkgdGhlCitGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24uICBJZiB0aGUgRG9jdW1lbnQgZG9lcyBub3Qgc3BlY2lmeSBhIHZlcnNpb24KK251bWJlciBv
ZiB0aGlzIExpY2Vuc2UsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVk
IChub3QKK2FzIGEgZHJhZnQpIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKwor
QURERU5EVU06IEhvdyB0byB1c2UgdGhpcyBMaWNlbnNlIGZvciB5b3VyIGRvY3VtZW50cworCitU
byB1c2UgdGhpcyBMaWNlbnNlIGluIGEgZG9jdW1lbnQgeW91IGhhdmUgd3JpdHRlbiwgaW5jbHVk
ZSBhIGNvcHkgb2YKK3RoZSBMaWNlbnNlIGluIHRoZSBkb2N1bWVudCBhbmQgcHV0IHRoZSBmb2xs
b3dpbmcgY29weXJpZ2h0IGFuZAorbGljZW5zZSBub3RpY2VzIGp1c3QgYWZ0ZXIgdGhlIHRpdGxl
IHBhZ2U6CisKKyAgICBDb3B5cmlnaHQgKGMpICBZRUFSICBZT1VSIE5BTUUuCisgICAgUGVybWlz
c2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRv
Y3VtZW50CisgICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9u
IExpY2Vuc2UsIFZlcnNpb24gMS4yCisgICAgb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247CisgICAgd2l0aCBubyBJbnZhcmlhbnQg
U2VjdGlvbnMsIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgbm8gQmFjay1Db3ZlciBUZXh0cy4K
KyAgICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50
aXRsZWQgIkdOVQorICAgIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlIi4KKworSWYgeW91IGhh
dmUgSW52YXJpYW50IFNlY3Rpb25zLCBGcm9udC1Db3ZlciBUZXh0cyBhbmQgQmFjay1Db3ZlciBU
ZXh0cywKK3JlcGxhY2UgdGhlICJ3aXRoLi4uVGV4dHMuIiBsaW5lIHdpdGggdGhpczoKKworICAg
IHdpdGggdGhlIEludmFyaWFudCBTZWN0aW9ucyBiZWluZyBMSVNUIFRIRUlSIFRJVExFUywgd2l0
aCB0aGUKKyAgICBGcm9udC1Db3ZlciBUZXh0cyBiZWluZyBMSVNULCBhbmQgd2l0aCB0aGUgQmFj
ay1Db3ZlciBUZXh0cyBiZWluZyBMSVNULgorCitJZiB5b3UgaGF2ZSBJbnZhcmlhbnQgU2VjdGlv
bnMgd2l0aG91dCBDb3ZlciBUZXh0cywgb3Igc29tZSBvdGhlcgorY29tYmluYXRpb24gb2YgdGhl
IHRocmVlLCBtZXJnZSB0aG9zZSB0d28gYWx0ZXJuYXRpdmVzIHRvIHN1aXQgdGhlCitzaXR1YXRp
b24uCisKK0lmIHlvdXIgZG9jdW1lbnQgY29udGFpbnMgbm9udHJpdmlhbCBleGFtcGxlcyBvZiBw
cm9ncmFtIGNvZGUsIHdlCityZWNvbW1lbmQgcmVsZWFzaW5nIHRoZXNlIGV4YW1wbGVzIGluIHBh
cmFsbGVsIHVuZGVyIHlvdXIgY2hvaWNlIG9mCitmcmVlIHNvZnR3YXJlIGxpY2Vuc2UsIHN1Y2gg
YXMgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAordG8gcGVybWl0IHRoZWlyIHVzZSBp
biBmcmVlIHNvZnR3YXJlLgorCitUaGUgRW5kLgpkaWZmIC0tZXhjbHVkZT0nKi5vcmlnJyAtLWV4
Y2x1ZGU9JyoucGF0Y2gnIC11ck5wIGxpbnV4LTIuNi4yMC9kcml2ZXJzL2NoYXIvY29uc29sZW1h
cC5jIGxpbnV4LTIuNi4yMC1zcGsvZHJpdmVycy9jaGFyL2NvbnNvbGVtYXAuYwotLS0gbGludXgt
Mi42LjIwL2RyaXZlcnMvY2hhci9jb25zb2xlbWFwLmMJMjAwNy0wMi0wNCAxNjowODowMS4wMDAw
MDAwMDAgLTA1MDAKKysrIGxpbnV4LTIuNi4yMC1zcGsvZHJpdmVycy9jaGFyL2NvbnNvbGVtYXAu
YwkyMDA3LTAyLTA0IDE2OjA5OjIxLjAwMDAwMDAwMCAtMDUwMApAQCAtNjY3LDMgKzY2Nyw0IEBA
IGNvbnNvbGVfbWFwX2luaXQodm9pZCkKIH0KIAogRVhQT1JUX1NZTUJPTChjb25fY29weV91bmlt
YXApOworRVhQT1JUX1NZTUJPTF9HUEwoaW52ZXJzZV90cmFuc2xhdGUpOwpkaWZmIC0tZXhjbHVk
ZT0nKi5vcmlnJyAtLWV4Y2x1ZGU9JyoucGF0Y2gnIC11ck5wIGxpbnV4LTIuNi4yMC9kcml2ZXJz
L2NoYXIva2V5Ym9hcmQuYyBsaW51eC0yLjYuMjAtc3BrL2RyaXZlcnMvY2hhci9rZXlib2FyZC5j
Ci0tLSBsaW51eC0yLjYuMjAvZHJpdmVycy9jaGFyL2tleWJvYXJkLmMJMjAwNy0wMi0wNCAxNjow
ODowMS4wMDAwMDAwMDAgLTA1MDAKKysrIGxpbnV4LTIuNi4yMC1zcGsvZHJpdmVycy9jaGFyL2tl
eWJvYXJkLmMJMjAwNy0wMi0wNCAxNjowOToyMS4wMDAwMDAwMDAgLTA1MDAKQEAgLTQxLDYgKzQx
LDIyIEBACiAjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KICNpbmNsdWRlIDxsaW51eC9yZWJvb3Qu
aD4KIAorCisjaW5jbHVkZSA8bGludXgvc3BlYWt1cC5oPgorCisjaWYgZGVmaW5lZChDT05GSUdf
U1BFQUtVUF9NT0RVTEUpCisKK3Nwa19rZXlfZnVuYyBhZGRyX3Nwa19rZXkgPSBOVUxMOworI2Rl
ZmluZSBzcGVha3VwX2tleV9jYWxsKF9fdmMsIF9fc2hpZnQsIF9fa2V5Y29kZSwgX19rZXksIF9f
ZG93bikJXAorCShhZGRyX3Nwa19rZXkgJiYgKCphZGRyX3Nwa19rZXkpKF9fdmMsIF9fc2hpZnQs
IF9fa2V5Y29kZSwgX19rZXksIF9fZG93bikpCisKKyNlbGlmIGRlZmluZWQoQ09ORklHX1NQRUFL
VVApCisjZGVmaW5lIHNwZWFrdXBfa2V5X2NhbGwoX192YywgX19zaGlmdCwgX19rZXljb2RlLCBf
X2tleSwgX19kb3duKQlcCisJc3BlYWt1cF9rZXkoX192YywgX19zaGlmdCwgX19rZXljb2RlLCBf
X2tleSwgX19kb3duKQorI2Vsc2UKKyNkZWZpbmUgc3BlYWt1cF9rZXlfY2FsbChfX3ZjLCBfX3No
aWZ0LCBfX2tleWNvZGUsIF9fa2V5LCBfX2Rvd24pCTAKKyNlbmRpZgorCiBzdGF0aWMgdm9pZCBr
YmRfZGlzY29ubmVjdChzdHJ1Y3QgaW5wdXRfaGFuZGxlICpoYW5kbGUpOwogZXh0ZXJuIHZvaWQg
Y3RybF9hbHRfZGVsKHZvaWQpOwogCkBAIC02NSw2ICs4MSwxMCBAQCBleHRlcm4gdm9pZCBjdHJs
X2FsdF9kZWwodm9pZCk7CiAKICNkZWZpbmUgS0JEX0RFRkxPQ0sgMAogCisvKiBLZXkgdHlwZXMg
cHJvY2Vzc2VkIGV2ZW4gaW4gcmF3IG1vZGVzICovCisKKyNkZWZpbmUgVFlQRVNfQUxMT1dFRF9J
Tl9SQVdfTU9ERSAoKDEgPDwgS1RfU1BFQykgfCAoMSA8PCBLVF9TSElGVCkgfCAoMSA8PCBLVF9T
UEtVUCkpCisKIHZvaWQgY29tcHV0ZV9zaGlmdHN0YXRlKHZvaWQpOwogCiAvKgpAQCAtODAsNyAr
MTAwLDcgQEAgdm9pZCBjb21wdXRlX3NoaWZ0c3RhdGUodm9pZCk7CiB0eXBlZGVmIHZvaWQgKGtf
aGFuZGxlcl9mbikoc3RydWN0IHZjX2RhdGEgKnZjLCB1bnNpZ25lZCBjaGFyIHZhbHVlLAogCQkJ
ICAgIGNoYXIgdXBfZmxhZyk7CiBzdGF0aWMga19oYW5kbGVyX2ZuIEtfSEFORExFUlM7Ci1zdGF0
aWMga19oYW5kbGVyX2ZuICprX2hhbmRsZXJbMTZdID0geyBLX0hBTkRMRVJTIH07CitrX2hhbmRs
ZXJfZm4gKmtfaGFuZGxlclsxNl0gPSB7IEtfSEFORExFUlMgfTsKIAogI2RlZmluZSBGTl9IQU5E
TEVSU1wKIAlmbl9udWxsLAlmbl9lbnRlciwJZm5fc2hvd19wdHJlZ3MsCWZuX3Nob3dfbWVtLFwK
QEAgLTEwMSwxMyArMTIxLDE2IEBAIHN0YXRpYyBmbl9oYW5kbGVyX2ZuICpmbl9oYW5kbGVyW10g
PSB7IEYKIGNvbnN0IGludCBtYXhfdmFsc1tdID0gewogCTI1NSwgQVJSQVlfU0laRShmdW5jX3Rh
YmxlKSAtIDEsIEFSUkFZX1NJWkUoZm5faGFuZGxlcikgLSAxLCBOUl9QQUQgLSAxLAogCU5SX0RF
QUQgLSAxLCAyNTUsIDMsIE5SX1NISUZUIC0gMSwgMjU1LCBOUl9BU0NJSSAtIDEsIE5SX0xPQ0sg
LSAxLAotCTI1NSwgTlJfTE9DSyAtIDEsIDI1NSwgTlJfQlJMIC0gMQorCTI1NSwgTlJfTE9DSyAt
IDEsIDI1NSwgTlJfQlJMIC0gMSwgMjU1CiB9OwogCiBjb25zdCBpbnQgTlJfVFlQRVMgPSBBUlJB
WV9TSVpFKG1heF92YWxzKTsKIAogc3RydWN0IGtiZF9zdHJ1Y3Qga2JkX3RhYmxlW01BWF9OUl9D
T05TT0xFU107Ci1zdGF0aWMgc3RydWN0IGtiZF9zdHJ1Y3QgKmtiZCA9IGtiZF90YWJsZTsKK3N0
cnVjdCBrYmRfc3RydWN0ICprYmQgPSBrYmRfdGFibGU7CisKK0VYUE9SVF9TWU1CT0xfR1BMKGti
ZCk7CitFWFBPUlRfU1lNQk9MX0dQTChrX2hhbmRsZXIpOwogCiBzdHJ1Y3QgdnRfc3Bhd25fY29u
c29sZSB2dF9zcGF3bl9jb24gPSB7CiAJLmxvY2sgPSBTUElOX0xPQ0tfVU5MT0NLRUQsCkBAIC0y
NjYsNiArMjg5LDggQEAgdm9pZCBrZF9ta3NvdW5kKHVuc2lnbmVkIGludCBoeiwgdW5zaWduZQog
CQlrZF9ub3NvdW5kKDApOwogfQogCitFWFBPUlRfU1lNQk9MX0dQTChrZF9ta3NvdW5kKTsKKwog
LyoKICAqIFNldHRpbmcgdGhlIGtleWJvYXJkIHJhdGUuCiAgKi8KQEAgLTYyMyw2ICs2NDgsNyBA
QCBzdGF0aWMgdm9pZCBrX3NwZWMoc3RydWN0IHZjX2RhdGEgKnZjLCB1CiAJaWYgKHVwX2ZsYWcp
CiAJCXJldHVybjsKIAlpZiAodmFsdWUgPj0gQVJSQVlfU0laRShmbl9oYW5kbGVyKSkKKwkJaWYg
KHVwX2ZsYWcgfHwgKHZhbHVlID49IEFSUkFZX1NJWkUoZm5faGFuZGxlcikpKQogCQlyZXR1cm47
CiAJaWYgKChrYmQtPmtiZG1vZGUgPT0gVkNfUkFXIHx8CiAJICAgICBrYmQtPmtiZG1vZGUgPT0g
VkNfTUVESVVNUkFXKSAmJgpAQCAtMTIzMyw2ICsxMjU5LDkgQEAgc3RhdGljIHZvaWQga2JkX2tl
eWNvZGUodW5zaWduZWQgaW50IGtleQogCWtleV9tYXAgPSBrZXlfbWFwc1tzaGlmdF9maW5hbF07
CiAKIAlpZiAoIWtleV9tYXApIHsKKwkJaWYgKHNwZWFrdXBfa2V5X2NhbGwodmMsIHNoaWZ0X2Zp
bmFsLCBrZXljb2RlLCBLKEtUX1NISUZULDApLCAhZG93bikpCisJCQlyZXR1cm47CisKIAkJY29t
cHV0ZV9zaGlmdHN0YXRlKCk7CiAJCWtiZC0+c2xvY2tzdGF0ZSA9IDA7CiAJCXJldHVybjsKQEAg
LTEyNTYsNiArMTI4NSw5IEBAIHN0YXRpYyB2b2lkIGtiZF9rZXljb2RlKHVuc2lnbmVkIGludCBr
ZXkKIAogCXR5cGUgLT0gMHhmMDsKIAorCWlmIChzcGVha3VwX2tleV9jYWxsKHZjLCBzaGlmdF9m
aW5hbCwga2V5Y29kZSwga2V5c3ltLCAhZG93bikpCisJCXJldHVybjsKKwogCWlmIChyYXdfbW9k
ZSAmJiB0eXBlICE9IEtUX1NQRUMgJiYgdHlwZSAhPSBLVF9TSElGVCkKIAkJcmV0dXJuOwogCkBA
IC0xMjc0LDYgKzEzMDYsOSBAQCBzdGF0aWMgdm9pZCBrYmRfa2V5Y29kZSh1bnNpZ25lZCBpbnQg
a2V5CiAJCWtiZC0+c2xvY2tzdGF0ZSA9IDA7CiB9CiAKK3N0cnVjdCBpbnB1dF9kZXYgKmZha2Vr
ZXlkZXY9TlVMTDsKK0VYUE9SVF9TWU1CT0xfR1BMKGZha2VrZXlkZXYpOworCiBzdGF0aWMgdm9p
ZCBrYmRfZXZlbnQoc3RydWN0IGlucHV0X2hhbmRsZSAqaGFuZGxlLCB1bnNpZ25lZCBpbnQgZXZl
bnRfdHlwZSwKIAkJICAgICAgdW5zaWduZWQgaW50IGV2ZW50X2NvZGUsIGludCB2YWx1ZSkKIHsK
QEAgLTEzMTEsNiArMTM0Niw3IEBAIHN0YXRpYyBzdHJ1Y3QgaW5wdXRfaGFuZGxlICprYmRfY29u
bmVjdCgKIAkJcmV0dXJuIE5VTEw7CiAKIAloYW5kbGUtPmRldiA9IGRldjsKKwlmYWtla2V5ZGV2
ID0gZGV2OwogCWhhbmRsZS0+aGFuZGxlciA9IGhhbmRsZXI7CiAJaGFuZGxlLT5uYW1lID0gImti
ZCI7CiAKZGlmZiAtLWV4Y2x1ZGU9Jyoub3JpZycgLS1leGNsdWRlPScqLnBhdGNoJyAtdXJOcCBs
aW51eC0yLjYuMjAvZHJpdmVycy9jaGFyL01ha2VmaWxlIGxpbnV4LTIuNi4yMC1zcGsvZHJpdmVy
cy9jaGFyL01ha2VmaWxlCi0tLSBsaW51eC0yLjYuMjAvZHJpdmVycy9jaGFyL01ha2VmaWxlCTIw
MDctMDItMDQgMTY6MDg6MDEuMDAwMDAwMDAwIC0wNTAwCisrKyBsaW51eC0yLjYuMjAtc3BrL2Ry
aXZlcnMvY2hhci9NYWtlZmlsZQkyMDA3LTAyLTA0IDE2OjA5OjIxLjAwMDAwMDAwMCAtMDUwMApA
QCAtOTEsNiArOTEsNyBAQCBvYmotJChDT05GSUdfR1BJT19WUjQxWFgpCSs9IHZyNDF4eF9naXUu
CiBvYmotJChDT05GSUdfVEFOQkFDX1RCMDIxOSkJKz0gdGIwMjE5Lm8KIG9iai0kKENPTkZJR19U
RUxDTE9DSykJCSs9IHRsY2xrLm8KIAorb2JqLSQoQ09ORklHX1NQRUFLVVApCQkrPSBzcGVha3Vw
Lwogb2JqLSQoQ09ORklHX1dBVENIRE9HKQkJKz0gd2F0Y2hkb2cvCiBvYmotJChDT05GSUdfTVdB
VkUpCQkrPSBtd2F2ZS8KIG9iai0kKENPTkZJR19BR1ApCQkrPSBhZ3AvCmRpZmYgLS1leGNsdWRl
PScqLm9yaWcnIC0tZXhjbHVkZT0nKi5wYXRjaCcgLXVyTnAgbGludXgtMi42LjIwL2RyaXZlcnMv
Y2hhci9zcGVha3VwL0NvbmZpZy5pbiBsaW51eC0yLjYuMjAtc3BrL2RyaXZlcnMvY2hhci9zcGVh
a3VwL0NvbmZpZy5pbgotLS0gbGludXgtMi42LjIwL2RyaXZlcnMvY2hhci9zcGVha3VwL0NvbmZp
Zy5pbgkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysgbGludXgtMi42LjIw
LXNway9kcml2ZXJzL2NoYXIvc3BlYWt1cC9Db25maWcuaW4JMjAwNy0wMi0wNCAxNjowOToxOS4w
MDAwMDAwMDAgLTA1MDAKQEAgLTAsMCArMSwyNiBAQAordHJpc3RhdGUgJ1NwZWFrdXAgY29uc29s
ZSBzcGVlY2gnIENPTkZJR19TUEVBS1VQCitpZiBbICIkQ09ORklHX1NQRUFLVVAiICE9ICJuIiBd
OyB0aGVuCisJY29tbWVudCAnVHlwZSAieSIgZm9yIGVhY2ggc3ludGhlc2l6ZXIgeW91IHdhbnQg
YnVpbHQgaW50byB0aGUga2VybmVsLicKKwlkZXBfdHJpc3RhdGUgIkFjY2VudCBTQSwgYWNudHNh
IiBDT05GSUdfU1BFQUtVUF9BQ05UU0EgJENPTkZJR19TUEVBS1VQCisJZGVwX3RyaXN0YXRlICJB
Y2NlbnQgUEMsIGFjbnRwYyIgQ09ORklHX1NQRUFLVVBfQUNOVFBDICRDT05GSUdfU1BFQUtVUAor
CWRlcF90cmlzdGF0ZSAiQXBvbGxvLCBhcG9sbG8iIENPTkZJR19TUEVBS1VQX0FQT0xMTyAkQ09O
RklHX1NQRUFLVVAKKwlkZXBfdHJpc3RhdGUgIkF1ZGFwdGVyLCBhdWRwdHIiIENPTkZJR19TUEVB
S1VQX0FVRFBUUiAkQ09ORklHX1NQRUFLVVAKKwlkZXBfdHJpc3RhdGUgIkJyYWlsbGUgJ24nIFNw
ZWFrLCBibnMiIENPTkZJR19TUEVBS1VQX0JOUyAkQ09ORklHX1NQRUFLVVAKKwlkZXBfdHJpc3Rh
dGUgIkRFQ3RhbGsgRXhwcmVzcywgZGVjdGxrIiBDT05GSUdfU1BFQUtVUF9ERUNUTEsgJENPTkZJ
R19TUEVBS1VQCisJZGVwX3RyaXN0YXRlICJERUN0YWxrIEV4dGVybmFsIChvbGQpLCBkZWNleHQi
IENPTkZJR19TUEVBS1VQX0RFQ0VYVCAkQ09ORklHX1NQRUFLVVAKKwlkZXBfdHJpc3RhdGUgIkRF
Q3RhbGsgUEMgKGJpZyBJU0EgY2FyZCksIGRlY3BjIiBDT05GSUdfU1BFQUtVUF9ERUNQQyAkQ09O
RklHX1NQRUFLVVAKKwlpZiBbICIkQ09ORklHX1NQRUFLVVBfREVDUEMiID0gInkiIF0gO3RoZW4K
KwkgIGNvbW1lbnQgJ3dhcm5pbmc6IGRlY3BjIGNhbiBvbmx5IGJlIGJ1aWx0IGFzIGEgbW9kdWxl
JworCWZpCisJY29tbWVudCAnSW4gb3JkZXIgdG8gdXNlIHRoaXMgeW91IHdpbGwgbmVlZCcKKwlj
b21tZW50ICd0aGUgZHRsb2FkIHByb2dyYW0gYW5kIERFQ1BDIHNvZnR3YXJlIGZpbGVzICcKKwkg
IGNvbW1lbnQgJ1JlYWQgdGhlIGFjY29tcGFueWluZyBERUNQQyBkb2N1bWVudGF0aW9uIGZvciBt
b3JlIGRldGFpbHMnCisJZGVwX3RyaXN0YXRlICJEb3VibGVUYWxrIFBDLCBkdGxrIiBDT05GSUdf
U1BFQUtVUF9EVExLICRDT05GSUdfU1BFQUtVUAorCWRlcF90cmlzdGF0ZSAiS2V5bm90ZSBHb2xk
IFBDLCBrZXlwYyIgQ09ORklHX1NQRUFLVVBfS0VZUEMgJENPTkZJR19TUEVBS1VQCisJZGVwX3Ry
aXN0YXRlICJEb3VibGVUYWxrIExUIG9yIExpdGVUYWxrLCBsdGxrIiBDT05GSUdfU1BFQUtVUF9M
VExLICRDT05GSUdfU1BFQUtVUAorCWRlcF90cmlzdGF0ZSAiU29mdHdhcmUgc3ludGhlc2l6ZXJz
IC9kZXYvc2Z0c3luLCBzZnRzeW4iIENPTkZJR19TUEVBS1VQX1NGVFNZTiAkQ09ORklHX1NQRUFL
VVAKKwlkZXBfdHJpc3RhdGUgIlNwZWFrIE91dCwgc3Brb3V0IiBDT05GSUdfU1BFQUtVUF9TUEtP
VVQgJENPTkZJR19TUEVBS1VQCisJZGVwX3RyaXN0YXRlICJUcmFuc3BvcnQsIHR4cHJ0IiBDT05G
SUdfU1BFQUtVUF9UWFBSVCAkQ09ORklHX1NQRUFLVVAKKwljb21tZW50ICdFbnRlciB0aGUgdGhy
ZWUgdG8gc2l4IGNoYXJhY3RlciBzeW50aCBzdHJpbmcgZnJvbSBhYm92ZSBvciBub25lLicKKwlz
dHJpbmcgIkRlZmF1bHQgc3ludGhlc2l6ZXIgZm9yIFNwZWFrdXAiIENPTkZJR19TUEVBS1VQX0RF
RkFVTFQgIm5vbmUiCitmaQpkaWZmIC0tZXhjbHVkZT0nKi5vcmlnJyAtLWV4Y2x1ZGU9JyoucGF0
Y2gnIC11ck5wIGxpbnV4LTIuNi4yMC9kcml2ZXJzL2NoYXIvc3BlYWt1cC9jdnN2ZXJzaW9uLmgg
bGludXgtMi42LjIwLXNway9kcml2ZXJzL2NoYXIvc3BlYWt1cC9jdnN2ZXJzaW9uLmgKLS0tIGxp
bnV4LTIuNi4yMC9kcml2ZXJzL2NoYXIvc3BlYWt1cC9jdnN2ZXJzaW9uLmgJMTk2OS0xMi0zMSAx
OTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrIGxpbnV4LTIuNi4yMC1zcGsvZHJpdmVycy9jaGFy
L3NwZWFrdXAvY3ZzdmVyc2lvbi5oCTIwMDctMDItMDQgMTY6MDk6MjAuMDAwMDAwMDAwIC0wNTAw
CkBAIC0wLDAgKzEgQEAKKyNkZWZpbmUgQ1ZTVkVSU0lPTiAiIENWUzogU2F0IE9jdCA3IDEwOjUy
OjI5IEVEVCAyMDA2ICIKZGlmZiAtLWV4Y2x1ZGU9Jyoub3JpZycgLS1leGNsdWRlPScqLnBhdGNo
JyAtdXJOcCBsaW51eC0yLjYuMjAvZHJpdmVycy9jaGFyL3NwZWFrdXAvZHRsb2FkLmMgbGludXgt
Mi42LjIwLXNway9kcml2ZXJzL2NoYXIvc3BlYWt1cC9kdGxvYWQuYwotLS0gbGludXgtMi42LjIw
L2RyaXZlcnMvY2hhci9zcGVha3VwL2R0bG9hZC5jCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAw
MDAwIC0wNTAwCisrKyBsaW51eC0yLjYuMjAtc3BrL2RyaXZlcnMvY2hhci9zcGVha3VwL2R0bG9h
ZC5jCTIwMDctMDItMDQgMTY6MDk6MTkuMDAwMDAwMDAwIC0wNTAwCkBAIC0wLDAgKzEsNTUzIEBA
CisvKgorICogVGhpcyBpcyB0aGUgREVDdGFsayBQQyBmaXJtd2FyZSBsb2FkZXIgZm9yIHRoZSBM
aW51eCBrZXJuZWwsIHZlcnNpb24gMS4wCisgKgorICogT3JpZ2luYWwgMzg2QlNEIHNvdXJjZToK
KyAqICAgICAgQ29weXJpZ2h0ICggYyApIDE5OTYgQnJpYW4gQnVocm93IDxidWhyb3dAbG90aGxv
cmllbi5uZmJjYWwub3JnPgorICoKKyAqIEFkYXB0ZWQgZm9yIExpbnV4OgorICogICAgICBDb3B5
cmlnaHQgKCBjICkgMTk5NyBOaWNvbGFzIFBpdHJlIDxuaWNvQGNhbS5vcmc+CisgKgorICogQWRh
cHRlZCBmb3Igc3BlYWt1cDoKKyAqICAgICAgQ29weXJpZ2h0ICggYyApIDIwMDMgRGF2aWQgQm9y
b3dza2kgPGRhdmlkNTc1QGdvbGRlbi5uZXQ+CisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoIGF0
IHlvdXIgb3B0aW9uICkgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwg
d3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNz
IEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSA8c3Rk
aW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRl
IDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5o
PgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8bWFsbG9jLmg+CisjaW5jbHVkZSA8c3lz
L2Vycm5vLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSAiZHRsb2FkLmgiCisjaW5j
bHVkZSAiZHRwY19yZWcuaCIKKworc3RhdGljIGludCB2ZXJib3NlID0gMCwgaW50ZXN0ID0gMCxp
bmZkID0gLTE7CitzdGF0aWMgaW50IGltYWdlX2xlbiwgdG90YWxfcGFyYXM7CitzdGF0aWMgaW50
IGR0X3N0YXQsIGRtYV9zdGF0ZSA9IDAsIGhhc19rZXJuZWwgPSAwOworc3RhdGljIHN0cnVjdCBk
b3NfcmVsb2MgZml4dXBzWzUxMl07CitzdGF0aWMgY2hhciAqcmVhZF9idWZmID0gTlVMTDsKK3N0
YXRpYyBzdHJ1Y3QgZG9zX2V4ZV9oZWFkZXIgaGVhZGVyOworc3RhdGljIHVfc2hvcnQgaW9iYXNl
ID0gMHgzNTA7CisKK3N0YXRpYyBpbnQgZHRfZ2V0c3RhdHVzKCApCit7CisJZHRfc3RhdCA9ICBp
bmJfcCggaW9iYXNlICl8KGluYl9wKCBpb2Jhc2UrMSApPDw4KTsKKwlyZXR1cm4gZHRfc3RhdDsK
K30KKworc3RhdGljIHZvaWQgZHRfc2VuZGNtZCggdV9pbnQgY21kICkKK3sKKyAgb3V0Yl9wKCBj
bWQgJiAweEZGLCBpb2Jhc2UgKTsKKyAgb3V0Yl9wKCAoY21kPj44KSAmIDB4RkYsIGlvYmFzZSsx
ICk7Cit9CisKK3N0YXRpYyBpbnQgZHRfd2FpdGJpdCggaW50IGJpdCApCit7CisgIGludCB0aW1l
b3V0ID0gMTAwOworICB3aGlsZSAoIC0tdGltZW91dCA+IDAgKSB7CisgICAgaWYoIChkdF9nZXRz
dGF0dXMoICkgJiBiaXQgKSA9PSBiaXQgKSByZXR1cm4gMTsKKyAgICB1c2xlZXAoIDEwMDAgKTsK
KyAgfQorICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkdF9zZW5kY21kX3dhaXQoIHVfaW50
IGNtZCwgaW50IGJpdCApCit7CisgIGludCB0aW1lb3V0ID0gMTAwMDsKKyAgb3V0Yl9wKCBjbWQg
JiAweEZGLCBpb2Jhc2UgKTsKKyAgb3V0Yl9wKCAoY21kPj44KSAmIDB4RkYsIGlvYmFzZSsxICk7
CisgIHdoaWxlICggLS10aW1lb3V0ID4gMCApIHsKKyAgICBpZiggKGR0X2dldHN0YXR1cyggKSAm
IGJpdCApID09IGJpdCApIHJldHVybiAxOworICAgIHVzbGVlcCggMTAwMCApOworICB9CisgIHJl
dHVybiAwOworfQorCitzdGF0aWMgaW50IGR0X3dhaXRtb2RlKCBpbnQgcGF0dGVybiApCit7Cisg
IGludCB0aW1lb3V0ID0gMTAwMDsKKyAgd2hpbGUgKCAtLXRpbWVvdXQgPiAwICkgeworICAgIGlm
KCBkdF9nZXRzdGF0dXMoICkgPT0gcGF0dGVybiApIHJldHVybiAxOworICAgIHVzbGVlcCggMTAw
MCApOworICB9CisgIGZwcmludGYoIHN0ZGVyciwgIndhaXRtb2RlIHA9JXggcyA9ICV4XG4iLCBw
YXR0ZXJuLCBkdF9zdGF0ICk7CisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IGR0X3dhaXRf
ZG1hKCApCit7CisgIGludCB0aW1lb3V0ID0gMTAwMCwgc3RhdGUgPSBkbWFfc3RhdGU7CisgIGlm
KCAhaGFzX2tlcm5lbCApeworICAgIHVzbGVlcCggNTAwICk7CisgICAgcmV0dXJuKCBkdF93YWl0
Yml0KCBTVEFUX2RtYV9yZWFkeSApICk7CisgIH0KKyAgaWYoICEgZHRfd2FpdGJpdCggU1RBVF9k
bWFfcmVhZHkgKSApIHJldHVybiAwOworICB3aGlsZSAoIC0tdGltZW91dCA+IDAgKSB7CisgICAg
aWYoIChkdF9nZXRzdGF0dXMoKSZTVEFUX2RtYV9zdGF0ZSkgPT0gc3RhdGUgKSByZXR1cm4gMTsK
KyAgICB1c2xlZXAoIDEwMDAgKTsKKyAgfQorICBkbWFfc3RhdGUgPSBkdF9nZXRzdGF0dXMoICkg
JiBTVEFUX2RtYV9zdGF0ZTsKKyAgcmV0dXJuIDE7Cit9CisKK2R0X2N0cmwoIHVfaW50IGNtZCAp
Cit7CisgIHdoaWxlICggISBkdF93YWl0Yml0KCBTVEFUX2NtZF9yZWFkeSApICkgdXNsZWVwKCAx
MDAgKTsKKyAgb3V0Yl9wKCAwLCBpb2Jhc2UrMiApOworICBvdXRiX3AoIDAsIGlvYmFzZSszICk7
CisgIGR0X2dldHN0YXR1cyggKTsKKyAgZHRfc2VuZGNtZCggQ01EX2NvbnRyb2x8Y21kICk7Cisg
IG91dGJfcCggMCwgaW9iYXNlKzYgKTsKKyAgdXNsZWVwKCAxMDAgKTsKKyAgZHRfc2VuZGNtZCgg
Q01EX251bGwgKTsKKyAgd2hpbGUgKCAhIGR0X3dhaXRiaXQoIFNUQVRfY21kX3JlYWR5ICkgKSB1
c2xlZXAoIDEwMCApOworfQorCitpbnQgZHRfZmx1c2goIHZvaWQgKQoreworICBkdF9jdHJsKCBD
VFJMX2ZsdXNoICk7CisgIGR0X3dhaXRiaXQoIFNUQVRfZG1hX3JlYWR5ICk7CisgIG91dGJfcCgg
RE1BX3N5bmMsIGlvYmFzZSs0ICk7CisgIG91dGJfcCggMCwgaW9iYXNlKzQgKTsKKyAgZG1hX3N0
YXRlIF49IFNUQVRfZG1hX3N0YXRlOworICB3aGlsZSggZHRfZ2V0c3RhdHVzKCApICYgU1RBVF9m
bHVzaGluZyApIHVzbGVlcCggMTAwICk7CisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IGR0
X3NlbmRidWZmKCBjaGFyICpzcmMsIGludCBsZW4gKQoreworICB3aGlsZSggbGVuLS0gKXsKKyAg
ICBpZiggISBkdF93YWl0X2RtYSggKSApIHJldHVybiAtMTsKKyAgICBpZiggISAoZHRfZ2V0c3Rh
dHVzKCApICYgU1RBVF9ycl9jaGFyKSApIGJyZWFrOworICAgIG91dGJfcCggRE1BX3NpbmdsZV9p
biwgaW9iYXNlKzQgKTsKKyAgICBvdXRiX3AoICpzcmMrKywgaW9iYXNlKzQgKTsKKyAgICBkbWFf
c3RhdGUgXj0gU1RBVF9kbWFfc3RhdGU7CisgIH0KKyAgcmV0dXJuIDA7Cit9CisKK3Vuc2lnbmVk
IGxvbmcgZHRfYWxsb2NtZW0oIHVuc2lnbmVkIGxvbmcgcGFyYXMgKQoreworCXVuc2lnbmVkIGxv
bmcgYWRkcjsKKwlpZiggISBkdF93YWl0X2RtYSggKSApIHJldHVybiAwOworCW91dGJfcCggRE1B
X2NvbnRyb2wsIGlvYmFzZSs0ICk7CisJb3V0Yl9wKCBEVF9NRU1fQUxMT0MsIGlvYmFzZSs0ICk7
CisJZG1hX3N0YXRlIF49IFNUQVRfZG1hX3N0YXRlOworCWlmKCAhIGR0X3dhaXRfZG1hKCApICkg
cmV0dXJuIDA7CisJb3V0Yl9wKCBwYXJhcyAmIDB4RkYsIGlvYmFzZSs0ICk7CisJb3V0Yl9wKCAo
cGFyYXM+PjgpICYgMHhGRiwgaW9iYXNlKzQgKTsKKwlkbWFfc3RhdGUgXj0gU1RBVF9kbWFfc3Rh
dGU7CisJaWYoICEgZHRfd2FpdF9kbWEoICkgKSByZXR1cm4gMDsKKwlhZGRyID0gaW5iX3AoIGlv
YmFzZSs0ICk7CisJYWRkciB8PSAoaW5iX3AoIGlvYmFzZSs0ICk8PDgpOworCWFkZHIgKz0gKGlu
Yl9wKCBpb2Jhc2UrNCApPDw0KTsKKwlhZGRyICs9IChpbmJfcCggaW9iYXNlKzQgKTw8MTIpOwor
CWRtYV9zdGF0ZSBePSBTVEFUX2RtYV9zdGF0ZTsKKyAgcmV0dXJuIGFkZHI7Cit9CisKK3N0YXRp
YyBpbnQgdGVzdGtlcm5lbCggdm9pZCApCit7CisgIGR0X3NlbmRjbWQoIENNRF9zeW5jICk7Cisg
IGlmKCAhIGR0X3dhaXRiaXQoIFNUQVRfY21kX3JlYWR5ICkgKSByZXR1cm4gLTEwOworICBoYXNf
a2VybmVsID0gKCBkdF9zdGF0JjB4ODAwMCApID8gMSA6IDA7CisgIGlmICggdmVyYm9zZSApIHBy
aW50ZiggInRlc3RrZXJuZWwgZ290ICV4XG4iLCBkdF9zdGF0ICk7CisgIGlmICggaGFzX2tlcm5l
bCApIHJldHVybiAwOworCXVzbGVlcCggMTAwICk7CisgIHJldHVybiAxOworfQorCitzdGF0aWMg
aW50IGR0X2xvYWRtZW0oIGludCBhZGRyLCBpbnQgbGVuLCBjaGFyICpzcmMgKQoreworICBjaGFy
IGM7CisgIGludCBsOworICBpZiAoIHZlcmJvc2UgKSBwcmludGYoICJkdF9sb2FkbWVtOiBhZGRy
ID0gJTA4WCBzaXplID0gJWRcbiIsIGFkZHIsIGxlbiApOworICBkbyB7CisgICAgbCA9IGxlbjsK
KyAgICBpZiAoIGwgPj0gMHhjMDAwICkgbCA9IDB4YzAwMDsKKyAgICBsZW4gLT0gbDsKKyAgICBp
ZiggISBkdF93YWl0X2RtYSggKSApIHJldHVybiAtMTsKKyAgICBvdXRiX3AoIERNQV9jb250cm9s
LCBpb2Jhc2UrNCApOworICAgIG91dGJfcCggRFRfTE9BRF9NRU0sIGlvYmFzZSs0ICk7CisgICAg
ZG1hX3N0YXRlIF49IFNUQVRfZG1hX3N0YXRlOworICAgIGlmKCAhIGR0X3dhaXRfZG1hKCApICkg
cmV0dXJuIC0yOworICAgIG91dGJfcCggYWRkciAmIDB4RkYsIGlvYmFzZSs0ICk7CisgICAgb3V0
Yl9wKCAoYWRkcj4+OCkgJiAweEZGLCBpb2Jhc2UrNCApOworICAgIG91dGJfcCggKGFkZHI+PjE2
KSAmIDB4RkYsIGlvYmFzZSs0ICk7CisgICAgb3V0Yl9wKCAoYWRkcj4+MjQpICYgMHhGRiwgaW9i
YXNlKzQgKTsKKyAgICBvdXRiX3AoIGwgJiAweEZGLCBpb2Jhc2UrNCApOworICAgIG91dGJfcCgg
KGw+PjgpICYgMHhGRiwgaW9iYXNlKzQgKTsKKyAgICBkbWFfc3RhdGUgXj0gU1RBVF9kbWFfc3Rh
dGU7CisgICAgaWYoICEgZHRfd2FpdF9kbWEoICkgKSByZXR1cm4gLTM7CisgICAgYWRkciArPSBs
OworICAgIHdoaWxlKCBsLS0gKXsgCisgICAgICBjID0gKnNyYysrOworICAgICAgb3V0Yl9wKCBj
LCBpb2Jhc2UrNCApOworICAgIH0KKyAgICBkbWFfc3RhdGUgXj0gU1RBVF9kbWFfc3RhdGU7Cisg
IH0gd2hpbGUgKCBsZW4gPiAwICk7CisgIHJldHVybiAwOworfQorCit1bnNpZ25lZCBpbnQgbG9h
ZGZpbGUgKCBjaGFyICpmaWxlbmFtZSApCit7CisgIGludCBpLCBoZWFkZXJfc2l6ZTsKKyAgdW5z
aWduZWQgaW50IHRvdGFsX3BhcmFzOworICBsb25nIGZpeDsKKyAgaW5mZCA9IG9wZW4gKCBmaWxl
bmFtZSwgT19SRE9OTFkgKTsKKyAgaWYgKCBpbmZkID09IC0xICkgeworICAgICAgcGVycm9yICgg
Ik9wZW5pbmcgZmlsZTogIiApOworICAgICAgcmV0dXJuIDA7CisgICAgfQorICByZWFkICggaW5m
ZCwgJmhlYWRlciwgc2l6ZW9mICggc3RydWN0IGRvc19leGVfaGVhZGVyICkgKTsKKyAgaWYgKCBo
ZWFkZXIuaWQgIT0gMHg1YTRkICkgeworICAgICAgZnByaW50ZiAoIHN0ZGVyciwgIkludmFsaWQg
aGVhZGVyIGZpbGUgZm9ybWF0XG4iICk7CisgICAgICBmcHJpbnRmICggc3RkZXJyLCAiV2FudCAw
eDVhNGQsIGdvdCAweCV4XG4iLCBoZWFkZXIuaWQgKTsKKyAgICAgIHJldHVybiAwOworICAgIH0K
KyAgaWYgKCBoZWFkZXIucmVsZW4gPiBNQVhfRklYVVBTICkgeworICAgICAgZnByaW50ZiAoIHN0
ZGVyciwgIlRvbyBtYW55IGZpeHVwc1xuIiApOworICAgICAgcmV0dXJuIDA7CisgICAgfQorICBs
c2VlayAoIGluZmQsICggbG9uZyApIGhlYWRlci5yZWxvYywgU0VFS19TRVQgKTsKKyAgcmVhZCAo
IGluZmQsIGZpeHVwcywgc2l6ZW9mICggc3RydWN0IGRvc19yZWxvYyApICogaGVhZGVyLnJlbGVu
ICk7CisgIGhlYWRlcl9zaXplID0gaGVhZGVyLmhzaXplICogMTY7CisgIGxzZWVrICggaW5mZCwg
KCBsb25nICloZWFkZXJfc2l6ZSwgU0VFS19TRVQgKTsKKyAgaW1hZ2VfbGVuID0gKCAoIGhlYWRl
ci5wYWdlcy0xICkqNTEyICkgKyAoIGhlYWRlci5yZW0tIGhlYWRlcl9zaXplICk7CisgIHRvdGFs
X3BhcmFzID0gICggaW1hZ2VfbGVuID4+IDQgKSArIGhlYWRlci5obWluICsgMTY7CisgIHJlYWQg
KCBpbmZkLCByZWFkX2J1ZmYsIGltYWdlX2xlbiApOworICBjbG9zZSggaW5mZCApOworICByZXR1
cm4gdG90YWxfcGFyYXM7Cit9CisKK3N0YXRpYyBpbnQgbG9hZGtlcm5lbCggY2hhciAqZmlsZW5h
bWUgKQoreworICBpbnQgc2VnZml4ID0gMHg0MCwgZml4LCBpOworICBpbnQgaXB2YWwsIGNzdmFs
OworICBpZiAoIGhhc19rZXJuZWwgKSByZXR1cm4gMDsKKyAgaWYgKCAhbG9hZGZpbGUoIGZpbGVu
YW1lICkgKSByZXR1cm4gLTE7CisgIGhlYWRlci5jc3ZhbCArPSBzZWdmaXg7CisgIGhlYWRlci5z
c3ZhbCArPSBzZWdmaXg7CisgIGlmICggdmVyYm9zZSApIHsKKyAgICAgIHByaW50ZiAoICJMb2Fk
aW5nIGtlcm5lbCBvZiAlbGQgYnl0ZXMgKCAlZCByZWxvY3MgKVxuIiwKKwkgICAgICBpbWFnZV9s
ZW4sIGhlYWRlci5yZWxlbiApOworICAgICAgcHJpbnRmICggIiAgICBjczppcCA9PSAlMDR4OiUw
NHggICBzczpzcCA9PSAlMDR4OiUwNHhcbiIsCisJICAgICAgaGVhZGVyLmNzdmFsLCBoZWFkZXIu
aXB2YWwsIGhlYWRlci5zc3ZhbCwgaGVhZGVyLnNwdmFsICk7CisgICAgfQorICBmb3IgKCBpID0g
MDsgaSA8IGhlYWRlci5yZWxlbjsgaSsrICkgeworICAgICAgZml4ID0gKCBmaXh1cHNbaV0uc2Vn
bWVudCA8PCA0ICkgKyBmaXh1cHNbaV0ub2Zmc2V0OworICAgICAgKCAqKCB1bnNpZ25lZCBpbnQg
KiApICZyZWFkX2J1ZmZbZml4XSApICs9IHNlZ2ZpeDsKKyAgICB9CisgIGNzdmFsID0gaGVhZGVy
LmNzdmFsOworICBpcHZhbCA9IGhlYWRlci5pcHZhbDsKKyAgZHRfc2VuZGNtZF93YWl0KCBNT0RV
TEVfcmVzZXQsIE1PRFVMRV9pbml0ICk7CisgIGR0X3NlbmRjbWQoIENNRF9yZXNldCApOworICBp
ZiggZHRfZ2V0c3RhdHVzKCApID09IE1PRFVMRV9zZWxmX3Rlc3QgKXsKKyAgICBpZiggISBkdF93
YWl0bW9kZSggTU9EVUxFX2luaXQgKSApIHJldHVybiAtMTsKKyAgfQorICBpZiAoICFkdF9zZW5k
Y21kX3dhaXQoIENNRF9yZXNldCwgTU9ERV9zdGF0dXMgKSApIHJldHVybiAtMjsKKyAgaWYgKCAh
ZHRfc2VuZGNtZF93YWl0KCBDTURfc3luYywgTU9ERV9lcnJvciApICkgcmV0dXJuIC0zOworICBp
ZiAoICFkdF9zZW5kY21kX3dhaXQoIENNRF9yZXNldCwgTU9ERV9zdGF0dXMgKSApIHJldHVybiAt
NDsKKyAgaWYgKCB2ZXJib3NlICkgcHJpbnRmKCAiY2FyZCBpcyByZWFkeVxuIiApOworICBkdF9z
ZW5kY21kKCBDTURfZG1hICk7CisgIGlmKCAhIGR0X3dhaXRiaXQoIFNUQVRfZG1hX3JlYWR5ICkg
KSByZXR1cm4gLTU7CisgIGlmKCAoIGkgPSBkdF9sb2FkbWVtKCAweDAwMDAwNDAwLCBpbWFnZV9s
ZW4sIHJlYWRfYnVmZiApICkgKSB7CisgICBmcHJpbnRmKCBzdGRlcnIsICJrZXJuZWwgbG9hZCBm
YWlsZWQsIHN0YXR1cyAlZFxuIiwgaSApOworICAgIHJldHVybiAtNjsKKyAgfQorICB1c2xlZXAo
MTAwKTsKKyAgLyogdGhlIGtlcm5lbCBpcyBsb2FkZWQsIHN0YXJ0IGl0ICovCisgIGlmICggIWR0
X3NlbmRjbWRfd2FpdCggQ01EX3Jlc2V0LCBNT0RFX3N0YXR1cyApICkgcmV0dXJuIC03OworICBk
dF9zZW5kY21kKCBDTURfZG1hKzEgKTsgICAvKip4eHgqKi8KKwl1c2xlZXAoMTAwKTsKKyAgaWYo
ICEgZHRfd2FpdGJpdCggU1RBVF9kbWFfcmVhZHkgKSApIHJldHVybi04OworICBvdXRiX3AoIERN
QV9jb250cm9sLCBpb2Jhc2UrNCApOworICBvdXRiX3AoIERUX1NUQVJUX1RBU0ssIGlvYmFzZSs0
ICk7CisJdXNsZWVwKDEwMCk7CisgIG91dGJfcCggaXB2YWwgJiAweEZGLCBpb2Jhc2UrNCApOwor
ICBvdXRiX3AoIChpcHZhbD4+OCkgJiAweEZGLCBpb2Jhc2UrNCApOworICBvdXRiX3AoIGNzdmFs
ICYgMHhGRiwgaW9iYXNlKzQgKTsKKyAgb3V0Yl9wKCAoY3N2YWw+PjgpICYgMHhGRiwgaW9iYXNl
KzQgKTsKKwlpZiggISBkdF93YWl0bW9kZSggMHhjMDAxICkgKSByZXR1cm4gLTk7CisgIGlmICgg
dmVyYm9zZSApIHsKKyAgICBwcmludGYoICJkb25lIGxvYWRpbmcga2VybmVsXG4iICk7CisgIH0K
KyAgcmV0dXJuIHRlc3RrZXJuZWwoICk7Cit9CisKK2ludCBsb2FkZGljdCAoIGNoYXIgKmZpbGVu
YW1lLCBjaGFyICpuYW1lLCBpbnQgdHlwZSApCit7CisgIGludCBpLCByZWFkX2luZGV4LCByZWFk
X3NpemUsIGFjdF9zaXplOworICB1bnNpZ25lZCBzaG9ydCAqaW5kZXhfZml4LCBzZWdfZml4Owor
ICB1bnNpZ25lZCBsb25nIGVudHJpZXMsIGluZGV4LCBkaWNfYnl0ZXMsIGRpY19hZGRyOworICB1
bnNpZ25lZCBpbnQgdG90YWxfcGFyYXM7CisgIHVuc2lnbmVkIGxvbmcgcGFyYW0sIGw7CisgIGlu
ZmQgPSBvcGVuICggZmlsZW5hbWUsIE9fUkRPTkxZICk7CisgIGlmICggaW5mZCA9PSAtMSApIHsK
KyAgICAgIHBlcnJvciAoIGZpbGVuYW1lICk7CisgICAgICByZXR1cm4gLTE7CisgICAgfQorLyog
cmVhZCBpbiB0aGUgZW50cnkgY291bnQgYW5kIHRoZSBhY3R1YWwgZW50cnkgc2l6ZSBleGNsdWRp
bmcgdGhlCisgKiBpbmRleCB0YWJsZSAoIHdoaWNoIGlzIGVudHJpZXMgKiA0ICkgLi4uICAqLwor
ICByZWFkICggaW5mZCwgJmVudHJpZXMsIDQgKTsKKyAgcmVhZCAoIGluZmQsICZkaWNfYnl0ZXMs
IDQgKTsKKyAgaWYgKCB2ZXJib3NlICkKKyAgICBwcmludGYgKCAiTG9hZGluZyAlcyBkaWN0aW9u
YXJ5IG9mICVsdSBlbnRyaWVzLCAlbHUgYnl0ZXMuXG4iLAorCSAgICBuYW1lLCBlbnRyaWVzLCBk
aWNfYnl0ZXMgKTsKKyAgdG90YWxfcGFyYXMgPSAoICggKCBlbnRyaWVzICogNCApICsgZGljX2J5
dGVzICkgPj4gNCApICsgMjsKKyAgaWYgKCB2ZXJib3NlICkKKyAgICBwcmludGYgKCAiQWxsb2Nh
dGluZyAlZCBwYXJhZ3JhcGhzIG9mIGZyZWUgcmFtIC4uLlxuIiwgdG90YWxfcGFyYXMgKTsKKyAg
bCA9IGR0X2FsbG9jbWVtKCB0b3RhbF9wYXJhcyApOworICBpZiAoIGwgPT0gMCApIHsKKyAgICAg
IHBlcnJvciAoICJFcnJvciByZXF1ZXN0aW5nIG1lbW9yeSBmcm9tIHNwZWVjaCBkZXZpY2UiICk7
CisgICAgICByZXR1cm4gLTE7CisgICAgfQorICBzZWdfZml4ID0gKCBsID4+IDQgKSAmIDB4ZmZm
ZjsKKyAgZGljX2FkZHIgPSBsOworICBpbmRleCA9IGVudHJpZXM7CisgIGluZGV4X2ZpeCA9ICgg
dW5zaWduZWQgc2hvcnQgKiApICZyZWFkX2J1ZmZbMF07CisgIGlmICggdmVyYm9zZSApCisgICAg
cHJpbnRmICggIkluZGV4IHRhYmxlIHN0YXJ0cyBhdCAlbHhcbiIsIGwgKTsKKyAgcmVhZF9pbmRl
eCA9IGluZGV4KjQ7CisgIGFjdF9zaXplID0gcmVhZCAoIGluZmQsIHJlYWRfYnVmZiwgcmVhZF9p
bmRleCApOworICBpZiAoIGFjdF9zaXplICE9IHJlYWRfaW5kZXggKSB7CisgICAgZnByaW50ZiAo
IHN0ZGVyciwgIlxuRXJyb3IgcmVhZGluZyBpbmRleGVzXG4iICk7CisgICAgZnByaW50ZiAoIHN0
ZGVyciwgIiAgICBleHAgOiAlZCAgYWN0IDogJWRcbiIsIHJlYWRfaW5kZXggKiA0LCBhY3Rfc2l6
ZSApOworICAgIHJldHVybiAtMTsKKyAgfQorICBmb3IgKCBpID0gMTsgaSA8IGluZGV4ICogMjsg
aSArPSAyICkKKyAgICBpbmRleF9maXhbaV0gKz0gc2VnX2ZpeDsKKyAgaWYoICggaSA9IGR0X2xv
YWRtZW0oIGwsIHJlYWRfaW5kZXgsIHJlYWRfYnVmZiApICkgKSB7CisgICAgZnByaW50ZiAoIHN0
ZGVyciwgIlxuRXJyb3IgbG9hZGluZyBpbmRleGVzIGF0IDB4JWxYOiBpICVkXG4iLAorICAgICAg
bCwgaSApOworICAgIHJldHVybiAtMTsKKyAgfQorICBsICs9IHJlYWRfaW5kZXg7CisvKiBub3cs
IGxvYWQgdXAgdGhlIGRpY3Rpb25hcnkgYnl0ZXMgLi4uICAqLworICBpZiAoIHZlcmJvc2UgKQor
ICAgIHByaW50ZiAoICJEaWN0aW9uYXJ5IHRleHQgc3RhcnRzIGF0ICVseFxuIiwgbCApOworICBy
ZWFkX3NpemUgPSBkaWNfYnl0ZXM7CisgIGlmICggKCBhY3Rfc2l6ZSA9IHJlYWQgKCBpbmZkLCBy
ZWFkX2J1ZmYsIHJlYWRfc2l6ZSApICkgIT0gcmVhZF9zaXplICkgeworICAgIGZwcmludGYgKCBz
dGRlcnIsICJcbkVycm9yIHJlYWRpbmcgZGljdGlvbmFyeSB0ZXh0IVxuIiApOworICAgIGZwcmlu
dGYgKCBzdGRlcnIsICJhc2tlZCA6ICVkICBhY3R1YWwgOiAlZFxuIiwgYWN0X3NpemUsIHJlYWRf
c2l6ZSApOworICAgIHJldHVybiAtMTsKKyAgfQorICBpZiggKCBpID0gZHRfbG9hZG1lbSggbCwg
cmVhZF9zaXplLCByZWFkX2J1ZmYgKSApICkgeworICAgIGZwcmludGYgKCBzdGRlcnIsICJcbkVy
cm9yIGxvYWRpbmcgZGljdGlvbmFyeSBhdCAweCVsWDogc3RhdHVzICVkXG4iLAorICAgICAgbCwg
aSApOworICAgIHJldHVybiAtMTsKKyAgfQorICBpZiggISBkdF93YWl0X2RtYSggKSApIHJldHVy
biAtMTsKKyAgb3V0Yl9wKCBETUFfY29udHJvbCwgaW9iYXNlKzQgKTsKKyAgb3V0Yl9wKCBEVF9T
RVRfRElDLCBpb2Jhc2UrNCApOworCWRtYV9zdGF0ZSBePSBTVEFUX2RtYV9zdGF0ZTsKKyAgaWYo
ICEgZHRfd2FpdF9kbWEoICkgKSByZXR1cm4gLTE7CisgIGwgID0gZGljX2FkZHI7CisJbCA9ICgo
bCA8PCAxMikgJiAweEZGRkYwMDAwKSArIChsICYgMHgwMDAwMDAwRik7CisgIG91dGJfcCggbCAm
IDB4RkYsIGlvYmFzZSs0ICk7CisgIG91dGJfcCggKGw+PjgpICYgMHhGRiwgaW9iYXNlKzQgKTsK
KyAgb3V0Yl9wKCAobD4+MTYpICYgMHhGRiwgaW9iYXNlKzQgKTsKKyAgb3V0Yl9wKCAobD4+MjQp
ICYgMHhGRiwgaW9iYXNlKzQgKTsKKyAgbCA9IGVudHJpZXM7CisgIG91dGJfcCggbCAmIDB4RkYs
IGlvYmFzZSs0ICk7CisgIG91dGJfcCggKGw+PjgpICYgMHhGRiwgaW9iYXNlKzQgKTsKKyAgb3V0
Yl9wKCAobD4+MTYpICYgMHhGRiwgaW9iYXNlKzQgKTsKKyAgb3V0Yl9wKCAobD4+MjQpICYgMHhG
RiwgaW9iYXNlKzQgKTsKKwlsID0gdHlwZTsKKyAgb3V0Yl9wKCBsICYgMHhGRiwgaW9iYXNlKzQg
KTsKKyAgb3V0Yl9wKCAobD4+OCkgJiAweEZGLCBpb2Jhc2UrNCApOworCWRtYV9zdGF0ZSBePSBT
VEFUX2RtYV9zdGF0ZTsKKyAgY2xvc2UgKCBpbmZkICk7CisgIGlmICggdmVyYm9zZSApIHByaW50
ZiggImRpY3Rpb25hcnkgbG9hZCBjb21wbGV0ZVxuIiApOworICByZXR1cm4gMDsKK30KKworaW50
IGxvYWRleGUgKCBjaGFyICpmaWxlbmFtZSApCit7CisgIHVuc2lnbmVkIGludCBsb2FkX2FkZHIg
PSAwLCBzZWdfZml4OworICBpbnQgaSwgcmVhZF9zaXplOworICBpbnQgaXB2YWwsIGNzdmFsOwor
ICBsb25nIGZpeDsKKyAgdW5zaWduZWQgbG9uZyB0b3RhbF9wYXJhczsKKyAgdG90YWxfcGFyYXMg
PSBsb2FkZmlsZSAoIGZpbGVuYW1lICk7CisgIGlmICggdG90YWxfcGFyYXMgPT0gMCApIHJldHVy
biAtMTsKKyAgbG9hZF9hZGRyID0gZHRfYWxsb2NtZW0oIHRvdGFsX3BhcmFzICk7CisgIGlmICgg
bG9hZF9hZGRyID09IDAgKSB7CisgICAgZnByaW50ZiAoIHN0ZGVyciwgIkVycm9yIGFsbG9jYXRp
bmcgbWVtb3J5IG9uIGNhcmQ6ICIgKTsKKyAgICByZXR1cm4gLTE7CisgIH0KKyAgc2VnX2ZpeCA9
ICggbG9hZF9hZGRyID4+IDQgKSAmIDB4ZmZmZjsKKyAgaWYgKCB2ZXJib3NlICkgeworICAgICAg
cHJpbnRmICggIkxvYWRpbmcgJXMgJWxkIGJ5dGVzICggJWQgcmVsb2NzIClcbiIsCisJICAgICAg
ZmlsZW5hbWUsIGltYWdlX2xlbiwgaGVhZGVyLnJlbGVuICk7CisgICAgICBwcmludGYgKCAiQWxs
b2NhdGluZyAlbGQgYnl0ZXMgb2YgZnJlZSByYW0gYXQgJTA1eFxuIiwKKwkgICAgICAoIGxvbmcg
KSBoZWFkZXIuaG1pbiAqIDE2LCBsb2FkX2FkZHIgKTsKKyAgICAgIHByaW50ZiAoICJUb3RhbCBt
ZW1vcnkgdGFrZW4gaXMgJWxkIGJ5dGVzXG4iLCAoIGxvbmcgKSB0b3RhbF9wYXJhcyAqIDE2ICk7
CisgICAgICBwcmludGYgKCAiICAgIGNzOmlwID09ICUwNHg6JTA0eCAgIHNzOnNwID09ICUwNHg6
JTA0eFxuIiwKKwkgICAgICBoZWFkZXIuY3N2YWwgKyBzZWdfZml4LCBoZWFkZXIuaXB2YWwsIGhl
YWRlci5zc3ZhbCArIHNlZ19maXgsIGhlYWRlci5zcHZhbCApOworICAgIH0KKyAgICBmb3IgKCBp
ID0gMDsgaSA8IGhlYWRlci5yZWxlbjsgaSsrICkgeworCWZpeCA9ICggKCBsb25nICkgZml4dXBz
W2ldLnNlZ21lbnQgPDwgNCApICsgKCBsb25nICkgZml4dXBzW2ldLm9mZnNldDsKKwkoICooIHVu
c2lnbmVkIGludCAqICkgJnJlYWRfYnVmZltmaXhdICkgKz0gc2VnX2ZpeDsKKyAgICAJIH0KKyAg
aWYoICggaSA9IGR0X2xvYWRtZW0oIGxvYWRfYWRkciwgaW1hZ2VfbGVuLCByZWFkX2J1ZmYgKSAp
ICkgeworICAgIGZwcmludGYgKCBzdGRlcnIsICJFcnJvciBsb2FkaW5nIHNwZWVjaCBkZXZpY2Ug
YXQgMHglbFg6IHN0YXR1cyAlZFxuIiwKKyAgICAgIGxvYWRfYWRkciwgaSApOworICAgIHJldHVy
biAtMTsKKyAgfQorICBjc3ZhbCA9IGhlYWRlci5jc3ZhbCArIHNlZ19maXg7CisgIGlwdmFsID0g
aGVhZGVyLmlwdmFsOworICBpZiggISBkdF93YWl0X2RtYSggKSApIHJldHVybiAtMTsKKyAgb3V0
Yl9wKCBETUFfY29udHJvbCwgaW9iYXNlKzQgKTsKKyAgb3V0Yl9wKCBEVF9TVEFSVF9UQVNLLCBp
b2Jhc2UrNCApOworCWRtYV9zdGF0ZSBePSBTVEFUX2RtYV9zdGF0ZTsKKyAgaWYoICEgZHRfd2Fp
dF9kbWEoICkgKSByZXR1cm4gLTE7CisgIG91dGJfcCggaXB2YWwgJiAweEZGLCBpb2Jhc2UrNCAp
OworICBvdXRiX3AoIChpcHZhbD4+OCkgJiAweEZGLCBpb2Jhc2UrNCApOworICBvdXRiX3AoIGNz
dmFsICYgMHhGRiwgaW9iYXNlKzQgKTsKKyAgb3V0Yl9wKCAoY3N2YWw+PjgpICYgMHhGRiwgaW9i
YXNlKzQgKTsKKwlkbWFfc3RhdGUgXj0gU1RBVF9kbWFfc3RhdGU7CisgIHJldHVybiAwOworfQor
Cit2b2lkIHJlbGVhc2VfaW8oIHZvaWQgKQoreworICBpb3Blcm0oIChsb25nKWlvYmFzZSwgOCwg
MCApOworICBpb3Blcm0oIChsb25nKTB4MDA4MCwgMSwgMCApOworICBpZiAoIHJlYWRfYnVmZiAp
IGZyZWUoIHJlYWRfYnVmZiApOworfQorCitwYXJzZXBhcm0oIGNoYXIgKnBhcm0sIGNoYXIgKnZh
bHVlICkKK3sKKyAgY2hhciAqY3AgPSBwYXJtK3N0cmxlbiggcGFybSApOworICB3aGlsZSAoIC0t
Y3AgPiBwYXJtICkgaWYgKCAqY3AgPiAnICcgKSBicmVhazsKKyAgY3BbMV0gPSAnXDAnOworICBp
ZiAoICFzdHJjbXAoIHBhcm0sICJpbyIgKSApIHsKKyAgICBsb25nIGlvID0gc3RydG9sKCB2YWx1
ZSwgMCwgMCApOworICAgIGlmICggaW8gPj0gMHgxMDAgJiYgaW8gPD0gMHgzNTAgKSB7CisgICAg
ICBpb2Jhc2UgPSAodV9zaG9ydClpbzsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgZnByaW50
Ziggc3RkZXJyLCAiaW52YWxpZCBpbyB2YWx1ZSAlc1xuIiwgdmFsdWUgKTsKKyAgICBleGl0KCAx
ICk7CisgIH0gZWxzZSBpZiAoICFzdHJjbXAoIHBhcm0sInZlcmJvc2UiICkgKSB7CisgICAgdmVy
Ym9zZSA9IGF0b2koIHZhbHVlICk7CisgIH0KK30KKworZG9fdGVzdCggdm9pZCApCit7CisgIGNo
YXIgYnVmZmVyWzUxMl07CisgIGludCBsZW47CisgIGRtYV9zdGF0ZSA9IGR0X2dldHN0YXR1cygg
KSAmIFNUQVRfZG1hX3N0YXRlOworICB3aGlsZSAoIGZnZXRzKCBidWZmZXIsIDUxMCwgc3RkaW4g
KSApIHsKKyAgICBsZW4gPSBzdHJsZW4oIGJ1ZmZlciApOworICAgIGlmICggbGVuID09IDEgKSBk
dF9mbHVzaCggKTsKKyAgICBlbHNlIHsKKyAgICAgIGlmICggYnVmZmVyW2xlbi0xXSA9PSAnXG4n
ICkgYnVmZmVyW2xlbi0xXSA9ICdcMDEzJzsKKyAgICAgIGR0X3NlbmRidWZmKCBidWZmZXIsIGxl
biApOworICAgIH0KKyAgfQorICAqYnVmZmVyID0gJ1wwMTMnOworICBkdF9zZW5kYnVmZiggYnVm
ZmVyLCAxICk7Cit9CisKK2ludCBtYWluICggaW50IGFyZ2MsIGNoYXIgKiphcmd2ICkKK3sKKyAg
Y2hhciBuYW1lWzgwXSwgKmNwOworICBjaGFyICpkaXJuYW1lID0gMCwgKmNvbmZuYW1lID0gImRl
Y19wYy5jb25mIjsKKyAgY2hhciAqaW5pdF9tc2cgPSAiWzpyYSAzNjBdIGRlYyBwYyBpbml0aWFs
aXplZFwwMTEiOworICBGSUxFICpjb25maWxlOworICBzdHJ1Y3Qgc3RhdCBzdGF0YnVmOworICBp
bnQgbWF4c2l6ZSA9IDAsIHN0YXR1cyA9IDA7CisgIHdoaWxlICggLS1hcmdjID4gMCApIHsKKyAg
ICBhcmd2Kys7CisgICAgaWYgKCAhc3RyY21wKCAqYXJndiwgIi12IiApICkgdmVyYm9zZSA9IDE7
CisgICAgZWxzZSBpZiAoICFzdHJjbXAoICphcmd2LCAiLXQiICkgKSBpbnRlc3QgPSAxOworICAg
IGVsc2UgZGlybmFtZSA9ICphcmd2OworICB9CisgIGlmICggIWRpcm5hbWUgKSBkaXJuYW1lID0g
Ii91c3IvbG9jYWwvbGliL2RlY19wYyI7CisgIGlmICggY2hkaXIoIGRpcm5hbWUgKSAhPSAwICkg
eworICAgIGZwcmludGYoIHN0ZGVyciwgImNhbm5vdCBjaGRpciB0byAlc1xuIiwgZGlybmFtZSAp
OworICAgIGV4aXQoIDEgKTsKKyAgfQorICBpZiAoICEoIGNvbmZpbGUgPSBmb3BlbiggY29uZm5h
bWUsICJyIiApICkgKSB7CisgICAgZnByaW50Ziggc3RkZXJyLCAiY291bGQgbm90IG9wZW4gJXMi
LCBjb25mbmFtZSApOworICAgIGV4aXQoIDEgKTsKKyAgfQorICB3aGlsZSAoIGZnZXRzKCBuYW1l
LCA4MCwgY29uZmlsZSApICkgeworICAgIGNwID0gc3RyY2hyKCBuYW1lLCAnXG4nICk7CisgICAg
aWYgKCBjcCApICpjcCA9ICdcMCc7CisgICAgaWYgKCAoIGNwID0gc3RyY2hyKCBuYW1lLCAnPScg
KSApICkgeworICAgICAgKmNwKysgPSAnXDAnOworICAgICAgcGFyc2VwYXJtKCBuYW1lLCBjcCAp
OworICAgICAgY29udGludWU7CisgICAgfQorICAgIGlmICggc3RhdCggbmFtZSwgJnN0YXRidWYg
KSAhPSAwICkgeworICAgICAgZnByaW50Ziggc3RkZXJyLCAiY2Fubm90IHN0YXQgJXNcbiIsIG5h
bWUgKTsKKyAgICAgIGV4aXQoIDEgKTsKKyAgICB9CisgICAgaWYgKCBzdGF0YnVmLnN0X3NpemUg
PiBtYXhzaXplICkgbWF4c2l6ZSA9IHN0YXRidWYuc3Rfc2l6ZTsKKyAgfQorICByZXdpbmQoIGNv
bmZpbGUgKTsKKyAgaWYgKCBpb3Blcm0oIChsb25nKTB4MDA4MCwgMSwgMSApIHx8IGlvcGVybSgg
KGxvbmcpaW9iYXNlLCA4LCAxICkgKSB7CisgICAgZnByaW50Ziggc3RkZXJyLCAiY291bGQgbm90
IGdldCBpb3Blcm1cbiIgKTsKKyAgICBleGl0KCAxICk7CisgIH0KKyAgYXRleGl0KCByZWxlYXNl
X2lvICk7CisgIGlmICggdGVzdGtlcm5lbCggKSA9PSAwICkgeworICAgIGlmICggaW50ZXN0ICkg
ZG9fdGVzdCggKTsKKyAgICBlbHNlIGZwcmludGYoIHN0ZGVyciwgImtlcm5lbCBhbHJlYWR5IGxv
YWRlZFxuIiApOworICAgIGV4aXQoIDAgKTsKKyAgfQorICByZWFkX2J1ZmYgPSBtYWxsb2MoICBt
YXhzaXplICk7CisgIGlmICggIXJlYWRfYnVmZiApIHsKKyAgICBmcHJpbnRmKCBzdGRlcnIsICJj
YW5ub3QgbWFsbG9jICVkIGJ5dGVzXG4iLCBtYXhzaXplICk7CisgICAgZXhpdCggMSApOworICB9
CisgIHdoaWxlICggZmdldHMoIG5hbWUsIDgwLCBjb25maWxlICkgJiYgIXN0YXR1cyApIHsKKyAg
ICBjcCA9IHN0cmNociggbmFtZSwgJ1xuJyApOworICAgIGlmICggY3AgKSAqY3AgPSAnXDAnOwor
ICAgIGlmICggc3RyY2hyKCBuYW1lLCAnPScgKSApIGNvbnRpbnVlOyAvKiBhIHBhcmFtZXRlciAq
LworICAgIGlmICggISggY3AgPSBzdHJjaHIoIG5hbWUsICcuJyApICkgKSBjb250aW51ZTsKKyAg
ICBjcCsrOworICAgIGlmICggIXN0cmNtcCAoIGNwLCAiZGljIiApICkgeworICAgICAgc3RhdHVz
ID0gbG9hZGRpY3QgKCBuYW1lLCAicHJpbWFyeSIsIFBSSU1BUllfRElDICk7CisgICAgfSBlbHNl
IGlmICggIXN0cmNtcCAoIGNwLCAiZHR1IiApICkgeworICAgICAgc3RhdHVzID0gbG9hZGRpY3Qg
KCBuYW1lLCAidXNlciIsIFVTRVJfRElDICk7CisgICAgfSBlbHNlIGlmICggIXN0cmNtcCAoIGNw
LCAiZHRhIiApICkgeworICAgICAgc3RhdHVzID0gbG9hZGRpY3QgKCBuYW1lLCAiYWJicmV2aWF0
aW9uIGZpbGUiLCBBQkJSRVZfRElDICk7CisgICAgfSBlbHNlIGlmICggIXN0cmNtcCAoIGNwLCAi
ZXhlIiApICkgeworICAgICAgc3RhdHVzID0gbG9hZGV4ZSAoIG5hbWUgKTsKKyAgICB9IGVsc2Ug
aWYgKCAhc3RyY21wICggY3AsICJzeXMiICkgKSB7CisgICAgICBzdGF0dXMgPSBsb2Fka2VybmVs
ICggbmFtZSApOworICAgIH0KKyAgfQorICBpZiAoIHN0YXR1cyApIGZwcmludGYoIHN0ZGVyciwg
InN0YXR1cyAlZFxuIiwgc3RhdHVzICk7CisgIGZjbG9zZSggY29uZmlsZSApOworICBpZiAoIHN0
YXR1cyApIGV4aXQoIHN0YXR1cyApOworICBkdF9zZW5kYnVmZiggaW5pdF9tc2csIHN0cmxlbigg
aW5pdF9tc2cgKSApOworICBzbGVlcCggMSApOworICBpZiAoIGludGVzdCApIGRvX3Rlc3QoICk7
CisgIGV4aXQoIDAgKTsKK30KZGlmZiAtLWV4Y2x1ZGU9Jyoub3JpZycgLS1leGNsdWRlPScqLnBh
dGNoJyAtdXJOcCBsaW51eC0yLjYuMjAvZHJpdmVycy9jaGFyL3NwZWFrdXAvZHRsb2FkLmggbGlu
dXgtMi42LjIwLXNway9kcml2ZXJzL2NoYXIvc3BlYWt1cC9kdGxvYWQuaAotLS0gbGludXgtMi42
LjIwL2RyaXZlcnMvY2hhci9zcGVha3VwL2R0bG9hZC5oCTE5NjktMTItMzEgMTk6MDA6MDAuMDAw
MDAwMDAwIC0wNTAwCisrKyBsaW51eC0yLjYuMjAtc3BrL2RyaXZlcnMvY2hhci9zcGVha3VwL2R0
bG9hZC5oCTIwMDctMDItMDQgMTY6MDk6MjAuMDAwMDAwMDAwIC0wNTAwCkBAIC0wLDAgKzEsNTcg
QEAKKy8qCisgKiBUaGlzIGlzIHRoZSBERUN0YWxrIFBDIGZpcm13YXJlIGxvYWRlciBmb3IgdGhl
IExpbnV4IGtlcm5lbCwgdmVyc2lvbiAxLjAKKyAqCisgKiBPcmlnaW5hbCAzODZCU0Qgc291cmNl
OgorICogICAgICBDb3B5cmlnaHQgKGMpIDE5OTYgQnJpYW4gQnVocm93IDxidWhyb3dAbG90aGxv
cmllbi5uZmJjYWwub3JnPgorICoKKyAqIEFkYXB0ZWQgZm9yIExpbnV4OgorICogICAgICBDb3B5
cmlnaHQgKGMpIDE5OTcgTmljb2xhcyBQaXRyZSA8bmljb0BjYW0ub3JnPgorICoKKyAqIEFkYXB0
ZWQgZm9yIHNwZWFrdXA6CisgKiAgICAgIENvcHlyaWdodCAoYykgMjAwMyBEYXZpZCBCb3Jvd3Nr
aSA8ZGF2aWQ1NzVAZ29sZGVuLm5ldD4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUg
dG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwg
Q2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICoKKyAqLworCisjZGVmaW5lCU1BWF9GSVhVUFMJ
NTEyCSAgCS8qIG1heGltdW0gZml4dXBzIHBlciBleGUgKi8KKy8qCisgKiAgbXNkb3MgLmV4ZSBm
aWxlcyB3aWxsIGxvb2sgbGlrZSAuLi4KKyAqLworCitzdHJ1Y3QgZG9zX2V4ZV9oZWFkZXIgewor
CXVuc2lnbmVkIHNob3J0IGlkOwkJLyogTGlua2VyJ3Mgc2lnbmF0dXJlLCBtdXN0IGJlIDB4NWE0
ZCAqLworCXVuc2lnbmVkIHNob3J0IHJlbTsJCS8qIGxlbmd0aCBvZiBpbWFnZSBtb2QgNTEyICov
CisJdW5zaWduZWQgc2hvcnQgcGFnZXM7CQkvKiBsZW5ndGggb2YgaW1hZ2UgaW4gcGFnZXMgb2Yg
NTEyIGJ5dGVzICovCisJdW5zaWduZWQgc2hvcnQgcmVsZW47CQkvKiBudW1iZXIgb2YgcmVsb2Nh
dGlvbiBpdGVtcyAqLworCXVuc2lnbmVkIHNob3J0IGhzaXplOwkJLyogaGVhZGVyIHNpemUgaW4g
cGFyYWdyYXBocyBvZiAxNiBieXRlcyAqLworCXVuc2lnbmVkIHNob3J0IGhtaW47CQkvKiBtaW4g
IyBvZiBwYXJhZ3JhcGhzIGFib3ZlIHByb2cgZW5kICovCisJdW5zaWduZWQgc2hvcnQgaG1heDsK
Kwl1bnNpZ25lZCBzaG9ydCBzc3ZhbDsKKwl1bnNpZ25lZCBzaG9ydCBzcHZhbDsJCS8qIHRvIGJl
IGxvYWRlZCBpbiBzcCAqLworCXVuc2lnbmVkIHNob3J0CWNoZWNrc3VtOworCXVuc2lnbmVkIHNo
b3J0CWlwdmFsOwkJLyogdG8gYmUgbG9hZGVkIGluIGlwICovCisJdW5zaWduZWQgc2hvcnQJY3N2
YWw7ICAJLyogc2VnbWVudCBvZmZzZXQgdG8gY29kZSAqLworCXVuc2lnbmVkIHNob3J0CXJlbG9j
OwkJLyogbG9jYXRpb24gb2YgcmVsb2NhdGlvbiBpdGVtcwkqLworCXVuc2lnbmVkIHNob3J0CW92
cmxheTsJCS8qIG92ZXJsYXkgbnVtYmVyICovCit9OworCisvKiAgYSBkb3MgcmVsb2NhdGlvbiBl
bGVtZW50IGxvb2tzIGxpa2UgKi8KKworc3RydWN0IGRvc19yZWxvYyB7CisJc2hvcnQgaW50IG9m
ZnNldCwgc2VnbWVudDsKK307CmRpZmYgLS1leGNsdWRlPScqLm9yaWcnIC0tZXhjbHVkZT0nKi5w
YXRjaCcgLXVyTnAgbGludXgtMi42LjIwL2RyaXZlcnMvY2hhci9zcGVha3VwL2R0cGNfcmVnLmgg
bGludXgtMi42LjIwLXNway9kcml2ZXJzL2NoYXIvc3BlYWt1cC9kdHBjX3JlZy5oCi0tLSBsaW51
eC0yLjYuMjAvZHJpdmVycy9jaGFyL3NwZWFrdXAvZHRwY19yZWcuaAkxOTY5LTEyLTMxIDE5OjAw
OjAwLjAwMDAwMDAwMCAtMDUwMAorKysgbGludXgtMi42LjIwLXNway9kcml2ZXJzL2NoYXIvc3Bl
YWt1cC9kdHBjX3JlZy5oCTIwMDctMDItMDQgMTY6MDk6MTkuMDAwMDAwMDAwIC0wNTAwCkBAIC0w
LDAgKzEsMTMyIEBACisvKgorICogVGhpcyBpcyB0aGUgREVDdGFsayBQQyByZWdpc3RlciBjb25z
dGFudHMgKGZyb20gREVDJ3MgRE9TIGRyaXZlcikKKyAqCisgKiBPcmlnaW5hbCBjb2RlOgorICog
ICAgICBDb3B5cmlnaHQgKGMpIGJ5IERpZ2l0YWwgRXF1aXBtZW50IENvcnAuCisgKgorICogMzg2
QlNEIERFQ3RhbGsgUEMgZHJpdmVyOgorICogICAgICBDb3B5cmlnaHQgKGMpIDE5OTYgQnJpYW4g
QnVocm93IDxidWhyb3dAbG90aGxvcmllbi5uZmJjYWwub3JnPgorICoKKyAqIExpbnV4IERFQ3Rh
bGsgUEMgZHJpdmVyOgorICogICAgICBDb3B5cmlnaHQgKGMpIDE5OTcgTmljb2xhcyBQaXRyZSA8
bmljb0BjYW0ub3JnPgorICoKKyAqIHNwZWFrdXAgREVDdGFsayBQQyBkcml2ZXI6CisgKiAgICAg
IENvcHlyaWdodCAoYykgMjAwMyBEYXZpZCBCb3Jvd3NraSA8ZGF2aWQ1NzVAZ29sZGVuLm5ldD4K
KyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcg
d2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAq
IEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNB
LgorICoKKyAqLworCisvKgorICogIHBvcnQgaW50ZXJmYWNlIGRlZnMgLi4uIHVzZWQgYnkgZHRw
Yy5jCisgKi8KKworI2RlZmluZQlNT0RVTEVfaW5pdAkJMHgwZGVjCQkvKiBtb2R1bGUgaW4gYm9v
dCBjb2RlICovCQkJCisjZGVmaW5lCU1PRFVMRV9zZWxmX3Rlc3QJMHg4ODAwCQkvKiBtb2R1bGUg
aW4gc2VsZi10ZXN0ICovCisjZGVmaW5lCU1PRFVMRV9yZXNldAkJMHhmZmZmCQkvKiByZWluaXQg
dGhlIHdob2xlIG1vZHVsZSAqLworCisjZGVmaW5lCU1PREVfbWFzawkJMHhmMDAwCQkvKiBtb2Rl
IGJpdHMgaW4gaGlnaCBuaWJibGUgKi8KKyNkZWZpbmUJTU9ERV9udWxsCQkweDAwMDAKKyNkZWZp
bmUJTU9ERV90ZXN0CQkweDIwMDAJCS8qIGluIHRlc3RpbmcgbW9kZSAqLworI2RlZmluZQlNT0RF
X3N0YXR1cwkJMHg4MDAwCisjZGVmaW5lCVNUQVRfaW50CQkweDAwMDEJCS8qIHJ1bm5pbmcgaW4g
aW50ZXJydXB0IG1vZGUgKi8KKyNkZWZpbmUJU1RBVF90cl9jaGFyCTB4MDAwMgkJLyogY2hhcmFj
dGVyIGRhdGEgdG8gdHJhbnNtaXQgKi8KKyNkZWZpbmUJU1RBVF9ycl9jaGFyCTB4MDAwNAkJLyog
cmVhZHkgdG8gcmVjZWl2ZSBjaGFyIGRhdGEgKi8KKyNkZWZpbmUJU1RBVF9jbWRfcmVhZHkJMHgw
MDA4CQkvKiByZWFkeSB0byBhY2NlcHQgY29tbWFuZHMgKi8KKyNkZWZpbmUJU1RBVF9kbWFfcmVh
ZHkJMHgwMDEwCQkvKiBkbWEgY29tbWFuZCByZWFkeSAqLworI2RlZmluZQlTVEFUX2RpZ2l0aXpl
ZAkweDAwMjAJCS8qIHNwYyBpbiBkaWdpdGl6ZWQgbW9kZSAqLworI2RlZmluZQlTVEFUX25ld19p
bmRleAkweDAwNDAJCS8qIG5ldyBsYXN0IGluZGV4IHJlYWR5ICovCisjZGVmaW5lCVNUQVRfbmV3
X3N0YXR1cwkweDAwODAJCS8qIG5ldyBzdGF0dXMgcG9zdGVkICovCisjZGVmaW5lCVNUQVRfZG1h
X3N0YXRlCTB4MDEwMAkJLyogZG1hIHN0YXRlIHRvZ2dsZSAqLworI2RlZmluZQlTVEFUX2luZGV4
X3ZhbGlkCTB4MDIwMAkJLyogaW5kZXhzIGFyZSB2YWxpZCAqLworI2RlZmluZQlTVEFUX2ZsdXNo
aW5nCTB4MDQwMAkJLyogZmx1c2ggaW4gcHJvZ3Jlc3MgKi8KKyNkZWZpbmUJU1RBVF9zZWxmX3Rl
c3QJMHgwODAwCQkvKiBtb2R1bGUgaW4gc2VsZiB0ZXN0ICovCisjZGVmaW5lCU1PREVfcmVhZHkJ
CTB4YzAwMAkJLyogbW9kdWxlIHJlYWR5IGZvciBuZXh0IHBoYXNlICovCisjZGVmaW5lCVJFQURZ
X2Jvb3QJCTB4MDAwMAkJCQkKKyNkZWZpbmUJUkVBRFlfa2VybmVsCTB4MDAwMQkJCisjZGVmaW5l
CU1PREVfZXJyb3IJCTB4ZjAwMAorCisjZGVmaW5lCUNNRF9tYXNrCQkJMHhmMDAwCQkvKiBtYXNr
IGZvciBjb21tYW5kIG5pYmJsZSAqLworI2RlZmluZQlDTURfbnVsbAkJCTB4MDAwMAkJLyogcG9z
dCBzdGF0dXMgKi8KKyNkZWZpbmUJQ01EX2NvbnRyb2wJCTB4MTAwMAkJLyogaGFyZCBjb250cm9s
IGNvbW1hbmQgKi8KKyNkZWZpbmUJQ1RSTF9tYXNrCQkweDBGMDAJLyogICBtYXNrIG9mZiBjb250
cm9sIG5pYmJsZSAqLworI2RlZmluZQlDVFJMX2RhdGEJCTB4MDBGRgkvKiAgIG1hZGsgdG8gZ2V0
IGRhdGEgYnl0ZSAqLworI2RlZmluZQlDVFJMX251bGwJCTB4MDAwMAkvKiAgIG51bGwgY29udHJv
bCAqLworI2RlZmluZQlDVFJMX3ZvbF91cAkJMHgwMTAwCS8qICAgaW5jcmVhc2Ugdm9sdW1lICov
CisjZGVmaW5lCUNUUkxfdm9sX2Rvd24JCTB4MDIwMAkvKiAgIGRlY3JlYXNlIHZvbHVtZSAqLwor
I2RlZmluZQlDVFJMX3ZvbF9zZXQJCTB4MDMwMAkvKiAgIHNldCB2b2x1bWUgKi8KKyNkZWZpbmUJ
Q1RSTF9wYXVzZQkJMHgwNDAwCS8qICAgcGF1c2Ugc3BjICovCisjZGVmaW5lCUNUUkxfcmVzdW1l
CQkweDA1MDAJLyogICByZXN1bWUgc3BjIGNsb2NrICovCisjZGVmaW5lCUNUUkxfcmVzdW1lX3Nw
YwkJMHgwMDAxCS8qICAgcmVzdW1lIHNwYyBzb2Z0IHBhdXNlICovCisjZGVmaW5lCUNUUkxfZmx1
c2gJCTB4MDYwMAkvKiAgIGZsdXNoIGFsbCBidWZmZXJzICovCisjZGVmaW5lCUNUUkxfaW50X2Vu
YWJsZQkweDA3MDAJLyogICBlbmFibGUgc3RhdHVzIGNoYW5nZSBpbnRzICovCisjZGVmaW5lCUNU
UkxfYnVmZl9mcmVlCQkweDA4MDAJLyogICBidWZmZXIgcmVtYWluIGNvdW50ICovCisjZGVmaW5l
CUNUUkxfYnVmZl91c2VkCQkweDA5MDAJLyogICBidWZmZXIgaW4gdXNlICovCisjZGVmaW5lCUNU
Ukxfc3BlZWNoCQkweDBhMDAJLyogICBpbW1lZGlhdGUgc3BlZWNoIGNoYW5nZSAqLworI2RlZmlu
ZQkJQ1RSTF9TUF92b2ljZQkJMHgwMDAxCS8qICAgICAgdm9pY2UgY2hhbmdlICovCisjZGVmaW5l
CQlDVFJMX1NQX3JhdGUJCTB4MDAwMgkvKiAgICAgIHJhdGUgY2hhbmdlICovCisjZGVmaW5lCQlD
VFJMX1NQX2NvbW1hCQkweDAwMDMJLyogICAgICBjb21tYSBwYXVzZSBjaGFuZ2UgKi8KKyNkZWZp
bmUJCUNUUkxfU1BfcGVyaW9kCQkweDAwMDQJLyogICAgICBwZXJpb2QgcGF1c2UgY2hhbmdlICov
CisjZGVmaW5lCQlDVFJMX1NQX3JhdGVfZGVsdGEJMHgwMDA1CS8qCSAgZGVsdGEgcmF0ZSBjaGFu
Z2UgKi8KKyNkZWZpbmUJCUNUUkxfU1BfZ2V0X3BhcmFtCTB4MDAwNgkvKiAgICAgIHJldHVybiB0
aGUgZGVzaXJlZCBwYXJhbWV0ZXIgKi8KKyNkZWZpbmUJQ1RSTF9sYXN0X2luZGV4CTB4MGIwMAkv
KiAgIGdldCBsYXN0IGluZGV4IHNwb2tlbiAqLworI2RlZmluZQlDVFJMX2lvX3ByaW9yaXR5CTB4
MGMwMAkvKiAgIGNoYW5nZSBpL28gcHJpb3JpdHkgKi8KKyNkZWZpbmUJQ1RSTF9mcmVlX21lbQkJ
MHgwZDAwCS8qICAgZ2V0IGZyZWUgcGFyYWdyYXBocyBvbiBtb2R1bGUgKi8KKyNkZWZpbmUJQ1RS
TF9nZXRfbGFuZwkJMHgwZTAwCS8qICAgcmV0dXJuIGJpdCBtYXNrIG9mIGxvYWRlZCBsYW5ndWFn
ZXMgKi8KKyNkZWZpbmUJQ01EX3Rlc3QJCQkweDIwMDAJCS8qIHNlbGYtdGVzdCByZXF1ZXN0ICov
CisjZGVmaW5lCVRFU1RfbWFzawkJMHgwRjAwCS8qIGlzb2xhdGUgdGVzdCBmaWVsZCAqLworI2Rl
ZmluZQlURVNUX251bGwJCTB4MDAwMAkvKiBubyB0ZXN0IHJlcXVlc3RlZCAqLworI2RlZmluZQlU
RVNUX2lzYV9pbnQJCTB4MDEwMAkvKiBhc3NlcnQgaXNhIGlycSAqLworI2RlZmluZQlURVNUX2Vj
aG8JCTB4MDIwMAkvKiBtYWtlIGRhdGEgaW4gPT0gZGF0YSBvdXQgKi8KKyNkZWZpbmUJVEVTVF9z
ZWcJCQkweDAzMDAJLyogc2V0IHBlZWsvcG9rZSBzZWdtZW50ICovCisjZGVmaW5lCVRFU1Rfb2Zm
CQkJMHgwNDAwCS8qIHNldCBwZWVrL3Bva2Ugb2Zmc2V0ICovCisjZGVmaW5lCVRFU1RfcGVlawkJ
MHgwNTAwCS8qIGRhdGEgb3V0ID09ICpwZWVrICovCisjZGVmaW5lCVRFU1RfcG9rZQkJMHgwNjAw
CS8qICpwZWVrID09IGRhdGEgaW4gKi8KKyNkZWZpbmUJVEVTVF9zdWJfY29kZQkJMHgwMEZGCS8q
IHVzZXIgZGVmaW5lZCB0ZXN0IHN1YiBjb2RlcyAqLworI2RlZmluZQlDTURfaWQJCQkweDMwMDAJ
CS8qIHJldHVybiBzb2Z0d2FyZSBpZCAqLworI2RlZmluZQlJRF9udWxsCQkJMHgwMDAwCS8qIG51
bGwgaWQgKi8KKyNkZWZpbmUJSURfa2VybmVsCQkweDAxMDAJLyoga2VybmVsIGNvZGUgZXhlY3V0
aW5nICovCisjZGVmaW5lCUlEX2Jvb3QJCQkweDAyMDAJLyogYm9vdCBjb2RlIGV4ZWN1dGluZyAq
LworI2RlZmluZQlDTURfZG1hCQkJMHg0MDAwCQkvKiBmb3JjZSBhIGRtYSBzdGFydCAqLworI2Rl
ZmluZQlDTURfcmVzZXQJCTB4NTAwMAkJLyogcmVzZXQgbW9kdWxlIHN0YXR1cyAqLworI2RlZmlu
ZQlDTURfc3luYwkJCTB4NjAwMAkJLyoga2VybmVsIHN5bmMgY29tbWFuZCAqLworI2RlZmluZQlD
TURfY2hhcl9pbgkJMHg3MDAwCQkvKiBzaW5nbGUgY2hhcmFjdGVyIHNlbmQgKi8KKyNkZWZpbmUJ
Q01EX2NoYXJfb3V0CQkweDgwMDAJCS8qIHNpbmdsZSBjaGFyYWN0ZXIgZ2V0ICovCisjZGVmaW5l
CUNIQVJfY291bnRfMQkJMHgwMTAwCS8qICAgIG9uZSBjaGFyIGluIGNtZF9sb3cgKi8KKyNkZWZp
bmUJQ0hBUl9jb3VudF8yCQkweDAyMDAJLyoJdGhlIHNlY29uZCBpbiBkYXRhX2xvdyAqLworI2Rl
ZmluZQlDSEFSX2NvdW50XzMJCTB4MDMwMAkvKgl0aGUgdGhpcmQgaW4gZGF0YV9oaWdoICovCisj
ZGVmaW5lCUNNRF9zcGNfbW9kZQkJMHg5MDAwCQkvKiBjaGFuZ2Ugc3BjIG1vZGUgKi8KKyNkZWZp
bmUJQ01EX3NwY190b190ZXh0CTB4MDEwMAkvKiAgIHNldCB0byB0ZXh0IG1vZGUgKi8KKyNkZWZp
bmUJQ01EX3NwY190b19kaWdpdAkweDAyMDAJLyogICBzZXQgdG8gZGlnaXRhbCBtb2RlICovCisj
ZGVmaW5lCUNNRF9zcGNfcmF0ZQkJMHgwNDAwCS8qICAgY2hhbmdlIHNwYyBkYXRhIHJhdGUgKi8K
KyNkZWZpbmUJQ01EX2Vycm9yCQkweGYwMDAJCS8qIHNldmVyZSBlcnJvciAqLworCitlbnVtIHsJ
UFJJTUFSWV9ESUMJPSAwLCBVU0VSX0RJQywgQ09NTUFORF9ESUMsIEFCQlJFVl9ESUMgfTsKKwor
I2RlZmluZQlETUFfc2luZ2xlX2luCQkweDAxCisjZGVmaW5lCURNQV9zaW5nbGVfb3V0CQkweDAy
CisjZGVmaW5lCURNQV9idWZmX2luCQkweDAzCisjZGVmaW5lCURNQV9idWZmX291dAkJMHgwNAor
I2RlZmluZQlETUFfY29udHJvbAkJMHgwNQorI2RlZmluZQlEVF9NRU1fQUxMT0MJCTB4MDMKKyNk
ZWZpbmUJRFRfU0VUX0RJQwkJMHgwNAorI2RlZmluZQlEVF9TVEFSVF9UQVNLCQkweDA1CisjZGVm
aW5lCURUX0xPQURfTUVNCQkweDA2CisjZGVmaW5lCURUX1JFQURfTUVNCQkweDA3CisjZGVmaW5l
CURUX0RJR0lUQUxfSU4JCTB4MDgKKyNkZWZpbmUJRE1BX3N5bmMJCTB4MDYKKyNkZWZpbmUJRE1B
X3N5bmNfY2hhcgkJMHgwNwpkaWZmIC0tZXhjbHVkZT0nKi5vcmlnJyAtLWV4Y2x1ZGU9JyoucGF0
Y2gnIC11ck5wIGxpbnV4LTIuNi4yMC9kcml2ZXJzL2NoYXIvc3BlYWt1cC9nZW5tYXAuYyBsaW51
eC0yLjYuMjAtc3BrL2RyaXZlcnMvY2hhci9zcGVha3VwL2dlbm1hcC5jCi0tLSBsaW51eC0yLjYu
MjAvZHJpdmVycy9jaGFyL3NwZWFrdXAvZ2VubWFwLmMJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAw
MDAwMDAgLTA1MDAKKysrIGxpbnV4LTIuNi4yMC1zcGsvZHJpdmVycy9jaGFyL3NwZWFrdXAvZ2Vu
bWFwLmMJMjAwNy0wMi0wNCAxNjowOToxOS4wMDAwMDAwMDAgLTA1MDAKQEAgLTAsMCArMSwyMDQg
QEAKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGxp
Ymdlbi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4K
KyNpbmNsdWRlIDxjdHlwZS5oPgorCitpbnQgZ2V0X2RlZmluZSh2b2lkKTsKKworI2RlZmluZSBN
QVhLRVlTIDUxMgorI2RlZmluZSBNQVhLRVlWQUwgMTYwCisjZGVmaW5lIEhBU0hTSVpFIDEwMQor
I2RlZmluZSBpc19zaGlmdCAtMworI2RlZmluZSBpc19zcGsgLTIKKyNkZWZpbmUgaXNfaW5wdXQg
LTEKK3R5cGVkZWYgc3RydWN0IHN0X2tleV9pbml0IHRfa2V5X2luaXQ7CitzdHJ1Y3Qgc3Rfa2V5
X2luaXQgeworCWNoYXIgKm5hbWU7CisJaW50IHZhbHVlLCBzaGlmdDsKK307Cit0eXBlZGVmIHN0
cnVjdCBzdF9rZXkgdF9rZXk7CitzdHJ1Y3Qgc3Rfa2V5IHsKKwljaGFyICpuYW1lOworCXRfa2V5
ICpuZXh0OworCWludCB2YWx1ZSwgc2hpZnQ7Cit9OwordW5zaWduZWQgY2hhciBrZXlfZGF0YVtN
QVhLRVlWQUxdWzE2XSwgKmtwOworCisjaW5jbHVkZSAibWFwZGF0YS5oIgordF9rZXkga2V5X3Rh
YmxlW01BWEtFWVNdOwordF9rZXkgKmV4dHJhX2tleXMgPSBrZXlfdGFibGUrSEFTSFNJWkU7Citj
aGFyIGJ1ZmZlclsyNTZdLCBmaWxlbmFtZVsyNTZdOworRklMRSAqaW5maWxlOworY2hhciBkZWxp
bXNbXSA9ICJcdFxuICI7CitjaGFyICpkZWZfbmFtZSwgKmRlZl92YWwsICpjcDsKK2ludCBtYXBf
dmVyID0gMTE5OyAvKiBhbiBhcmJpdHJhcnkgbnVtYmVyIHNvIHNwZWFrdXAgY2FuIGNoZWNrICov
CitpbnQgbGMsIHNoaWZ0X3RhYmxlWzE3XTsKK2ludCBtYXhfc3RhdGVzID0gMSwgZmxhZ3MgPSAw
OworLyogZmxhZ3MgcmVzZXJ2ZWQgZm9yIGxhdGVyLCBtYXliZSBmb3IgaW5kaXZpZHVhbCBjb25z
b2xlIG1hcHMgKi8KKwordm9pZCBvcGVuX2lucHV0KCBjaGFyICpuYW1lICkKK3sKKwlzdHJjcHko
IGZpbGVuYW1lLCBuYW1lICk7CisJaWYgKCAoIGluZmlsZSA9IGZvcGVuKCBmaWxlbmFtZSwgInIi
ICkgKSA9PSAwICkgeworCQlmcHJpbnRmKCBzdGRlcnIsICJjYW4ndCBvcGVuICVzLCB2ZXJzaW9u
ICVkXG4iLCBmaWxlbmFtZSwgTElOVVhfVkVSU0lPTl9DT0RFICk7CisJCWV4aXQoIDEgKTsKKwl9
CisJbGMgPSAwOworfQorCitpbnQKK29vcHMoIGNoYXIgKm1zZywgY2hhciAqaW5mbyApCit7CisJ
aWYgKCBpbmZvID09IE5VTEwgKSBpbmZvID0gIiAiOworCWZwcmludGYoIHN0ZGVyciwgImVycm9y
OiBmaWxlICVzIGxpbmUgJWRcbiIsIGZpbGVuYW1lLCBsYyApOworCWZwcmludGYoIHN0ZGVyciwg
IiVzICVzXG4iLCBtc2csIGluZm8gKTsKKwlleGl0KCAxICk7Cit9CisKK3Rfa2V5ICpoYXNoX25h
bWUoIGNoYXIgKm5hbWUgKQoreworCXVfY2hhciAqcG4gPSAodV9jaGFyICopbmFtZTsKKwlpbnQg
aGFzaCA9IDA7CisJd2hpbGUgKCAqcG4gKSB7CisJCWhhc2ggPSAoIGhhc2ggKiAxNyApICYgMHhm
ZmZmZmZmOworCWlmICggaXN1cHBlciggKnBuICkgKSAqcG4gPSB0b2xvd2VyKCAqcG4gKTsKKwkJ
aGFzaCArPSAoIGludCApKnBuOworCQlwbisrOworCX0KKwloYXNoICU9IEhBU0hTSVpFOworCXJl
dHVybiAma2V5X3RhYmxlW2hhc2hdOworfQorCit0X2tleSAqZmluZF9rZXkoIGNoYXIgKm5hbWUg
KQoreworCXRfa2V5ICp0aGlzID0gaGFzaF9uYW1lKCBuYW1lICk7CisJd2hpbGUgKCB0aGlzICkg
eworCQlpZiAoICFzdHJjbXAoIG5hbWUsIHRoaXMtPm5hbWUgKSApIHJldHVybiB0aGlzOworCQl0
aGlzID0gdGhpcy0+bmV4dDsKKwl9CisJcmV0dXJuIHRoaXM7Cit9CisKK3Rfa2V5ICphZGRfa2V5
KCBjaGFyICpuYW1lLCBpbnQgdmFsdWUsIGludCBzaGlmdCApCit7CisJdF9rZXkgKnRoaXMgPSBo
YXNoX25hbWUoIG5hbWUgKTsKKwlpZiAoIGV4dHJhX2tleXMta2V5X3RhYmxlID49IE1BWEtFWVMg
KQorCQlvb3BzKCAib3V0IG9mIGtleSB0YWJsZSBzcGFjZSwgZW5sYXJnZSBNQVhLRVlTIiwgTlVM
TCApOworCWlmICggdGhpcy0+bmFtZSAhPSBOVUxMICkgeworCQl3aGlsZSAoIHRoaXMtPm5leHQg
KSB7CisJCQlpZiAoICFzdHJjbXAoIG5hbWUsIHRoaXMtPm5hbWUgKSApCisJCQkJb29wcyggImF0
dGVtcHQgdG8gYWRkIGR1cGxpY2F0ZSBrZXkiLCBuYW1lICk7CisJCQl0aGlzID0gdGhpcy0+bmV4
dDsKKwkJfQorCQl0aGlzLT5uZXh0ID0gZXh0cmFfa2V5cysrOworCQl0aGlzID0gdGhpcy0+bmV4
dDsKKwl9CisJdGhpcy0+bmFtZSA9IHN0cmR1cCggbmFtZSApOworCXRoaXMtPnZhbHVlID0gdmFs
dWU7CisJdGhpcy0+c2hpZnQgPSBzaGlmdDsKKwlyZXR1cm4gdGhpczsKK30KKworaW50IGdldF9z
aGlmdF92YWx1ZSggaW50IHN0YXRlICkKK3sKKwlpbnQgaTsKKwlmb3IgKCBpID0gMDsgc2hpZnRf
dGFibGVbaV0gIT0gc3RhdGU7IGkrKyApIHsKKwkJaWYgKCBzaGlmdF90YWJsZVtpXSA9PSAtMSAp
IHsKKwkJCWlmICggaSA+PSAxNiApCisJCQkJb29wcyggInRvbyBtYW55IHNoaWZ0IHN0YXRlcyIs
IE5VTEwgKTsKKwkJCXNoaWZ0X3RhYmxlW2ldID0gc3RhdGU7CisJCQltYXhfc3RhdGVzID0gaSsx
OworCQlicmVhazsKKwl9CisJfQorCXJldHVybiBpOworfQorCitpbnQJCQorbWFpbiggaW50IGFy
Z2MsIGNoYXIgKmFyZ3ZbXSApCit7CisJaW50IHZhbHVlLCBzaGlmdF9zdGF0ZSwgaSwgc3BrX3Zh
bCA9IDAsIGxvY2tfdmFsID0gMDsKKwlpbnQgbWF4X2tleV91c2VkID0gMCwgbnVtX2tleXNfdXNl
ZCA9IDA7CisJdF9rZXkgKnRoaXM7CisJdF9rZXlfaW5pdCAqcF9pbml0OworY2hhciAqYXJncGF0
aCwgKmFyZ25hbWUsICphcmdjb3B5OworCisJYnplcm8oIGtleV90YWJsZSwgc2l6ZW9mKCBrZXlf
dGFibGUgKSApOworCWJ6ZXJvKCBrZXlfZGF0YSwgc2l6ZW9mKCBrZXlfZGF0YSApICk7CisJc2hp
ZnRfdGFibGVbMF0gPSAwOworCWZvciAoIGkgPSAxOyBpIDw9IDE2OyBpKysgKSBzaGlmdF90YWJs
ZVtpXSA9IC0xOworCWlmICggYXJnYyA8IDIgKSB7CisJCWZwdXRzKCAidXNhZ2U6IGdlbm1hcCBm
aWxlbmFtZVxuIiwgc3RkZXJyICk7CisJCWV4aXQoIDEgKTsKKwl9CisgIGZvciAoIHBfaW5pdCA9
IGluaXRfa2V5X2RhdGE7IHBfaW5pdC0+bmFtZVswXSAhPSAnLic7IHBfaW5pdCsrICkKKwkJYWRk
X2tleSggcF9pbml0LT5uYW1lLCBwX2luaXQtPnZhbHVlLCBwX2luaXQtPnNoaWZ0ICk7CisJb3Bl
bl9pbnB1dCggYXJndlsxXSApOworCXdoaWxlICggZmdldHMoIGJ1ZmZlciwgMjUwLCBpbmZpbGUg
KSApIHsKKwkJbGMrKzsKKwkJdmFsdWUgPSBzaGlmdF9zdGF0ZSA9IDA7CisJCWNwID0gc3RydG9r
KCBidWZmZXIsIGRlbGltcyApOworCQlpZiAoICpjcCA9PSAnIycgKSBjb250aW51ZTsKKwkJd2hp
bGUgKCBjcCApIHsKKwkJCWlmICggKmNwID09ICc9JyApIGJyZWFrOworCQkJdGhpcyA9IGZpbmRf
a2V5KCBjcCApOworCQkJaWYgKCB0aGlzID09IE5VTEwgKQorCQkJCW9vcHMoICJ1bmtub3duIGtl
eS9tb2RpZmllciIsIGNwICk7CisJCQlpZiAoIHRoaXMtPnNoaWZ0ID09IGlzX3NoaWZ0ICkgewor
CQkJCWlmICggdmFsdWUgKQorCQkJCQlvb3BzKCAibW9kaWZpZXJzIG11c3QgY29tZSBmaXJzdCIs
IGNwICk7CisJCQkJc2hpZnRfc3RhdGUgKz0gdGhpcy0+dmFsdWU7CisJCQl9IGVsc2UgaWYgKCB0
aGlzLT5zaGlmdCA9PSBpc19pbnB1dCApCisJCQkJdmFsdWUgPSB0aGlzLT52YWx1ZTsKKwkJCWVs
c2Ugb29wcyggImJhZCBtb2RpZmllciBvciBrZXkiLCBjcCApOworCQkJY3AgPSBzdHJ0b2soIDAs
IGRlbGltcyApOworCQl9CisJCWlmICggIWNwICkgb29wcyggIm5vID0gZm91bmQiLCBOVUxMICk7
CisJCWNwID0gc3RydG9rKCAwLCBkZWxpbXMgKTsKKwkJaWYgKCAhY3AgKSBvb3BzKCAibm8gc3Bl
YWt1cCBmdW5jdGlvbiBhZnRlciA9IiwgTlVMTCApOworCQl0aGlzID0gZmluZF9rZXkoIGNwICk7
CisJCWlmICggdGhpcyA9PSBOVUxMIHx8IHRoaXMtPnNoaWZ0ICE9IGlzX3NwayApCisJCQlvb3Bz
KCAiaW52YWxpZCBzcGVha3VwIGZ1bmN0aW9uIiwgY3AgKTsKKwkJaSA9IGdldF9zaGlmdF92YWx1
ZSggc2hpZnRfc3RhdGUgKTsKKwkJaWYgKCBrZXlfZGF0YVt2YWx1ZV1baV0gKSB7CisJCQl3aGls
ZSAoIC0tY3AgPiBidWZmZXIgKQorCQkJCWlmICggISpjcCApICpjcCA9ICcgJzsKKwkJCW9vcHMo
ICJ0d28gZnVuY3Rpb25zIG9uIHNhbWUga2V5IGNvbWJpbmF0aW9uIiwgY3AgKTsKKwkJfQorCQlr
ZXlfZGF0YVt2YWx1ZV1baV0gPSAoY2hhcil0aGlzLT52YWx1ZTsKKwkJaWYgKCB2YWx1ZSA+IG1h
eF9rZXlfdXNlZCApIG1heF9rZXlfdXNlZCA9IHZhbHVlOworCX0KKwlmY2xvc2UoIGluZmlsZSAp
OworCXRoaXMgPSBmaW5kX2tleSggInNwa19rZXkiICk7CisJaWYgKCB0aGlzICkgc3BrX3ZhbCA9
IHRoaXMtPnZhbHVlOworCXRoaXMgPSBmaW5kX2tleSggInNwa19sb2NrIiApOworCWlmICggdGhp
cyApIGxvY2tfdmFsID0gdGhpcy0+dmFsdWU7CisJZm9yICggbGMgPSAxOyBsYyA8PSBtYXhfa2V5
X3VzZWQ7IGxjKysgKSB7CisJCWtwID0ga2V5X2RhdGFbbGNdOworCQlpZiAoICFtZW1jbXAoIGtl
eV9kYXRhWzBdLCBrcCwgMTYgKSApIGNvbnRpbnVlOworCQludW1fa2V5c191c2VkKys7CisJCWZv
ciAoIGkgPSAwOyBpIDwgbWF4X3N0YXRlczsgaSsrICkgeworCQkJaWYgKCBrcFtpXSAhPSBzcGtf
dmFsJiYga3BbaV0gIT0gbG9ja192YWwgKSBjb250aW51ZTsKKwkJCXNoaWZ0X3N0YXRlID0gc2hp
ZnRfdGFibGVbaV07CisJCQlpZiAoICggc2hpZnRfc3RhdGUmMTYgKSApIGNvbnRpbnVlOworCQkJ
c2hpZnRfc3RhdGUgPSBnZXRfc2hpZnRfdmFsdWUoIHNoaWZ0X3N0YXRlKzE2ICk7CisJCQlrcFtz
aGlmdF9zdGF0ZV0gPSBrcFtpXTsKKy8qIGZpbGwgaW4gc28gd2UgY2FuIHByb2Nlc3MgdGhlIGtl
eSB1cCwgYXMgc3BrIGJpdCB3aWxsIGJlIHNldCAqLworCQl9CisJfQorCXByaW50ZiggIlx0JWQs
ICVkLCAlZCxcblx0IiwgbWFwX3ZlciwgbnVtX2tleXNfdXNlZCwgbWF4X3N0YXRlcyApOworCWZv
ciAoIGkgPSAwOyBpIDwgbWF4X3N0YXRlczsgaSsrICkKKwkJcHJpbnRmKCAiJWQsICIsIHNoaWZ0
X3RhYmxlW2ldICk7CisJcHJpbnRmKCAiJWQsIiwgZmxhZ3MgKTsKKwlmb3IgKCBsYyA9IDE7IGxj
IDw9IG1heF9rZXlfdXNlZDsgbGMrKyApIHsKKwkJa3AgPSBrZXlfZGF0YVtsY107CisJCWlmICgg
IW1lbWNtcCgga2V5X2RhdGFbMF0sIGtwLCAxNiApICkgY29udGludWU7CisJCXByaW50ZiggIlxu
XHQlZCwiLCBsYyApOworCQlmb3IgKCBpID0gMDsgaSA8IG1heF9zdGF0ZXM7IGkrKyApCisJCQlw
cmludGYoICIgJWQsIiwgKHVuc2lnbmVkIGludClrcFtpXSApOworCX0KKwlwcmludGYoICJcblx0
MCwgJWRcbiIsIG1hcF92ZXIgKTsKKwlleGl0KCAwICk7Cit9CmRpZmYgLS1leGNsdWRlPScqLm9y
aWcnIC0tZXhjbHVkZT0nKi5wYXRjaCcgLXVyTnAgbGludXgtMi42LjIwL2RyaXZlcnMvY2hhci9z
cGVha3VwL0tjb25maWcgbGludXgtMi42LjIwLXNway9kcml2ZXJzL2NoYXIvc3BlYWt1cC9LY29u
ZmlnCi0tLSBsaW51eC0yLjYuMjAvZHJpdmVycy9jaGFyL3NwZWFrdXAvS2NvbmZpZwkxOTY5LTEy
LTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysgbGludXgtMi42LjIwLXNway9kcml2ZXJz
L2NoYXIvc3BlYWt1cC9LY29uZmlnCTIwMDctMDItMDQgMTY6MDk6MTkuMDAwMDAwMDAwIC0wNTAw
CkBAIC0wLDAgKzEsMjExIEBACittZW51ICJTcGVha3VwIGNvbnNvbGUgc3BlZWNoIiAKK2NvbmZp
ZyBTUEVBS1VQCisJdHJpc3RhdGUgIkJ1aWxkIHNwZWFrdXAgY29uc29sZSBzcGVlY2giCisJLS0t
aGVscC0tLQorCQkKKwkJVGhpcyBpcyB0aGUgU3BlYWt1cCBzY3JlZW4gcmVhZGVyLiAgVGhpbmsg
b2YgaXQgYXMgYQorCQl2aWRlbyBjb25zb2xlIGZvciBibGluZCBwZW9wbGUuICBJZiBidWlsdCBp
biB0byB0aGUKKwkJa2VybmVsLCBpdCBjYW4gc3BlYWsgZXZyeXRoaW5nIG9uIHRoZSB0ZXh0IGNv
bnNvbGUgZnJvbQorCQlib290IHVwIHRvIHNodXRkb3duLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24g
b24gU3BlYWt1cCwKKwkJcG9pbnQgeW91ciBicm93c2VyIGF0IGh0dHA6Ly93d3cubGludXgtc3Bl
YWt1cC5vcmcvLiAKKwkJVGhlcmUgaXMgYWxzbyBhIG1haWxpbmcgbGlzdCBhdCB0aGUgYWJvdmUg
dXJsIHRoYXQgeW91CisJCWNhbiBzdWJzY3JpYmUgdG8uCisJCQorCQlTdXBwb3J0ZWQgc3ludGhl
c2l6ZXJzIGFyZSBhY2NlbnQgc2EsIGFjY2VudCBwYywgYXBwb2xsbworCQlJSS4sIEF1ZGRhcHRl
ciwgQnJhaWxsZSAnbiBTcGVhaywgRGVjdGFsayBleHRlcm5hbAorCQkob2xkKSwgRGVjdGFsayBQ
QyAoZnVsbCBsZW5ndGggaXNhIGJvYXJkKSwgRGVjdGFsaworCQlleHByZXNzLCBEb3VibGV0YWxr
LCBEb3VibGV0YWxrIExUIG9yIExpdGV0YWxrLAorCQlLZXlub3RlCisJCUdvbGQgaW50ZXJuYWwg
UEMsIHNvZnR3YXJlIHN5bnRoZXNpemVycywgU3BlYWtvdXQsIGFuZCB0cmFuc3BvcnQuCisJCQor
CQlTcGVha3VwIGNhbiBlaXRoZXIgYmUgYnVpbHQgaW4gb3IgY29tcGlsZWQgYXMgYSBtb2R1bGUK
KwkJYnkgYW5zd2VyaW5nIHkgb3IgbS4gIElmIHlvdSBhbnN3ZXIgeSBoZXJlLCB0aGVuIHlvdQor
CQltdXN0IGFuc3dlciBlaXRoZXIgeSBvciBtIHRvIGF0IGxlYXN0IG9uZSBvZiB0aGUKKwkJc3lu
dGhlc2l6ZXIgZHJpdmVycyBiZWxvdy4gIElmIHlvdSBhbnN3ZXIgbSBoZXJlLCB0aGVuCisJCXRo
ZSBzeW50aGVzaXplciBkcml2ZXJzIGJlbG93IGNhbiBvbmx5IGJlIGJ1aWx0IGFzCisJCW1vZHVs
ZXMuCisJCQorCQlUaGVzZSBkcml2ZXJzIGFyZSBub3Qgc3RhbmRhbG9uZSBkcml2ZXJzLCBidXQg
bXVzdCBiZQorCQl1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggU3BlYWt1cC4gIFRoaW5rIG9mIHRo
ZW0gYXMKKwkJdmlkZW8gY2FyZHMgZm9yIGJsaW5kIHBlb3BsZS4KKwkJCisJCQorCQlUaGUgRGVj
dGFsayBwYyBkcml2ZXIgY2FuIG9ubHkgYmUgYnVpbHQgYXMgYSBtb2R1bGUsIGFuZAorCQlyZXF1
aXJlcyBzb2Z0d2FyZSB0byBiZSBwcmUtbG9hZGVkIG9uIHRvIHRoZSBjYXJkIGJlZm9yZQorCQl0
aGUgbW9kdWxlIGNhbiBiZSBsb2FkZWQuICBTZWUgdGhlIGRlY3BjIGNob2ljZSBiZWxvdworCQlm
b3IgbW9yZSBkZXRhaWxzLgorCQkKKwkJSWYgeW91IGFyZSBub3QgYSBibGluZCBwZXJzb24sIG9y
IGRvbid0IGhhdmUgYWNjZXNzIHRvCisJCW9uZSBvZiB0aGUgbGlzdGVkIHN5bnRoZXNpemVycywg
eW91IHNob3VsZCBzYXkgbi4KKworY29uZmlnIFNQRUFLVVBfQUNOVFNBCisJZGVwZW5kcyBvbiBT
UEVBS1VQCisJdHJpc3RhdGUgIkFjY2VudCBTQSwgYWNudHNhIgorCS0tLWhlbHAtLS0KKwkJCisJ
CVRoaXMgaXMgdGhlIFNwZWFrdXAgZHJpdmVyIGZvciB0aGUgYWNjZW50IHNhCisJCXN5bnRoZXNp
emVyLiAgWW91IGNhbiBzYXkgeSB0byBidWlsZCBpdCBpbnRvIHRoZSBrZXJuZWwsCisJCW9yIG0g
dG8gYnVpbGQgaXQgYXMgYSBtb2R1bGUuICBTZWUgdGhlIGNvbmZpZ3VyYXRpb24KKwkJaGVscCBv
biB0aGUgU3BlYWt1cCBjaG9pY2UgYWJvdmUgZm9yIG1vcmUgaW5mby4KKworY29uZmlnIFNQRUFL
VVBfQUNOVFBDCisJZGVwZW5kcyBvbiBTUEVBS1VQCisJdHJpc3RhdGUgIkFjY2VudCBQQywgYWNu
dHBjIgorCS0tLWhlbHAtLS0KKwkJCisJCVRoaXMgaXMgdGhlIFNwZWFrdXAgZHJpdmVyIGZvciB0
aGUgYWNjZW50IHBjCisJCXN5bnRoZXNpemVyLiAgWW91IGNhbiBzYXkgeSB0byBidWlsZCBpdCBp
bnRvIHRoZSBrZXJuZWwsCisJCW9yIG0gdG8gYnVpbGQgaXQgYXMgYSBtb2R1bGUuICBTZWUgdGhl
IGNvbmZpZ3VyYXRpb24KKwkJaGVscCBvbiB0aGUgU3BlYWt1cCBjaG9pY2UgYWJvdmUgZm9yIG1v
cmUgaW5mby4KKworY29uZmlnIFNQRUFLVVBfQVBPTExPCisJZGVwZW5kcyBvbiBTUEVBS1VQCisJ
dHJpc3RhdGUgIkFwb2xsbywgYXBvbGxvIgorCS0tLWhlbHAtLS0KKwkJCisJCVRoaXMgaXMgdGhl
IFNwZWFrdXAgZHJpdmVyIGZvciB0aGUgQXBvbGxvIElJCisJCXN5bnRoZXNpemVyLiAgWW91IGNh
biBzYXkgeSB0byBidWlsZCBpdCBpbnRvIHRoZSBrZXJuZWwsCisJCW9yIG0gdG8gYnVpbGQgaXQg
YXMgYSBtb2R1bGUuICBTZWUgdGhlIGNvbmZpZ3VyYXRpb24KKwkJaGVscCBvbiB0aGUgU3BlYWt1
cCBjaG9pY2UgYWJvdmUgZm9yIG1vcmUgaW5mby4KKwkKK2NvbmZpZyBTUEVBS1VQX0FVRFBUUgor
CWRlcGVuZHMgb24gU1BFQUtVUAorCXRyaXN0YXRlICJBdWRhcHRlciwgYXVkcHRyIgorCS0tLWhl
bHAtLS0KKwkJCisJCVRoaXMgaXMgdGhlIFNwZWFrdXAgZHJpdmVyIGZvciB0aGUgQXVkYXB0ZXIg
c3ludGhlc2l6ZXIuCisJCSBZb3UgY2FuIHNheSB5IHRvIGJ1aWxkIGl0IGludG8gdGhlIGtlcm5l
bCwgb3IgbSB0bworCQlidWlsZCBpdCBhcyBhIG1vZHVsZS4gIFNlZSB0aGUgY29uZmlndXJhdGlv
biBoZWxwIG9uIHRoZQorCQlTcGVha3VwIGNob2ljZSBhYm92ZSBmb3IgbW9yZSBpbmZvLgorCitj
b25maWcgU1BFQUtVUF9CTlMKKwlkZXBlbmRzIG9uIFNQRUFLVVAKKwl0cmlzdGF0ZSAiQnJhaWxs
ZSAnbicgU3BlYWssIGJucyIKKwktLS1oZWxwLS0tCisJCQorCQlUaGlzIGlzIHRoZSBTcGVha3Vw
IGRyaXZlciBmb3IgdGhlIEJyYWlsbGUgJ24nIFNwZWFrCisJCXN5bnRoZXNpemVyLiAgWW91IGNh
biBzYXkgeSB0byBidWlsZCBpdCBpbnRvIHRoZSBrZXJuZWwsCisJCW9yIG0gdG8gYnVpbGQgaXQg
YXMgYSBtb2R1bGUuICBTZWUgdGhlIGNvbmZpZ3VyYXRpb24KKwkJaGVscCBvbiB0aGUgU3BlYWt1
cCBjaG9pY2UgYWJvdmUgZm9yIG1vcmUgaW5mby4KKwkgCitjb25maWcgU1BFQUtVUF9ERUNUTEsK
KwlkZXBlbmRzIG9uIFNQRUFLVVAKKwl0cmlzdGF0ZSAiREVDdGFsayBFeHByZXNzLCBkZWN0bGsi
CisJLS0taGVscC0tLQorCQkKKwkJVGhpcyBpcyB0aGUgU3BlYWt1cCBkcml2ZXIgZm9yIHRoZSBE
ZWNUYWxrIEV4cHJlc3MKKwkJc3ludGhlc2l6ZXIuICBZb3UgY2FuIHNheSB5IHRvIGJ1aWxkIGl0
IGludG8gdGhlIGtlcm5lbCwKKwkJb3IgbSB0byBidWlsZCBpdCBhcyBhIG1vZHVsZS4gIFNlZSB0
aGUgY29uZmlndXJhdGlvbgorCQloZWxwIG9uIHRoZSBTcGVha3VwIGNob2ljZSBhYm92ZSBmb3Ig
bW9yZSBpbmZvLgorCitjb25maWcgU1BFQUtVUF9ERUNFWFQKKwlkZXBlbmRzIG9uIFNQRUFLVVAK
Kwl0cmlzdGF0ZSAiREVDdGFsayBFeHRlcm5hbCAob2xkKSwgZGVjZXh0IgorCS0tLWhlbHAtLS0K
KwkJCisJCVRoaXMgaXMgdGhlIFNwZWFrdXAgZHJpdmVyIGZvciB0aGUgRGVjVGFsayBFeHRlcm5h
bAorCQkob2xkKSBzeW50aGVzaXplci4gIFlvdSBjYW4gc2F5IHkgdG8gYnVpbGQgaXQgaW50byB0
aGUKKwkJa2VybmVsLCBvciBtIHRvIGJ1aWxkIGl0IGFzIGEgbW9kdWxlLiAgU2VlIHRoZQorCQlj
b25maWd1cmF0aW9uIGhlbHAgb24gdGhlIFNwZWFrdXAgY2hvaWNlIGFib3ZlIGZvciBtb3JlCisJ
CWluZm8uCisKK2NvbmZpZyBTUEVBS1VQX0RFQ1BDCisJZGVwZW5kcyBvbiBTUEVBS1VQCisJdHJp
c3RhdGUgIkRFQ3RhbGsgUEMgKGJpZyBJU0EgY2FyZCksIGRlY3BjIgorCS0tLWhlbHAtLS0KKwkJ
CisJCVRoaXMgaXMgdGhlIFNwZWFrdXAgZHJpdmVyIGZvciB0aGUgRGVjVGFsayBQQyAoZnVsbAor
CQlsZW5ndGggSVNBKSBzeW50aGVzaXplci4gIFlvdSBjYW4gc2F5ICBtIHRvIGJ1aWxkIGl0IGFz
CisJCWEgbW9kdWxlLiAgU2VlIHRoZSBjb25maWd1cmF0aW9uIGhlbHAgb24gdGhlIFNwZWFrdXAK
KwkJY2hvaWNlIGFib3ZlIGZvciBtb3JlIGluZm8uCisJCQorCQlJbiBvcmRlciB0byB1c2UgdGhl
IERlY1RhbGsgUEMgZHJpdmVyLCB5b3UgbXVzdCBkb3dubG9hZAorCQl0aGUgZGVjX3BjLnRneiBm
aWxlIGZyb20gbGludXgtc3BlYWt1cC5vcmcuICBJdCBpcyBpbgorCQl0aGUgcHViL2xpbnV4L2dv
b2RpZXMgZGlyZWN0b3J5LiAgVGhlIGRlY19wYy50Z3ogZmlsZQorCQljb250YWlucyB0aGUgc29m
dHdhcmUgd2hpY2ggbXVzdCBiZSBwcmUtbG9hZGVkIG9uIHRvIHRoZQorCQlEZWNUYWxrIFBDIGJv
YXJkIGluIG9yZGVyIHRvIHVzZSBpdCB3aXRoIHRoaXMgZHJpdmVyLiAKKwkJVGhpcyBkcml2ZXIg
bXVzdCBiZSBidWlsdCBhcyBhIG1vZHVsZSwgYW5kIGNhbiBub3QgYmUKKwkJbG9hZGVkIHVudGls
IHRoZSBmaWxlIHN5c3RlbSBpcyBtb3VudGVkIGFuZCB0aGUgRGVjVGFsaworCQlQQyBzb2Z0d2Fy
ZSBoYXMgYmVlbiBwcmUtbG9hZGVkIG9uIHRvIHRoZSBib2FyZC4KKwkJCisJCVNlZSB0aGUgUkVB
RE1FIGZpbGUgaW4gdGhlIGRlY19wYy50Z3ogZmlsZSBmb3IgbW9yZQorCQlkZXRhaWxzLgorCitj
b25maWcgU1BFQUtVUF9EVExLCisJZGVwZW5kcyBvbiBTUEVBS1VQCisJdHJpc3RhdGUgIkRvdWJs
ZVRhbGsgUEMsIGR0bGsiCisJLS0taGVscC0tLQorCQkKKwkJVGhpcyBpcyB0aGUgU3BlYWt1cCBk
cml2ZXIgZm9yIHRoZSBpbnRlcm5hbCBEb3VibGVUYWxrCisJCVBDIHN5bnRoZXNpemVyLiAgWW91
IGNhbiBzYXkgeSB0byBidWlsZCBpdCBpbnRvIHRoZQorCQlrZXJuZWwsIG9yIG0gdG8gYnVpbGQg
aXQgYXMgYSBtb2R1bGUuICBTZWUgdGhlCisJCWNvbmZpZ3VyYXRpb24gaGVscCBvbiB0aGUgU3Bl
YWt1cCBjaG9pY2UgYWJvdmUgZm9yIG1vcmUKKwkJaW5mby4KKworY29uZmlnIFNQRUFLVVBfS0VZ
UEMKKwlkZXBlbmRzIG9uIFNQRUFLVVAKKwl0cmlzdGF0ZSAiS2V5bm90ZSBHb2xkIFBDLCBrZXlw
YyIKKwktLS1oZWxwLS0tCisJCQorCQlUaGlzIGlzIHRoZSBTcGVha3VwIGRyaXZlciBmb3IgdGhl
IEtleW5vdGUgR29sZAorCQlQQyBzeW50aGVzaXplci4gIFlvdSBjYW4gc2F5IHkgdG8gYnVpbGQg
aXQgaW50byB0aGUKKwkJa2VybmVsLCBvciBtIHRvIGJ1aWxkIGl0IGFzIGEgbW9kdWxlLiAgU2Vl
IHRoZQorCQljb25maWd1cmF0aW9uIGhlbHAgb24gdGhlIFNwZWFrdXAgY2hvaWNlIGFib3ZlIGZv
ciBtb3JlCisJCWluZm8uCisKK2NvbmZpZyBTUEVBS1VQX0xUTEsKKwlkZXBlbmRzIG9uIFNQRUFL
VVAKKwl0cmlzdGF0ZSAiRG91YmxlVGFsayBMVCBvciBMaXRlVGFsaywgbHRsayIKKy0tLWhlbHAt
LS0KKworCQlUaGlzIGlzIHRoZSBTcGVha3VwIGRyaXZlciBmb3IgdGhlIExpdGVUYWxrL0RvdWJs
ZVRhbGsKKwkJTFQgc3ludGhlc2l6ZXIuICBZb3UgY2FuIHNheSB5IHRvIGJ1aWxkIGl0IGludG8g
dGhlCisJCWtlcm5lbCwgb3IgbSB0byBidWlsZCBpdCBhcyBhIG1vZHVsZS4gIFNlZSB0aGUKKwkJ
Y29uZmlndXJhdGlvbiBoZWxwIG9uIHRoZSBTcGVha3VwIGNob2ljZSBhYm92ZSBmb3IgbW9yZQor
CQlpbmZvLgorCitjb25maWcgU1BFQUtVUF9TRlRTWU4KKwlkZXBlbmRzIG9uIFNQRUFLVVAKKwl0
cmlzdGF0ZSAiU29mdHdhcmUgc3ludGhlc2l6ZXJzLCBzZnRzeW4iCistLS1oZWxwLS0tCisKKwkJ
VGhpcyBpcyB0aGUgc29mdHdhcmUgc3ludGhlc2l6ZXIgZGV2aWNlIG5vZGUuICBJdCB3aWxsCisJ
CXJlZ2lzdGVyIGEgZGV2aWNlIC9kZXYvc2Z0c3luIHdoaWNoIG1pZHdhcmUgcHJvZ3JhbXMKKwkJ
YW5kIHNwZWVjaAorCQlkYWVtb25zIG1heSBvcGVuIGFuZCByZWFkIHRvIHByb3ZpZGUga2VybmVs
IG91dHB1dCB0bworCQlzb2Z0d2FyZSBzeW50aHMKKwkJc3VjaCBhcyBmZXN0aXZhbCwgZmxpdGUs
IHR1eHRhbGsgYW5kIHNvIGZvcnRoLiAgWW91CisJCWNhbiBzZWxlY3QgJ3knIG9yCisJCSdtJyB0
byBoYXZlIGl0IGJ1aWx0LWluIHRvIHRoZSBrZXJuZWwgb3IgbG9hZGVkIGFzIGEgbW9kdWxlLgor
Citjb25maWcgU1BFQUtVUF9TUEtPVVQKKwlkZXBlbmRzIG9uIFNQRUFLVVAKKwl0cmlzdGF0ZSAi
U3BlYWsgT3V0LCBzcGtvdXQiCisJLS0taGVscC0tLQorCQkKKwkJVGhpcyBpcyB0aGUgU3BlYWt1
cCBkcml2ZXIgZm9yIHRoZSBTcGVha291dCBzeW50aGVzaXplci4KKwkJIFlvdSBjYW4gc2F5IHkg
dG8gYnVpbGQgaXQgaW50byB0aGUga2VybmVsLCBvciBtIHRvCisJCWJ1aWxkIGl0IGFzIGEgbW9k
dWxlLiAgU2VlIHRoZSBjb25maWd1cmF0aW9uIGhlbHAgb24gdGhlCisJCVNwZWFrdXAgY2hvaWNl
IGFib3ZlIGZvciBtb3JlIGluZm8uCisKK2NvbmZpZyBTUEVBS1VQX1RYUFJUCisJZGVwZW5kcyBv
biBTUEVBS1VQCisJdHJpc3RhdGUgIlRyYW5zcG9ydCwgdHhwcnQiCisJLS0taGVscC0tLQorCQkK
KwkJVGhpcyBpcyB0aGUgU3BlYWt1cCBkcml2ZXIgZm9yIHRoZSBUcmFuc3BvcnQKKwkJc3ludGhl
c2l6ZXIuICBZb3UgY2FuIHNheSB5IHRvIGJ1aWxkIGl0IGludG8gdGhlIGtlcm5lbCwKKwkJb3Ig
bSB0byBidWlsZCBpdCBhcyBhIG1vZHVsZS4gIFNlZSB0aGUgY29uZmlndXJhdGlvbgorCQloZWxw
IG9uIHRoZSBTcGVha3VwIGNob2ljZSBhYm92ZSBmb3IgbW9yZSBpbmZvLgorCitpZiBTUEVBS1VQ
ICE9IG4KK2NvbW1lbnQgJ0VudGVyIHRoZSAzIHRvIDYgY2hhcmFjdGVyIGtleXdvcmQgZnJvbSB0
aGUgbGlzdCBhYm92ZSwgb3Igbm9uZSBmb3Igbm8gZGVmYXVsdCBzeW50aGVzaXplciBvbiBib290
IHVwLicKKwlkZXBlbmRzIG9uIFNQRUFLVVAKK2VuZGlmCisKK2NvbmZpZyBTUEVBS1VQX0RFRkFV
TFQKKwlzdHJpbmcgIkNob29zZSBEZWZhdWx0IHN5bnRoZXNpemVyIGZvciBTcGVha3VwIgorCWRl
cGVuZHMgb24gU1BFQUtVUAorCWRlZmF1bHQgIm5vbmUiCisKK2VuZG1lbnUKZGlmZiAtLWV4Y2x1
ZGU9Jyoub3JpZycgLS1leGNsdWRlPScqLnBhdGNoJyAtdXJOcCBsaW51eC0yLjYuMjAvZHJpdmVy
cy9jaGFyL3NwZWFrdXAva2V5aW5mby5oIGxpbnV4LTIuNi4yMC1zcGsvZHJpdmVycy9jaGFyL3Nw
ZWFrdXAva2V5aW5mby5oCi0tLSBsaW51eC0yLjYuMjAvZHJpdmVycy9jaGFyL3NwZWFrdXAva2V5
aW5mby5oCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKyBsaW51eC0yLjYu
MjAtc3BrL2RyaXZlcnMvY2hhci9zcGVha3VwL2tleWluZm8uaAkyMDA3LTAyLTA0IDE2OjA5OjE5
LjAwMDAwMDAwMCAtMDUwMApAQCAtMCwwICsxLDEyMCBAQAorLyogc3BrX3ByaXYuaAorICAgcmV2
aWV3IGZ1bmN0aW9ucyBmb3IgdGhlIHNwZWFrdXAgc2NyZWVuIHJldmlldyBwYWNrYWdlLgorICAg
b3JpZ2luYWxseSB3cml0dGVuIGJ5OiBLaXJrIFJlaXNlciBhbmQgQW5keSBCZXJkYW4uCisKKyAg
ZXh0ZW5zaXZlbHkgbW9kaWZpZWQgYnkgRGF2aWQgQm9yb3dza2kuCisKKyAgICBDb3B5cmlnaHQg
KEMgKSAxOTk4ICBLaXJrIFJlaXNlci4KKyAgICBDb3B5cmlnaHQgKEMgKSAyMDAzICBEYXZpZCBC
b3Jvd3NraS4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
cgorICAgIChhdCB5b3VyIG9wdGlvbiApIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBw
cm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dy
YW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJ
bmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAg
VVNBCisqLworCitlbnVtIHsgLyogdmFyX2lkcyAqLworCVZFUlNJT04gPSAwLCBTWU5USCwgU0lM
RU5ULCBTWU5USF9ESVJFQ1QsCisJS0VZTUFQLCBDSEFSUywKKwlQVU5DX1NPTUUsIFBVTkNfTU9T
VCwgUFVOQ19BTEwsCisJREVMSU0sIFJFUEVBVFMsIEVYTlVNQkVSLAorCURFTEFZLCBUUklHR0VS
LCBKSUZGWSwgRlVMTCwgLyogYWxsIHRpbWVycyBtdXN0IGJlIHRvZ2V0aGVyICovCisJQkxFRVBf
VElNRSwgQ1VSU09SX1RJTUUsIEJFTExfUE9TLAorU0FZX0NPTlRST0wsIFNBWV9XT1JEX0NUTCwg
Tk9fSU5URVJSVVBULCBLRVlfRUNITywKKwlTUEVMTF9ERUxBWSwgUFVOQ19MRVZFTCwgUkVBRElO
R19QVU5DLAorCUFUVFJJQl9CTEVFUCwgQkxFRVBTLAorIFJBVEUsIFBJVENILCBWT0wsIFRPTkUs
IFBVTkNULCBWT0lDRSwgRlJFUSwgTEFORywKKwlDQVBTX1NUQVJULCBDQVBTX1NUT1AsIENIQVJU
QUIsCisJTUFYVkFSUworfTsKKworI2RlZmluZSBGSVJTVF9TWU5USF9WQVIgUkFURQorLyogMCBp
cyByZXNlcnZlZCBmb3Igbm8gcmVtYXAgKi8KKyNkZWZpbmUgU1BFQUtVUF9HT1RPIDB4MDEKKyNk
ZWZpbmUgU1BFRUNIX0tJTEwgMHgwMgorI2RlZmluZSBTUEVBS1VQX1FVSUVUIDB4MDMKKyNkZWZp
bmUgU1BFQUtVUF9DVVQgMHgwNAorI2RlZmluZSBTUEVBS1VQX1BBU1RFIDB4MDUKKyNkZWZpbmUg
U0FZX0ZJUlNUX0NIQVIgMHgwNgorI2RlZmluZSBTQVlfTEFTVF9DSEFSIDB4MDcKKyNkZWZpbmUg
U0FZX0NIQVIgMHgwOAorI2RlZmluZSBTQVlfUFJFVl9DSEFSIDB4MDkKKyNkZWZpbmUgU0FZX05F
WFRfQ0hBUiAweDBhCisjZGVmaW5lIFNBWV9XT1JEIDB4MGIKKyNkZWZpbmUgU0FZX1BSRVZfV09S
RCAweDBjCisjZGVmaW5lIFNBWV9ORVhUX1dPUkQgMHgwZAorI2RlZmluZSBTQVlfTElORSAweDBl
CisjZGVmaW5lIFNBWV9QUkVWX0xJTkUgMHgwZgorI2RlZmluZSBTQVlfTkVYVF9MSU5FIDB4MTAK
KyNkZWZpbmUgVE9QX0VER0UgMHgxMQorI2RlZmluZSBCT1RUT01fRURHRSAweDEyCisjZGVmaW5l
IExFRlRfRURHRSAweDEzCisjZGVmaW5lIFJJR0hUX0VER0UgMHgxNAorI2RlZmluZSBTUEVMTF9Q
SE9ORVRJQyAweDE1CisjZGVmaW5lIFNQRUxMX1dPUkQgMHgxNgorI2RlZmluZSBTQVlfU0NSRUVO
IDB4MTcKKyNkZWZpbmUgU0FZX1BPU0lUSU9OIDB4MTgKKyNkZWZpbmUgU0FZX0FUVFJJQlVURVMg
MHgxOQorI2RlZmluZSBTUEVBS1VQX09GRiAweDFhCisjZGVmaW5lIFNQRUFLVVBfUEFSS0VEIDB4
MWIKKyNkZWZpbmUgU0FZX0xJTkVfSU5ERU5UIDB4MWMKKyNkZWZpbmUgU0FZX0ZST01fVE9QIDB4
MWQKKyNkZWZpbmUgU0FZX1RPX0JPVFRPTSAweDFlCisjZGVmaW5lIFNBWV9GUk9NX0xFRlQgMHgx
ZgorI2RlZmluZSBTQVlfVE9fUklHSFQgMHgyMAorI2RlZmluZSBTQVlfQ0hBUl9OVU0gMHgyMQor
I2RlZmluZSBFRElUX1NPTUUgMHgyMgorI2RlZmluZSBFRElUX01PU1QgMHgyMworI2RlZmluZSBT
QVlfUEhPTkVUSUNfQ0hBUiAweDI0CisjZGVmaW5lIEVESVRfREVMSU0gMHgyNQorI2RlZmluZSBF
RElUX1JFUEVBVCAweDI2CisjZGVmaW5lIEVESVRfRVhOVU0gMHgyNworI2RlZmluZSBTRVRfV0lO
IDB4MjgKKyNkZWZpbmUgQ0xFQVJfV0lOIDB4MjkKKyNkZWZpbmUgRU5BQkxFX1dJTiAweDJhCisj
ZGVmaW5lIFNBWV9XSU4gMHgyYgorI2RlZmluZSBTUEtfTE9DSyAweDJjCisjZGVmaW5lIFNQRUFL
VVBfSEVMUCAweDJkCisjZGVmaW5lIFRPR0dMRV9DVVJTT1JJTkcgMHgyZQorI2RlZmluZSBSRUFE
X0FMTF9ET0MgMHgyZgorI2RlZmluZSBTUEtVUF9NQVhfRlVOQyAweDMwIC8qIG9uZSBncmVhdGVy
IHRoYW4gdGhlIGxhc3QgZnVuYyBoYW5kbGVyICovCisKKyNkZWZpbmUgU1BLX0tFWSAweDgwCisj
ZGVmaW5lIEZJUlNUX0VESVRfQklUUyAweDIyCisKKyNkZWZpbmUgRklSU1RfU0VUX1ZBUiBTUEVM
TF9ERUxBWQorI2RlZmluZSBWQVJfU1RBUlQgMHg0MCAvKiBpbmNyZWFzZSBpZiBhZGRpbmcgbW9y
ZSB0aGFuIDB4M2YgZnVuY3Rpb25zICovCisKKy8qIGtleXMgZm9yIHNldHRpbmcgdmFyaWFibGVz
LCBtdXN0IGJlIG9yZGVyZWQgc2FtZSBhcyB0aGUgZW51bSBmb3IgdmFyX2lkcyAqLworLyogd2l0
aCBkZWMgYmVpbmcgZXZlbiBhbmQgaW5jIGJlaW5nIDEgZ3JlYXRlciAqLworI2RlZmluZSBTUEVM
TF9ERUxBWV9ERUMgVkFSX1NUQVJUKzAKKyNkZWZpbmUgU1BFTExfREVMQVlfSU5DIFNQRUxMX0RF
TEFZX0RFQysxCisjZGVmaW5lIFBVTkNfTEVWRUxfREVDIFNQRUxMX0RFTEFZX0RFQysyCisjZGVm
aW5lIFBVTkNfTEVWRUxfSU5DIFBVTkNfTEVWRUxfREVDKzEKKyNkZWZpbmUgUkVBRElOR19QVU5D
X0RFQyBQVU5DX0xFVkVMX0RFQysyCisjZGVmaW5lIFJFQURJTkdfUFVOQ19JTkMgUkVBRElOR19Q
VU5DX0RFQysxCisjZGVmaW5lIEFUVFJJQl9CTEVFUF9ERUMgUkVBRElOR19QVU5DX0RFQysyCisj
ZGVmaW5lIEFUVFJJQl9CTEVFUF9JTkMgQVRUUklCX0JMRUVQX0RFQysxCisjZGVmaW5lIEJMRUVQ
U19ERUMgQVRUUklCX0JMRUVQX0RFQysyCisjZGVmaW5lIEJMRUVQU19JTkMgQkxFRVBTX0RFQysx
CisjZGVmaW5lIFJBVEVfREVDIEJMRUVQU19ERUMrMgorI2RlZmluZSBSQVRFX0lOQyBSQVRFX0RF
QysxCisjZGVmaW5lIFBJVENIX0RFQyBSQVRFX0RFQysyCisjZGVmaW5lIFBJVENIX0lOQyBQSVRD
SF9ERUMrMQorI2RlZmluZSBWT0xfREVDIFBJVENIX0RFQysyCisjZGVmaW5lIFZPTF9JTkMgVk9M
X0RFQysxCisjZGVmaW5lIFRPTkVfREVDIFZPTF9ERUMrMgorI2RlZmluZSBUT05FX0lOQyBUT05F
X0RFQysxCisjZGVmaW5lIFBVTkNUX0RFQyBUT05FX0RFQysyCisjZGVmaW5lIFBVTkNUX0lOQyBQ
VU5DVF9ERUMrMQorI2RlZmluZSBWT0lDRV9ERUMgUFVOQ1RfREVDKzIKKyNkZWZpbmUgVk9JQ0Vf
SU5DIFZPSUNFX0RFQysxCmRpZmYgLS1leGNsdWRlPScqLm9yaWcnIC0tZXhjbHVkZT0nKi5wYXRj
aCcgLXVyTnAgbGludXgtMi42LjIwL2RyaXZlcnMvY2hhci9zcGVha3VwL01ha2VmaWxlIGxpbnV4
LTIuNi4yMC1zcGsvZHJpdmVycy9jaGFyL3NwZWFrdXAvTWFrZWZpbGUKLS0tIGxpbnV4LTIuNi4y
MC9kcml2ZXJzL2NoYXIvc3BlYWt1cC9NYWtlZmlsZQkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAw
MDAwMCAtMDUwMAorKysgbGludXgtMi42LjIwLXNway9kcml2ZXJzL2NoYXIvc3BlYWt1cC9NYWtl
ZmlsZQkyMDA3LTAyLTA0IDE2OjA5OjE5LjAwMDAwMDAwMCAtMDUwMApAQCAtMCwwICsxLDYxIEBA
CisjCisjIE1ha2VmaWxlIGZvciB0aGUgc3BlYWt1cCBzcGVlY2ggb3V0cHV0IHN5c3RlbS4KKyMK
KworViA6PSAkKHNoZWxsIGF3ayAnL1VUU19SRUxFQVNFLyB7cHJpbnQgc3Vic3RyKCQkMywyLDMp
fScgJChUT1BESVIpL2luY2x1ZGUvbGludXgvdmVyc2lvbi5oKQoraWZlcSAoJFYsMi40KQorIyBO
b3RlISBEZXBlbmRlbmNpZXMgYXJlIGRvbmUgYXV0b21hZ2ljYWxseSBieSAnbWFrZSBkZXAnLCB3
aGljaCBhbHNvCisjIHJlbW92ZXMgYW55IG9sZCBkZXBlbmRlbmNpZXMuIERPTidUIHB1dCB5b3Vy
IG93biBkZXBlbmRlbmNpZXMgaGVyZQorIyB1bmxlc3MgaXQncyBzb21ldGhpbmcgc3BlY2lhbCAo
aWUgbm90IGEgLmMgZmlsZSkuCisjCisjIE5vdGUgMiEgVGhlIENGTEFHUyBkZWZpbml0aW9ucyBh
cmUgbm93IGluaGVyaXRlZCBmcm9tIHRoZQorIyBwYXJlbnQgbWFrZXMuLgorIworT19UQVJHRVQg
ICAgICAgOj0gc3BrLm8KK2V4cG9ydC1vYmpzICAgIDo9IHNwZWFrdXBfZHJ2Y29tbW9uLm8gc3Bl
YWt1cC5vCitlbmRpZgorb2JqLW0gPSBzcGVha3VwX2tleWhlbHAubworc3BlYWt1cG1haW4tb2Jq
cyA6PSBzcGVha3VwLm8gc3BlYWt1cF9kcnZjb21tb24ubworb2JqLSQoQ09ORklHX1NQRUFLVVAp
CSs9IHNwZWFrdXBtYWluLm8KK29iai0kKENPTkZJR19TUEVBS1VQX0FDTlRQQykJKz0gc3BlYWt1
cF9hY250cGMubworb2JqLSQoQ09ORklHX1NQRUFLVVBfQUNOVFNBKQkrPSBzcGVha3VwX2FjbnRz
YS5vCitvYmotJChDT05GSUdfU1BFQUtVUF9BUE9MTE8pCSs9IHNwZWFrdXBfYXBvbGxvLm8KK29i
ai0kKENPTkZJR19TUEVBS1VQX0FVRFBUUikJKz0gc3BlYWt1cF9hdWRwdHIubworb2JqLSQoQ09O
RklHX1NQRUFLVVBfQk5TKQkrPSBzcGVha3VwX2Jucy5vCitvYmotJChDT05GSUdfU1BFQUtVUF9E
RUNFWFQpCSs9IHNwZWFrdXBfZGVjZXh0Lm8KK29iai0kKENPTkZJR19TUEVBS1VQX0RFQ1BDKQkr
PSBzcGVha3VwX2RlY3BjLm8KK29iai0kKENPTkZJR19TUEVBS1VQX0RFQ1RMSykJKz0gc3BlYWt1
cF9kZWN0bGsubworb2JqLSQoQ09ORklHX1NQRUFLVVBfRFRMSykJKz0gc3BlYWt1cF9kdGxrLm8K
K29iai0kKENPTkZJR19TUEVBS1VQX0tFWVBDKQkrPSBzcGVha3VwX2tleXBjLm8KK29iai0kKENP
TkZJR19TUEVBS1VQX0xUTEspCSs9IHNwZWFrdXBfbHRsay5vCitvYmotJChDT05GSUdfU1BFQUtV
UF9TRlRTWU4pCSs9IHNwZWFrdXBfc2Z0c3luLm8KK29iai0kKENPTkZJR19TUEVBS1VQX1NQS09V
VCkJKz0gc3BlYWt1cF9zcGtvdXQubworb2JqLSQoQ09ORklHX1NQRUFLVVBfVFhQUlQpCSs9IHNw
ZWFrdXBfdHhwcnQubworCitpZmVxICgkViwyLjQpCisJaW5jbHVkZSAkKFRPUERJUikvUnVsZXMu
bWFrZQorCitzcGVha3VwbWFwLmg6IHNwZWFrdXBtYXAubWFwIGdlbm1hcAorCS4vZ2VubWFwIHNw
ZWFrdXBtYXAubWFwID4kQAorCitnZW5tYXA6IGdlbm1hcC5jIG1hcGRhdGEuaAorCWNjIC1vIGdl
bm1hcCBnZW5tYXAuYworCittYXBkYXRhLmg6IG1ha2VtYXBkYXRhLmMga2V5aW5mby5oCisJY2Mg
LW8gbWFrZW1hcGRhdGEgbWFrZW1hcGRhdGEuYworCS4vbWFrZW1hcGRhdGEgPm1hcGRhdGEuaAor
CitlbmRpZgkKK3NwZWFrdXBtYWluLm86c3BlYWt1cC5vIHNwZWFrdXBfZHJ2Y29tbW9uLm8KKwls
ZCAtciAtbyBzcGVha3VwbWFpbi5vIHNwZWFrdXAubyBzcGVha3VwX2RydmNvbW1vbi5vCisKKyQo
b2JqKS9zcGVha3VwbWFwLmg6ICQoc3JjKS9zcGVha3VwbWFwLm1hcCAkKHNyYykvZ2VubWFwCisJ
JChzcmMpL2dlbm1hcCAkKHNyYykvc3BlYWt1cG1hcC5tYXAgPiRACisKKyQob2JqKS9tYXBkYXRh
Lmg6ICQoc3JjKS9rZXlpbmZvLmggJChzcmMpL21ha2VtYXBkYXRhCisJJChzcmMpL21ha2VtYXBk
YXRhID4kQAorCiskKG9iaikvZ2VubWFwOiAkKG9iaikvbWFwZGF0YS5oCisKK0hPU1RDRkxBR1Mg
Oj0gLUlpbmNsdWRlIC1JL3Vzci9pbmNsdWRlCitob3N0cHJvZ3MteSA6PSBtYWtlbWFwZGF0YSBn
ZW5tYXAKZGlmZiAtLWV4Y2x1ZGU9Jyoub3JpZycgLS1leGNsdWRlPScqLnBhdGNoJyAtdXJOcCBs
aW51eC0yLjYuMjAvZHJpdmVycy9jaGFyL3NwZWFrdXAvbWFrZW1hcGRhdGEuYyBsaW51eC0yLjYu
MjAtc3BrL2RyaXZlcnMvY2hhci9zcGVha3VwL21ha2VtYXBkYXRhLmMKLS0tIGxpbnV4LTIuNi4y
MC9kcml2ZXJzL2NoYXIvc3BlYWt1cC9tYWtlbWFwZGF0YS5jCTE5NjktMTItMzEgMTk6MDA6MDAu
MDAwMDAwMDAwIC0wNTAwCisrKyBsaW51eC0yLjYuMjAtc3BrL2RyaXZlcnMvY2hhci9zcGVha3Vw
L21ha2VtYXBkYXRhLmMJMjAwNy0wMi0wNCAxNjowOToxOS4wMDAwMDAwMDAgLTA1MDAKQEAgLTAs
MCArMSwxNTYgQEAKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2lu
Y2x1ZGUgPGxpYmdlbi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3Zl
cnNpb24uaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorCitpbnQgZ2V0X2RlZmluZSh2b2lkKTsKKwor
I2RlZmluZSBNQVhLRVlTIDUxMgorI2RlZmluZSBNQVhLRVlWQUwgMTYwCisjZGVmaW5lIEhBU0hT
SVpFIDEwMQorI2RlZmluZSBpc19zaGlmdCAtMworI2RlZmluZSBpc19zcGsgLTIKKyNkZWZpbmUg
aXNfaW5wdXQgLTEKK3R5cGVkZWYgc3RydWN0IHN0X2tleSB0X2tleTsKK3N0cnVjdCBzdF9rZXkg
eworCWNoYXIgKm5hbWU7CisJdF9rZXkgKm5leHQ7CisJaW50IHZhbHVlLCBzaGlmdDsKK307CisK
K3Rfa2V5IGtleV90YWJsZVtNQVhLRVlTXTsKK3Rfa2V5ICpleHRyYV9rZXlzID0ga2V5X3RhYmxl
K0hBU0hTSVpFOworY2hhciBidWZmZXJbMjU2XSwgZmlsZW5hbWVbMjU2XTsKK0ZJTEUgKmluZmls
ZTsKK2NoYXIgZGVsaW1zW10gPSAiXHRcbiAiOworY2hhciAqZGlyX25hbWUsICpkZWZfbmFtZSwg
KmRlZl92YWwsICpjcDsKK2ludCBsYzsKKwordm9pZCBvcGVuX2lucHV0KCBjaGFyICpuYW1lICkK
K3sKKwlzcHJpbnRmKCBmaWxlbmFtZSwgIiVzLyVzIiwgZGlyX25hbWUsIG5hbWUgKTsKKwlpZiAo
ICggaW5maWxlID0gZm9wZW4oIGZpbGVuYW1lLCAiciIgKSApID09IDAgKSB7CisJCWZwcmludGYo
IHN0ZGVyciwgImNhbid0IG9wZW4gJXNcbiIsIGZpbGVuYW1lICk7CisJCWV4aXQoIDEgKTsKKwl9
CisJbGMgPSAwOworfQorCitpbnQKK29vcHMoIGNoYXIgKm1zZywgY2hhciAqaW5mbyApCit7CisJ
aWYgKCBpbmZvID09IE5VTEwgKSBpbmZvID0gIiAiOworCWZwcmludGYoIHN0ZGVyciwgImVycm9y
OiBmaWxlICVzIGxpbmUgJWRcbiIsIGZpbGVuYW1lLCBsYyApOworCWZwcmludGYoIHN0ZGVyciwg
IiVzICVzXG4iLCBtc2csIGluZm8gKTsKKwlleGl0KCAxICk7Cit9CisKK2ludCBnZXRfZGVmaW5l
KCApCit7CisJd2hpbGUgKCBmZ2V0cyggYnVmZmVyLCAyNTAsIGluZmlsZSApICkgeworCQlsYysr
OworCQlpZiAoIHN0cm5jbXAoIGJ1ZmZlciwgIiNkZWZpbmUiLCA3ICkgKSBjb250aW51ZTsKKwkJ
c3RydG9rKCBidWZmZXIsIGRlbGltcyApOworCQlkZWZfbmFtZSA9IHN0cnRvayggMCwgZGVsaW1z
ICk7CisJCWRlZl92YWwgPSBzdHJ0b2soIDAsIGRlbGltcyApOworCQlpZiAoIGRlZl92YWwgIT0g
TlVMTCApIHJldHVybiAxOworCX0KKwlmY2xvc2UoIGluZmlsZSApOworCWluZmlsZSA9IDA7CisJ
cmV0dXJuIDA7Cit9CisKK3Rfa2V5ICpoYXNoX25hbWUoIGNoYXIgKm5hbWUgKQoreworCXVfY2hh
ciAqcG4gPSAodV9jaGFyICopbmFtZTsKKwlpbnQgaGFzaCA9IDA7CisJd2hpbGUgKCAqcG4gKSB7
CisJCWhhc2ggPSAoIGhhc2ggKiAxNyApICYgMHhmZmZmZmZmOworCWlmICggaXN1cHBlciggKnBu
ICkgKSAqcG4gPSB0b2xvd2VyKCAqcG4gKTsKKwkJaGFzaCArPSAoIGludCApKnBuOworCQlwbisr
OworCX0KKwloYXNoICU9IEhBU0hTSVpFOworCXJldHVybiAma2V5X3RhYmxlW2hhc2hdOworfQor
Cit0X2tleSAqZmluZF9rZXkoIGNoYXIgKm5hbWUgKQoreworCXRfa2V5ICp0aGlzID0gaGFzaF9u
YW1lKCBuYW1lICk7CisJd2hpbGUgKCB0aGlzICkgeworCQlpZiAoICFzdHJjbXAoIG5hbWUsIHRo
aXMtPm5hbWUgKSApIHJldHVybiB0aGlzOworCQl0aGlzID0gdGhpcy0+bmV4dDsKKwl9CisJcmV0
dXJuIHRoaXM7Cit9CisKK3Rfa2V5ICphZGRfa2V5KCBjaGFyICpuYW1lLCBpbnQgdmFsdWUsIGlu
dCBzaGlmdCApCit7CisJdF9rZXkgKnRoaXMgPSBoYXNoX25hbWUoIG5hbWUgKTsKKwlpZiAoIGV4
dHJhX2tleXMta2V5X3RhYmxlID49IE1BWEtFWVMgKQorCQlvb3BzKCAib3V0IG9mIGtleSB0YWJs
ZSBzcGFjZSwgZW5sYXJnZSBNQVhLRVlTIiwgTlVMTCApOworCWlmICggdGhpcy0+bmFtZSAhPSBO
VUxMICkgeworCQl3aGlsZSAoIHRoaXMtPm5leHQgKSB7CisJCQlpZiAoICFzdHJjbXAoIG5hbWUs
IHRoaXMtPm5hbWUgKSApCisJCQkJb29wcyggImF0dGVtcHQgdG8gYWRkIGR1cGxpY2F0ZSBrZXki
LCBuYW1lICk7CisJCQl0aGlzID0gdGhpcy0+bmV4dDsKKwkJfQorCQl0aGlzLT5uZXh0ID0gZXh0
cmFfa2V5cysrOworCQl0aGlzID0gdGhpcy0+bmV4dDsKKwl9CisJdGhpcy0+bmFtZSA9IHN0cmR1
cCggbmFtZSApOworCXRoaXMtPnZhbHVlID0gdmFsdWU7CisJdGhpcy0+c2hpZnQgPSBzaGlmdDsK
KwlyZXR1cm4gdGhpczsKK30KKworaW50CQkKK21haW4oIGludCBhcmdjLCBjaGFyICphcmd2W10g
KQoreworCWludCB2YWx1ZSwgaTsKKwl0X2tleSAqdGhpczsKKwlkaXJfbmFtZSA9IGdldGVudigg
IlRPUERJUiIgKTsKKwlpZiAoICFkaXJfbmFtZSApIGRpcl9uYW1lID0gIi91c3Ivc3JjL2xpbnV4
IjsKKwliemVybygga2V5X3RhYmxlLCBzaXplb2YoIGtleV90YWJsZSApICk7CisJYWRkX2tleSgg
InNoaWZ0IiwJMSwgaXNfc2hpZnQgKTsKKwlhZGRfa2V5KCAiYWx0Z3IiLAkyLCBpc19zaGlmdCAp
OworCWFkZF9rZXkoICJjdHJsIiwJNCwgaXNfc2hpZnQgKTsKKwlhZGRfa2V5KCAiYWx0IiwJOCwg
aXNfc2hpZnQgKTsKKwlhZGRfa2V5KCAic3BrIiwgMTYsIGlzX3NoaWZ0ICk7CisJYWRkX2tleSgg
ImRvdWJsZSIsIDMyLCBpc19zaGlmdCApOworCW9wZW5faW5wdXQoICJpbmNsdWRlL2xpbnV4L2lu
cHV0LmgiICk7CisJd2hpbGUgKCBnZXRfZGVmaW5lKCApICkgeworCQlpZiAoIHN0cm5jbXAoIGRl
Zl9uYW1lLCAiS0VZXyIsIDQgKSApIGNvbnRpbnVlOworCQl2YWx1ZSA9IGF0b2koIGRlZl92YWwg
KTsKKwkJaWYgKCB2YWx1ZSA+IDAgJiYgdmFsdWUgPCBNQVhLRVlWQUwgKQorCQkJYWRkX2tleSgg
IGRlZl9uYW1lLCB2YWx1ZSwgaXNfaW5wdXQgKTsKKwl9CisJb3Blbl9pbnB1dCggImRyaXZlcnMv
Y2hhci9zcGVha3VwL2tleWluZm8uaCIgKTsKKwl3aGlsZSAoIGdldF9kZWZpbmUoICkgKSB7CisJ
CWlmICggc3RybGVuKCBkZWZfdmFsICkgPiA1ICkgeworCQkJaWYgKCAhKCBjcCA9IHN0cmNocigg
ZGVmX3ZhbCwgJysnICkgKSApIGNvbnRpbnVlOworCQkJKmNwKysgPSAnXDAnOworCQkJdGhpcyA9
IGZpbmRfa2V5KCBkZWZfdmFsICk7CisJCQlpZiAoICF0aGlzIHx8ICpjcCA8ICcwJyB8fCAqY3Ag
PiAnOScgKSBjb250aW51ZTsKKwkJCXZhbHVlID0gdGhpcy0+dmFsdWUrYXRvaSggY3AgKTsKKwkJ
fSBlbHNlIGlmICggIXN0cm5jbXAoIGRlZl92YWwsICIweCIsIDIgKSApIAorCQkJc3NjYW5mKCBk
ZWZfdmFsKzIsICIleCIsICZ2YWx1ZSApOworCQllbHNlIGlmICggKmRlZl92YWwgPj0gJzAnICYm
ICpkZWZfdmFsIDw9ICc5JyApCisJCQl2YWx1ZSA9IGF0b2koIGRlZl92YWwgKTsKKwkJZWxzZSBj
b250aW51ZTsKKwkJYWRkX2tleSggZGVmX25hbWUsIHZhbHVlLCBpc19zcGsgKTsKKwl9CisJcHJp
bnRmKCAidF9rZXlfaW5pdCBpbml0X2tleV9kYXRhW10gPSB7XG4iICk7CisJZm9yICggaSA9IDA7
IGkgPCBIQVNIU0laRTsgaSsrICkgeworCQl0aGlzID0gJmtleV90YWJsZVtpXTsKKwkJaWYgKCAh
dGhpcy0+bmFtZSApIGNvbnRpbnVlOworCQlkbyB7CisJCQlwcmludGYoICJcdFwiJXNcIiwgJWQs
ICVkLFxuIiwgdGhpcy0+bmFtZSwgdGhpcy0+dmFsdWUsIHRoaXMtPnNoaWZ0ICk7CisJCQl0aGlz
ID0gdGhpcy0+bmV4dDsKKwkJfSB3aGlsZSAoIHRoaXMgKTsKKwl9CisJcHJpbnRmKCAiXHRcIi5c
IiwgMCwgMFxufTtcbiIgKTsKKwlleGl0KCAwICk7Cit9CmRpZmYgLS1leGNsdWRlPScqLm9yaWcn
IC0tZXhjbHVkZT0nKi5wYXRjaCcgLXVyTnAgbGludXgtMi42LjIwL2RyaXZlcnMvY2hhci9zcGVh
a3VwL21hcGRhdGEuaCBsaW51eC0yLjYuMjAtc3BrL2RyaXZlcnMvY2hhci9zcGVha3VwL21hcGRh
dGEuaAotLS0gbGludXgtMi42LjIwL2RyaXZlcnMvY2hhci9zcGVha3VwL21hcGRhdGEuaAkxOTY5
LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysgbGludXgtMi42LjIwLXNway9kcml2
ZXJzL2NoYXIvc3BlYWt1cC9tYXBkYXRhLmgJMjAwNy0wMi0wNCAxNjowOToxOS4wMDAwMDAwMDAg
LTA1MDAKQEAgLTAsMCArMSwyMzkgQEAKK3Rfa2V5X2luaXQgaW5pdF9rZXlfZGF0YVtdID0gewor
CSJrZXlfcyIsIDMxLCAtMSwKKwkidG9wX2VkZ2UiLCAxNywgLTIsCisJImtleV90IiwgMjAsIC0x
LAorCSJzYXlfZmlyc3RfY2hhciIsIDYsIC0yLAorCSJhdHRyaWJfYmxlZXBfaW5jIiwgNzEsIC0y
LAorCSJrZXlfdSIsIDIyLCAtMSwKKwkia2V5X2dyYXZlIiwgNDEsIC0xLAorCSJrZXlfdiIsIDQ3
LCAtMSwKKwkia2V5X3ciLCAxNywgLTEsCisJImtleV9rcGFzdGVyaXNrIiwgNTUsIC0xLAorCSJr
ZXlfbWludXMiLCAxMiwgLTEsCisJImtleV94IiwgNDUsIC0xLAorCSJrZXlfZG93biIsIDEwOCwg
LTEsCisJImtleV95IiwgMjEsIC0xLAorCSJrZXlfa3Bkb3QiLCA4MywgLTEsCisJImtleV9sZWZ0
bWV0YSIsIDEyNSwgLTEsCisJImtleV96IiwgNDQsIC0xLAorCSJrZXlfdm9sdW1lZG93biIsIDEx
NCwgLTEsCisJInNheV9uZXh0X3dvcmQiLCAxMywgLTIsCisJImNsZWFyX3dpbiIsIDQxLCAtMiwK
Kwkia2V5X3JpZ2h0YnJhY2UiLCAyNywgLTEsCisJInJpZ2h0X2VkZ2UiLCAyMCwgLTIsCisJImtl
eV9zY3JvbGxsb2NrIiwgNzAsIC0xLAorCSJrZXlfY29tbWEiLCA1MSwgLTEsCisJImFsdGdyIiwg
MiwgLTMsCisJInNheV9zY3JlZW4iLCAyMywgLTIsCisJImtleV9jdXQiLCAxMzcsIC0xLAorCSJz
YXlfdG9fYm90dG9tIiwgMzAsIC0yLAorCSJlZGl0X21vc3QiLCAzNSwgLTIsCisJImtleV9zbGVl
cCIsIDE0MiwgLTEsCisJInNheV9waG9uZXRpY19jaGFyIiwgMzYsIC0yLAorCSJzcGVha3VwX3F1
aWV0IiwgMywgLTIsCisJInJlYWRfYWxsX2RvYyIsIDQ3LCAtMiwKKwkia2V5X2hhbmphIiwgMTIz
LCAtMSwKKwkic2F5X25leHRfbGluZSIsIDE2LCAtMiwKKwkidm9sX2RlYyIsIDc4LCAtMiwKKwki
a2V5X2hlbHAiLCAxMzgsIC0xLAorCSJrZXlfeGZlciIsIDE0NywgLTEsCisJInNwZWFrdXBfZ290
byIsIDEsIC0yLAorCSJwdW5jdF9pbmMiLCA4MywgLTIsCisJImtleV9yaWdodGN0cmwiLCA5Nywg
LTEsCisJImF0dHJpYl9ibGVlcF9kZWMiLCA3MCwgLTIsCisJImtleV9yaWdodHNoaWZ0IiwgNTQs
IC0xLAorCSJrZXlfbGluZWZlZWQiLCAxMDEsIC0xLAorCSJrZXlfd2FrZXVwIiwgMTQzLCAtMSwK
Kwkia2V5X2VudGVyIiwgMjgsIC0xLAorCSJrZXlfaGFuZ2V1bCIsIDEyMiwgLTEsCisJImtleV9h
Z2FpbiIsIDEyOSwgLTEsCisJImtleV9maWxlIiwgMTQ0LCAtMSwKKwkia2V5X3RhYiIsIDE1LCAt
MSwKKwkic3BlYWt1cF9vZmYiLCAyNiwgLTIsCisJInNldF93aW4iLCA0MCwgLTIsCisJImtleV9p
bnNlcnQiLCAxMTAsIC0xLAorCSJrZXlfc2V0dXAiLCAxNDEsIC0xLAorCSJrZXlfZXF1YWwiLCAx
MywgLTEsCisJInRvbmVfaW5jIiwgODEsIC0yLAorCSJrZXlfaGlyYWdhbmEiLCA5MSwgLTEsCisJ
ImtleV9rcGpwY29tbWEiLCA5NSwgLTEsCisJImtleV9wYXVzZSIsIDExOSwgLTEsCisJImtleV92
b2x1bWV1cCIsIDExNSwgLTEsCisJImtleV9mMSIsIDU5LCAtMSwKKwkiZG91YmxlIiwgMzIsIC0z
LAorCSJrZXlfZjIiLCA2MCwgLTEsCisJImtleV9jb21wdXRlciIsIDE1NywgLTEsCisJImtleV9i
YWNrIiwgMTU4LCAtMSwKKwkia2V5X2xlZnRjdHJsIiwgMjksIC0xLAorCSJrZXlfZjMiLCA2MSwg
LTEsCisJImtleV9mNCIsIDYyLCAtMSwKKwkia2V5XzAiLCAxMSwgLTEsCisJImtleV9mNSIsIDYz
LCAtMSwKKwkia2V5X3llbiIsIDEyNCwgLTEsCisJImtleV9jb3B5IiwgMTMzLCAtMSwKKwkic3Bl
YWt1cF9wYXN0ZSIsIDUsIC0yLAorCSJrZXlfMSIsIDIsIC0xLAorCSJrZXlfZjYiLCA2NCwgLTEs
CisJInRvZ2dsZV9jdXJzb3JpbmciLCA0NiwgLTIsCisJImtleV9lc2MiLCAxLCAtMSwKKwkia2V5
XzIiLCAzLCAtMSwKKwkia2V5X2Y3IiwgNjUsIC0xLAorCSJzcGVha3VwX3BhcmtlZCIsIDI3LCAt
MiwKKwkicHVuY3RfZGVjIiwgODIsIC0yLAorCSJrZXlfMyIsIDQsIC0xLAorCSJrZXlfZjgiLCA2
NiwgLTEsCisJImtleV80IiwgNSwgLTEsCisJImtleV9mOSIsIDY3LCAtMSwKKwkia2V5XzUiLCA2
LCAtMSwKKwkia2V5X2NhbGMiLCAxNDAsIC0xLAorCSJzcGVsbF9waG9uZXRpYyIsIDIxLCAtMiwK
Kwkia2V5XzYiLCA3LCAtMSwKKwkia2V5XzciLCA4LCAtMSwKKwkia2V5X2NvZmZlZSIsIDE1Miwg
LTEsCisJImtleV9tYWlsIiwgMTU1LCAtMSwKKwkic2F5X2F0dHJpYnV0ZXMiLCAyNSwgLTIsCisJ
InNheV90b19yaWdodCIsIDMyLCAtMiwKKwkia2V5XzgiLCA5LCAtMSwKKwkia2V5X211dGUiLCAx
MTMsIC0xLAorCSJrZXlfOSIsIDEwLCAtMSwKKwkia2V5X2thdGFrYW5hIiwgOTAsIC0xLAorCSJr
ZXlfemVua2FrdWhhbmtha3UiLCA4NSwgLTEsCisJImtleV9mb3J3YXJkIiwgMTU5LCAtMSwKKwki
a2V5X3VwIiwgMTAzLCAtMSwKKwkidG9uZV9kZWMiLCA4MCwgLTIsCisJImtleV9sZWZ0YWx0Iiwg
NTYsIC0xLAorCSJzYXlfbmV4dF9jaGFyIiwgMTAsIC0yLAorCSJyZWFkaW5nX3B1bmNfaW5jIiwg
NjksIC0yLAorCSJyYXRlX2luYyIsIDc1LCAtMiwKKwkia2V5X2JhY2tzcGFjZSIsIDE0LCAtMSwK
KwkiYm90dG9tX2VkZ2UiLCAxOCwgLTIsCisJImtleV9rcDAiLCA4MiwgLTEsCisJImtleV9kZWxl
dGUiLCAxMTEsIC0xLAorCSJrZXlfcHJvZzEiLCAxNDgsIC0xLAorCSJzYXlfY2hhcl9udW0iLCAz
MywgLTIsCisJImtleV9rcDEiLCA3OSwgLTEsCisJImtleV9lbmQiLCAxMDcsIC0xLAorCSJrZXlf
cHJvZzIiLCAxNDksIC0xLAorCSJrZXlfa3AyIiwgODAsIC0xLAorCSJzYXlfcHJldl93b3JkIiwg
MTIsIC0yLAorCSJsZWZ0X2VkZ2UiLCAxOSwgLTIsCisJImtleV9rcDMiLCA4MSwgLTEsCisJImtl
eV9rYXRha2FuYWhpcmFnYW5hIiwgOTMsIC0xLAorCSJrZXlfcmlnaHQiLCAxMDYsIC0xLAorCSJr
ZXlfa3A0IiwgNzUsIC0xLAorCSJrZXlfZmluZCIsIDEzNiwgLTEsCisJImtleV9rcDUiLCA3Niwg
LTEsCisJInNwZWFrdXBfY3V0IiwgNCwgLTIsCisJImtleV9rcDYiLCA3NywgLTEsCisJImtleV9r
cDciLCA3MSwgLTEsCisJInNwa3VwX21heF9mdW5jIiwgNDgsIC0yLAorCSJrZXlfa3A4IiwgNzIs
IC0xLAorCSJrZXlfZGVsZXRlZmlsZSIsIDE0NiwgLTEsCisJImtleV9mMTAiLCA2OCwgLTEsCisJ
ImtleV9rcDkiLCA3MywgLTEsCisJImtleV9mMTEiLCA4NywgLTEsCisJImtleV9zZW5kZmlsZSIs
IDE0NSwgLTEsCisJInNheV93b3JkIiwgMTEsIC0yLAorCSJlZGl0X3JlcGVhdCIsIDM4LCAtMiwK
Kwkia2V5X2xlZnRicmFjZSIsIDI2LCAtMSwKKwkia2V5X2YxMiIsIDg4LCAtMSwKKwkic2F5X3By
ZXZfbGluZSIsIDE1LCAtMiwKKwkic2F5X2Zyb21fdG9wIiwgMjksIC0yLAorCSJ2YXJfc3RhcnQi
LCA2NCwgLTIsCisJInJlYWRpbmdfcHVuY19kZWMiLCA2OCwgLTIsCisJInJhdGVfZGVjIiwgNzQs
IC0yLAorCSJrZXlfYmFja3NsYXNoIiwgNDMsIC0xLAorCSJlZGl0X2V4bnVtIiwgMzksIC0yLAor
CSJrZXlfa3BzbGFzaCIsIDk4LCAtMSwKKwkia2V5X3BhZ2Vkb3duIiwgMTA5LCAtMSwKKwkia2V5
X2twcGx1c21pbnVzIiwgMTE4LCAtMSwKKwkia2V5X3N0b3AiLCAxMjgsIC0xLAorCSJrZXlfcHJv
cHMiLCAxMzAsIC0xLAorCSJwaXRjaF9pbmMiLCA3NywgLTIsCisJImtleV9zZW1pY29sb24iLCAz
OSwgLTEsCisJImtleV9yaWdodGFsdCIsIDEwMCwgLTEsCisJImtleV9wYWdldXAiLCAxMDQsIC0x
LAorCSJrZXlfa3BwbHVzIiwgNzgsIC0xLAorCSJzYXlfbGluZSIsIDE0LCAtMiwKKwkiYmxlZXBz
X2luYyIsIDczLCAtMiwKKwkia2V5X2xlZnRzaGlmdCIsIDQyLCAtMSwKKwkia2V5X2twbWludXMi
LCA3NCwgLTEsCisJImtleV9wYXN0ZSIsIDEzNSwgLTEsCisJInNwZWxsX2RlbGF5X2luYyIsIDY1
LCAtMiwKKwkicHVuY19sZXZlbF9pbmMiLCA2NywgLTIsCisJImtleV93d3ciLCAxNTAsIC0xLAor
CSJlZGl0X2RlbGltIiwgMzcsIC0yLAorCSJrZXlfY2Fwc2xvY2siLCA1OCwgLTEsCisJImtleV9t
dWhlbmthbiIsIDk0LCAtMSwKKwkia2V5X2NvbXBvc2UiLCAxMjcsIC0xLAorCSJzcGtfa2V5Iiwg
MTI4LCAtMiwKKwkia2V5X3N5c3JxIiwgOTksIC0xLAorCSJrZXlfYXBvc3Ryb3BoZSIsIDQwLCAt
MSwKKwkia2V5X2xlZnQiLCAxMDUsIC0xLAorCSJrZXlfcG93ZXIiLCAxMTYsIC0xLAorCSJrZXlf
bWVudSIsIDEzOSwgLTEsCisJInZvaWNlX2luYyIsIDg1LCAtMiwKKwkia2V5X2twY29tbWEiLCAx
MjEsIC0xLAorCSJzcGVsbF93b3JkIiwgMjIsIC0yLAorCSJlbmFibGVfd2luIiwgNDIsIC0yLAor
CSJrZXlfYSIsIDMwLCAtMSwKKwkia2V5X2hlbmthbiIsIDkyLCAtMSwKKwkia2V5X2Jvb2ttYXJr
cyIsIDE1NiwgLTEsCisJInNheV9saW5lX2luZGVudCIsIDI4LCAtMiwKKwkia2V5X2IiLCA0OCwg
LTEsCisJImtleV9zcGFjZSIsIDU3LCAtMSwKKwkia2V5X2MiLCA0NiwgLTEsCisJImVkaXRfc29t
ZSIsIDM0LCAtMiwKKwkia2V5X2QiLCAzMiwgLTEsCisJImtleV9udW1sb2NrIiwgNjksIC0xLAor
CSJrZXlfaG9tZSIsIDEwMiwgLTEsCisJInNoaWZ0IiwgMSwgLTMsCisJImtleV9lIiwgMTgsIC0x
LAorCSJrZXlfbXNkb3MiLCAxNTEsIC0xLAorCSJzYXlfcG9zaXRpb24iLCAyNCwgLTIsCisJInBp
dGNoX2RlYyIsIDc2LCAtMiwKKwkia2V5X2YiLCAzMywgLTEsCisJImtleV9jeWNsZXdpbmRvd3Mi
LCAxNTQsIC0xLAorCSJzcGVha3VwX2hlbHAiLCA0NSwgLTIsCisJImZpcnN0X2VkaXRfYml0cyIs
IDM0LCAtMiwKKwkiYWx0IiwgOCwgLTMsCisJImtleV9nIiwgMzQsIC0xLAorCSJrZXlfa3BlbnRl
ciIsIDk2LCAtMSwKKwkia2V5X21hY3JvIiwgMTEyLCAtMSwKKwkiYmxlZXBzX2RlYyIsIDcyLCAt
MiwKKwkiY3RybCIsIDQsIC0zLAorCSJrZXlfaCIsIDM1LCAtMSwKKwkia2V5X2RpcmVjdGlvbiIs
IDE1MywgLTEsCisJImtleV9pIiwgMjMsIC0xLAorCSJzcGtfbG9jayIsIDQ0LCAtMiwKKwkic3Bl
bGxfZGVsYXlfZGVjIiwgNjQsIC0yLAorCSJwdW5jX2xldmVsX2RlYyIsIDY2LCAtMiwKKwkia2V5
X2oiLCAzNiwgLTEsCisJInNheV9wcmV2X2NoYXIiLCA5LCAtMiwKKwkia2V5X2siLCAzNywgLTEs
CisJImtleV8xMDJuZCIsIDg2LCAtMSwKKwkia2V5X2wiLCAzOCwgLTEsCisJImtleV9ybyIsIDg5
LCAtMSwKKwkia2V5X3JpZ2h0bWV0YSIsIDEyNiwgLTEsCisJImtleV9tIiwgNTAsIC0xLAorCSJr
ZXlfa3BlcXVhbCIsIDExNywgLTEsCisJImtleV91bmRvIiwgMTMxLCAtMSwKKwkic3BlZWNoX2tp
bGwiLCAyLCAtMiwKKwkia2V5X24iLCA0OSwgLTEsCisJImtleV9mcm9udCIsIDEzMiwgLTEsCisJ
ImtleV9vIiwgMjQsIC0xLAorCSJrZXlfb3BlbiIsIDEzNCwgLTEsCisJInZvaWNlX2RlYyIsIDg0
LCAtMiwKKwkic3BrIiwgMTYsIC0zLAorCSJrZXlfcCIsIDI1LCAtMSwKKwkic2F5X2xhc3RfY2hh
ciIsIDcsIC0yLAorCSJzYXlfZnJvbV9sZWZ0IiwgMzEsIC0yLAorCSJrZXlfcSIsIDE2LCAtMSwK
Kwkia2V5X3NsYXNoIiwgNTMsIC0xLAorCSJzYXlfd2luIiwgNDMsIC0yLAorCSJrZXlfciIsIDE5
LCAtMSwKKwkia2V5X2RvdCIsIDUyLCAtMSwKKwkic2F5X2NoYXIiLCA4LCAtMiwKKwkidm9sX2lu
YyIsIDc5LCAtMiwKKwkiLiIsIDAsIDAKK307CmRpZmYgLS1leGNsdWRlPScqLm9yaWcnIC0tZXhj
bHVkZT0nKi5wYXRjaCcgLXVyTnAgbGludXgtMi42LjIwL2RyaXZlcnMvY2hhci9zcGVha3VwL21v
ZF9jb2RlLmMgbGludXgtMi42LjIwLXNway9kcml2ZXJzL2NoYXIvc3BlYWt1cC9tb2RfY29kZS5j
Ci0tLSBsaW51eC0yLjYuMjAvZHJpdmVycy9jaGFyL3NwZWFrdXAvbW9kX2NvZGUuYwkxOTY5LTEy
LTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysgbGludXgtMi42LjIwLXNway9kcml2ZXJz
L2NoYXIvc3BlYWt1cC9tb2RfY29kZS5jCTIwMDctMDItMDQgMTY6MDk6MjAuMDAwMDAwMDAwIC0w
NTAwCkBAIC0wLDAgKzEsMjIgQEAKKy8qIHRoaXMgY29kZSBpcyB0byBtb2R1bGFyaXplIGEgc3lu
dGggc3BlY2lmaWMgZmlsZSwgaW5jbHVkZWQgYXQgdGhlIGVuZCAqLworCitzdGF0aWMgdm9pZCBf
X2V4aXQgbW9kX3N5bnRoX2V4aXQoIHZvaWQgKQoreworICAgICAgICBpZiAoIHN5bnRoID09ICZN
WV9TWU5USCApIAorCSAgc3ludGhfcmVsZWFzZSggKTsKKwlzeW50aF9yZW1vdmUoICZNWV9TWU5U
SCApOworfQorCitzdGF0aWMgaW50IF9faW5pdCBtb2Rfc3ludGhfaW5pdCggdm9pZCApCit7CisJ
aW50IHN0YXR1cyA9IGRvX3N5bnRoX2luaXQoICZNWV9TWU5USCApOworCWlmICggc3RhdHVzICE9
IDAgKSByZXR1cm4gc3RhdHVzOworCXN5bnRoX2FkZCggJk1ZX1NZTlRIICk7CisJcmV0dXJuIDA7
Cit9CisKK21vZHVsZV9pbml0KCBtb2Rfc3ludGhfaW5pdCApOworbW9kdWxlX2V4aXQoIG1vZF9z
eW50aF9leGl0ICk7CitNT0RVTEVfQVVUSE9SKCJLaXJrIFJlaXNlciA8a2lya0BicmFpbGxlLnV3
by5jYT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiU3ludGhlc2l6ZXIgZHJpdmVyIG1vZHVsZSBm
b3Igc3BlYWt1cCBmb3IgdGhlICBzeW50aC0+bG9uZ19uYW1lIik7CitNT0RVTEVfTElDRU5TRSgg
IkdQTCIgKTsKZGlmZiAtLWV4Y2x1ZGU9Jyoub3JpZycgLS1leGNsdWRlPScqLnBhdGNoJyAtdXJO
cCBsaW51eC0yLjYuMjAvZHJpdmVycy9jaGFyL3NwZWFrdXAvc2VyaWFsaW8uaCBsaW51eC0yLjYu
MjAtc3BrL2RyaXZlcnMvY2hhci9zcGVha3VwL3NlcmlhbGlvLmgKLS0tIGxpbnV4LTIuNi4yMC9k
cml2ZXJzL2NoYXIvc3BlYWt1cC9zZXJpYWxpby5oCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAw
MDAwIC0wNTAwCisrKyBsaW51eC0yLjYuMjAtc3BrL2RyaXZlcnMvY2hhci9zcGVha3VwL3Nlcmlh
bGlvLmgJMjAwNy0wMi0wNCAxNjowOToyMC4wMDAwMDAwMDAgLTA1MDAKQEAgLTAsMCArMSwxOCBA
QAorI2lmbmRlZiBTU1BLX1NFUklBTAorI2RlZmluZSBTU1BLX1NFUklBTAorCisjaW5jbHVkZSA8
bGludXgvc2VyaWFsLmg+CS8qIGZvciByc190YWJsZSwgc2VyaWFsIGNvbnN0YW50cyAmIAorCQkJ
CSAgIHNlcmlhbF91YXJ0X2NvbmZpZyAqLworI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9yZWcuaD4J
LyogZm9yIG1vcmUgc2VyaWFsIGNvbnN0YW50cyAqLworI2luY2x1ZGUgPGxpbnV4L3NlcmlhbFAu
aD4JLyogZm9yIHN0cnVjdCBzZXJpYWxfc3RhdGUgKi8KKyNpbmNsdWRlIDxhc20vc2VyaWFsLmg+
CisKKyNkZWZpbmUgU1BLX1NFUklBTF9USU1FT1VUIDEwMDAwMDAJLyogY291bnRkb3duIHZhbHVl
cyBmb3Igc2VyaWFsIHRpbWVvdXRzICovCisjZGVmaW5lIFNQS19YTUlUUl9USU1FT1VUIDEwMDAw
MDAJLyogY291bnRkb3duIHZhbHVlcyB0cmFuc21pdHRlci9kc3IgdGltZW91dHMgKi8KKyNkZWZp
bmUgU1BLX0xPX1RUWSAwCQkvKiBjaGVjayB0dHlTMCAuLi4gdHR5UzMgKi8KKyNkZWZpbmUgU1BL
X0hJX1RUWSAzCisjZGVmaW5lIE5VTV9ESVNBQkxFX1RJTUVPVVRTIDMJLyogIyBvZiB0aW1lb3V0
cyBwZXJtaXR0ZWQgYmVmb3JlIGRpc2FibGUgKi8KKyNkZWZpbmUgU1BLX1RJTUVPVVQgMTAwCQkJ
LyogYnVmZmVyIHRpbWVvdXQgaW4gbXMgKi8KKyNkZWZpbmUgQk9USF9FTVBUWSAoVUFSVF9MU1Jf
VEVNVCB8IFVBUlRfTFNSX1RIUkUpCisKKyNlbmRpZgpkaWZmIC0tZXhjbHVkZT0nKi5vcmlnJyAt
LWV4Y2x1ZGU9JyoucGF0Y2gnIC11ck5wIGxpbnV4LTIuNi4yMC9kcml2ZXJzL2NoYXIvc3BlYWt1
cC9zcGVha3VwX2FjbnQuaCBsaW51eC0yLjYuMjAtc3BrL2RyaXZlcnMvY2hhci9zcGVha3VwL3Nw
ZWFrdXBfYWNudC5oCi0tLSBsaW51eC0yLjYuMjAvZHJpdmVycy9jaGFyL3NwZWFrdXAvc3BlYWt1
cF9hY250LmgJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrIGxpbnV4LTIu
Ni4yMC1zcGsvZHJpdmVycy9jaGFyL3NwZWFrdXAvc3BlYWt1cF9hY250LmgJMjAwNy0wMi0wNCAx
NjowOToxOS4wMDAwMDAwMDAgLTA1MDAKQEAgLTAsMCArMSwxNiBAQAorLyogc3BlYWt1cF9hY250
cGMuaCAtIGhlYWRlciBmaWxlIGZvciBzcGVha3VwcyBBY2NlbnQtUEMgZHJpdmVyLiAqLworCisj
ZGVmaW5lIFNZTlRIX0lPX0VYVEVOVAkweDAyCisKKyNkZWZpbmUgU1lOVEhfQ0xFQVIgMHgxOAkJ
Lyogc3RvcHMgc3BlZWNoICovCisKKwkvKiBQb3J0IFN0YXR1cyBGbGFncyAqLworI2RlZmluZSBT
WU5USF9SRUFEQUJMRSAgICAgMHgwMQkvKiBtYXNrIGZvciBiaXQgd2hpY2ggaXMgbm9uemVybyBp
ZiBhCisJCQkJICAgYnl0ZSBjYW4gYmUgcmVhZCBmcm9tIHRoZSBkYXRhIHBvcnQgKi8KKyNkZWZp
bmUgU1lOVEhfV1JJVEFCTEUgICAgIDB4MDIJLyogbWFzayBmb3IgUkRZIGJpdCwgd2hpY2ggd2hl
biBzZXQgdG8KKyAgICAgICAgICAgICAJCQkgICAxLCBpbmRpY2F0ZXMgdGhlIGRhdGEgcG9ydCBp
cyByZWFkeQorICAgICAgICAgICAgIAkJCSAgIHRvIGFjY2VwdCBhIGJ5dGUgb2YgZGF0YS4gKi8K
KyNkZWZpbmUgU1lOVEhfUVVJRVQgICAgICAnUycgLyogc3ludGggaXMgbm90IHNwZWFraW5nICov
CisjZGVmaW5lIFNZTlRIX0ZVTEwgICdGJyAvKiBzeW50aCBpcyBmdWxsLiAqLworI2RlZmluZSBT
WU5USF9BTE1PU1RfRU1QVFkgJ00nIC8qIHN5bnRoIGhhcyBsZXMgdGhhbiAyIHNlY29uZHMgb2Yg
dGV4dCBsZWZ0ICovCisjZGVmaW5lIFNZTlRIX1NQRUFLSU5HICdzJyAvKiBzeW50aCBpcyBzcGVh
a2luZyBhbmQgaGFzIGEgZmFyZSB3YXkgdG8gZ28gKi8KZGlmZiAtLWV4Y2x1ZGU9Jyoub3JpZycg
LS1leGNsdWRlPScqLnBhdGNoJyAtdXJOcCBsaW51eC0yLjYuMjAvZHJpdmVycy9jaGFyL3NwZWFr
dXAvc3BlYWt1cF9hY250cGMuYyBsaW51eC0yLjYuMjAtc3BrL2RyaXZlcnMvY2hhci9zcGVha3Vw
L3NwZWFrdXBfYWNudHBjLmMKLS0tIGxpbnV4LTIuNi4yMC9kcml2ZXJzL2NoYXIvc3BlYWt1cC9z
cGVha3VwX2FjbnRwYy5jCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKyBs
aW51eC0yLjYuMjAtc3BrL2RyaXZlcnMvY2hhci9zcGVha3VwL3NwZWFrdXBfYWNudHBjLmMJMjAw
Ny0wMi0wNCAxNjowOToyMC4wMDAwMDAwMDAgLTA1MDAKQEAgLTAsMCArMSwxNjEgQEAKKy8qCisg
KiBvcmlnaW5pYWxseSB3cml0dGVuIGJ5OiBLaXJrIFJlaXNlciA8a2lya0BicmFpbGxlLnV3by5j
YT4KKyogdGhpcyB2ZXJzaW9uIGNvbnNpZGVyYWJseSBtb2RpZmllZCBieSBEYXZpZCBCb3Jvd3Nr
aSwgZGF2aWQ1NzVAcm9nZXJzLmNvbQorCisJCUNvcHlyaWdodCAoQykgMTk5OC05OSAgS2lyayBS
ZWlzZXIuCisJCUNvcHlyaWdodCAoQykgMjAwMyBEYXZpZCBCb3Jvd3NraS4KKworCQlUaGlzIHBy
b2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1v
ZGlmeQorCQlpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieQorCQl0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorCQkoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorCisJCVRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorCQlidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorCQlNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisJCUdOVSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKwkJWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKwkJYWxvbmcg
d2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKwkJ
Rm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEg
IDAyMTExLTEzMDcgIFVTQQorCisgKiB0aGlzIGNvZGUgaXMgc3BlY2lmaWNseSB3cml0dGVuIGFz
IGEgZHJpdmVyIGZvciB0aGUgc3BlYWt1cCBzY3JlZW5yZXZpZXcKKyAqIHBhY2thZ2UgYW5kIGlz
IG5vdCBhIGdlbmVyYWwgZGV2aWNlIGRyaXZlci4KKwkJKi8KKyNpbmNsdWRlICJzcGtfcHJpdi5o
IgorI2luY2x1ZGUgInNwZWFrdXBfYWNudC5oIiAvKiBsb2NhbCBoZWFkZXIgZmlsZSBmb3IgQWNj
ZW50IHZhbHVlcyAqLworCisjZGVmaW5lIE1ZX1NZTlRIIHN5bnRoX2FjbnRwYworI2RlZmluZSBz
eW50aF9yZWFkYWJsZSggKSAoIGluYl9wKCBzeW50aF9wb3J0X2NvbnRyb2wgKSAmIFNZTlRIX1JF
QURBQkxFICkgCisjZGVmaW5lIHN5bnRoX3dyaXRhYmxlKCApICggaW5iX3AoIHN5bnRoX3BvcnRf
Y29udHJvbCApICYgU1lOVEhfV1JJVEFCTEUgKSAKKyNkZWZpbmUgc3ludGhfZnVsbCggKSAoIGlu
Yl9wKCBzeW50aF9wb3J0X3R0cyApID09ICdGJyApIAorI2RlZmluZSBQUk9DU1BFRUNIICdccicK
KworCitzdGF0aWMgaW50IHN5bnRoX3BvcnRfY29udHJvbDsKK3N0YXRpYyB1bnNpZ25lZCBpbnQg
c3ludGhfcG9ydGxpc3RbXSA9CisgICAgeyAweDJhOCwgMCB9OworCitzdGF0aWMgY29uc3QgY2hh
ciAqc3ludGhfaW1tZWRpYXRlICggY29uc3QgY2hhciAqYnVmICkKK3sKKwl1X2NoYXIgY2g7CisJ
d2hpbGUgKCAgKCAgY2ggPSAqYnVmICkgKSB7CisJaWYgKCBjaCA9PSAweDBhICkgY2ggPSBQUk9D
U1BFRUNIOworCQlpZiAoIHN5bnRoX2Z1bGwoICkgKQorCQkJcmV0dXJuIGJ1ZjsKKwkJd2hpbGUg
KCBzeW50aF93cml0YWJsZSggKSApOyAKKwkJb3V0Yl9wKCBjaCwgc3ludGhfcG9ydF90dHMgKTsK
KwlidWYrKzsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGRvX2NhdGNoX3VwKCB1
bnNpZ25lZCBsb25nIGRhdGEgKQoreworCXVuc2lnbmVkIGxvbmcgamlmZl9tYXggPSBqaWZmaWVz
K3N5bnRoX2ppZmZ5X2RlbHRhOworCXVfY2hhciBjaDsKKwlzeW50aF9zdG9wX3RpbWVyKCApOwor
CXdoaWxlICggIHN5bnRoX2J1ZmZfb3V0IDwgc3ludGhfYnVmZl9pbiApIHsKKwkJaWYgKCBzeW50
aF9mdWxsKCApICkgeworCQkJc3ludGhfZGVsYXkoIHN5bnRoX2Z1bGxfdGltZSApOworCQkJcmV0
dXJuOworCQl9CisJCXdoaWxlICggc3ludGhfd3JpdGFibGUoICkgKTsgCisJCWNoID0gKnN5bnRo
X2J1ZmZfb3V0Kys7CisJaWYgKCBjaCA9PSAweDBhICkgY2ggPSBQUk9DU1BFRUNIOworCQlvdXRi
X3AoIGNoLCBzeW50aF9wb3J0X3R0cyApOworCQlpZiAoIGppZmZpZXMgPj0gamlmZl9tYXggJiYg
Y2ggPT0gU1BBQ0UgKSB7CisJCQl3aGlsZSAoIHN5bnRoX3dyaXRhYmxlKCApICk7CisJCQlvdXRi
X3AoIFBST0NTUEVFQ0gsIHN5bnRoX3BvcnRfdHRzICk7CisJCQlzeW50aF9kZWxheSggc3ludGhf
ZGVsYXlfdGltZSApOyAKKwkJCXJldHVybjsgCisJCX0KKwl9CisJd2hpbGUgKCBzeW50aF93cml0
YWJsZSggKSApOworCW91dGJfcCggUFJPQ1NQRUVDSCwgc3ludGhfcG9ydF90dHMgKTsKKwlzeW50
aF9kb25lKCAgKTsKK30KKworc3RhdGljIHZvaWQgc3ludGhfZmx1c2goIHZvaWQgKQoreworCW91
dGJfcCggU1lOVEhfQ0xFQVIsIHN5bnRoX3BvcnRfdHRzICk7Cit9CisKK3N0YXRpYyBpbnQgc3lu
dGhfcHJvYmUoIHZvaWQgKQoreworCXVuc2lnbmVkIGludCBwb3J0X3ZhbCA9IDA7CisJaW50IGkg
PSAwOworCXByX2luZm8oICJQcm9iaW5nIGZvciAlcy5cbiIsIHN5bnRoLT5sb25nX25hbWUgKTsK
KwlpZiAoIHN5bnRoX3BvcnRfZm9yY2VkICkgeworCQlzeW50aF9wb3J0X3R0cyA9IHN5bnRoX3Bv
cnRfZm9yY2VkOworCQlwcl9pbmZvKCAicHJvYmUgZm9yY2VkIHRvICV4IGJ5IGtlcm5lbCBjb21t
YW5kIGxpbmVcbiIsIHN5bnRoX3BvcnRfdHRzICk7CisJCWlmICggc3ludGhfcmVxdWVzdF9yZWdp
b24oIHN5bnRoX3BvcnRfdHRzLTEsIFNZTlRIX0lPX0VYVEVOVCApICkgeworCQkJcHJfd2Fybigg
InNvcnJ5LCBwb3J0IGFscmVhZHkgcmVzZXJ2ZWRcbiIgKTsKKwkJCXJldHVybiAtRUJVU1k7CisJ
CX0KKwkJcG9ydF92YWwgPSBpbncoIHN5bnRoX3BvcnRfdHRzLTEgKTsKKwkJc3ludGhfcG9ydF9j
b250cm9sID0gc3ludGhfcG9ydF90dHMtMTsKKwl9IGVsc2UgeworCQlmb3IoIGk9MDsgc3ludGhf
cG9ydGxpc3RbaV07IGkrKyApIHsKKwkJCWlmICggc3ludGhfcmVxdWVzdF9yZWdpb24oIHN5bnRo
X3BvcnRsaXN0W2ldLCBTWU5USF9JT19FWFRFTlQgKSApIHsKKwkJCQlwcl93YXJuKCAicmVxdWVz
dF9yZWdpb246ICBmYWlsZWQgd2l0aCAweCV4LCAlZFxuIiwKKwkJCQkJc3ludGhfcG9ydGxpc3Rb
aV0sIFNZTlRIX0lPX0VYVEVOVCApOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJcG9ydF92YWwg
PSBpbncoIHN5bnRoX3BvcnRsaXN0W2ldICk7CisJCQlpZiAoICggcG9ydF92YWwgJj0gMHhmZmZj
ICkgPT0gMHg1M2ZjICkgeyAvKiAnUycgYW5kIG91dCZpbnB1dCBiaXRzICovCisJCQkJc3ludGhf
cG9ydF9jb250cm9sID0gc3ludGhfcG9ydGxpc3RbaV07CisJCQkJc3ludGhfcG9ydF90dHMgPSBz
eW50aF9wb3J0X2NvbnRyb2wrMTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKwlpZiAoICgg
cG9ydF92YWwgJj0gMHhmZmZjICkgIT0gMHg1M2ZjICkgeyAvKiAnUycgYW5kIG91dCZpbnB1dCBi
aXRzICovCisJCXByX2luZm8oICIlczogIG5vdCBmb3VuZFxuIiwgc3ludGgtPmxvbmdfbmFtZSAp
OworCQlzeW50aF9yZWxlYXNlX3JlZ2lvbiggc3ludGhfcG9ydGxpc3RbaV0sIFNZTlRIX0lPX0VY
VEVOVCApOworCQlzeW50aF9wb3J0X2NvbnRyb2wgPSAwOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9
CisJcHJfaW5mbyggIiVzOiAgJTAzeC0lMDN4LCBkcml2ZXIgdmVyc2lvbiAlcyxcbiIsIHN5bnRo
LT5sb25nX25hbWUsCisJCXN5bnRoX3BvcnRfY29udHJvbCwJc3ludGhfcG9ydF9jb250cm9sK1NZ
TlRIX0lPX0VYVEVOVC0xLCAKKwkJc3ludGgtPnZlcnNpb24gKTsKKwlyZXR1cm4gMDsKK30KKwor
c3RhdGljIHZvaWQgYWNjZW50X3JlbGVhc2UoICB2b2lkICkKK3sKKwlpZiAoICBzeW50aF9wb3J0
X3R0cyApCisJCXN5bnRoX3JlbGVhc2VfcmVnaW9uKCBzeW50aF9wb3J0X3R0cy0xLCBTWU5USF9J
T19FWFRFTlQgKTsKKwlzeW50aF9wb3J0X3R0cyA9IDA7Cit9CisKK3N0YXRpYyBpbnQgc3ludGhf
aXNfYWxpdmUoIHZvaWQgKQoreworCXN5bnRoX2FsaXZlID0gMTsKKwlyZXR1cm4gMTsKK30KKwor
c3RhdGljIGNvbnN0IGNoYXIgaW5pdF9zdHJpbmdbXSA9ICJcMDMzPVggXDAzM09pXDAzM1QyXDAz
Mz1NXDAzM04xXG4iOworCitzdGF0aWMgc3RydWN0IHN0X3N0cmluZ192YXIgc3RyaW5ndmFyc1td
ID0geworCXsgQ0FQU19TVEFSVCwgIlwwMzNQOCIgfSwKKwl7IENBUFNfU1RPUCwgIlwwMzNQNSIg
fSwKKwlWX0xBU1RfU1RSSU5HCit9Oworc3RhdGljIHN0cnVjdCBzdF9udW1fdmFyIG51bXZhcnNb
XSA9IHsKKwl7IFJBVEUsICJcMDMzUiVjIiwgOSwgMCwgMTcsIDAsIDAsICIwMTIzNDU2Nzg5YWJj
ZGVmZ2giIH0sCisJeyBQSVRDSCwgIlwwMzNQJWQiLCA1LCAwLCA5LCAwLCAwLCAwIH0sCisJeyBW
T0wsICJcMDMzQSVkIiwgNSwgMCwgOSwgMCwgMCwgMCB9LAorCXsgVE9ORSwgIlwwMzNWJWQiLCA1
LCAwLCA5LCAwLCAwLCAwIH0sCisJVl9MQVNUX05VTQorfTsKKworc3RydWN0IHNwa19zeW50aCBz
eW50aF9hY250cGMgPSB7ImFjbnRwYyIsICIxLjEiLCAiQWNjZW50IFBDIiwKKwkgaW5pdF9zdHJp
bmcsIDUwMCwgNTAsIDUwLCAxMDAwLCAwLCAwLCBTWU5USF9DSEVDSywKKwlzdHJpbmd2YXJzLCBu
dW12YXJzLCBzeW50aF9wcm9iZSwgYWNjZW50X3JlbGVhc2UsIHN5bnRoX2ltbWVkaWF0ZSwKKwlk
b19jYXRjaF91cCwgTlVMTCwgc3ludGhfZmx1c2gsIHN5bnRoX2lzX2FsaXZlLCBOVUxMLCBOVUxM
LCBOVUxMLAorCXtOVUxMLDAsMCwwfSB9OworCisjaWZkZWYgTU9EVUxFCisjaW5jbHVkZSAibW9k
X2NvZGUuYyIKKyNlbmRpZgpkaWZmIC0tZXhjbHVkZT0nKi5vcmlnJyAtLWV4Y2x1ZGU9JyoucGF0
Y2gnIC11ck5wIGxpbnV4LTIuNi4yMC9kcml2ZXJzL2NoYXIvc3BlYWt1cC9zcGVha3VwX2FjbnRz
YS5jIGxpbnV4LTIuNi4yMC1zcGsvZHJpdmVycy9jaGFyL3NwZWFrdXAvc3BlYWt1cF9hY250c2Eu
YwotLS0gbGludXgtMi42LjIwL2RyaXZlcnMvY2hhci9zcGVha3VwL3NwZWFrdXBfYWNudHNhLmMJ
MTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrIGxpbnV4LTIuNi4yMC1zcGsv
ZHJpdmVycy9jaGFyL3NwZWFrdXAvc3BlYWt1cF9hY250c2EuYwkyMDA3LTAyLTA0IDE2OjA5OjE5
LjAwMDAwMDAwMCAtMDUwMApAQCAtMCwwICsxLDE4NCBAQAorLyoKKyAqIG9yaWdpbmlhbGx5IHdy
aXR0ZW4gYnk6IEtpcmsgUmVpc2VyIDxraXJrQGJyYWlsbGUudXdvLmNhPgorKiB0aGlzIHZlcnNp
b24gY29uc2lkZXJhYmx5IG1vZGlmaWVkIGJ5IERhdmlkIEJvcm93c2tpLCBkYXZpZDU3NUByb2dl
cnMuY29tCisKKwkJQ29weXJpZ2h0IChDKSAxOTk4LTk5ICBLaXJrIFJlaXNlci4KKwkJQ29weXJp
Z2h0IChDKSAyMDAzIERhdmlkIEJvcm93c2tpLgorCisJCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisJCWl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5CisJCXRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yCisJCShhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisK
KwkJVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisJCWJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisJCU1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKwkJR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKworCQlZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorCQlhbG9uZyB3aXRoIHRoaXMgcHJvZ3Jh
bTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorCQlGb3VuZGF0aW9uLCBJbmMu
LCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNB
CisKKyAqIHRoaXMgY29kZSBpcyBzcGVjaWZpY2x5IHdyaXR0ZW4gYXMgYSBkcml2ZXIgZm9yIHRo
ZSBzcGVha3VwIHNjcmVlbnJldmlldworICogcGFja2FnZSBhbmQgaXMgbm90IGEgZ2VuZXJhbCBk
ZXZpY2UgZHJpdmVyLgorCQkqLworI2luY2x1ZGUgInNwa19wcml2LmgiCisjaW5jbHVkZSAic2Vy
aWFsaW8uaCIKKyNpbmNsdWRlICJzcGVha3VwX2FjbnQuaCIJLyogbG9jYWwgaGVhZGVyIGZpbGUg
Zm9yIEFjY2VudCB2YWx1ZXMgKi8KKworI2RlZmluZSBNWV9TWU5USCBzeW50aF9hY250c2EKKyNk
ZWZpbmUgc3ludGhfZnVsbCggKSAoIGluYl9wKCBzeW50aF9wb3J0X3R0cyApID09ICdGJyApCisj
ZGVmaW5lIFBST0NTUEVFQ0ggJ1xyJworCitzdGF0aWMgaW50IHRpbWVvdXRzID0gMDsJLyogc2Vx
dWVudGlhbCBudW1iZXIgb2YgdGltZW91dHMgKi8KKworc3RhdGljIGludAord2FpdF9mb3JfeG1p
dHIgKCB2b2lkICkKK3sKKwlpbnQgY2hlY2ssIHRtb3V0ID0gU1BLX1hNSVRSX1RJTUVPVVQ7CisJ
aWYgKCAoIHN5bnRoX2FsaXZlICkgJiYgKCB0aW1lb3V0cyA+PSBOVU1fRElTQUJMRV9USU1FT1VU
UyApICkgeworCQlzeW50aF9hbGl2ZSA9IDA7CisJCXJldHVybiAwOworCX0KKwlkbyB7IC8qIGhv
bGRpbmcgcmVnaXN0ZXIgZW1wdHk/ICovCisJCWNoZWNrID0gaW5iX3AgKCBzeW50aF9wb3J0X3R0
cyArIFVBUlRfTFNSICk7CisJCWlmICggLS10bW91dCA9PSAwICkgeworCQkJcHJfd2FybiAoICIl
czogIHRpbWVkIG91dFxuIiwgc3ludGgtPmxvbmdfbmFtZSApOworCQkJdGltZW91dHMrKzsKKwkJ
CXJldHVybiAwOworCQl9CisJfSB3aGlsZSAoICggY2hlY2sgJiBCT1RIX0VNUFRZICkgIT0gQk9U
SF9FTVBUWSApOworCXRtb3V0ID0gU1BLX1hNSVRSX1RJTUVPVVQ7CisJZG8geyAvKiBDVFMgKi8K
KwkJY2hlY2sgPSBpbmJfcCAoIHN5bnRoX3BvcnRfdHRzICsgVUFSVF9NU1IgKTsKKwkJaWYgKCAt
LXRtb3V0ID09IDAgKSB7CisJCQl0aW1lb3V0cysrOworCQkJcmV0dXJuIDA7CisJCX0KKwl9IHdo
aWxlICggKCBjaGVjayAmIFVBUlRfTVNSX0NUUyApICE9IFVBUlRfTVNSX0NUUyApOworCXRpbWVv
dXRzID0gMDsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBzcGtfc2VyaWFsX291dChjb25z
dCBjaGFyIGNoKQoreworCWlmIChzeW50aF9hbGl2ZSAmJiB3YWl0X2Zvcl94bWl0cigpKSB7CisJ
CW91dGJfcChjaCwgc3ludGhfcG9ydF90dHMpOworCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7
Cit9CisKK3N0YXRpYyB2b2lkCitkb19jYXRjaF91cCAoIHVuc2lnbmVkIGxvbmcgZGF0YSApCit7
CisJdW5zaWduZWQgbG9uZyBqaWZmX21heCA9IGppZmZpZXMrc3ludGhfamlmZnlfZGVsdGE7CisJ
dV9jaGFyIGNoOworCXN5bnRoX3N0b3BfdGltZXIgKCApOworCXdoaWxlICggc3ludGhfYnVmZl9v
dXQgPCBzeW50aF9idWZmX2luICkgeworCQljaCA9ICpzeW50aF9idWZmX291dDsKKwlpZiAoIGNo
ID09IDB4MGEgKSBjaCA9IDB4MEQ7CisJCWlmICggIXNwa19zZXJpYWxfb3V0ICggY2ggKSApIHsK
KwkJCXN5bnRoX2RlbGF5ICggc3ludGhfZnVsbF90aW1lICk7CisJCQlyZXR1cm47CisJCX0KKwkJ
c3ludGhfYnVmZl9vdXQrKzsKKwkJaWYgKCBqaWZmaWVzID49IGppZmZfbWF4ICYmIGNoID09ICcg
JyApIHsKKwkJCXNwa19zZXJpYWxfb3V0ICggUFJPQ1NQRUVDSCApOworCQkJc3ludGhfZGVsYXkg
KCBzeW50aF9kZWxheV90aW1lICk7CisJCQlyZXR1cm47CisJCX0KKwl9CisJc3BrX3NlcmlhbF9v
dXQgKCBQUk9DU1BFRUNIICk7CisJc3ludGhfZG9uZSggKTsKK30KKworc3RhdGljIGNvbnN0IGNo
YXIgKnN5bnRoX2ltbWVkaWF0ZSAoIGNvbnN0IGNoYXIgKmJ1ZmYgKQoreworCXVfY2hhciBjaDsK
Kwl3aGlsZSAoICggY2ggPSAqYnVmZiApICkgeworCWlmICggY2ggPT0gMHgwYSApIGNoID0gUFJP
Q1NQRUVDSDsKKyAgICAgICAgaWYgKCB3YWl0X2Zvcl94bWl0ciggKSApCisgICAgICAgICAgb3V0
YiggY2gsIHN5bnRoX3BvcnRfdHRzICk7CisgICAgICAgIGVsc2UgcmV0dXJuIGJ1ZmY7CisJYnVm
ZisrOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc3ludGhfZmx1c2ggKCB2b2lk
ICkKK3sKKwlzcGtfc2VyaWFsX291dCAoIFNZTlRIX0NMRUFSICk7Cit9CisKK3N0YXRpYyBpbnQg
c2VycHJvYmUgKCBpbnQgaW5kZXggKQoreworCXN0cnVjdCBzZXJpYWxfc3RhdGUgKnNlciA9IHNw
a19zZXJpYWxfaW5pdCggaW5kZXggKTsKKwlpZiAoIHNlciA9PSBOVUxMICkgcmV0dXJuIC0xOwor
CW91dGIgKCAweDBkLCBzZXItPnBvcnQgKTsKKwkvLwltZGVsYXkgKCAxICk7CisJLyogaWdub3Jl
IGFueSBlcnJvciByZXN1bHRzLCBpZiBwb3J0IHdhcyBmb3JjZWQgKi8KKwlpZiAoIHN5bnRoX3Bv
cnRfZm9yY2VkICkgcmV0dXJuIDA7CisJLyogY2hlY2sgZm9yIGFjY2VudCBzLmEgbm93Li4uICov
CisJaWYgKCAhc3ludGhfaW1tZWRpYXRlKCAiXHgxOCIgKSApCisJCXJldHVybiAwOworCXNwa19z
ZXJpYWxfcmVsZWFzZSggKTsKKwl0aW1lb3V0cyA9IHN5bnRoX2FsaXZlID0gMDsJLyogbm90IGln
bm9yaW5nICovCisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50IHN5bnRoX3Byb2JlICggdm9p
ZCApCit7CisJaW50IGkgPSAwLCBmYWlsZWQ9MDsKKwlwcl9pbmZvICggIlByb2JpbmcgZm9yICVz
LlxuIiwgc3ludGgtPmxvbmdfbmFtZSApOworCWZvciAoIGkgPSBTUEtfTE9fVFRZOyBpIDw9IFNQ
S19ISV9UVFk7IGkrKyApIHsKKwkgIGlmICgoIGZhaWxlZCA9IHNlcnByb2JlKCBpICkpID09IDAg
KSBicmVhazsgLyogZm91bmQgaXQgKi8KKyAgICAgICAgfQorICAgICAgICBpZiAoIGZhaWxlZCAp
IHsKKwkJcHJfaW5mbyAoICIlczogIG5vdCBmb3VuZFxuIiwgc3ludGgtPmxvbmdfbmFtZSApOwor
CQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJcHJfaW5mbyAoICIlczogJTAzeC0lMDN4LCBEcml2ZXIg
VmVyc2lvbiAlcyxcbiIsIHN5bnRoLT5sb25nX25hbWUsCisJCXN5bnRoX3BvcnRfdHRzLCBzeW50
aF9wb3J0X3R0cyArIDcsIHN5bnRoLT52ZXJzaW9uICk7CisJc3ludGhfaW1tZWRpYXRlKCAiXDAz
Mz1SXHIiICk7CisJbWRlbGF5KCAxMDAgKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAor
c3ludGhfaXNfYWxpdmUgKCB2b2lkICkKK3sKKwlpZiAoIHN5bnRoX2FsaXZlICkgcmV0dXJuIDE7
CisJaWYgKCAhc3ludGhfYWxpdmUgJiYgd2FpdF9mb3JfeG1pdHIgKCApID4gMCApIHsJLyogcmVz
dGFydCAqLworCQlzeW50aF9hbGl2ZSA9IDE7CisJCXN5bnRoX3dyaXRlX3N0cmluZyAoIHN5bnRo
LT5pbml0ICk7CisJCXJldHVybiAyOworCX0KKwlwcl93YXJuICggIiVzOiBjYW4ndCByZXN0YXJ0
IHN5bnRoXG4iLCBzeW50aC0+bG9uZ19uYW1lICk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBj
b25zdCBjaGFyIGluaXRfc3RyaW5nW10gPSAiXDAzM1QyXDAzMz1NXDAzM09pXDAzM04xXG4iOwor
CitzdGF0aWMgc3RydWN0IHN0X3N0cmluZ192YXIgc3RyaW5ndmFyc1tdID0geworCXsgQ0FQU19T
VEFSVCwgIlwwMzNQOCIgfSwKKwl7IENBUFNfU1RPUCwgIlwwMzNQNSIgfSwKKwlWX0xBU1RfU1RS
SU5HCit9Oworc3RhdGljIHN0cnVjdCBzdF9udW1fdmFyIG51bXZhcnNbXSA9IHsKKwl7IFJBVEUs
ICJcMDMzUiVjIiwgOSwgMCwgMTcsIDAsIDAsICIwMTIzNDU2Nzg5YWJjZGVmZ2giIH0sCisJeyBQ
SVRDSCwgIlwwMzNQJWQiLCA1LCAwLCA5LCAwLCAwLCAwIH0sCisJeyBWT0wsICJcMDMzQSVkIiwg
OSwgMCwgOSwgMCwgMCwgMCB9LAorCXsgVE9ORSwgIlwwMzNWJWQiLCA1LCAwLCA5LCAwLCAwLCAw
IH0sCisJVl9MQVNUX05VTQorfTsKKyAgIAorc3RydWN0IHNwa19zeW50aCBzeW50aF9hY250c2Eg
PSB7ICJhY250c2EiLCAiMS4xIiwgIkFjY2VudC1TQSIsCisJaW5pdF9zdHJpbmcsIDQwMCwgNSwg
MzAsIDEwMDAsIDAsIDAsIFNZTlRIX0NIRUNLLAorCXN0cmluZ3ZhcnMsIG51bXZhcnMsIHN5bnRo
X3Byb2JlLCBzcGtfc2VyaWFsX3JlbGVhc2UsIHN5bnRoX2ltbWVkaWF0ZSwKKwlkb19jYXRjaF91
cCwgTlVMTCwgc3ludGhfZmx1c2gsIHN5bnRoX2lzX2FsaXZlLCBOVUxMLCBOVUxMLCBOVUxMLAor
CXtOVUxMLDAsMCwwfSB9OworCisjaWZkZWYgTU9EVUxFCisjaW5jbHVkZSAibW9kX2NvZGUuYyIK
KyNlbmRpZgpkaWZmIC0tZXhjbHVkZT0nKi5vcmlnJyAtLWV4Y2x1ZGU9JyoucGF0Y2gnIC11ck5w
IGxpbnV4LTIuNi4yMC9kcml2ZXJzL2NoYXIvc3BlYWt1cC9zcGVha3VwX2Fwb2xsby5jIGxpbnV4
LTIuNi4yMC1zcGsvZHJpdmVycy9jaGFyL3NwZWFrdXAvc3BlYWt1cF9hcG9sbG8uYwotLS0gbGlu
dXgtMi42LjIwL2RyaXZlcnMvY2hhci9zcGVha3VwL3NwZWFrdXBfYXBvbGxvLmMJMTk2OS0xMi0z
MSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrIGxpbnV4LTIuNi4yMC1zcGsvZHJpdmVycy9j
aGFyL3NwZWFrdXAvc3BlYWt1cF9hcG9sbG8uYwkyMDA3LTAyLTA0IDE2OjA5OjIwLjAwMDAwMDAw
MCAtMDUwMApAQCAtMCwwICsxLDE5NiBAQAorLyoKKyAqIG9yaWdpbmlhbGx5IHdyaXR0ZW4gYnk6
IEtpcmsgUmVpc2VyIDxraXJrQGJyYWlsbGUudXdvLmNhPgorKiB0aGlzIHZlcnNpb24gY29uc2lk
ZXJhYmx5IG1vZGlmaWVkIGJ5IERhdmlkIEJvcm93c2tpLCBkYXZpZDU3NUByb2dlcnMuY29tCisK
KwkJQ29weXJpZ2h0IChDKSAxOTk4LTk5ICBLaXJrIFJlaXNlci4KKwkJQ29weXJpZ2h0IChDKSAy
MDAzIERhdmlkIEJvcm93c2tpLgorCisJCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisJCWl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisJCXRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yCisJCShhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKwkJVGhpcyBw
cm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisJCWJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisJCU1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUKKwkJR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKworCQlZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorCQlhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90
LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorCQlGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1w
bGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisKKyAqIHRo
aXMgY29kZSBpcyBzcGVjaWZpY2x5IHdyaXR0ZW4gYXMgYSBkcml2ZXIgZm9yIHRoZSBzcGVha3Vw
IHNjcmVlbnJldmlldworICogcGFja2FnZSBhbmQgaXMgbm90IGEgZ2VuZXJhbCBkZXZpY2UgZHJp
dmVyLgorCQkqLworI2luY2x1ZGUgInNwa19wcml2LmgiCisjaW5jbHVkZSAic2VyaWFsaW8uaCIK
KworI2RlZmluZSBNWV9TWU5USCBzeW50aF9hcG9sbG8KKyNkZWZpbmUgU1lOVEhfQ0xFQVIgMHgx
OAorI2RlZmluZSBQUk9DU1BFRUNIICdccicKKworc3RhdGljIGludCB0aW1lb3V0cyA9IDA7CS8q
IHNlcXVlbnRpYWwgbnVtYmVyIG9mIHRpbWVvdXRzICovCisKK3N0YXRpYyBpbnQgd2FpdF9mb3Jf
eG1pdHIoIHZvaWQgKQoreworCWludCBjaGVjaywgdG1vdXQgPSBTUEtfWE1JVFJfVElNRU9VVDsK
KwlpZiAoICggc3ludGhfYWxpdmUgKSAmJiAoIHRpbWVvdXRzID49IE5VTV9ESVNBQkxFX1RJTUVP
VVRTICkgKSB7CisJCXN5bnRoX2FsaXZlID0gMDsgCisJCXRpbWVvdXRzID0gMDsKKwkJcmV0dXJu
IDA7IAorCX0KKwlkbyB7CisJCWNoZWNrID0gaW5iKCBzeW50aF9wb3J0X3R0cyArIFVBUlRfTFNS
ICk7CisJCWlmICggLS10bW91dCA9PSAwICkgeworCQkJcHJfd2FybiggIkFQT0xMTzogIHRpbWVk
IG91dFxuIiApOworCQkJdGltZW91dHMrKzsKKwkJCXJldHVybiAwOworCQl9CisJfSB3aGlsZSAo
ICggY2hlY2sgJiBCT1RIX0VNUFRZICkgIT0gQk9USF9FTVBUWSApOworCXRtb3V0ID0gU1BLX1hN
SVRSX1RJTUVPVVQ7CisJZG8geworCQljaGVjayA9IGluYiggc3ludGhfcG9ydF90dHMgKyBVQVJU
X01TUiApOworCQkJCWlmICggLS10bW91dCA9PSAwICkgeworCQkJCQl0aW1lb3V0cysrOworCQkJ
CQlyZXR1cm4gMDsKKwkJCQl9CisJfSB3aGlsZSAoICggY2hlY2sgJiBVQVJUX01TUl9DVFMgKSAh
PSBVQVJUX01TUl9DVFMgKTsKKwl0aW1lb3V0cyA9IDA7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRp
YyBpbnQgc3BrX3NlcmlhbF9vdXQoY29uc3QgY2hhciBjaCkKK3sKKyAvLyBpbnQgdGltZXIgPSA5
MDAwMDAwOyAKKwlpZiAoIHN5bnRoX2FsaXZlICYmIHdhaXRfZm9yX3htaXRyKCApICkgeworCQlv
dXRiKCBjaCwgc3ludGhfcG9ydF90dHMgKTsKKwkJLyp3aGlsZSAoIGluYiggc3ludGhfcG9ydF90
dHMrVUFSVF9NU1IgKSAmIFVBUlRfTVNSX0NUUyApIGlmICggLS10aW1lciA9PSAwICkgYnJlYWs7
Ki8KKwkJLyogICAgb3V0YiggVUFSVF9NQ1JfRFRSLCBzeW50aF9wb3J0X3R0cyArIFVBUlRfTUNS
ICk7Ki8KKwkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCisvKgorc3RhdGljIHVuc2ln
bmVkIGNoYXIgc3BrX3NlcmlhbF9pbiggdm9pZCApIAoreworCWludCBjLCBsc3IsIHRtb3V0ID0g
U1BLX1NFUklBTF9USU1FT1VUOworCWRvIHsKKwkJbHNyID0gaW5iKCBzeW50aF9wb3J0X3R0cyAr
IFVBUlRfTFNSICk7CisJCWlmICggLS10bW91dCA9PSAwICkgcmV0dXJuIDB4ZmY7CisJfSB3aGls
ZSAoICEoIGxzciAmIFVBUlRfTFNSX0RSICkgKTsKKwljID0gaW5iKCBzeW50aF9wb3J0X3R0cyAr
IFVBUlRfUlggKTsKKwlyZXR1cm4gKCB1bnNpZ25lZCBjaGFyICkgYzsKK30KKyovCisKK3N0YXRp
YyB2b2lkIGRvX2NhdGNoX3VwKCB1bnNpZ25lZCBsb25nIGRhdGEgKQoreworCXVuc2lnbmVkIGxv
bmcgamlmZl9tYXggPSBqaWZmaWVzK3N5bnRoX2ppZmZ5X2RlbHRhOworCXVfY2hhciBjaDsKK3N5
bnRoX3N0b3BfdGltZXIoICk7CisJd2hpbGUgKCBzeW50aF9idWZmX291dCA8IHN5bnRoX2J1ZmZf
aW4gKSB7CisJCWNoID0gKnN5bnRoX2J1ZmZfb3V0OworCQlpZiAoICFzcGtfc2VyaWFsX291dCgg
Y2ggKSApIHsKKwkJCW91dGIoIFVBUlRfTUNSX0RUUiwgc3ludGhfcG9ydF90dHMgKyBVQVJUX01D
UiApOworCQkJb3V0YiggVUFSVF9NQ1JfRFRSIHwgVUFSVF9NQ1JfUlRTLCBzeW50aF9wb3J0X3R0
cyArIFVBUlRfTUNSICk7CisJCQlzeW50aF9kZWxheSggc3ludGhfZnVsbF90aW1lICk7CisJCQly
ZXR1cm47CisJCX0KKwkJc3ludGhfYnVmZl9vdXQrKzsKKwkJaWYgKCBqaWZmaWVzID49IGppZmZf
bWF4ICYmIHN5bnRoX2J1ZmZfb3V0LXN5bnRoX2J1ZmZlciA+IDEwICkgeworCQlzcGtfc2VyaWFs
X291dCggUFJPQ1NQRUVDSCApOworCQlzeW50aF9kZWxheSggc3ludGhfZGVsYXlfdGltZSApOyAK
KwkJcmV0dXJuOyAKKwkJfQorCX0KKwlzcGtfc2VyaWFsX291dCggUFJPQ1NQRUVDSCApOworCXN5
bnRoX2RvbmUoICk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpzeW50aF9pbW1lZGlhdGUgKCBj
b25zdCBjaGFyICpidWYgKQoreworCXVfY2hhciBjaDsKKwl3aGlsZSAoICggY2ggPSAqYnVmICkg
KSB7CisJaWYgKCBjaCA9PSAweDBhICkgY2ggPSBQUk9DU1BFRUNIOworICAgICAgICBpZiAoIHdh
aXRfZm9yX3htaXRyKCApICkKKwkgIG91dGIoIGNoLCBzeW50aF9wb3J0X3R0cyApOworCWVsc2Ug
cmV0dXJuIGJ1ZjsKKwlidWYrKzsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHN5
bnRoX2ZsdXNoICggdm9pZCApCit7CisJc3BrX3NlcmlhbF9vdXQgKCBTWU5USF9DTEVBUiApOwor
fQorCitzdGF0aWMgaW50IHNlcnByb2JlKCBpbnQgaW5kZXggKQoreworCXN0cnVjdCBzZXJpYWxf
c3RhdGUgKnNlciA9IHNwa19zZXJpYWxfaW5pdCggaW5kZXggKTsKKwlpZiAoIHNlciA9PSBOVUxM
ICkgcmV0dXJuIC0xOworCW91dGIoIDB4MGQsIHNlci0+cG9ydCApOyAvKiB3YWtlIGl0IHVwIGlm
IG9sZGVyIEJJT1MgKi8KKwltZGVsYXkoIDEgKTsKKwlzeW50aF9wb3J0X3R0cyA9IHNlci0+cG9y
dDsKKwlpZiAoIHN5bnRoX3BvcnRfZm9yY2VkICkgcmV0dXJuIDA7CisJLyogY2hlY2sgZm9yIGFw
b2xsbyBub3cuLi4gKi8KKwlpZiAoICFzeW50aF9pbW1lZGlhdGUoICJceDE4IiApICkgcmV0dXJu
IDA7CisJcHJfd2FybiggInBvcnQgJXggZmFpbGVkXG4iLCBzeW50aF9wb3J0X3R0cyApOworCXNw
a19zZXJpYWxfcmVsZWFzZSggKTsKKwl0aW1lb3V0cyA9IHN5bnRoX2FsaXZlID0gc3ludGhfcG9y
dF90dHMgPSAwOworCXJldHVybiAtMTsKK30KKworc3RhdGljIGludCBzeW50aF9wcm9iZSggdm9p
ZCApCit7CisJaW50IGksIGZhaWxlZD0wOworCXByX2luZm8oICJQcm9iaW5nIGZvciAlcy5cbiIs
IHN5bnRoLT5sb25nX25hbWUgKTsKKwlmb3IgKCBpPVNQS19MT19UVFk7IGkgPD0gU1BLX0hJX1RU
WTsgaSsrICkgeworCSAgaWYgKCggZmFpbGVkID0gc2VycHJvYmUoIGkgKSkgPT0gMCApIGJyZWFr
OyAvKiBmb3VuZCBpdCAqLworCX0KKwlpZiAoIGZhaWxlZCApIHsKKwkJcHJfaW5mbyggIiVzOiAg
bm90IGZvdW5kXG4iLCBzeW50aC0+bG9uZ19uYW1lICk7CisJCXJldHVybiAtRU5PREVWOworCX0K
Kwlwcl9pbmZvKCAiJXM6ICAlMDN4LSUwM3gsIERyaXZlciB2ZXJzaW9uICVzLFxuIiwgc3ludGgt
PmxvbmdfbmFtZSwKKwkgc3ludGhfcG9ydF90dHMsIHN5bnRoX3BvcnRfdHRzICsgNywgc3ludGgt
PnZlcnNpb24gKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzeW50aF9pc19hbGl2ZSgg
dm9pZCApCit7CisJaWYgKCBzeW50aF9hbGl2ZSApIHJldHVybiAxOworCWlmICggIXN5bnRoX2Fs
aXZlICYmIHdhaXRfZm9yX3htaXRyKCApID4gMCApIHsgLyogcmVzdGFydCAqLworCQlzeW50aF9h
bGl2ZSA9IDE7CisJCXN5bnRoX3dyaXRlX3N0cmluZyggc3ludGgtPmluaXQgKTsKKwkJcmV0dXJu
IDI7ICAvKiByZWVuYWJsZWQgKi8KKwl9IGVsc2UgcHJfd2FybiggIiVzOiBjYW4ndCByZXN0YXJ0
IHN5bnRoXG4iLCBzeW50aC0+bG9uZ19uYW1lICk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBj
b25zdCBjaGFyIGluaXRfc3RyaW5nW10gPSAiQFIzQEQwQEsxXHIiOworCitzdGF0aWMgc3RydWN0
IHN0X3N0cmluZ192YXIgc3RyaW5ndmFyc1tdID0geworCXsgQ0FQU19TVEFSVCwgImNhcCwgIiB9
LAorCXsgQ0FQU19TVE9QLCAiIiB9LAorCVZfTEFTVF9TVFJJTkcKK307CitzdGF0aWMgc3RydWN0
IHN0X251bV92YXIgbnVtdmFyc1tdID0geworCXsgUkFURSwgIkBXJWQiLCA2LCAxLCA5LCAwLCAw
LCAwIH0sCisJeyBQSVRDSCwgIkBGJXgiLCAxMCwgMCwgMTUsIDAsIDAsIDAgfSwKKwl7IFZPTCwg
IkBBJXgiLCAxMCwgMCwgMTUsIDAsIDAsIDAgfSwKKwl7IFZPSUNFLCAiQFYlZCIsIDEsIDEsIDYs
IDAsIDAsIDAgfSwKKwl7IExBTkcsICJAPSVkLCIsIDEsIDEsIDQsIDAsIDAsIDAgfSwKKwlWX0xB
U1RfTlVNCit9OworCSAKK3N0cnVjdCBzcGtfc3ludGggc3ludGhfYXBvbGxvID0geyJhcG9sbG8i
LCAiMS4yIiwgIkFwb2xsbyIsCisJaW5pdF9zdHJpbmcsIDUwMCwgNTAsIDUwLCA1MDAwLCAwLCAw
LCBTWU5USF9DSEVDSywKKwlzdHJpbmd2YXJzLCBudW12YXJzLCBzeW50aF9wcm9iZSwgc3BrX3Nl
cmlhbF9yZWxlYXNlLCBzeW50aF9pbW1lZGlhdGUsCisJZG9fY2F0Y2hfdXAsIE5VTEwsIHN5bnRo
X2ZsdXNoLCBzeW50aF9pc19hbGl2ZSwgTlVMTCwgTlVMTCwgTlVMTCwKKwl7TlVMTCwwLDAsMH0g
fTsKKworI2lmZGVmIE1PRFVMRQorI2luY2x1ZGUgIm1vZF9jb2RlLmMiCisjZW5kaWYKZGlmZiAt
LWV4Y2x1ZGU9Jyoub3JpZycgLS1leGNsdWRlPScqLnBhdGNoJyAtdXJOcCBsaW51eC0yLjYuMjAv
ZHJpdmVycy9jaGFyL3NwZWFrdXAvc3BlYWt1cF9hdWRwdHIuYyBsaW51eC0yLjYuMjAtc3BrL2Ry
aXZlcnMvY2hhci9zcGVha3VwL3NwZWFrdXBfYXVkcHRyLmMKLS0tIGxpbnV4LTIuNi4yMC9kcml2
ZXJzL2NoYXIvc3BlYWt1cC9zcGVha3VwX2F1ZHB0ci5jCTE5NjktMTItMzEgMTk6MDA6MDAuMDAw
MDAwMDAwIC0wNTAwCisrKyBsaW51eC0yLjYuMjAtc3BrL2RyaXZlcnMvY2hhci9zcGVha3VwL3Nw
ZWFrdXBfYXVkcHRyLmMJMjAwNy0wMi0wNCAxNjowOToxOS4wMDAwMDAwMDAgLTA1MDAKQEAgLTAs
MCArMSwyMDIgQEAKKy8qCisgKiBvcmlnaW5pYWxseSB3cml0dGVuIGJ5OiBLaXJrIFJlaXNlciA8
a2lya0BicmFpbGxlLnV3by5jYT4KKyogdGhpcyB2ZXJzaW9uIGNvbnNpZGVyYWJseSBtb2RpZmll
ZCBieSBEYXZpZCBCb3Jvd3NraSwgZGF2aWQ1NzVAcm9nZXJzLmNvbQorCisJCUNvcHlyaWdodCAo
QykgMTk5OC05OSAgS2lyayBSZWlzZXIuCisJCUNvcHlyaWdodCAoQykgMjAwMyBEYXZpZCBCb3Jv
d3NraS4KKworCQlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorCQlpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorCQl0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorCQkoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisJCVRoaXMgcHJvZ3JhbSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorCQlidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorCQlN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlCisJCUdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKwkJ
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKwkJYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhl
IEZyZWUgU29mdHdhcmUKKwkJRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0
ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorCisgKiB0aGlzIGNvZGUgaXMgc3Bl
Y2lmaWNseSB3cml0dGVuIGFzIGEgZHJpdmVyIGZvciB0aGUgc3BlYWt1cCBzY3JlZW5yZXZpZXcK
KyAqIHBhY2thZ2UgYW5kIGlzIG5vdCBhIGdlbmVyYWwgZGV2aWNlIGRyaXZlci4KKwkJKi8KKyNp
bmNsdWRlICJzcGtfcHJpdi5oIgorI2luY2x1ZGUgInNlcmlhbGlvLmgiCisKKyNkZWZpbmUgTVlf
U1lOVEggc3ludGhfYXVkcHRyCisjZGVmaW5lIFNZTlRIX0NMRUFSIDB4MTggLyogZmx1c2ggc3lu
dGggYnVmZmVyICovCisjZGVmaW5lIFBST0NTUEVFQ0ggJ1xyJyAvKiBzdGFydCBzeW50aCBwcm9j
ZXNzaW5nIHNwZWVjaCBjaGFyICovCisKK3N0YXRpYyBpbnQgdGltZW91dHMgPSAwOwkvKiBzZXF1
ZW50aWFsIG51bWJlciBvZiB0aW1lb3V0cyAqLworCitzdGF0aWMgaW50IHdhaXRfZm9yX3htaXRy
KCB2b2lkICkKK3sKKwlpbnQgY2hlY2ssIHRtb3V0ID0gU1BLX1hNSVRSX1RJTUVPVVQ7CisJaWYg
KCAoIHN5bnRoX2FsaXZlICkgJiYgKCB0aW1lb3V0cyA+PSBOVU1fRElTQUJMRV9USU1FT1VUUyAp
ICkgeworCQlzeW50aF9hbGl2ZSA9IDA7IAorCQl0aW1lb3V0cyA9IDA7CisJCXJldHVybiAwOyAK
Kwl9CisJZG8geyAvKiBob2xkaW5nIHJlZ2lzdGVyIGVtcHR5PyAqLworCQljaGVjayA9IGluYigg
c3ludGhfcG9ydF90dHMgKyBVQVJUX0xTUiApOworCQlpZiAoIC0tdG1vdXQgPT0gMCApIHsKKwkJ
CXByX3dhcm4oICIlczogIHRpbWVkIG91dFxuIiwgc3ludGgtPmxvbmdfbmFtZSApOworCQkgIHRp
bWVvdXRzKys7CisJCSAgcmV0dXJuIDA7CisJCX0KKwl9IHdoaWxlICggKCBjaGVjayAmIEJPVEhf
RU1QVFkgKSAhPSBCT1RIX0VNUFRZICk7CisJdG1vdXQgPSBTUEtfWE1JVFJfVElNRU9VVDsKKwlk
byB7IC8qIENUUyAqLworCQljaGVjayA9IGluYiggc3ludGhfcG9ydF90dHMgKyBVQVJUX01TUiAp
OworCQlpZiAoIC0tdG1vdXQgPT0gMCApIHsKKwkJCXRpbWVvdXRzKys7CisJCQlyZXR1cm4gMDsK
KwkJfQorCX0gd2hpbGUgKCAoIGNoZWNrICYgVUFSVF9NU1JfQ1RTICkgIT0gVUFSVF9NU1JfQ1RT
ICk7CisJdGltZW91dHMgPSAwOworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IHNwa19zZXJp
YWxfb3V0KGNvbnN0IGNoYXIgY2gpCit7CisJaWYgKCBzeW50aF9hbGl2ZSAmJiB3YWl0X2Zvcl94
bWl0ciggKSApIHsKKwkJb3V0YiggY2gsIHN5bnRoX3BvcnRfdHRzICk7CisJCXJldHVybiAxOwor
CX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVuc2lnbmVkIGNoYXIgc3BrX3NlcmlhbF9pbigg
dm9pZCApCit7CisJaW50IGMsIGxzciwgdG1vdXQgPSBTUEtfU0VSSUFMX1RJTUVPVVQ7CisJZG8g
eworCQlsc3IgPSBpbmIoIHN5bnRoX3BvcnRfdHRzICsgVUFSVF9MU1IgKTsKKwkJaWYgKCAtLXRt
b3V0ID09IDAgKSByZXR1cm4gMHhmZjsKKwl9IHdoaWxlICggISggbHNyICYgVUFSVF9MU1JfRFIg
KSApOworCWMgPSBpbmIoIHN5bnRoX3BvcnRfdHRzICsgVUFSVF9SWCApOworCXJldHVybiAoIHVu
c2lnbmVkIGNoYXIgKSBjOworfQorCitzdGF0aWMgdm9pZCBkb19jYXRjaF91cCggdW5zaWduZWQg
bG9uZyBkYXRhICkKK3sKKwl1bnNpZ25lZCBsb25nIGppZmZfbWF4ID0gamlmZmllcytzeW50aF9q
aWZmeV9kZWx0YTsKKwl1X2NoYXIgY2g7CitzeW50aF9zdG9wX3RpbWVyKCApOworCXdoaWxlICgg
c3ludGhfYnVmZl9vdXQgPCBzeW50aF9idWZmX2luICkgeworCQljaCA9ICpzeW50aF9idWZmX291
dDsKKwkJaWYgKCBjaCA9PSAweDBhICkgY2ggPSBQUk9DU1BFRUNIOworCQlpZiAoICFzcGtfc2Vy
aWFsX291dCggY2ggKSApIHsKKwkJICAJc3ludGhfZGVsYXkoIHN5bnRoX2Z1bGxfdGltZSApOwor
CQkgIAlyZXR1cm47CisJCX0KKwkJc3ludGhfYnVmZl9vdXQrKzsKKwkJaWYgKCBqaWZmaWVzID49
IGppZmZfbWF4ICYmIGNoID09IFNQQUNFICkgeworCQkgIAlzcGtfc2VyaWFsX291dCggUFJPQ1NQ
RUVDSCApOworCQkJc3ludGhfZGVsYXkoIHN5bnRoX2RlbGF5X3RpbWUgKTsgCisJCQlyZXR1cm47
IAorCQl9CisJfQorCXNwa19zZXJpYWxfb3V0KCBQUk9DU1BFRUNIICk7CisJc3ludGhfZG9uZSgg
KTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKnN5bnRoX2ltbWVkaWF0ZSAoIGNvbnN0IGNoYXIg
KmJ1ZiApCit7CisJdV9jaGFyIGNoOworCXdoaWxlICggKCBjaCA9ICpidWYgKSApIHsKKwlpZiAo
IGNoID09IDB4MGEgKSBjaCA9IFBST0NTUEVFQ0g7CisgICAgICAgIGlmICggd2FpdF9mb3JfeG1p
dHIoICkgKQorICAgICAgICAgIG91dGIoIGNoLCBzeW50aF9wb3J0X3R0cyApOworICAgICAgICBl
bHNlIHJldHVybiBidWY7CisJYnVmKys7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9p
ZCBzeW50aF9mbHVzaCggdm9pZCApCit7CisJd2hpbGUgKCAoIGluYiggc3ludGhfcG9ydF90dHMg
KyBVQVJUX0xTUiApICYgQk9USF9FTVBUWSApICE9IEJPVEhfRU1QVFkgKTsKKwlvdXRiKCBTWU5U
SF9DTEVBUiwgc3ludGhfcG9ydF90dHMgKTsKKwkJICBzcGtfc2VyaWFsX291dCggUFJPQ1NQRUVD
SCApOworCQl9CisKK3N0YXRpYyBjaGFyIHN5bnRoX2lkWzQwXSA9ICIiOworCitzdGF0aWMgaW50
IHNlcnByb2JlKCBpbnQgaW5kZXggKQoreworCXVfY2hhciB0ZXN0ID0gMDsKKwlzdHJ1Y3Qgc2Vy
aWFsX3N0YXRlICpzZXIgPSBzcGtfc2VyaWFsX2luaXQoIGluZGV4ICk7CisJaWYgKCBzZXIgPT0g
TlVMTCApIHJldHVybiAtMTsKKwkvKiBpZ25vcmUgYW55IGVycm9yIHJlc3VsdHMsIGlmIHBvcnQg
d2FzIGZvcmNlZCAqLworCWlmICggc3ludGhfcG9ydF9mb3JjZWQgKQorCQlyZXR1cm4gMDsKKwlz
eW50aF9pbW1lZGlhdGUoICJceDA1W1FdIiApOworCWlmICggKCBzeW50aF9pZFt0ZXN0XSA9IHNw
a19zZXJpYWxfaW4oICkgKSA9PSAnQScgKSB7CisJCWRvIHsgLyogcmVhZCB2ZXJzaW9uIHN0cmlu
ZyBmcm9tIHN5bnRoICovCisJCSAgc3ludGhfaWRbKyt0ZXN0XSA9IHNwa19zZXJpYWxfaW4oICk7
CisJCX0gd2hpbGUgKCBzeW50aF9pZFt0ZXN0XSAhPSAnXG4nICYmIHRlc3QgPCAzMiApOworCQlz
eW50aF9pZFsrK3Rlc3RdID0gMHgwMDsKKwkJaWYgKCB0ZXN0ICE9IDMyICkgCisJCSAgcmV0dXJu
IDA7CisJfQorCXNwa19zZXJpYWxfcmVsZWFzZSggKTsKKwkJICAgIHRpbWVvdXRzID0gc3ludGhf
YWxpdmUgPSAwOyAvKiBub3QgaWdub3JpbmcgKi8KKwkJICAgIHJldHVybiAtMTsKK30KKworc3Rh
dGljIGludCBzeW50aF9wcm9iZSggdm9pZCApCit7CisJaW50IGk9MCwgZmFpbGVkPTA7CisJcHJf
aW5mbyggIlByb2JpbmcgZm9yICVzLlxuIiwgc3ludGgtPmxvbmdfbmFtZSApOworCWZvciAoIGk9
U1BLX0xPX1RUWTsgaSA8PSBTUEtfSElfVFRZOyBpKysgKSB7CisJICBpZiAoKCBmYWlsZWQgPSBz
ZXJwcm9iZSggaSApKSA9PSAwICkgYnJlYWs7IC8qIGZvdW5kIGl0ICovCisJfQorCWlmICggZmFp
bGVkICkgeworCQlwcl9pbmZvKCAiJXM6ICBub3QgZm91bmRcbiIsIHN5bnRoLT5sb25nX25hbWUg
KTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCXByX2luZm8oICIlczogICUwM3gtJTAzeCwgRHJp
dmVyICVzLFxuIiwgc3ludGgtPmxvbmdfbmFtZSwKKwkgc3ludGhfcG9ydF90dHMsIHN5bnRoX3Bv
cnRfdHRzICsgNywgc3ludGgtPnZlcnNpb24gKTsKKwlpZiAoIHN5bnRoX2lkWzBdID09ICdBJyAp
CisJICBwcl9pbmZvKCAiJXMgdmVyc2lvbjogJXMiLCBzeW50aC0+bG9uZ19uYW1lLCBzeW50aF9p
ZCApOworCQlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzeW50aF9pc19hbGl2ZSggdm9pZCAp
Cit7CisJaWYgKCBzeW50aF9hbGl2ZSApIHJldHVybiAxOworCWlmICggIXN5bnRoX2FsaXZlICYm
IHdhaXRfZm9yX3htaXRyKCApID4gMCApIHsgLyogcmVzdGFydCAqLworCQlzeW50aF9hbGl2ZSA9
IDE7CisJCXN5bnRoX3dyaXRlX3N0cmluZyggc3ludGgtPmluaXQgKTsKKwkJcmV0dXJuIDI7CisJ
fQorCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3QgY2hhciBpbml0X3N0cmluZ1tdID0gIlx4
MDVbRDFdXHgwNVtPbF0iOworCitzdGF0aWMgc3RydWN0IHN0X3N0cmluZ192YXIgc3RyaW5ndmFy
c1tdID0geworCXsgQ0FQU19TVEFSVCwgIlx4MDVbZjk5XSIgfSwKKwl7IENBUFNfU1RPUCwgIlx4
MDVbZjgwXSIgfSwKKwlWX0xBU1RfU1RSSU5HCit9Oworc3RhdGljIHN0cnVjdCBzdF9udW1fdmFy
IG51bXZhcnNbXSA9IHsKKwl7IFJBVEUsICJceDA1W3IlZF0iLCAxMCwgMCwgMjAsIC0xMDAsIDEw
LCAwIH0sCisJeyBQSVRDSCwgIlx4MDVbZiVkXSIsIDgwLCAzOSwgNDUwMCwgMCwgMCwgMCB9LAor
CXsgVk9MLCAiXHgwNVtnJWRdIiwgMjEsIDAsIDQwLCAwLCAwLCAwIH0sCisJeyBUT05FLCAiXHgw
NVtzJWRdIiwgOSwgMCw2MywgMCwgMCwgMCB9LAorCXsgUFVOQ1QsICJceDA1W0ElY10iLCAwLCAw
LCAzLCAwLCAwLCAibm1zYSIgfSwKKwlWX0xBU1RfTlVNCit9OworCSAKK3N0cnVjdCBzcGtfc3lu
dGggc3ludGhfYXVkcHRyID0geyJhdWRwdHIiLCAiMS4xIiwgIkF1ZGFwdGVyIiwKKwkgaW5pdF9z
dHJpbmcsIDQwMCwgNSwgMzAsIDUwMDAsIDAsIDAsIFNZTlRIX0NIRUNLLAorCXN0cmluZ3ZhcnMs
IG51bXZhcnMsIHN5bnRoX3Byb2JlLCBzcGtfc2VyaWFsX3JlbGVhc2UsIHN5bnRoX2ltbWVkaWF0
ZSwKKwlkb19jYXRjaF91cCwgTlVMTCwgc3ludGhfZmx1c2gsIHN5bnRoX2lzX2FsaXZlLCBOVUxM
LCBOVUxMLCBOVUxMLAorCXtOVUxMLDAsMCwwfSB9OworCisjaWZkZWYgTU9EVUxFCisjaW5jbHVk
ZSAibW9kX2NvZGUuYyIKKyNlbmRpZgpkaWZmIC0tZXhjbHVkZT0nKi5vcmlnJyAtLWV4Y2x1ZGU9
JyoucGF0Y2gnIC11ck5wIGxpbnV4LTIuNi4yMC9kcml2ZXJzL2NoYXIvc3BlYWt1cC9zcGVha3Vw
X2Jucy5jIGxpbnV4LTIuNi4yMC1zcGsvZHJpdmVycy9jaGFyL3NwZWFrdXAvc3BlYWt1cF9ibnMu
YwotLS0gbGludXgtMi42LjIwL2RyaXZlcnMvY2hhci9zcGVha3VwL3NwZWFrdXBfYm5zLmMJMTk2
OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrIGxpbnV4LTIuNi4yMC1zcGsvZHJp
dmVycy9jaGFyL3NwZWFrdXAvc3BlYWt1cF9ibnMuYwkyMDA3LTAyLTA0IDE2OjA5OjE5LjAwMDAw
MDAwMCAtMDUwMApAQCAtMCwwICsxLDE3NSBAQAorLyoKKyAqIG9yaWdpbmlhbGx5IHdyaXR0ZW4g
Ynk6IEtpcmsgUmVpc2VyIDxraXJrQGJyYWlsbGUudXdvLmNhPgorKiB0aGlzIHZlcnNpb24gY29u
c2lkZXJhYmx5IG1vZGlmaWVkIGJ5IERhdmlkIEJvcm93c2tpLCBkYXZpZDU3NUByb2dlcnMuY29t
CisKKwkJQ29weXJpZ2h0IChDKSAxOTk4LTk5ICBLaXJrIFJlaXNlci4KKwkJQ29weXJpZ2h0IChD
KSAyMDAzIERhdmlkIEJvcm93c2tpLgorCisJCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisJCWl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisJ
CXRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yCisJCShhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKwkJVGhp
cyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisJCWJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisJCU1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUKKwkJR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKworCQlZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorCQlhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYg
bm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorCQlGb3VuZGF0aW9uLCBJbmMuLCA1OSBU
ZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisKKyAq
IHRoaXMgY29kZSBpcyBzcGVjaWZpY2x5IHdyaXR0ZW4gYXMgYSBkcml2ZXIgZm9yIHRoZSBzcGVh
a3VwIHNjcmVlbnJldmlldworICogcGFja2FnZSBhbmQgaXMgbm90IGEgZ2VuZXJhbCBkZXZpY2Ug
ZHJpdmVyLgorCQkqLworI2luY2x1ZGUgInNwa19wcml2LmgiCisjaW5jbHVkZSAic2VyaWFsaW8u
aCIKKworI2RlZmluZSBNWV9TWU5USCBzeW50aF9ibnMKKyNkZWZpbmUgU1lOVEhfQ0xFQVIgMHgx
OAorI2RlZmluZSBQUk9DU1BFRUNIICdccicKKworc3RhdGljIGludCB3YWl0X2Zvcl94bWl0cigg
dm9pZCApCit7CisJc3RhdGljIGludCB0aW1lb3V0cyA9IDA7CS8qIHNlcXVlbnRpYWwgbnVtYmVy
IG9mIHRpbWVvdXRzICovCisJaW50IGNoZWNrLCB0bW91dCA9IFNQS19YTUlUUl9USU1FT1VUOwor
CWlmICggKCBzeW50aF9hbGl2ZSApICYmICggdGltZW91dHMgPj0gTlVNX0RJU0FCTEVfVElNRU9V
VFMgKSApIHsKKwkJc3ludGhfYWxpdmUgPSAwOyAKKwkJdGltZW91dHMgPSAwOworCQlyZXR1cm4g
MDsgCisJfQorCWRvIHsKKwkJY2hlY2sgPSBpbmIoIHN5bnRoX3BvcnRfdHRzICsgVUFSVF9MU1Ig
KTsKKwkJaWYgKCAtLXRtb3V0ID09IDAgKSB7CisJCSAJcHJfd2FybiggIkJOUzogIHRpbWVkIG91
dFxuIiApOworCQkJdGltZW91dHMrKzsKKwkJCXJldHVybiAwOworCQl9CisJfSB3aGlsZSAoICgg
Y2hlY2sgJiBCT1RIX0VNUFRZICkgIT0gQk9USF9FTVBUWSApOworCXRtb3V0ID0gU1BLX1hNSVRS
X1RJTUVPVVQ7CisJZG8geworCQljaGVjayA9IGluYiggc3ludGhfcG9ydF90dHMgKyBVQVJUX01T
UiApOworCQlpZiAoIC0tdG1vdXQgPT0gMCApIHsKKwkJCXRpbWVvdXRzKys7CisJCQlyZXR1cm4g
MDsKKwkJfQorCX0gd2hpbGUgKCAoIGNoZWNrICYgVUFSVF9NU1JfQ1RTICkgIT0gVUFSVF9NU1Jf
Q1RTICk7CisJdGltZW91dHMgPSAwOworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IHNwa19z
ZXJpYWxfb3V0KGNvbnN0IGNoYXIgY2gpCit7CisJaWYgKCBzeW50aF9hbGl2ZSAmJiB3YWl0X2Zv
cl94bWl0ciggKSApIHsKKwkJb3V0YiggY2gsIHN5bnRoX3BvcnRfdHRzICk7CisJCXJldHVybiAx
OworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZG9fY2F0Y2hfdXAoIHVuc2lnbmVk
IGxvbmcgZGF0YSApCit7CisJdW5zaWduZWQgbG9uZyBqaWZmX21heCA9IGppZmZpZXMrc3ludGhf
amlmZnlfZGVsdGE7CisJdV9jaGFyIGNoOworCXN5bnRoX3N0b3BfdGltZXIoICk7CisJd2hpbGUg
KCBzeW50aF9idWZmX291dCA8IHN5bnRoX2J1ZmZfaW4gKSB7CisJCWNoID0gKnN5bnRoX2J1ZmZf
b3V0OworCQlpZiAoIGNoID09ICdcbicgKSBjaCA9IFBST0NTUEVFQ0g7CisJCWlmICggIXNwa19z
ZXJpYWxfb3V0KCBjaCApICkgeworCQkJc3ludGhfZGVsYXkoIHN5bnRoX2Z1bGxfdGltZSApOwor
CQkJcmV0dXJuOworCQl9CisJCXN5bnRoX2J1ZmZfb3V0Kys7CisJCWlmICggamlmZmllcyA+PSBq
aWZmX21heCAmJiBjaCA9PSAnICcgKSB7IAorCQkJc3BrX3NlcmlhbF9vdXQoIFBST0NTUEVFQ0gg
KTsKKwkJCXN5bnRoX2RlbGF5KCBzeW50aF9kZWxheV90aW1lICk7IAorCQkJcmV0dXJuOyAKKwkJ
fQorCX0KKwlzcGtfc2VyaWFsX291dCggUFJPQ1NQRUVDSCApOworCXN5bnRoX2RvbmUoICk7Cit9
CisKK3N0YXRpYyBjb25zdCBjaGFyICpzeW50aF9pbW1lZGlhdGUgKCBjb25zdCBjaGFyICpidWYg
KQoreworCXVfY2hhciBjaDsKKwl3aGlsZSAoICggY2ggPSAqYnVmICkgKSB7CisJaWYgKCBjaCA9
PSAweDBhICkgY2ggPSBQUk9DU1BFRUNIOworICAgICAgICBpZiAoIHdhaXRfZm9yX3htaXRyKCAp
ICkKKyAgICAgICAgICBvdXRiKCBjaCwgc3ludGhfcG9ydF90dHMgKTsKKyAgICAgICAgZWxzZSBy
ZXR1cm4gYnVmOworCWJ1ZisrOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc3lu
dGhfZmx1c2ggKCB2b2lkICkKK3sKKwlzcGtfc2VyaWFsX291dCAoIFNZTlRIX0NMRUFSICk7Cit9
CisKK3N0YXRpYyBpbnQgc2VycHJvYmUoIGludCBpbmRleCApCit7CisJc3RydWN0IHNlcmlhbF9z
dGF0ZSAqc2VyID0gc3BrX3NlcmlhbF9pbml0KCBpbmRleCApOworCWlmICggc2VyID09IE5VTEwg
KSByZXR1cm4gLTE7CisJb3V0YiggJ1xyJywgc2VyLT5wb3J0ICk7CisJaWYgKCBzeW50aF9wb3J0
X2ZvcmNlZCApIHJldHVybiAwOworCS8qIGNoZWNrIGZvciBibnMgbm93Li4uICovCisJaWYgKCAh
c3ludGhfaW1tZWRpYXRlKCAiXHgxOCIgKSApIHJldHVybiAwOworCXNwa19zZXJpYWxfcmVsZWFz
ZSggKTsKKwlzeW50aF9hbGl2ZSA9IDA7CisJCQkJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50
IHN5bnRoX3Byb2JlKCB2b2lkICkKK3sKKwlpbnQgaT0wLCBmYWlsZWQ9MDsKKwlwcl9pbmZvKCAi
UHJvYmluZyBmb3IgJXMuXG4iLCBzeW50aC0+bG9uZ19uYW1lICk7CisJZm9yICggaT1TUEtfTE9f
VFRZOyBpIDw9IFNQS19ISV9UVFk7IGkrKyApIHsKKwkgIGlmICgoIGZhaWxlZCA9IHNlcnByb2Jl
KCBpICkpID09IDAgKSBicmVhazsgLyogZm91bmQgaXQgKi8KKyAgICAgICAgfQorICAgICAgICBp
ZiAoIGZhaWxlZCApIHsKKwkJcHJfaW5mbyggIiVzOiAgbm90IGZvdW5kXG4iLCBzeW50aC0+bG9u
Z19uYW1lICk7CisJCXJldHVybiAtRU5PREVWOworCX0KKwlwcl9pbmZvKCAiJXM6ICAlMDN4LSUw
M3gsIERyaXZlciB2ZXJzaW9uICVzLFxuIiwgc3ludGgtPmxvbmdfbmFtZSwKKwkJc3ludGhfcG9y
dF90dHMsIHN5bnRoX3BvcnRfdHRzICsgNywgc3ludGgtPnZlcnNpb24gKTsKKwlyZXR1cm4gMDsK
K30KKworc3RhdGljIGludCBzeW50aF9pc19hbGl2ZSggdm9pZCApCit7CisJaWYgKCBzeW50aF9h
bGl2ZSApIHJldHVybiAxOworCWlmICggIXN5bnRoX2FsaXZlICYmIHdhaXRfZm9yX3htaXRyKCAp
ID4gMCApIHsgLyogcmVzdGFydCAqLworCQlzeW50aF9hbGl2ZSA9IDE7CisJCXN5bnRoX3dyaXRl
X3N0cmluZyggc3ludGgtPmluaXQgKTsKKwkJcmV0dXJuIDI7CisJfQorCXByX3dhcm4oICIlczog
Y2FuJ3QgcmVzdGFydCBzeW50aFxuIiwgc3ludGgtPmxvbmdfbmFtZSApOworCXJldHVybiAwOwor
fQorCitzdGF0aWMgY29uc3QgY2hhciBpbml0X3N0cmluZ1tdID0gIlx4MDVaXHgwNVx4NDMiOwor
CitzdGF0aWMgc3RydWN0IHN0X3N0cmluZ192YXIgc3RyaW5ndmFyc1tdID0geworCXsgQ0FQU19T
VEFSVCwgIlx4MDVceDMxXHgzMlAiIH0sCisJeyBDQVBTX1NUT1AsICJceDA1XHgzOFAiIH0sCisJ
Vl9MQVNUX1NUUklORworfTsKK3N0YXRpYyBzdHJ1Y3Qgc3RfbnVtX3ZhciBudW12YXJzW10gPSB7
CisJeyBSQVRFLCAiXHgwNSVkRSIsIDgsIDEsIDE2LCAwLCAwLCAwIH0sCisJeyBQSVRDSCwgIlx4
MDUlZFAiLCA4LCAwLCAxNiwgMCwgMCwgMCB9LAorCXsgVk9MLCAiXHgwNSVkViIsIDgsIDAsIDE2
LCAwLCAwLCAwIH0sCisJeyBUT05FLCAiXHgwNSVkVCIsIDgsIDAsIDE2LCAwLCAwLCAwIH0sCisJ
Vl9MQVNUX05VTQorfTsKKworc3RydWN0IHNwa19zeW50aCBzeW50aF9ibnMgPSB7ImJucyIsICIx
LjEiLCAiQnJhaWxsZSAnTiBTcGVhayIsCisJaW5pdF9zdHJpbmcsIDUwMCwgNTAsIDUwLCA1MDAw
LCAwLCAwLCBTWU5USF9DSEVDSywKKwlzdHJpbmd2YXJzLCBudW12YXJzLCBzeW50aF9wcm9iZSwg
c3BrX3NlcmlhbF9yZWxlYXNlLCBzeW50aF9pbW1lZGlhdGUsCisJZG9fY2F0Y2hfdXAsIE5VTEws
IHN5bnRoX2ZsdXNoLCBzeW50aF9pc19hbGl2ZSwgTlVMTCwgTlVMTCwgTlVMTCwKKwl7TlVMTCww
LDAsMH0gfTsKKworI2lmZGVmIE1PRFVMRQorI2luY2x1ZGUgIm1vZF9jb2RlLmMiCisjZW5kaWYK
ZGlmZiAtLWV4Y2x1ZGU9Jyoub3JpZycgLS1leGNsdWRlPScqLnBhdGNoJyAtdXJOcCBsaW51eC0y
LjYuMjAvZHJpdmVycy9jaGFyL3NwZWFrdXAvc3BlYWt1cC5jIGxpbnV4LTIuNi4yMC1zcGsvZHJp
dmVycy9jaGFyL3NwZWFrdXAvc3BlYWt1cC5jCi0tLSBsaW51eC0yLjYuMjAvZHJpdmVycy9jaGFy
L3NwZWFrdXAvc3BlYWt1cC5jCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisr
KyBsaW51eC0yLjYuMjAtc3BrL2RyaXZlcnMvY2hhci9zcGVha3VwL3NwZWFrdXAuYwkyMDA3LTAy
LTA0IDE2OjA5OjIwLjAwMDAwMDAwMCAtMDUwMApAQCAtMCwwICsxLDI4NzMgQEAKKy8qIHNwZWFr
dXAuYworICAgcmV2aWV3IGZ1bmN0aW9ucyBmb3IgdGhlIHNwZWFrdXAgc2NyZWVuIHJldmlldyBw
YWNrYWdlLgorICAgb3JpZ2luYWxseSB3cml0dGVuIGJ5OiBLaXJrIFJlaXNlciBhbmQgQW5keSBC
ZXJkYW4uCisKKyAgZXh0ZW5zaXZlbHkgbW9kaWZpZWQgYnkgRGF2aWQgQm9yb3dza2kuCisKKyAg
ICBDb3B5cmlnaHQgKEMgKSAxOTk4ICBLaXJrIFJlaXNlci4KKyAgICBDb3B5cmlnaHQgKEMgKSAy
MDAzICBEYXZpZCBCb3Jvd3NraS4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkK
KyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbiApIGFueSBsYXRlciB2ZXJzaW9uLgor
CisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0
aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBG
b3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAg
MDIxMTEtMTMwNyAgVVNBCisqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVk
ZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L3Z0Lmg+CisjaW5jbHVkZSA8bGlu
dXgvdHR5Lmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4gLyogX19nZXRfZnJlZV9wYWdlKCApIGFu
ZCBmcmllbmRzICovCisjaW5jbHVkZSA8bGludXgvdnRfa2Vybi5oPgorI2luY2x1ZGUgPGxpbnV4
L2N0eXBlLmg+CisjaW5jbHVkZSA8bGludXgvc2VsZWN0aW9uLmg+CisjaW5jbHVkZSA8YXNtL3Vh
Y2Nlc3MuaD4gLyogY29weV9mcm9tfHRvfHVzZXIoICkgYW5kIG90aGVycyAqLworI2luY2x1ZGUg
PGxpbnV4L3VuaXN0ZC5oPgorCisjaW5jbHVkZSA8bGludXgva2V5Ym9hcmQuaD4JLyogZm9yIEtU
X1NISUZUICovCisjaW5jbHVkZSA8bGludXgva2JkX2tlcm4uaD4gLyogZm9yIHZjX2tiZF8qIGFu
ZCBmcmllbmRzICovCisjaW5jbHVkZSA8bGludXgvdnRfa2Vybi5oPgorI2luY2x1ZGUgPGxpbnV4
L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgva21vZC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwZWFr
dXAuaD4KKworI2luY2x1ZGUgImN2c3ZlcnNpb24uaCIKKyNpbmNsdWRlICJzcGtfcHJpdi5oIgor
I2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4JLyogZm9yIGFsbG9jX2Jvb3RtZW0gKi8KKworLyog
c3BlYWt1cF8qX3NlbGVjdGlvbiAqLworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1
ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxp
bnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9j
b25zb2xlbWFwLmg+CisKKyNkZWZpbmUgU1BFQUtVUF9WRVJTSU9OICJTcGVha3VwIHYtMi4wMCIg
Q1ZTVkVSU0lPTgorI2RlZmluZSBNQVhfREVMQVkgKCAoNTAwICogSFogKSAvIDEwMDAgKQorI2Rl
ZmluZSBLRVlfTUFQX1ZFUiAxMTkKKyNkZWZpbmUgTUlORUNIT0NIQVIgU1BBQ0UKKworLyogdGhl
c2UgYXJlIGdsb2JhbHMgZnJvbSB0aGUga2VybmVsIGNvZGUgKi8KK2V4dGVybiBzdHJ1Y3Qga2Jk
X3N0cnVjdCAqIGtiZDsKK2V4dGVybiBpbnQgZmdfY29uc29sZTsKK2V4dGVybiBzaG9ydCBwdW5j
X21hc2tzW107CisKK3N0YXRpYyBzcGVjaWFsX2Z1bmMgc3BlY2lhbF9oYW5kbGVyID0gTlVMTDsK
K3NwZWNpYWxfZnVuYyBoZWxwX2hhbmRsZXIgPSBOVUxMOworCitzaG9ydCBwaXRjaF9zaGlmdCA9
IDAsIHN5bnRoX2ZsYWdzID0gMDsKK3N0YXRpYyBjaGFyIGJ1ZlsyNTZdOworc2hvcnQgYXR0cmli
X2JsZWVwID0gMCwgYmxlZXBzID0gMCwgIGJsZWVwX3RpbWUgPSAxOworc2hvcnQgbm9faW50ciA9
IDAsIHNwZWxsX2RlbGF5ID0gMDsKK3Nob3J0IGtleV9lY2hvID0gMCwgY3Vyc29yX3RpbWVvdXQg
PSAxMjAsIHNheV93b3JkX2N0bCA9IDA7CitzaG9ydCBzYXlfY3RybCA9IDAsIGJlbGxfcG9zID0g
MDsKK3Nob3J0IHB1bmNfbWFzayA9IDAsIHB1bmNfbGV2ZWwgPSAwLCByZWFkaW5nX3B1bmMgPSAw
OworY2hhciBzdHJfY2Fwc19zdGFydFtNQVhWQVJMRU4rMV0gPSAiXDAiLCBzdHJfY2Fwc19zdG9w
W01BWFZBUkxFTisxXSA9ICJcMCI7CitzdGF0aWMgY29uc3Qgc3RydWN0IHN0X2JpdHNfZGF0YSBw
dW5jX2luZm9bXSA9IHsKKwl7ICJub25lIiwgIiIsIDAgfSwKKwl7ICJzb21lIiwgIi8kJSZAIiwg
U09NRSB9LAorCXsgIm1vc3QiLCAiJCUmIygpPSsqL0BePD58XFwiLCBNT1NUIH0sCisJeyAiYWxs
IiwgIiFcIiMkJSYnKCkqKywtLi86Ozw9Pj9AW1xcXV5fYHt8fX4iLCBQVU5DIH0sCisJeyAiZGVs
aW1pdGVycyIsICIiLCBCX1dETE0gfSwKKwl7ICJyZXBlYXRzIiwgIigpIiwgQ0hfUlBUIH0sCisJ
eyAiZXh0ZW5kZWQgbnVtZXJpYyIsICIiLCBCX0VYTlVNIH0sCisJeyAic3ltYm9scyIsICIiLCBC
X1NZTSB9LAorCXsgMCwgMCB9Cit9Oworc3RhdGljIGNoYXIgbWFya19jdXRfZmxhZyA9IDA7Citj
aGFyIHN5bnRoX25hbWVbMTBdID0gQ09ORklHX1NQRUFLVVBfREVGQVVMVDsKKyNkZWZpbmUgTUFY
X0tFWSAxNjAKK3VfY2hhciAqb3VyX2tleXNbTUFYX0tFWV0sICpzaGlmdF90YWJsZTsKK3N0YXRp
YyB1X2NoYXIga2V5X2J1Zls2MDBdOworc3RhdGljIGNvbnN0IHVfY2hhciBrZXlfZGVmYXVsdHNb
XSA9IHsKKyNpbmNsdWRlICJzcGVha3VwbWFwLmgiCit9OworCisvKiBTcGVha3VwIEN1cnNvciBU
cmFjayBWYXJpYWJsZXMgKi8KK3N0YXRpYyBpbnQgY3Vyc29yX3RyYWNrID0gMSwgcHJldl9jdXJz
b3JfdHJhY2sgPSAxOworCisvKiBjdXJzb3IgdHJhY2sgbW9kZXMsIG11c3QgYmUgb3JkZXJlZCBz
YW1lIGFzIGN1cnNvcl9tc2dzICovCitlbnVtIHsKKwlDVF9PZmYgPSAwLAorCUNUX09uLAorCUNU
X0hpZ2hsaWdodCwKKwlDVF9XaW5kb3csCisJQ1RfTWF4Cit9OworI2RlZmluZSByZWFkX2FsbF9t
b2RlIENUX01heAorCitzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OworI2RlZmluZSBrZXlfaGFuZGxl
ciBrX2hhbmRsZXIKK3R5cGVkZWYgdm9pZCAoKmtfaGFuZGxlcl9mbikoc3RydWN0IHZjX2RhdGEg
KnZjLCB1bnNpZ25lZCBjaGFyIHZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNo
YXIgdXBfZmxhZyk7CitleHRlcm4ga19oYW5kbGVyX2ZuIGtleV9oYW5kbGVyWzE2XTsKK3N0YXRp
YyBrX2hhbmRsZXJfZm4gZG9fc2hpZnQsIGRvX3NwZWMsIGRvX2xhdGluLCBkb19jdXJzb3I7CitF
WFBPUlRfU1lNQk9MX0dQTChoZWxwX2hhbmRsZXIpOworRVhQT1JUX1NZTUJPTF9HUEwoc3BlY2lh
bF9oYW5kbGVyKTsKK0VYUE9SVF9TWU1CT0xfR1BMKG91cl9rZXlzKTsKK0VYUE9SVF9TWU1CT0xf
R1BMKHN5bnRoX25hbWUpOworCitzdGF0aWMgdm9pZCBzcGt1cF93cml0ZShjb25zdCBjaGFyICpp
bl9idWYsIGludCBjb3VudCk7CitzdGF0aWMgaW50IHNldF9tYXNrX2JpdHMoY29uc3QgY2hhciAq
aW5wdXQsIGNvbnN0IGludCB3aGljaCwgY29uc3QgaW50IGhvdyk7CisKK3N0YXRpYyBjb25zdCBj
aGFyIHN0cl9jdGxbXSA9ICJjb250cm9sLSI7CitzdGF0aWMgY29uc3QgY2hhciAqY29sb3JzW10g
PSB7CisJImJsYWNrIiwgImJsdWUiLCAiZ3JlZW4iLCAiY3lhbiIsICJyZWQiLCAibWFnZW50YSIs
ICJ5ZWxsb3ciLCAid2hpdGUiLAorCSJncmV5IgorfTsKKworc3RhdGljIGNoYXIgKnBob25ldGlj
W10gPSB7CisJImFscGhhIiwgImJldGEiLCAiY2hhcmxleSIsICJkZWx0YSIsICJlY2hvIiwgImZv
eCIsICJnYW1tYSIsICJob3RlbCIsCisJImluZGlhIiwgImp1bGVpZXQiLCAia2VlbG8iLCAibGVl
bWEiLCAibWlrZSIsICJub3ZlbWJlciIsICJvc2NhciIsCisJInBhcGEiLAorCSJxdWViZWMiLCAi
cm9tZW8iLCAic2VlYXJhIiwgInRhbmdvIiwgInVuaWZvcm0iLCAidmljdGVyIiwgIndpc2tleSIs
CisJInggcmF5IiwgInlhbmtlZSIsICJ6b29sb28iCit9OworCisvLyBhcnJheSBvZiAyNTYgY2hh
ciBwb2ludGVycyAob25lIGZvciBlYWNoIGNoYXJhY3RlciBkZXNjcmlwdGlvbiApCisvLyBpbml0
aWFsaXplZCB0byBkZWZhdWx0X2NoYXJzIGFuZCB1c2VyIHNlbGVjdGFibGUgdmlhIC9wcm9jL3Nw
ZWFrdXAvY2hhcmFjdGVycworc3RhdGljIGNoYXIgKmNoYXJhY3RlcnNbMjU2XTsKKworc3RhdGlj
IGNoYXIgKmRlZmF1bHRfY2hhcnNbMjU2XSA9IHsKKwkibnVsbCIsICJeYSIsICJeYiIsICJeYyIs
ICJeZCIsICJeZSIsICJeZiIsICJeZyIsCisJIl5oIiwgIl5pIiwgIl5qIiwgIl5rIiwgIl5sIiwg
Il5tIiwgIl5uIiwgIl5vIiwKKwkiXnAiLCAiXnEiLCAiXnIiLCAiXnMiLCAiXnQiLCAiXnUiLCAi
XnYiLCAiXnciLAorCSJeeCIsICJeeSIsICJeeiIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5V
TEwsCisJInNwYWNlIiwgImJhbmchIiwgInF1b3RlIiwgIm51bWJlciIsICJkb2xsYXIiLCAicGVy
Y2VudCIsICJhbmQiLAorCSJ0aWNrIiwKKwkibGVmdCBwYXJlbiIsICJyaWdodCBwYXJlbiIsICJz
dGFyIiwgInBsdXMiLCAiY29tbWEiLCAiZGFzaCIsICJkb3QiLAorCSJzbGFzaCIsCisJInplcm8i
LCAib25lIiwgInR3byIsICJ0aHJlZSIsICJmb3VyIiwgImZpdmUiLCAic2l4IiwgInNldmVuIiwK
KwkiZWlnaHQiLCAibmluZSIsCisJImNvbG9uIiwgInNlbW15IiwgImxlc3MiLCAiZXF1YWxzIiwg
ImdyZWF0ZXIiLCAicXVlc3Rpb24iLCAiYXQiLAorCSJlaWdoIiwgImIiLCAiYyIsICJkIiwgImUi
LCAiZiIsICJnIiwKKwkiaCIsICJpIiwgImoiLCAiayIsICJsIiwgIm0iLCAibiIsICJvIiwKKwki
cCIsICJxIiwgInIiLCAicyIsICJ0IiwgInUiLCAidiIsICJ3IiwgIngiLAorCSJ5IiwgInplaGQi
LCAibGVmdCBicmFja2V0IiwgImJhY2tzbGFzaCIsICJyaWdodCBicmFja2V0IiwgImNhcmV0IiwK
KwkibGluZSIsCisJImFjY2VudCIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEws
IE5VTEwsCisJTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwK
KwlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLAorCU5VTEws
IE5VTEwsIE5VTEwsICJsZWZ0IGJyYWNlIiwgImJhciIsICJyaWdodCBicmFjZSIsICJ0aWhsZHVo
IiwKKwkiZGVsdGEiLCAic2VlIGNlZGlsbGEiLCAidSBvb21sb3V0IiwgImUgYWN1dGUiLCAvKiAx
MjggKi8KKwkiZWlnaCBjaXJjdW1mbGV4IiwgImVpZ2ggb29tbG91dCIsICJlaWdoIGdyYXZlIiwg
ImVpZ2ggcmluZyIsIC8qIDEzMiAqLworCSJzZWUgY2VkaWxsYSIsICJlIGNpcmN1bWZsZXgiLCAi
ZSBvb21sb3V0IiwgImUgZ3JhdmUiLCAvKiAxMzYgKi8KKwkiaSBvb21sb3V0IiwgImkgY2lyY3Vt
ZmxleCIsICJpIGdyYXZlIiwgImVpZ2ggb29tbG91dCIsIC8qIDE0MCAqLworCSJlaWdoIHJpbmci
LCAiZSBhY3V0ZSIsICJlaWdoIGUgZGlwdGhvbmciLCAiZWlnaCBlIGRpcHRob25nIiwgLyogMTQ0
ICovCisJIm8gY2lyY3VtZmxleCIsICJvIG9vbWxvdXQiLCAibyBncmF2ZSIsICJ1IGNpcmN1bWZs
ZXgiLCAvKiAxNDggKi8KKwkidSBncmF2ZSIsICJ5IG9vbWxvdXQiLCAibyBvb21sb3V0IiwgInUg
b29tbG91dCIsIC8qIDE1MiAqLworCSJjZW50cyIsICJwb3VuZHMiLCAieWVuIiwgInBlc2V0YSIs
IC8qIDE1NiAqLworCSJmbG9yaW4iLCAiZWlnaCBhY3V0ZSIsICJpIGFjdXRlIiwgIm8gYWN1dGUi
LCAvKiAxNjAgKi8KKwkidSBhY3V0ZSIsICJuIHRpbGRlIiwgIm4gdGlsZGUiLCAiZmVtaW5pbmUg
b3JkaW5hbCIsIC8qIDE2NCAqLworCSJtYXNjdWxpbiBvcmRpbmFsIiwgImludmVydGVkIHF1ZXN0
aW9uIiwgInJldmVyc2VkIG5vdCIsICJub3QiLCAvKiAxNjggKi8KKwkiaGFsZiIsICJxdWFydGVy
IiwgImludmVydGVkIGJhbmciLCAibXVjaCBsZXNzIHRoYW4iLCAvKiAxNzIgKi8KKwkibXVjaCBn
cmVhdGVyIHRoYW4iLCAiZGFyayBzaGFkaW5nIiwgIm1lZGl1bSBzaGFkaW5nIiwgLyogMTc2ICov
CisJImxpZ2h0IHNoYWRpbmciLCAidmVydGljbGUgbGluZSIsICJsZWZ0IHRlZSIsIC8qIDE3OSAq
LworCSJkb3VibGUgbGVmdCB0ZWUiLCAibGVmdCBkb3VibGUgdGVlIiwgImRvdWJsZSB0b3Agcmln
aHQiLCAvKiAxODIgKi8KKwkidG9wIGRvdWJsZSByaWdodCIsICJkb3VibGUgbGVmdCBkb3VibGUg
dGVlIiwgLyogMTg1ICovCisJImRvdWJsZSB2ZXJ0aWNhbCBsaW5lIiwgImRvdWJsZSB0b3AgZG91
YmxlIHJpZ2h0IiwgLyogMTg3ICovCisJImRvdWJsZSBib3R0b20gZG91YmxlIHJpZ2h0IiwgImRv
dWJsZSBib3R0b20gcmlnaHQiLCAvKiAxODkgKi8KKwkiYm90dG9tIGRvdWJsZSByaWdodCIsICJ0
b3AgcmlnaHQiLCAibGVmdCBib3R0b20iLCAvKiAxOTEgKi8KKwkidXAgdGVlIiwgInRlZSBkb3du
IiwgInRlZSByaWdodCIsICJob3Jpem9udGFsIGxpbmUiLCAvKiAxOTQgKi8KKwkiY3Jvc3MgYmFy
cyIsICJ0ZWUgZG91YmxlIHJpZ2h0IiwgImRvdWJsZSB0ZWUgcmlnaHQiLCAvKiAxOTggKi8KKwki
ZG91YmxlIGxlZnQgZG91YmxlIGJvdHRvbSIsICJkb3VibGUgbGVmdCBkb3VibGUgdG9wIiwgLyog
MjAxICovCisJImRvdWJsZSB1cCBkb3VibGUgdGVlIiwgImRvdWJsZSB0ZWUgZG91YmxlIGRvd24i
LCAvKiAyMDMgKi8KKwkiZG91YmxlIHRlZSBkb3VibGUgcmlnaHQiLCAiZG91YmxlIGhvcml6b250
YWwgbGluZSIsIC8qIDIwNSAqLworCSJkb3VibGUgY3Jvc3MgYmFycyIsICJ1cCBkb3VibGUgdGVl
IiwgImRvdWJsZSB1cCB0ZWUiLCAvKiAyMDcgKi8KKwkiZG91YmxlIHRlZSBkb3duIiwgInRlZSBk
b3VibGUgZG93biIsIC8qIDIxMCAqLworCSJkb3VibGUgbGVmdCBib3R0b20iLCAibGVmdCBkb3Vi
bGUgYm90dG9tIiwgLyogMjEyICovCisJImRvdWJsZSBsZWZ0IHRvcCIsICJsZWZ0IGRvdWJsZSB0
b3AiLCAvKiAyMTQgKi8KKwkiZG91YmxlIHZlcnRpY2FsIGNyb3NzIiwgImRvdWJsZSBob3Jpem9u
dGFsIGNyb3NzIiwgLyogMjE2ICovCisJImJvdHRvbSByaWdodCIsICJsZWZ0IHRvcCIsICJzb2xp
ZCBzcXVhcmUiLCAvKiAyMTggKi8KKwkic29saWQgbG93ZXIgaGFsZiIsICJzb2xpZCBsZWZ0IGhh
bGYiLCAic29saWQgcmlnaHQgaGFsZiIsIC8qIDIyMSAqLworCSJzb2xpZCB1cHBlciBoYWxmIiwg
ImFscGhhIiwgImJldGEiLCAiZ2FtbWEiLCAvKiAyMjQgKi8KKwkicGllIiwgInNpZ21hIiwgInNp
Z21hIiwgIm11IiwgLyogMjI4ICovCisJInRvdSIsICJwaGlnaCIsICJ0aGF5dGEiLCAib2htZWdh
IiwgLyogMjMyICovCisJImRlbHRhIiwgImluZmluaXR5IiwgInBoaWdoIiwgImVwc2lsYXVuIiwg
LyogMjM2ICovCisiaW50ZXJzZWN0aW9uIiwgImlkZW50aWNhbCB0byIsICJwbHVzIG9yIG1pbnVz
IiwgImVxdWFsIGdyYXRlciB0aGFuIiwgLyogMjQwICovCisJImxlc3MgdGhhbiBlcXVhbCIsICJ1
cHBlciBpbnRlZ3JhbCIsICJsb3dlciBpbnRlZ3JhbCIsIC8qIDI0NCAqLworCQkiZGl2aWRlZCBi
eSIsICJhbG1vc3QgZXF1YWwiLCAiZGVncmVlcyIsIC8qIDI0NyAqLworCSJjZW50cmUgZG90Iiwg
ImJ1bGxldCIsICJzcXVhcmUgcm9vdCIsIC8qIDI1MCAqLworCSJwb3dlciIsICJzcXVhcmVkIiwg
ImJsYWNrIHNxdWFyZSIsICJ3aGl0ZSBzcGFjZSIgLyogMjUyICovCit9OworCisvLyBhcnJheSBv
ZiAyNTYgdV9zaG9ydCAob25lIGZvciBlYWNoIGNoYXJhY3RlcikKKy8vIGluaXRpYWxpemVkIHRv
IGRlZmF1bHRfY2hhcnRhYiBhbmQgdXNlciBzZWxlY3RhYmxlIHZpYSAvcHJvYy9zcGVha3VwL2No
YXJ0YWIKK3N0YXRpYyB1X3Nob3J0IHNwa19jaGFydGFiWzI1Nl07CisKK3N0YXRpYyB1X3Nob3J0
IGRlZmF1bHRfY2hhcnRhYlsyNTZdID0geworIEJfQ1RMLCBCX0NUTCwgQl9DVEwsIEJfQ1RMLCBC
X0NUTCwgQl9DVEwsIEJfQ1RMLCBCX0NUTCwgLyogMC03ICovCisgQl9DVEwsIEJfQ1RMLCBBX0NU
TCwgQl9DVEwsIEJfQ1RMLCBCX0NUTCwgQl9DVEwsIEJfQ1RMLCAvKiA4LTE1ICovCisgQl9DVEws
IEJfQ1RMLCBCX0NUTCwgQl9DVEwsIEJfQ1RMLCBCX0NUTCwgQl9DVEwsIEJfQ1RMLCAvKjE2LTIz
ICovCisgQl9DVEwsIEJfQ1RMLCBCX0NUTCwgQl9DVEwsIEJfQ1RMLCBCX0NUTCwgQl9DVEwsIEJf
Q1RMLCAvKiAyNC0zMSAqLworV0RMTSwgQV9QVU5DLCBQVU5DLCBQVU5DLCBQVU5DLCBQVU5DLCBQ
VU5DLCBBX1BVTkMsIC8qICAhIiMkJSYnICovCitQVU5DLCBQVU5DLCBQVU5DLCBQVU5DLCBBX1BV
TkMsIEFfUFVOQywgQV9QVU5DLCBQVU5DLCAvKiAoICkqKywgLS4vICovCitOVU0sIE5VTSwgTlVN
LCBOVU0sIE5VTSwgTlVNLCBOVU0sIE5VTSwgLyogMDEyMzQ1NjcgKi8KK05VTSwgTlVNLCBBX1BV
TkMsIFBVTkMsIFBVTkMsIFBVTkMsIFBVTkMsIEFfUFVOQywgLyogODk6Ozw9Pj8gKi8KK1BVTkMs
IEFfQ0FQLCBBX0NBUCwgQV9DQVAsIEFfQ0FQLCBBX0NBUCwgQV9DQVAsIEFfQ0FQLCAvKiBAQUJD
REVGRyAqLworQV9DQVAsIEFfQ0FQLCBBX0NBUCwgQV9DQVAsIEFfQ0FQLCBBX0NBUCwgQV9DQVAs
IEFfQ0FQLCAvKiBISUpLTE1OTyAqLworQV9DQVAsIEFfQ0FQLCBBX0NBUCwgQV9DQVAsIEFfQ0FQ
LCBBX0NBUCwgQV9DQVAsIEFfQ0FQLCAvKiBQUVJTVFVWVyAqLworQV9DQVAsIEFfQ0FQLCBBX0NB
UCwgUFVOQywgUFVOQywgUFVOQywgUFVOQywgUFVOQywgLyogWFlaW1xdXl8gKi8KK1BVTkMsIEFM
UEhBLCBBTFBIQSwgQUxQSEEsIEFMUEhBLCBBTFBIQSwgQUxQSEEsIEFMUEhBLCAvKiBgYWJjZGVm
ZyAqLworQUxQSEEsIEFMUEhBLCBBTFBIQSwgQUxQSEEsIEFMUEhBLCBBTFBIQSwgQUxQSEEsIEFM
UEhBLCAvKiBoaWprbG1ubyAqLworQUxQSEEsIEFMUEhBLCBBTFBIQSwgQUxQSEEsIEFMUEhBLCBB
TFBIQSwgQUxQSEEsIEFMUEhBLCAvKiBwcXJzdHV2dyAqLworQUxQSEEsIEFMUEhBLCBBTFBIQSwg
UFVOQywgUFVOQywgUFVOQywgUFVOQywgMCwgLyogeHl6e3x9fiAqLworQl9DQVBTWU0sIEJfQ0FQ
U1lNLCBCX1NZTSwgQl9TWU0sIEJfU1lNLCBCX1NZTSwgQl9TWU0sIEJfU1lNLCAvKiAxMjgtMTM1
ICovCitCX1NZTSwgQl9TWU0sIEJfU1lNLCBCX1NZTSwgQl9TWU0sIEJfU1lNLCBCX1NZTSwgQl9D
QVBTWU0sIC8qIDEzNi0xNDMgKi8KK0JfQ0FQU1lNLCBCX0NBUFNZTSwgQl9TWU0sIEJfQ0FQU1lN
LCBCX1NZTSwgQl9TWU0sIEJfU1lNLCBCX1NZTSwgLyogMTQ0LTE1MSAqLworQl9TWU0sIEJfU1lN
LCBCX0NBUFNZTSwgQl9DQVBTWU0sIEJfU1lNLCBCX1NZTSwgQl9TWU0sIEJfU1lNLCAvKiAxNTIt
MTU5ICovCitCX1NZTSwgQl9TWU0sIEJfU1lNLCBCX1NZTSwgQl9TWU0sIEJfU1lNLCBCX0NBUFNZ
TSwgQl9TWU0sIC8qIDE2MC0xNjcgKi8KK0JfU1lNLCBCX1NZTSwgQl9TWU0sIEJfU1lNLCBCX1NZ
TSwgQl9TWU0sIEJfU1lNLCBCX1NZTSwgLyogMTY4LTE3NSAqLworQl9TWU0sIEJfU1lNLCBCX1NZ
TSwgQl9TWU0sIEJfU1lNLCBCX1NZTSwgQl9TWU0sIEJfU1lNLCAvKiAxNzYtMTgzICovCitCX1NZ
TSwgQl9TWU0sIEJfU1lNLCBCX1NZTSwgQl9TWU0sIEJfU1lNLCBCX1NZTSwgQl9TWU0sIC8qIDE4
NC0xOTEgKi8KK0JfU1lNLCBCX1NZTSwgQl9TWU0sIEJfU1lNLCBCX1NZTSwgQl9TWU0sIEJfU1lN
LCBCX1NZTSwgLyogMTkyLTE5OSAqLworQl9TWU0sIEJfU1lNLCBCX1NZTSwgQl9TWU0sIEJfU1lN
LCBCX1NZTSwgQl9TWU0sIEJfU1lNLCAvKiAyMDAtMjA3ICovCitCX1NZTSwgQl9TWU0sIEJfU1lN
LCBCX1NZTSwgQl9TWU0sIEJfU1lNLCBCX1NZTSwgQl9TWU0sIC8qIDIwOC0yMTUgKi8KK0JfU1lN
LCBCX1NZTSwgQl9TWU0sIEJfU1lNLCBCX1NZTSwgQl9TWU0sIEJfU1lNLCBCX1NZTSwgLyogMjE2
LTIyMyAqLworQl9TWU0sIEJfU1lNLCBCX1NZTSwgQl9DQVBTWU0sIEJfU1lNLCBCX0NBUFNZTSwg
Ql9TWU0sIEJfU1lNLCAvKiAyMjQtMjMxICovCitCX1NZTSwgQl9DQVBTWU0sIEJfQ0FQU1lNLCBC
X0NBUFNZTSwgQl9TWU0sIEJfU1lNLCBCX1NZTSwgQl9TWU0sIC8qIDIzMi0yMzkgKi8KK0JfU1lN
LCBCX1NZTSwgQl9TWU0sIEJfU1lNLCBCX1NZTSwgQl9TWU0sIEJfU1lNLCBCX1NZTSwgLyogMjQw
LTI0NyAqLworQl9TWU0sIEJfU1lNLCBCX1NZTSwgQl9TWU0sIEJfU1lNLCBCX1NZTSwgQl9TWU0s
IEJfU1lNIC8qIDI0OC0yNTUgKi8KK307CisKK3N0YXRpYyBpbnQgc3BrX2tleWRvd24gPSAwOwor
c3RhdGljIHVfY2hhciBzcGtfbGFzdGtleSA9IDAsIHNwa19jbG9zZV9wcmVzcyA9IDAsIGtleW1h
cF9mbGFncyA9IDA7CitzdGF0aWMgdV9jaGFyIGxhc3Rfa2V5Y29kZSA9IDAsIHRoaXNfc3BlYWt1
cF9rZXkgPSAwOworc3RhdGljIHVfbG9uZyBsYXN0X3Nwa19qaWZmeSA9IDA7CisKK3N0cnVjdCBz
dF9zcGtfdCAqc3BlYWt1cF9jb25zb2xlW01BWF9OUl9DT05TT0xFU107CisKK3N0YXRpYyBpbnQg
c3BrX3NldHVwKGNoYXIgKnN0cikKK3sKKwlpbnQgaW50c1s0XTsKKwlzdHIgPSBnZXRfb3B0aW9u
cyhzdHIsIEFSUkFZX1NJWkUgKGludHMpLCBpbnRzKTsKKwlpZiAoaW50c1swXSA+IDAgJiYgaW50
c1sxXSA+PSAwKQorCQlzeW50aF9wb3J0X2ZvcmNlZCA9IGludHNbMV07CisJcmV0dXJuIDE7Cit9
CisKK3N0YXRpYyBpbnQgc3BrX3Nlcl9zZXR1cChjaGFyICpzdHIpCit7CisJY29uc3QgaW50IGxv
b2t1cFs0XSA9IHsgMHgzZjgsIDB4MmY4LCAweDNlOCwgMHgyZTggfTsKKwlpbnQgaW50c1s0XTsK
KwlzdHIgPSBnZXRfb3B0aW9ucyhzdHIsIEFSUkFZX1NJWkUgKGludHMpLCBpbnRzKTsKKwlpZiAo
aW50c1swXSA+IDAgJiYgaW50c1sxXSA+PSAwKQorCQlzeW50aF9wb3J0X2ZvcmNlZCA9IGxvb2t1
cFtpbnRzWzFdXTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBzcGtfc3ludGhfc2V0dXAo
Y2hhciAqc3RyKQoreworCXNpemVfdCBsZW4gPSBtaW5fdChzaXplX3QsIHN0cmxlbihzdHIpLCA5
KTsKKwltZW1jcHkgKHN5bnRoX25hbWUsIHN0ciwgbGVuKTsKKwlzeW50aF9uYW1lW2xlbl0gPSAn
XDAnOworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IHNwa19xdWlldF9zZXR1cChjaGFyICpz
dHIpCit7CisJaWYgKHN0cmNocigiMXl0IiwgKnN0cikgIT0gTlVMTCkKKwkJcXVpZXRfYm9vdCA9
IDE7CisJcmV0dXJuIDE7Cit9CisKK19fc2V0dXAoInNwZWFrdXBfcG9ydD0iLCBzcGtfc2V0dXAp
OworX19zZXR1cCgic3BlYWt1cF9zZXI9Iiwgc3BrX3Nlcl9zZXR1cCk7CitfX3NldHVwKCJzcGVh
a3VwX3N5bnRoPSIsIHNwa19zeW50aF9zZXR1cCk7CitfX3NldHVwKCJzcGVha3VwX3F1aWV0PSIs
IHNwa19xdWlldF9zZXR1cCk7CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGdldF9hdHRyaWJ1dGVz
KHUxNiAqcG9zKQoreworCXJldHVybiAodV9jaGFyKShzY3JfcmVhZHcocG9zKSA+PiA4KTsKK30K
Kworc3RhdGljIHZvaWQgc3BlYWt1cF9kYXRlKHN0cnVjdCB2Y19kYXRhICp2YykKK3sKKwlzcGtf
eCA9IHNwa19jeCA9IHZjLT52Y194OworCXNwa195ID0gc3BrX2N5ID0gdmMtPnZjX3k7CisJc3Br
X3BvcyA9IHNwa19jcCA9IHZjLT52Y19wb3M7CisJc3BrX29sZF9hdHRyID0gc3BrX2F0dHI7CisJ
c3BrX2F0dHIgPSBnZXRfYXR0cmlidXRlcygodV9zaG9ydCAqKSBzcGtfcG9zKTsKK30KKworY2hh
ciAqc3RybHdyKGNoYXIgKnMpCit7CisJY2hhciAqcDsKKwlmb3IgKHAgPSBzOyAqcDsgcCsrKQor
CQlpZiAoKnAgPj0gQ0FQX0EgJiYgKnAgPD0gQ0FQX1opCisJCQkqcCB8PSAzMjsKKwlyZXR1cm4g
czsKK30KKworc3RhdGljIHZvaWQgYmxlZXAodV9zaG9ydCB2YWwpCit7CisJc3RhdGljIGNvbnN0
IHNob3J0IHZhbHNbXSA9IHsKKwkJMzUwLCAzNzAsIDM5MiwgNDE0LCA0NDAsIDQ2NiwgNDkxLCA1
MjMsIDU1NCwgNTg3LCA2MTksIDY1OQorCX07CisJc2hvcnQgZnJlcTsKKwlpbnQgdGltZSA9IGJs
ZWVwX3RpbWU7CisJZnJlcSA9IHZhbHNbdmFsJTEyXTsKKwlpZiAodmFsID4gMTEpCisJCWZyZXEg
Kj0gKDEgPDwgKHZhbC8xMikpOworCWtkX21rc291bmQoZnJlcSwgdGltZSk7Cit9CisKK3N0YXRp
YyB2b2lkIHNwZWFrdXBfc2h1dF91cChzdHJ1Y3QgdmNfZGF0YSAqdmMpCit7CisJaWYgKHNwa19r
aWxsZWQpCisJCXJldHVybjsKKwlzcGtfc2h1dF91cCB8PSAweDAxOworCXNwa19wYXJrZWQgJj0g
MHhmZTsKKwlzcGVha3VwX2RhdGUodmMpOworCWlmIChzeW50aCAhPSBOVUxMKQorCQlkb19mbHVz
aCgpOworfQorCitzdGF0aWMgdm9pZCBzcGVlY2hfa2lsbChzdHJ1Y3QgdmNfZGF0YSAqdmMpCit7
CisJY2hhciB2YWwgPSBzeW50aC0+aXNfYWxpdmUoKTsKKwlpZiAodmFsID09IDApCisJCXJldHVy
bjsKKworCS8qIHJlLWVuYWJsZXMgc3ludGgsIGlmIGRpc2FibGVkICovCisJaWYgKHZhbCA9PSAy
IHx8IHNwa19raWxsZWQpIHsJLyogZGVhZCAqLworCQlzcGtfc2h1dF91cCAmPSB+MHg0MDsKKwkJ
c3ludGhfd3JpdGVfbXNnKCJFeWVtIGEgTGlnaHZlISIpOworCX0gZWxzZSB7CisJCXN5bnRoX3dy
aXRlX21zZygiWW91IGtpbGxlZCBzcGVhayB1cCEiKTsKKwkJc3BrX3NodXRfdXAgfD0gMHg0MDsK
Kwl9Cit9CisKK3N0YXRpYyB2b2lkIHNwZWFrdXBfb2ZmKHN0cnVjdCB2Y19kYXRhICp2YykKK3sK
KwlpZiAoc3BrX3NodXRfdXAgJiAweDgwKSB7CisJCXNwa19zaHV0X3VwICY9IDB4N2Y7CisJCXN5
bnRoX3dyaXRlX21zZygiaGV5LiBUaGF0J3MgYmV0dGVyISIgKTsKKwl9IGVsc2UgeworCQlzcGtf
c2h1dF91cCB8PSAweDgwOworCQlzeW50aF93cml0ZV9tc2coIllvdSB0dXJuZWQgbWUgb2ZmISIg
KTsKKwl9CisJc3BlYWt1cF9kYXRlKHZjKTsKK30KKworc3RhdGljIHZvaWQgc3BlYWt1cF9wYXJr
ZWQoc3RydWN0IHZjX2RhdGEgKnZjKQoreworCWlmIChzcGtfcGFya2VkICYgMHg4MCkgeworCQlz
cGtfcGFya2VkID0gMDsKKwkJc3ludGhfd3JpdGVfbXNnICgidW5wYXJrZWQhIik7CisJfSBlbHNl
IHsKKwkJc3BrX3BhcmtlZCB8PSAweDgwOworCQlzeW50aF93cml0ZV9tc2cgKCJwYXJrZWQhIik7
CisJfQorfQorCisvKiAtLS0tLS0gY3V0IGFuZCBwYXN0ZSAtLS0tLSAqLworLyogRG9uJ3QgdGFr
ZSB0aGlzIGZyb20gPGN0eXBlLmg+OiAwMTEtMDE1IG9uIHRoZSBzY3JlZW4gYXJlbid0IHNwYWNl
cyAqLworI3VuZGVmIGlzc3BhY2UKKyNkZWZpbmUgaXNzcGFjZShjKSAgICAgICgoYykgPT0gJyAn
KQorLyogVmFyaWFibGVzIGZvciBzZWxlY3Rpb24gY29udHJvbC4gKi8KK3N0YXRpYyBzdHJ1Y3Qg
dmNfZGF0YSAqc3BrX3NlbF9jb25zOyAgICAgIC8qIGRlZmluZWQgaW4gc2VsZWN0aW9uLmMgbXVz
dCBub3QgYmUgZGlzYWxsb2NhdGVkICovCitzdGF0aWMgdm9sYXRpbGUgaW50IHNlbF9zdGFydCA9
IC0xOyAgICAgLyogY2xlYXJlZCBieSBjbGVhcl9zZWxlY3Rpb24gKi8KK3N0YXRpYyBpbnQgc2Vs
X2VuZDsKK3N0YXRpYyBpbnQgc2VsX2J1ZmZlcl9sdGg7CitzdGF0aWMgY2hhciAqc2VsX2J1ZmZl
cjsKKworc3RhdGljIHVuc2lnbmVkIGNoYXIgc2VsX3BvcyhpbnQgbikKK3sKKwlyZXR1cm4gaW52
ZXJzZV90cmFuc2xhdGUoc3BrX3NlbF9jb25zLCBzY3JlZW5fZ2x5cGgoc3BrX3NlbF9jb25zLCBu
KSk7Cit9CisKK3N0YXRpYyB1MTYgZ2V0X2NoYXIoc3RydWN0IHZjX2RhdGEgKnZjLCB1MTYgKnBv
cykKK3sKKwl1MTYgY2ggPSAnICc7CisJaWYgKHZjICYmIHBvcykgeworCQl1MTYgdyA9IHNjcl9y
ZWFkdyhwb3MpOworCQl1MTYgYyA9IHcgJiAweGZmOworICAKKwkJaWYgKHcgJiB2Yy0+dmNfaGlf
Zm9udF9tYXNrKQorCQkJYyB8PSAweDEwMDsKKworCQljaCA9IHcgJiAweGZmMDA7CQkKKwkJY2gg
fD0gaW52ZXJzZV90cmFuc2xhdGUodmMsIGMpOworCX0KKwlyZXR1cm4gY2g7Cit9CisKK3N0YXRp
YyB2b2lkIHNwZWFrdXBfY2xlYXJfc2VsZWN0aW9uKHZvaWQpCit7CisJc2VsX3N0YXJ0ID0gLTE7
Cit9CisKKy8qIGRvZXMgc2NyZWVuIGFkZHJlc3MgcCBjb3JyZXNwb25kIHRvIGNoYXJhY3RlciBh
dCBMSC9SSCBlZGdlIG9mIHNjcmVlbj8gKi8KK3N0YXRpYyBpbnQgYXRlZGdlKGNvbnN0IGludCBw
LCBpbnQgc2l6ZV9yb3cpCit7CisJcmV0dXJuICghKHAgJSBzaXplX3JvdykgfHwgISgocCArIDIp
ICUgc2l6ZV9yb3cpKTsKK30KKworLyogY29uc3RyYWluIHYgc3VjaCB0aGF0IHYgPD0gdSAqLwor
c3RhdGljIHVuc2lnbmVkIHNob3J0IGxpbWl0KGNvbnN0IHVuc2lnbmVkIHNob3J0IHYsIGNvbnN0
IHVuc2lnbmVkIHNob3J0IHUpCit7CisJcmV0dXJuICh2ID4gdSkgPyB1IDogdjsKK30KKworc3Rh
dGljIHVuc2lnbmVkIHNob3J0IHhzLCB5cywgeGUsIHllOyAvKiBvdXIgcmVnaW9uIHBvaW50cyAq
LworCitzdGF0aWMgaW50IHNwZWFrdXBfc2V0X3NlbGVjdGlvbihzdHJ1Y3QgdHR5X3N0cnVjdCAq
dHR5KQoreworCWludCBuZXdfc2VsX3N0YXJ0LCBuZXdfc2VsX2VuZDsKKwljaGFyICpicCwgKm9i
cDsKKwlpbnQgaSwgcHMsIHBlOworCXN0cnVjdCB2Y19kYXRhICp2YyA9IHZjX2NvbnNbZmdfY29u
c29sZV0uZDsKKworCXhzID0gbGltaXQoeHMsIHZjLT52Y19jb2xzIC0gMSk7CisJeXMgPSBsaW1p
dCh5cywgdmMtPnZjX3Jvd3MgLSAxKTsKKwl4ZSA9IGxpbWl0KHhlLCB2Yy0+dmNfY29scyAtIDEp
OworCXllID0gbGltaXQoeWUsIHZjLT52Y19yb3dzIC0gMSk7CisJcHMgPSB5cyAqIHZjLT52Y19z
aXplX3JvdyArICh4cyA8PCAxKTsKKwlwZSA9IHllICogdmMtPnZjX3NpemVfcm93ICsgKHhlIDw8
IDEpOworCisJaWYgKHBzID4gcGUpIHsgICAvKiBtYWtlIHNlbF9zdGFydCA8PSBzZWxfZW5kICov
CisJCWludCB0bXAgPSBwczsKKwkJcHMgPSBwZTsKKwkJcGUgPSB0bXA7CisJfQorCisJaWYgKHNw
a19zZWxfY29ucyAhPSB2Y19jb25zW2ZnX2NvbnNvbGVdLmQpIHsKKwkgCXNwZWFrdXBfY2xlYXJf
c2VsZWN0aW9uKCk7CisJCXNwa19zZWxfY29ucyA9IHZjX2NvbnNbZmdfY29uc29sZV0uZDsKKwkJ
cHJpbnRrKEtFUk5fV0FSTklORyAiU2VsZWN0aW9uOiBtYXJrIGNvbnNvbGUgbm90IHRoZSBzYW1l
IGFzIGN1dFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCW5ld19zZWxfc3RhcnQgPSBw
czsKKwluZXdfc2VsX2VuZCA9IHBlOworCisJLyogc2VsZWN0IHRvIGVuZCBvZiBsaW5lIGlmIG9u
IHRyYWlsaW5nIHNwYWNlICovCisJaWYgKG5ld19zZWxfZW5kID4gbmV3X3NlbF9zdGFydCAmJgor
CSAgICAhYXRlZGdlKG5ld19zZWxfZW5kLCB2Yy0+dmNfc2l6ZV9yb3cpICYmCisJICAgIGlzc3Bh
Y2Uoc2VsX3BvcyhuZXdfc2VsX2VuZCkpKSB7CisJCWZvciAocGUgPSBuZXdfc2VsX2VuZCArIDI7
IDsgcGUgKz0gMikKKwkJCWlmICghaXNzcGFjZShzZWxfcG9zKHBlKSkgfHwKKwkJCSAgICBhdGVk
Z2UocGUsIHZjLT52Y19zaXplX3JvdykpCisJCQkJYnJlYWs7CisJCWlmIChpc3NwYWNlKHNlbF9w
b3MocGUpKSkKKwkJCW5ld19zZWxfZW5kID0gcGU7CisJfQorCWlmICgobmV3X3NlbF9zdGFydCA9
PSBzZWxfc3RhcnQpICYmIChuZXdfc2VsX2VuZCA9PSBzZWxfZW5kKSkKKwkJcmV0dXJuIDA7IC8q
IG5vIGFjdGlvbiByZXF1aXJlZCAqLworCisJc2VsX3N0YXJ0ID0gbmV3X3NlbF9zdGFydDsKKwlz
ZWxfZW5kID0gbmV3X3NlbF9lbmQ7CisJLyogQWxsb2NhdGUgYSBuZXcgYnVmZmVyIGJlZm9yZSBm
cmVlaW5nIHRoZSBvbGQgb25lIC4uLiAqLworCWJwID0ga21hbGxvYygoc2VsX2VuZC1zZWxfc3Rh
cnQpLzIrMSwgR0ZQX0FUT01JQyk7CisJaWYgKCFicCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5H
ICJzZWxlY3Rpb246IGttYWxsb2MoKSBmYWlsZWRcbiIpOworCQlzcGVha3VwX2NsZWFyX3NlbGVj
dGlvbigpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJaWYgKHNlbF9idWZmZXIpCisJCWtmcmVl
KHNlbF9idWZmZXIpOworCXNlbF9idWZmZXIgPSBicDsKKworCW9icCA9IGJwOworCWZvciAoaSA9
IHNlbF9zdGFydDsgaSA8PSBzZWxfZW5kOyBpICs9IDIpIHsKKwkJKmJwID0gc2VsX3BvcyhpKTsK
KwkJaWYgKCFpc3NwYWNlKCpicCsrKSkKKwkJCW9icCA9IGJwOworCQlpZiAoISAoKGkgKyAyKSAl
IHZjLT52Y19zaXplX3JvdykpIHsKKwkJCS8qIHN0cmlwIHRyYWlsaW5nIGJsYW5rcyBmcm9tIGxp
bmUgYW5kIGFkZCBuZXdsaW5lLAorCQkJICAgdW5sZXNzIG5vbi1zcGFjZSBhdCBlbmQgb2YgbGlu
ZS4gKi8KKwkJCWlmIChvYnAgIT0gYnApIHsKKwkJCQlicCA9IG9icDsKKwkJCQkqYnArKyA9ICdc
cic7CisJCQl9CisJCQlvYnAgPSBicDsKKwkJfQorCX0KKwlzZWxfYnVmZmVyX2x0aCA9IGJwIC0g
c2VsX2J1ZmZlcjsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzcGVha3VwX3Bhc3RlX3Nl
bGVjdGlvbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQoreworCXN0cnVjdCB2Y19kYXRhICp2YyA9
IChzdHJ1Y3QgdmNfZGF0YSAqKSB0dHktPmRyaXZlcl9kYXRhOworCWludCBwYXN0ZWQgPSAwLCBj
b3VudDsKKwlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKKwlhZGRfd2FpdF9xdWV1
ZSgmdmMtPnBhc3RlX3dhaXQsICZ3YWl0KTsKKwl3aGlsZSAoc2VsX2J1ZmZlciAmJiBzZWxfYnVm
ZmVyX2x0aCA+IHBhc3RlZCkgeworCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElC
TEUpOworCQlpZiAodGVzdF9iaXQoVFRZX1RIUk9UVExFRCwgJnR0eS0+ZmxhZ3MpKSB7CisJCQlz
Y2hlZHVsZSgpOworCQkJY29udGludWU7CisJCX0KKwkJY291bnQgPSBzZWxfYnVmZmVyX2x0aCAt
IHBhc3RlZDsKKwkJY291bnQgPSBtaW5fdChpbnQsIGNvdW50LCB0dHktPnJlY2VpdmVfcm9vbSk7
CisJCXR0eS0+bGRpc2MucmVjZWl2ZV9idWYodHR5LCBzZWxfYnVmZmVyICsgcGFzdGVkLCAwLCBj
b3VudCk7CisJCXBhc3RlZCArPSBjb3VudDsKKwl9CisJcmVtb3ZlX3dhaXRfcXVldWUoJnZjLT5w
YXN0ZV93YWl0LCAmd2FpdCk7CisJY3VycmVudC0+c3RhdGUgPSBUQVNLX1JVTk5JTkc7CisJcmV0
dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNwZWFrdXBfY3V0KHN0cnVjdCB2Y19kYXRhICp2YykK
K3sKKwlzdGF0aWMgY29uc3QgY2hhciBlcnJfYnVmW10gPSAic2V0IHNlbGVjdGlvbiBmYWlsZWQi
OworCWludCByZXQ7CisKKwlpZiAoIW1hcmtfY3V0X2ZsYWcpIHsKKwkJbWFya19jdXRfZmxhZyA9
IDE7CisJCXhzID0gc3BrX3g7CisJCXlzID0gc3BrX3k7CisJCXNwa19zZWxfY29ucyA9IHZjOwor
CQlzeW50aF93cml0ZV9tc2coIm1hcmsiKTsKKwkJcmV0dXJuOworCX0KKwl4ZSA9ICh1X3Nob3J0
KSBzcGtfeDsKKwl5ZSA9ICh1X3Nob3J0KSBzcGtfeTsKKwltYXJrX2N1dF9mbGFnID0gMDsKKwlz
eW50aF93cml0ZV9tc2cgKCJjdXQiKTsKKwkKKwlzcGVha3VwX2NsZWFyX3NlbGVjdGlvbigpOwor
CXJldCA9IHNwZWFrdXBfc2V0X3NlbGVjdGlvbih0dHkpOworCisJc3dpdGNoIChyZXQpIHsKKwlj
YXNlIDA6CisJCWJyZWFrOyAvKiBubyBlcnJvciAqLworCWNhc2UgLUVGQVVMVCA6CisJCXByX3dh
cm4oICIlc0VGQVVMVFxuIiwgZXJyX2J1ZiApOworCQlicmVhazsKKwljYXNlIC1FSU5WQUwgOgor
CQlwcl93YXJuKCAiJXNFSU5WQUxcbiIsIGVycl9idWYgKTsKKwkJYnJlYWs7CisJY2FzZSAtRU5P
TUVNIDoKKwkJcHJfd2FybiggIiVzRU5PTUVNXG4iLCBlcnJfYnVmICk7CisJCWJyZWFrOworCX0K
K30KKworc3RhdGljIHZvaWQgc3BlYWt1cF9wYXN0ZShzdHJ1Y3QgdmNfZGF0YSAqdmMpCit7CisJ
aWYgKG1hcmtfY3V0X2ZsYWcpIHsKKwkJbWFya19jdXRfZmxhZyA9IDA7CisJCXN5bnRoX3dyaXRl
X21zZygibWFyaywgY2xlYXJlZCIpOworCX0gZWxzZSB7CisJCXN5bnRoX3dyaXRlX21zZyAoInBh
c3RlIik7CisJCXNwZWFrdXBfcGFzdGVfc2VsZWN0aW9uKHR0eSk7CisJfQorfQorCitzdGF0aWMg
dm9pZCBzYXlfYXR0cmlidXRlcyhzdHJ1Y3QgdmNfZGF0YSAqdmMgKQoreworCWludCBmZyA9IHNw
a19hdHRyICYgMHgwZjsKKwlpbnQgYmcgPSBzcGtfYXR0cj4+NDsKKwlpZiAoZmcgPiA4KSB7CisJ
CXN5bnRoX3dyaXRlX3N0cmluZygiYnJpZ2h0ICIpOworCQlmZyAtPSA4OworCX0KKwlzeW50aF93
cml0ZV9zdHJpbmcoY29sb3JzW2ZnXSk7CisJaWYgKGJnID4gNykgeworCQlzeW50aF93cml0ZV9z
dHJpbmcoIiBvbiBibGlua2luZyAiKTsKKwkJYmcgLT0gODsKKwl9IGVsc2UKKwkJc3ludGhfd3Jp
dGVfc3RyaW5nKCIgb24gIik7CisJc3ludGhfd3JpdGVfbXNnKGNvbG9yc1tiZ10pOworfQorCitz
dGF0aWMgY2hhciAqYmxhbmtfbXNnID0gImJsYW5rIjsKK3N0YXRpYyBjaGFyICplZGdlc1tdID0g
eyAidG9wLCAiLCAiYm90dG9tLCAiLCAibGVmdCwgIiwgInJpZ2h0LCAiLCAiIiB9OworZW51bSB7
CisJZWRnZV90b3AgPSAxLAorCWVkZ2VfYm90dG9tLAorCWVkZ2VfbGVmdCwKKwllZGdlX3JpZ2h0
LAorCWVkZ2VfcXVpZXQKK307CisKK3N0YXRpYyB2b2lkIGFubm91bmNlX2VkZ2Uoc3RydWN0IHZj
X2RhdGEgKnZjLCBpbnQgbXNnX2lkKQoreworCWlmIChibGVlcHMgJiAxKQorCQlibGVlcChzcGtf
eSk7CisJaWYgKGJsZWVwcyAmIDIpCisJCXN5bnRoX3dyaXRlX21zZyhlZGdlc1ttc2dfaWQtMV0p
OworfQorCitzdGF0aWMgdm9pZCBzcGVha19jaGFyKCB1X2NoYXIgY2gpCit7CisJY2hhciAqY3Ag
PSBjaGFyYWN0ZXJzW2NoXTsKKwlpZiAoY3AgPT0gTlVMTCkgeworCQlwcl9pbmZvICgic3BlYWtf
Y2hhcjogY3A9PU5VTEwhXG4iKTsKKwkJcmV0dXJuOworCX0KKwlzeW50aF9idWZmZXJfYWRkKFNQ
QUNFKTsKKwlpZiAoSVNfQ0hBUihjaCwgQl9DQVApKSB7CisJCXBpdGNoX3NoaWZ0Kys7CisJCXN5
bnRoX3dyaXRlX3N0cmluZyhzdHJfY2Fwc19zdGFydCk7CisJCXN5bnRoX3dyaXRlX3N0cmluZyhj
cCk7CisJCXN5bnRoX3dyaXRlX3N0cmluZyhzdHJfY2Fwc19zdG9wKTsKKwl9IGVsc2UgeworCQlp
ZiAoKmNwID09ICdeJykgeworCQkJc3ludGhfd3JpdGVfc3RyaW5nKHN0cl9jdGwpOworCQkJY3Ar
KzsKKwkJfQorCQlzeW50aF93cml0ZV9zdHJpbmcoY3ApOworCX0KKwlzeW50aF9idWZmZXJfYWRk
KFNQQUNFKTsKK30KKworc3RhdGljIHZvaWQgc2F5X2NoYXIoc3RydWN0IHZjX2RhdGEgKnZjKQor
eworCXVfc2hvcnQgY2g7CisJc3BrX29sZF9hdHRyID0gc3BrX2F0dHI7CisJY2ggPSBnZXRfY2hh
cih2YywgKHVfc2hvcnQgKikgc3BrX3Bvcyk7CisJc3BrX2F0dHIgPSAoY2ggPj4gOCk7CisJaWYg
KHNwa19hdHRyICE9IHNwa19vbGRfYXR0cikgeworCQlpZiAoYXR0cmliX2JsZWVwICYgMSkKKwkJ
CWJsZWVwKHNwa195KTsKKwkJaWYgKGF0dHJpYl9ibGVlcCAmIDIpCisJCQlzYXlfYXR0cmlidXRl
cyh2Yyk7CisJfQorCXNwZWFrX2NoYXIoY2ggJiAweGZmKTsKK30KKworc3RhdGljIHZvaWQgc2F5
X3Bob25ldGljX2NoYXIoc3RydWN0IHZjX2RhdGEgKnZjKQoreworCXVfc2hvcnQgY2g7CisJc3Br
X29sZF9hdHRyID0gc3BrX2F0dHI7CisJY2ggPSBnZXRfY2hhcih2YywgKHVfc2hvcnQgKikgc3Br
X3Bvcyk7CisJc3BrX2F0dHIgPSAoKGNoICYgMHhmZjAwKSA+PiA4KTsKKwlpZiAoSVNfQ0hBUihj
aCwgQl9BTFBIQSkpIHsKKwkJY2ggJj0gMHgxZjsKKwkJc3ludGhfd3JpdGVfbXNnKHBob25ldGlj
Wy0tY2hdICk7CisJfSBlbHNlIHsKKwkJaWYgKElTX0NIQVIoY2gsIEJfTlVNKSkKKwkJCXN5bnRo
X3dyaXRlX3N0cmluZygibnVtYmVyICIpOworCQlzcGVha19jaGFyKGNoKTsKKwl9Cit9CisKK3N0
YXRpYyB2b2lkIHNheV9wcmV2X2NoYXIoc3RydWN0IHZjX2RhdGEgKnZjKQoreworCXNwa19wYXJr
ZWQgfD0gMHgwMTsKKwlpZiAoc3BrX3ggPT0gMCkgeworCQlhbm5vdW5jZV9lZGdlKHZjLCBlZGdl
X2xlZnQpOworCQlyZXR1cm47CisJfQorCXNwa194LS07CisJc3BrX3BvcyAtPSAyOworCXNheV9j
aGFyKHZjKTsKK30KKworc3RhdGljIHZvaWQgc2F5X25leHRfY2hhcihzdHJ1Y3QgdmNfZGF0YSAq
dmMpCit7CisJc3BrX3BhcmtlZCB8PSAweDAxOworCWlmIChzcGtfeCA9PSB2Yy0+dmNfY29scyAt
IDEpIHsKKwkJYW5ub3VuY2VfZWRnZSh2YywgZWRnZV9yaWdodCk7CisJCXJldHVybjsKKwl9CisJ
c3BrX3grKzsKKwlzcGtfcG9zICs9IDI7CisJc2F5X2NoYXIodmMpOworfQorCisvKiBnZXRfd29y
ZCAtIHdpbGwgZmlyc3QgY2hlY2sgdG8gc2VlIGlmIHRoZSBjaGFyYWN0ZXIgdW5kZXIgdGhlCisg
ICByZWFkaW5nIGN1cnNvciBpcyBhIHNwYWNlIGFuZCBpZiBzYXlfd29yZF9jdGwgaXMgdHJ1ZSBp
dCB3aWxsCisgICByZXR1cm4gdGhlIHdvcmQgc3BhY2UuICBJZiBzYXlfd29yZF9jdGwgaXMgbm90
IHNldCBpdCB3aWxsIGNoZWNrIHRvCisgICBzZWUgaWYgdGhlcmUgaXMgYSB3b3JkIHN0YXJ0aW5n
IG9uIHRoZSBuZXh0IHBvc2l0aW9uIHRvIHRoZSByaWdodAorICAgYW5kIHJldHVybiB0aGF0IHdv
cmQgaWYgaXQgZXhpc3RzLiAgSWYgaXQgZG9lcyBub3QgZXhpc3QgaXQgd2lsbAorICAgbW92ZSBs
ZWZ0IHRvIHRoZSBiZWdpbm5pbmcgb2YgYW55IHByZXZpb3VzIHdvcmQgb24gdGhlIGxpbmUgb3Ig
dGhlCisgICBiZWdpbm5pbmcgb2ZmIHRoZSBsaW5lIHdoaWNoZXZlciBjb21lcyBmaXJzdC4uICov
CisKK3N0YXRpYyB1X2xvbmcgZ2V0X3dvcmQoc3RydWN0IHZjX2RhdGEgKnZjKQoreworCXVfbG9u
ZyBjbnQgPSAwLCB0bXB4ID0gc3BrX3gsIHRtcF9wb3MgPSBzcGtfcG9zOworCWNoYXIgY2g7CisJ
dV9zaG9ydCBhdHRyX2NoOworCXNwa19vbGRfYXR0ciA9IHNwa19hdHRyOworCWNoID0gKGNoYXIp
IGdldF9jaGFyKHZjLCAodV9zaG9ydCAqKSB0bXBfcG9zKTsKKworLyogZGVjaWRlZCB0byB0YWtl
IG91dCB0aGUgc2F5d29yZCBpZiBvbiBhIHNwYWNlIChtaXMtaW5mb3JtYXRpb24gKi8KKwlpZiAo
c2F5X3dvcmRfY3RsICYmIGNoID09IFNQQUNFKSB7CisJCSpidWYgPSAnXDAnOworCQlzeW50aF93
cml0ZV9tc2coInNwYWNlIik7CisJCXJldHVybiAwOworCX0gZWxzZSBpZiAoKHRtcHggPCB2Yy0+
dmNfY29scyAtIDIpCisJCSAgICYmIChjaCA9PSBTUEFDRSB8fCBJU19XRExNKGNoICkpCisJCSAg
ICYmICgoY2hhcikgZ2V0X2NoYXIgKHZjLCAodV9zaG9ydCAqICkgdG1wX3BvcysxICkgPiBTUEFD
RSkpIHsKKwkJdG1wX3BvcyArPSAyOworCQl0bXB4Kys7CisJfSBlbHNlCisJCXdoaWxlICh0bXB4
ID4gMCApIHsKKwkJCWNoID0gKGNoYXIpIGdldF9jaGFyKHZjLCAodV9zaG9ydCAqKSB0bXBfcG9z
IC0gMSk7CisJCQlpZiAoKGNoID09IFNQQUNFIHx8IElTX1dETE0oY2gpKQorCQkJICAgICYmICgo
Y2hhcikgZ2V0X2NoYXIodmMsICh1X3Nob3J0ICopIHRtcF9wb3MpID4gU1BBQ0UpKQorCQkJCWJy
ZWFrOworCQkJdG1wX3BvcyAtPSAyOworCQkJdG1weC0tOworCQl9CisJYXR0cl9jaCA9IGdldF9j
aGFyKHZjLCAodV9zaG9ydCAqKSB0bXBfcG9zKTsKKwlzcGtfYXR0ciA9IGF0dHJfY2ggPj4gODsK
KwlidWZbY250KytdID0gYXR0cl9jaCAmIDB4ZmY7CisJd2hpbGUgKHRtcHggPCB2Yy0+dmNfY29s
cyAtIDEpIHsKKwkJdG1wX3BvcyArPSAyOworCQl0bXB4Kys7CisJCWNoID0gKGNoYXIpIGdldF9j
aGFyKHZjLCAodV9zaG9ydCAqKSB0bXBfcG9zKTsKKwkJaWYgKChjaCA9PSBTUEFDRSkgfHwgKElT
X1dETE0oYnVmW2NudC0xXSkgJiYgKGNoID4gU1BBQ0UpKSkKKwkJCWJyZWFrOworCQlidWZbY250
KytdID0gY2g7CisJfQorCWJ1ZltjbnRdID0gJ1wwJzsKKwlyZXR1cm4gY250OworfQorCitzdGF0
aWMgdm9pZCBzYXlfd29yZChzdHJ1Y3QgdmNfZGF0YSAqdmMpCit7CisJdV9sb25nIGNudCA9IGdl
dF93b3JkKHZjICk7CisJdV9zaG9ydCBzYXZlZF9wdW5jX21hc2sgPSBwdW5jX21hc2s7CisJaWYg
KGNudCA9PSAwKQorCQlyZXR1cm47CisJcHVuY19tYXNrID0gUFVOQzsKKwlidWZbY250KytdID0g
U1BBQ0U7CisJc3BrdXBfd3JpdGUoYnVmLCBjbnQpOworCXB1bmNfbWFzayA9IHNhdmVkX3B1bmNf
bWFzazsKK30KKworc3RhdGljIHZvaWQgc2F5X3ByZXZfd29yZChzdHJ1Y3QgdmNfZGF0YSAqdmMp
Cit7CisJY2hhciBjaDsKKwl1X3Nob3J0IGVkZ2Vfc2FpZCA9IDAsIGxhc3Rfc3RhdGUgPSAwLCBz
dGF0ZSA9IDA7CisJc3BrX3BhcmtlZCB8PSAweDAxOworCWlmIChzcGtfeCA9PSAwKSB7CisJCWlm
IChzcGtfeSA9PSAwKSB7CisJCQlhbm5vdW5jZV9lZGdlKHZjLCBlZGdlX3RvcCk7CisJCQlyZXR1
cm47CisJCX0KKwkJc3BrX3ktLTsKKwkJc3BrX3ggPSB2Yy0+dmNfY29sczsKKwkJZWRnZV9zYWlk
ID0gZWRnZV9xdWlldDsKKwl9CisJd2hpbGUgKDEpIHsKKwkJaWYgKHNwa194ID09IDApIHsKKwkJ
CWlmIChzcGtfeSA9PSAwKSB7CisJCQkJZWRnZV9zYWlkID0gZWRnZV90b3A7CisJCQkJYnJlYWs7
CisJCQl9CisJCQlpZiAoZWRnZV9zYWlkICE9IGVkZ2VfcXVpZXQpCisJCQkJZWRnZV9zYWlkID0g
ZWRnZV9sZWZ0OworCQkJaWYgKHN0YXRlID4gMCkKKwkJCQlicmVhazsKKwkJCXNwa195LS07CisJ
CQlzcGtfeCA9IHZjLT52Y19jb2xzIC0gMTsKKwkJfSBlbHNlIHNwa194LS07CisJCQlzcGtfcG9z
IC09IDI7CisJCWNoID0gKGNoYXIpIGdldF9jaGFyKHZjLCAodV9zaG9ydCAqKSBzcGtfcG9zKTsK
KwkJaWYgKGNoID09IFNQQUNFKQorCQkJc3RhdGUgPSAwOworCQllbHNlIGlmIChJU19XRExNKGNo
KSkKKwkJCXN0YXRlID0gMTsKKwkJZWxzZSBzdGF0ZSA9IDI7CisJCWlmIChzdGF0ZSA8IGxhc3Rf
c3RhdGUpIHsKKwkJCXNwa19wb3MgKz0gMjsKKwkJCXNwa194Kys7CisJCQlicmVhazsKKwkJfQor
CQlsYXN0X3N0YXRlID0gc3RhdGU7CisJfQorCWlmIChzcGtfeCA9PSAwICYmIGVkZ2Vfc2FpZCA9
PSBlZGdlX3F1aWV0KQorCQllZGdlX3NhaWQgPSBlZGdlX2xlZnQ7CisJaWYgKGVkZ2Vfc2FpZCA+
IDAgJiYgZWRnZV9zYWlkIDwgZWRnZV9xdWlldCkKKwkJYW5ub3VuY2VfZWRnZSh2YywgZWRnZV9z
YWlkKTsKKwlzYXlfd29yZCh2Yyk7Cit9CisKK3N0YXRpYyB2b2lkIHNheV9uZXh0X3dvcmQoc3Ry
dWN0IHZjX2RhdGEgKnZjKQoreworCWNoYXIgY2g7CisJdV9zaG9ydCBlZGdlX3NhaWQgPSAwLCBs
YXN0X3N0YXRlID0gMiwgc3RhdGUgPSAwOworCXNwa19wYXJrZWQgfD0gMHgwMTsKKwlpZiAoc3Br
X3ggPT0gdmMtPnZjX2NvbHMgLSAxICYmIHNwa195ID09IHZjLT52Y19yb3dzIC0gMSkgeworCQlh
bm5vdW5jZV9lZGdlKHZjLCBlZGdlX2JvdHRvbSk7CisJCXJldHVybjsKKwl9CisJd2hpbGUgKDEp
IHsKKwkJY2ggPSAoY2hhcikgZ2V0X2NoYXIodmMsICh1X3Nob3J0ICopIHNwa19wb3MgKTsKKwkJ
aWYgKGNoID09IFNQQUNFKQorCQkJc3RhdGUgPSAwOworCQllbHNlIGlmIChJU19XRExNKGNoKSkK
KwkJCXN0YXRlID0gMTsKKwkJZWxzZSBzdGF0ZSA9IDI7CisJCWlmIChzdGF0ZSA+IGxhc3Rfc3Rh
dGUpIGJyZWFrOworCQlpZiAoc3BrX3ggPj0gdmMtPnZjX2NvbHMgLSAxKSB7CisJCQlpZiAoc3Br
X3kgPT0gdmMtPnZjX3Jvd3MgLSAxKSB7CisJCQkJZWRnZV9zYWlkID0gZWRnZV9ib3R0b207CisJ
CQkJYnJlYWs7CisJCQl9CisJCQlzdGF0ZSA9IDA7CisJCQlzcGtfeSsrOworCQkJc3BrX3ggPSAw
OworCQkJZWRnZV9zYWlkID0gZWRnZV9yaWdodDsKKwkJfSBlbHNlIHNwa194Kys7CisJCQlzcGtf
cG9zICs9IDI7CisJCWxhc3Rfc3RhdGUgPSBzdGF0ZTsKKwl9CisJaWYgKGVkZ2Vfc2FpZCA+IDAp
CisJCWFubm91bmNlX2VkZ2UodmMsIGVkZ2Vfc2FpZCk7CisJc2F5X3dvcmQodmMpOworfQorCitz
dGF0aWMgdm9pZCBzcGVsbF93b3JkKHN0cnVjdCB2Y19kYXRhICp2YykKK3sKKwlzdGF0aWMgY2hh
ciAqZGVsYXlfc3RyW10gPSB7ICIgIiwgIiwgIiwgIi4gIiwgIi4gLiAiLCAiLiAuIC4gIiB9Owor
CWNoYXIgKmNwID0gYnVmLCAqc3RyX2NhcCA9IHN0cl9jYXBzX3N0b3A7CisJY2hhciAqY3AxLCAq
bGFzdF9jYXAgPSBzdHJfY2Fwc19zdG9wOworCXVfY2hhciBjaDsKKwlpZiAoIWdldF93b3JkKHZj
KSkKKwkJcmV0dXJuOworCXdoaWxlICgoY2ggPSAodV9jaGFyKSAqY3ApKSB7CisJCWlmIChjcCAh
PSBidWYpCisJCQlzeW50aF93cml0ZV9zdHJpbmcoZGVsYXlfc3RyW3NwZWxsX2RlbGF5XSk7CisJ
CWlmIChJU19DSEFSKGNoLCBCX0NBUCkpIHsKKwkJCXN0cl9jYXAgPSBzdHJfY2Fwc19zdGFydDsK
KwkJCWlmICgqc3RyX2NhcHNfc3RvcCkKKwkJCQlwaXRjaF9zaGlmdCsrOworCQkJZWxzZSAvKiBz
eW50aCBoYXMgbm8gcGl0Y2ggKi8KKwkJCQlsYXN0X2NhcCA9IHN0cl9jYXBzX3N0b3A7CisJCX0g
ZWxzZQorCQkJc3RyX2NhcCA9IHN0cl9jYXBzX3N0b3A7CisJCWlmIChzdHJfY2FwICE9IGxhc3Rf
Y2FwKSB7CisJCQlzeW50aF93cml0ZV9zdHJpbmcoc3RyX2NhcCk7CisJCQlsYXN0X2NhcCA9IHN0
cl9jYXA7CisJCX0KKwkJaWYgKHRoaXNfc3BlYWt1cF9rZXkgPT0gU1BFTExfUEhPTkVUSUMKKwkJ
ICAgICYmIChJU19DSEFSKGNoLCBCX0FMUEhBKSkpIHsKKwkJCWNoICY9IDMxOworCQkJY3AxID0g
cGhvbmV0aWNbLS1jaF07CisJCX0gZWxzZSB7CisJCQljcDEgPSBjaGFyYWN0ZXJzW2NoXTsKKwkJ
CWlmICgqY3AxID09ICdeJykgeworCQkJCXN5bnRoX3dyaXRlX3N0cmluZyhzdHJfY3RsKTsKKwkJ
CQljcDErKzsKKwkJCX0KKwkJfQorCQlzeW50aF93cml0ZV9zdHJpbmcoY3AxKTsKKwkJY3ArKzsK
Kwl9CisJaWYgKHN0cl9jYXAgIT0gc3RyX2NhcHNfc3RvcCkKKwkJc3ludGhfd3JpdGVfc3RyaW5n
KHN0cl9jYXBzX3N0b3ApOworfQorCitzdGF0aWMgaW50IGdldF9saW5lKHN0cnVjdCB2Y19kYXRh
ICp2YykKK3sKKwl1X2xvbmcgdG1wID0gc3BrX3BvcyAtIChzcGtfeCAqIDIpOworCWludCBpID0g
MDsKKwlzcGtfb2xkX2F0dHIgPSBzcGtfYXR0cjsKKwlzcGtfYXR0ciA9IGdldF9hdHRyaWJ1dGVz
KCh1X3Nob3J0ICopIHNwa19wb3MpOworCWZvciAoaSA9IDA7IGkgPCB2Yy0+dmNfY29sczsgaSsr
KSB7CisJCWJ1ZltpXSA9ICh1X2NoYXIpIGdldF9jaGFyKHZjLCAodV9zaG9ydCAqKSB0bXApOwor
CQl0bXAgKz0gMjsKKwl9CisJZm9yICgtLWk7IGkgPj0gMDsgaS0tKQorCQlpZiAoYnVmW2ldICE9
IFNQQUNFKQorCQkJYnJlYWs7CisJcmV0dXJuICsraTsKK30KKworc3RhdGljIHZvaWQgc2F5X2xp
bmUoc3RydWN0IHZjX2RhdGEgKnZjKQoreworCWludCBpID0gZ2V0X2xpbmUodmMpOworCWNoYXIg
KmNwOworCWNoYXIgbnVtX2J1Zls4XTsKKwl1X3Nob3J0IHNhdmVkX3B1bmNfbWFzayA9IHB1bmNf
bWFzazsKKwlpZiAoaSA9PSAwKSB7CisJCXN5bnRoX3dyaXRlX21zZyhibGFua19tc2cpOworCQly
ZXR1cm47CisJfQorCWJ1ZltpKytdID0gJ1xuJzsKKwlpZiAodGhpc19zcGVha3VwX2tleSA9PSBT
QVlfTElORV9JTkRFTlQpIHsKKwkJZm9yIChjcCA9IGJ1ZjsgKmNwID09IFNQQUNFOyBjcCsrKQor
CQkJOworCQlzcHJpbnRmKG51bV9idWYsICIlZCwgIiwgKGNwIC0gYnVmKSArIDEpOworCQlzeW50
aF93cml0ZV9zdHJpbmcobnVtX2J1Zik7CisJfQorCXB1bmNfbWFzayA9IHB1bmNfbWFza3NbcmVh
ZGluZ19wdW5jXTsKKwlzcGt1cF93cml0ZShidWYsIGkpOworCXB1bmNfbWFzayA9IHNhdmVkX3B1
bmNfbWFzazsKK30KKworc3RhdGljIHZvaWQgc2F5X3ByZXZfbGluZShzdHJ1Y3QgdmNfZGF0YSAq
dmMpCit7CisJc3BrX3BhcmtlZCB8PSAweDAxOworCWlmIChzcGtfeSA9PSAwKSB7CisJCWFubm91
bmNlX2VkZ2UodmMsIGVkZ2VfdG9wKTsKKwkJcmV0dXJuOworCX0KKwlzcGtfeS0tOworCXNwa19w
b3MgLT0gdmMtPnZjX3NpemVfcm93OworCXNheV9saW5lKHZjKTsKK30KKworc3RhdGljIHZvaWQg
c2F5X25leHRfbGluZShzdHJ1Y3QgdmNfZGF0YSAqdmMpCit7CisJc3BrX3BhcmtlZCB8PSAweDAx
OworCWlmIChzcGtfeSA9PSB2Yy0+dmNfcm93cyAtIDEpIHsKKwkJYW5ub3VuY2VfZWRnZSh2Yywg
ZWRnZV9ib3R0b20pOworCQlyZXR1cm47CisJfQorCXNwa195Kys7CisJc3BrX3BvcyArPSB2Yy0+
dmNfc2l6ZV9yb3c7CisJc2F5X2xpbmUodmMpOworfQorCitzdGF0aWMgaW50IHNheV9mcm9tX3Rv
KHN0cnVjdCB2Y19kYXRhICp2YywgdV9sb25nIGZyb20sIHVfbG9uZyB0bywKKwkJICAgICAgIGlu
dCByZWFkX3B1bmMpCit7CisJaW50IGkgPSAwOworCXVfc2hvcnQgc2F2ZWRfcHVuY19tYXNrID0g
cHVuY19tYXNrOworCXNwa19vbGRfYXR0ciA9IHNwa19hdHRyOworCXNwa19hdHRyID0gZ2V0X2F0
dHJpYnV0ZXMoKHVfc2hvcnQgKikgZnJvbSk7CisJd2hpbGUgKGZyb20gPCB0bykgeworCQlidWZb
aSsrXSA9IChjaGFyKSBnZXRfY2hhcih2YywgKHVfc2hvcnQgKikgZnJvbSk7CisJCWZyb20gKz0g
MjsKKwkJaWYgKGkgPj0gdmMtPnZjX3NpemVfcm93KQorCQkJYnJlYWs7CisJfQorCWZvciAoLS1p
OyBpID49IDA7IGktLSkKKwkJaWYgKGJ1ZltpXSAhPSBTUEFDRSkKKwkJCWJyZWFrOworCWJ1Zlsr
K2ldID0gU1BBQ0U7CisJYnVmWysraV0gPSAnXDAnOworCWlmIChpIDwgMSkKKwkJcmV0dXJuIGk7
CisJaWYgKHJlYWRfcHVuYykKKwkJcHVuY19tYXNrID0gcHVuY19pbmZvW3JlYWRpbmdfcHVuY10u
bWFzazsKKwlzcGt1cF93cml0ZShidWYsIGkpOworCWlmIChyZWFkX3B1bmMpCisJCXB1bmNfbWFz
ayA9IHNhdmVkX3B1bmNfbWFzazsKKwlyZXR1cm4gaSAtIDE7Cit9CisKK3N0YXRpYyB2b2lkIHNh
eV9saW5lX2Zyb21fdG8oc3RydWN0IHZjX2RhdGEgKnZjLCB1X2xvbmcgZnJvbSwgdV9sb25nIHRv
LAorCQkJICAgICBpbnQgcmVhZF9wdW5jKQoreworCXVfbG9uZyBzdGFydCA9IHZjLT52Y19vcmln
aW4gKyAoc3BrX3kgKiB2Yy0+dmNfc2l6ZV9yb3cpOworCXVfbG9uZyBlbmQgPSBzdGFydCArICh0
byAqIDIpOworCXN0YXJ0ICs9IGZyb20gKiAyOworCWlmIChzYXlfZnJvbV90byh2Yywgc3RhcnQs
IGVuZCwgcmVhZF9wdW5jKSA8PSAwKQorCQlpZiAoY3Vyc29yX3RyYWNrICE9IHJlYWRfYWxsX21v
ZGUpCisJCQlzeW50aF93cml0ZV9tc2coYmxhbmtfbXNnKTsKK30KKworLy8gU2VudGVuY2UgUmVh
ZGluZyBDb21tYW5kcworCit2b2lkIHN5bnRoX2luc2VydF9uZXh0X2luZGV4KGludCk7CisKK3N0
YXRpYyBpbnQgY3VycnNlbnRlbmNlOworc3RhdGljIGludCBudW1zZW50ZW5jZXNbMl07CitzdGF0
aWMgY2hhciAqc2VudGJ1ZmVuZFsyXTsKK3N0YXRpYyBjaGFyICpzZW50bWFya3NbMl1bMTBdOwor
c3RhdGljIGludCBjdXJyYnVmPTA7CitzdGF0aWMgaW50IGJuOworc3RhdGljIGNoYXIgc2VudGJ1
ZlsyXVsyNTZdOworCitzdGF0aWMgaW50IHNheV9zZW50ZW5jZV9udW0oaW50IG51bSAsIGludCBw
cmV2KQoreworCWJuID0gY3VycmJ1ZjsKKwljdXJyc2VudGVuY2UgPSBudW0gKyAxOworCWlmIChw
cmV2ICYmIC0tYm4gPT0gLTEpCisJCWJuID0gMTsKKworCWlmIChudW0gPiBudW1zZW50ZW5jZXNb
Ym5dKQorCQlyZXR1cm4gMDsKKworCXNwa3VwX3dyaXRlKHNlbnRtYXJrc1tibl1bbnVtXSwgc2Vu
dGJ1ZmVuZFtibl0gLSBzZW50bWFya3NbYm5dW251bV0pOworCXJldHVybiAxOworfQorCitzdGF0
aWMgaW50IGdldF9zZW50ZW5jZV9idWYoc3RydWN0IHZjX2RhdGEgKnZjLCBpbnQgcmVhZF9wdW5j
KQoreworCXVfbG9uZyBzdGFydCwgZW5kOworCWludCBpLCBibjsKKwljdXJyYnVmKys7CisJaWYg
KGN1cnJidWYgPT0gMikKKwkJY3VycmJ1ZiA9IDA7CisJYm4gPSBjdXJyYnVmOworCXN0YXJ0ID0g
dmMtPnZjX29yaWdpbiArICgoc3BrX3kpICp2Yy0+dmNfc2l6ZV9yb3cpOworCWVuZCA9IHZjLT52
Y19vcmlnaW4rKChzcGtfeSkgKnZjLT52Y19zaXplX3JvdykgKyB2Yy0+dmNfY29scyAqIDI7CisK
KwludW1zZW50ZW5jZXNbYm5dID0gMDsKKwlzZW50bWFya3NbYm5dWzBdID0gJnNlbnRidWZbYm5d
WzBdOworCWkgPSAwOworCXNwa19vbGRfYXR0ciA9IHNwa19hdHRyOworCXNwa19hdHRyID0gZ2V0
X2F0dHJpYnV0ZXMoKHVfc2hvcnQgKikgc3RhcnQpOworCisJd2hpbGUgKHN0YXJ0IDwgZW5kKSB7
CisJCXNlbnRidWZbYm5dW2ldID0gKGNoYXIpIGdldF9jaGFyKHZjLCAodV9zaG9ydCAqKSBzdGFy
dCk7CisJCWlmIChpID4gMCkgeworCQkJaWYgKHNlbnRidWZbYm5dW2ldID09IFNQQUNFICYmIHNl
bnRidWZbYm5dW2ktMV0gPT0gJy4nCisJCQkgICAgJiYgbnVtc2VudGVuY2VzW2JuXSA8IDkpIHsK
KwkJCQkvLyBTZW50ZW5jZSBNYXJrZXIKKwkJCQludW1zZW50ZW5jZXNbYm5dKys7CisJCQkJc2Vu
dG1hcmtzW2JuXVtudW1zZW50ZW5jZXNbYm5dXSA9CisJCQkJCSZzZW50YnVmW2JuXVtpXTsKKwkJ
CX0KKwkJfQorCQlpKys7CisJCXN0YXJ0ICs9IDI7CisJCWlmIChpID49IHZjLT52Y19zaXplX3Jv
dykKKwkJCWJyZWFrOworCX0KKworCWZvciAoLS1pOyBpID49IDA7IGktLSkKKwkJaWYgKHNlbnRi
dWZbYm5dW2ldICE9IFNQQUNFKQorCQkJYnJlYWs7CisKKwlpZiAoaSA8IDEpCisJCXJldHVybiAt
MTsKKworCXNlbnRidWZbYm5dWysraV0gPSBTUEFDRTsKKwlzZW50YnVmW2JuXVsrK2ldID0gJ1ww
JzsKKworCXNlbnRidWZlbmRbYm5dID0gJnNlbnRidWZbYm5dW2ldOworCXJldHVybiBudW1zZW50
ZW5jZXNbYm5dOworfQorCitzdGF0aWMgdm9pZCBzYXlfc2NyZWVuX2Zyb21fdG8oc3RydWN0IHZj
X2RhdGEgKnZjLCB1X2xvbmcgZnJvbSwgdV9sb25nIHRvKQoreworCXVfbG9uZyBzdGFydCA9IHZj
LT52Y19vcmlnaW4sIGVuZDsKKwlpZiAoZnJvbSA+IDApCisJCXN0YXJ0ICs9IGZyb20gKiB2Yy0+
dmNfc2l6ZV9yb3c7CisJaWYgKHRvID4gdmMtPnZjX3Jvd3MpCisJCXRvID0gdmMtPnZjX3Jvd3M7
CisJZW5kID0gdmMtPnZjX29yaWdpbiArICh0byAqIHZjLT52Y19zaXplX3Jvdyk7CisJZm9yIChm
cm9tID0gc3RhcnQ7IGZyb20gPCBlbmQ7IGZyb20gPSB0bykgeworCQl0byA9IGZyb20gKyB2Yy0+
dmNfc2l6ZV9yb3c7CisJCXNheV9mcm9tX3RvKHZjLCBmcm9tLCB0bywgMSk7CisJfQorfQorCitz
dGF0aWMgdm9pZCBzYXlfc2NyZWVuKHN0cnVjdCB2Y19kYXRhICp2YykKK3sKKwlzYXlfc2NyZWVu
X2Zyb21fdG8odmMsIDAsIHZjLT52Y19yb3dzKTsKK30KKworc3RhdGljIHZvaWQgc3BlYWt1cF93
aW5fc2F5KHN0cnVjdCB2Y19kYXRhICp2YykKK3sKKwl1X2xvbmcgc3RhcnQsIGVuZCwgZnJvbSwg
dG87CisJaWYgKHdpbl9zdGFydCA8IDIpIHsKKwkJc3ludGhfd3JpdGVfbXNnKCJubyB3aW5kb3ci
KTsKKwkJcmV0dXJuOworCX0KKwlzdGFydCA9IHZjLT52Y19vcmlnaW4gKyAod2luX3RvcCAqIHZj
LT52Y19zaXplX3Jvdyk7CisJZW5kID0gdmMtPnZjX29yaWdpbiArICh3aW5fYm90dG9tICogdmMt
PnZjX3NpemVfcm93KTsKKwl3aGlsZSAoc3RhcnQgPD0gZW5kKSB7CisJCWZyb20gPSBzdGFydCAr
ICh3aW5fbGVmdCAqIDIpOworCQl0byA9IHN0YXJ0ICsgKHdpbl9yaWdodCAqIDIpOworCQlzYXlf
ZnJvbV90byh2YywgZnJvbSwgdG8sIDEpOworCQlzdGFydCArPSB2Yy0+dmNfc2l6ZV9yb3c7CisJ
fQorfQorCitzdGF0aWMgdm9pZCB0b3BfZWRnZSAoc3RydWN0IHZjX2RhdGEgKnZjKQoreworCXNw
a19wYXJrZWQgfD0gMHgwMTsKKwlzcGtfcG9zID0gdmMtPnZjX29yaWdpbiArIDIgKiBzcGtfeDsK
KwlzcGtfeSA9IDA7CisJc2F5X2xpbmUodmMpOworfQorCitzdGF0aWMgdm9pZCBib3R0b21fZWRn
ZShzdHJ1Y3QgdmNfZGF0YSAqdmMpCit7CisJc3BrX3BhcmtlZCB8PSAweDAxOworCXNwa19wb3Mg
Kz0gKHZjLT52Y19yb3dzIC0gc3BrX3kgLSAxKSAqIHZjLT52Y19zaXplX3JvdzsKKwlzcGtfeSA9
IHZjLT52Y19yb3dzIC0gMTsKKwlzYXlfbGluZSh2Yyk7Cit9CisKK3N0YXRpYyB2b2lkIGxlZnRf
ZWRnZShzdHJ1Y3QgdmNfZGF0YSAqdmMpCit7CisJc3BrX3BhcmtlZCB8PSAweDAxOworCXNwa19w
b3MgLT0gc3BrX3ggKiAyOworCXNwa194ID0gMDsKKwlzYXlfY2hhciAodmMgKTsKK30KKworc3Rh
dGljIHZvaWQgcmlnaHRfZWRnZShzdHJ1Y3QgdmNfZGF0YSAqdmMpCit7CisJc3BrX3BhcmtlZCB8
PSAweDAxOworCXNwa19wb3MgKz0gKHZjLT52Y19jb2xzIC0gc3BrX3ggLSAxKSAqIDI7CisJc3Br
X3ggPSB2Yy0+dmNfY29scyAtIDE7CisJc2F5X2NoYXIodmMpOworfQorCitzdGF0aWMgdm9pZCBz
YXlfZmlyc3RfY2hhcihzdHJ1Y3QgdmNfZGF0YSAqdmMpCit7CisJaW50IGksIGxlbiA9IGdldF9s
aW5lKHZjKTsKKwl1X2NoYXIgY2g7CisJc3BrX3BhcmtlZCB8PSAweDAxOworCWlmIChsZW4gPT0g
MCkgeworCQlzeW50aF93cml0ZV9tc2coYmxhbmtfbXNnKTsKKwkJcmV0dXJuOworCX0KKwlmb3Ig
KGkgPSAwOyBpIDwgbGVuOyBpKyspCisJCWlmIChidWZbaV0gIT0gU1BBQ0UpCisJCQlicmVhazsK
KwljaCA9IGJ1ZltpXTsKKwlzcGtfcG9zIC09IChzcGtfeCAtIGkpICogMjsKKwlzcGtfeCA9IGk7
CisJc3ByaW50ZihidWYsICIlZCwgIiwgKytpKTsKKwlzeW50aF93cml0ZV9zdHJpbmcoYnVmKTsK
KwlzcGVha19jaGFyKGNoKTsKK30KKworc3RhdGljIHZvaWQgc2F5X2xhc3RfY2hhcihzdHJ1Y3Qg
dmNfZGF0YSAqdmMpCit7CisJaW50IGxlbiA9IGdldF9saW5lKHZjKTsKKwl1X2NoYXIgY2g7CisJ
c3BrX3BhcmtlZCB8PSAweDAxOworCWlmIChsZW4gPT0gMCkgeworCQlzeW50aF93cml0ZV9tc2co
YmxhbmtfbXNnKTsKKwkJcmV0dXJuOworCX0KKwljaCA9IGJ1ZlstLWxlbl07CisJc3BrX3BvcyAt
PSAoc3BrX3ggLSBsZW4pICogMjsKKwlzcGtfeCA9IGxlbjsKKwlzcHJpbnRmIChidWYsICIlZCwg
IiwgKytsZW4pOworCXN5bnRoX3dyaXRlX3N0cmluZyhidWYpOworCXNwZWFrX2NoYXIoY2gpOwor
fQorCitzdGF0aWMgdm9pZCBzYXlfcG9zaXRpb24oc3RydWN0IHZjX2RhdGEgKnZjKQoreworCXNw
cmludGYoYnVmLCAibGluZSAlbGQsIGNvbCAlbGQsIHQgdCB5ICVkXG4iLCBzcGtfeSArIDEsIHNw
a194ICsgMSwKKwkJdmMtPnZjX251bSArIDEpOworCXN5bnRoX3dyaXRlX3N0cmluZyhidWYpOwor
fQorCisvLyBBZGRlZCBieSBicmlhbmIKK3N0YXRpYyB2b2lkIHNheV9jaGFyX251bShzdHJ1Y3Qg
dmNfZGF0YSAqdmMpCit7CisJdV9zaG9ydCBjaCA9IGdldF9jaGFyKHZjLCAodV9zaG9ydCAqKSBz
cGtfcG9zKTsKKwljaCAmPSAweGZmOworCXNwcmludGYoYnVmLCAiaGV4ICUwMngsIGRlY2ltYWwg
JWQiLCBjaCwgY2gpOworCXN5bnRoX3dyaXRlX21zZyhidWYpOworfQorCisvKiB0aGVzZSBhcmUg
c3R1YiBmdW5jdGlvbnMgdG8ga2VlcCBrZXlib2FyZC5jIGhhcHB5LiAqLworCitzdGF0aWMgdm9p
ZCBzYXlfZnJvbV90b3Aoc3RydWN0IHZjX2RhdGEgKnZjKQoreworCXNheV9zY3JlZW5fZnJvbV90
byh2YywgMCwgc3BrX3kpOworfQorCitzdGF0aWMgdm9pZCBzYXlfdG9fYm90dG9tKHN0cnVjdCB2
Y19kYXRhICp2YykKK3sKKwlzYXlfc2NyZWVuX2Zyb21fdG8odmMsIHNwa195LCB2Yy0+dmNfcm93
cyk7Cit9CisKK3N0YXRpYyB2b2lkIHNheV9mcm9tX2xlZnQoc3RydWN0IHZjX2RhdGEgKnZjKQor
eworCXNheV9saW5lX2Zyb21fdG8odmMsIDAsIHNwa194LCAxKTsKK30KKworc3RhdGljIHZvaWQg
c2F5X3RvX3JpZ2h0KHN0cnVjdCB2Y19kYXRhICp2YykKK3sKKwlzYXlfbGluZV9mcm9tX3RvKHZj
LCBzcGtfeCwgdmMtPnZjX2NvbHMsIDEpOworfQorCisvKiBlbmQgb2Ygc3R1YiBmdW5jdGlvbnMu
ICovCisKK3N0YXRpYyB2b2lkIHNwa3VwX3dyaXRlKGNvbnN0IGNoYXIgKmluX2J1ZiwgaW50IGNv
dW50KQoreworCXN0YXRpYyBpbnQgcmVwX2NvdW50ID0gMDsKKwlzdGF0aWMgdV9jaGFyIGNoID0g
J1wwJywgb2xkX2NoID0gJ1wwJzsKKwlzdGF0aWMgdV9zaG9ydCBjaGFyX3R5cGUgPSAwLCBsYXN0
X3R5cGUgPSAwOworCXN0YXRpYyB1X2NoYXIgKmV4bl9wdHIgPSBOVUxMOworCWludCBpbl9jb3Vu
dCA9IGNvdW50OworCWNoYXIgcnB0X2J1ZlszMl07CisJc3BrX2tleWRvd24gPSAwOworCXdoaWxl
ICggY291bnQtLSApIHsKKwkJaWYgKCBjdXJzb3JfdHJhY2sgPT0gcmVhZF9hbGxfbW9kZSApIHsK
KwkJCS8vIEluc2VydCBTZW50ZW5jZSBJbmRleAorCQkJaWYgKCggaW5fYnVmID09IHNlbnRtYXJr
c1tibl1bY3VycnNlbnRlbmNlXSApICYmCisJCQkgICAoIGN1cnJzZW50ZW5jZSA8PSBudW1zZW50
ZW5jZXNbYm5dICkpCisJCQkJc3ludGhfaW5zZXJ0X25leHRfaW5kZXgoY3VycnNlbnRlbmNlKysp
OworCQl9CisJCWNoID0gKHVfY2hhciApKmluX2J1ZisrOworCQljaGFyX3R5cGUgPSBzcGtfY2hh
cnRhYltjaF07CisJCWlmIChjaCA9PSBvbGRfY2ggJiYgIShjaGFyX3R5cGUmQl9OVU0gKSApIHsK
KwkJCWlmICgrK3JlcF9jb3VudCA+IDIgKSBjb250aW51ZTsKKwkJfSBlbHNlIHsKKwkJCWlmICgg
KGxhc3RfdHlwZSZDSF9SUFQpICYmIHJlcF9jb3VudCA+IDIgKSB7CisJCQkJc3ByaW50ZiAocnB0
X2J1ZiwgIiB0aW1lcyAlZCAuICIsICsrcmVwX2NvdW50ICk7CisJCQkJc3ludGhfd3JpdGVfc3Ry
aW5nIChycHRfYnVmICk7CisJCQl9CisJCQlyZXBfY291bnQgPSAwOworCQl9CisJCWlmICggISgg
Y2hhcl90eXBlJkJfTlVNICkgKQorCQkJCWV4bl9wdHIgPSBOVUxMOworCQlpZiAoY2ggPT0gc3Br
X2xhc3RrZXkgKSB7CisJCQlyZXBfY291bnQgPSAwOworCQkJaWYgKCBrZXlfZWNobyA9PSAxICYm
IGNoID49IE1JTkVDSE9DSEFSICkKKwkJCQlzcGVha19jaGFyKCBjaCApOworCQl9IGVsc2UgaWYg
KCAoIGNoYXJfdHlwZSZCX0FMUEhBICkgKSB7CisJCQlpZiAoIChzeW50aF9mbGFncyZTRl9ERUMp
ICYmIChsYXN0X3R5cGUmUFVOQykgKQorCQkJCXN5bnRoX2J1ZmZlcl9hZGQgKCBTUEFDRSApOwor
CQkJc3ludGhfd3JpdGUoICZjaCwgMSApOworCQl9IGVsc2UgaWYgKCAoIGNoYXJfdHlwZSZCX05V
TSApICkgeworCQkJcmVwX2NvdW50ID0gMDsKKwkJCWlmICggKGxhc3RfdHlwZSZCX0VYTlVNKSAm
JiBzeW50aF9idWZmX2luID09IGV4bl9wdHIrMSApIHsKKwkJCQlzeW50aF9idWZmX2luLS07CisJ
CQkJc3ludGhfYnVmZmVyX2FkZCggb2xkX2NoICk7CisJCQkJZXhuX3B0ciA9IE5VTEw7CisJCQl9
CisJCQlzeW50aF93cml0ZSggJmNoLCAxICk7CisJCX0gZWxzZSBpZiAoIChjaGFyX3R5cGUmcHVu
Y19tYXNrKSApIHsKKwkJCXNwZWFrX2NoYXIoIGNoICk7CisJCQljaGFyX3R5cGUgJj0gflBVTkM7
IC8qIGZvciBkZWMgbm9zcGVsbCBwcm9jZXNzaW5nICovCisJCX0gZWxzZSBpZiAoICggY2hhcl90
eXBlJlNZTlRIX09LICkgKSB7CisvKiB0aGVzZSBhcmUgdXN1YWxseSBwdW5jdHMgbGlrZSAuIGFu
ZCAsIHdoaWNoIHN5bnRoIG5lZWRzIGZvciBleHByZXNzaW9uLgorICogc3VwcHJlc3MgbXVsdGlw
bGUgdG8gZ2V0IHJpZCBvZiBsb25nIHBhdXNlc2FuZCBjbGVhciByZXBlYXQgY291bnQgc28gaWYK
KyAqc29tZW9uZSBoYXMgcmVwZWF0cyBvbiB5b3UgZG9uJ3QgZ2V0IG5vdGhpbmcgcmVwZWF0ZWQg
Y291bnQgKi8KKwkJCWlmICggY2ggIT0gb2xkX2NoICkKKwkJCQlzeW50aF93cml0ZSggJmNoLCAx
ICk7CisJCQllbHNlIHJlcF9jb3VudCA9IDA7CisJCX0gZWxzZSB7CisJCQlpZiAoICggY2hhcl90
eXBlJkJfRVhOVU0gKSApCisJCQkJCWV4bl9wdHIgPSAodV9jaGFyICopc3ludGhfYnVmZl9pbjsK
Ky8qIHNlbmQgc3BhY2UgYW5kIHJlY29yZCBwb3NpdGlvbiwgaWYgbmV4dCBpcyBudW0gb3Zlcndy
aXRlIHNwYWNlICovCisJCQlpZiAoIG9sZF9jaCAhPSBjaCApIHN5bnRoX2J1ZmZlcl9hZGQgKCBT
UEFDRSApOworCQkJZWxzZSByZXBfY291bnQgPSAwOworCQl9CisJCW9sZF9jaCA9IGNoOworCQls
YXN0X3R5cGUgPSBjaGFyX3R5cGU7CisJfQorCXNwa19sYXN0a2V5ID0gMDsKKwlpZiAoaW5fY291
bnQgPiAyICYmIHJlcF9jb3VudCA+IDIgKSB7CisJCWlmICggKGxhc3RfdHlwZSZDSF9SUFQpICkg
eworCQkJc3ByaW50ZiAocnB0X2J1ZiwgIiByZXBlYXRlZCAlZCAuICIsICsrcmVwX2NvdW50ICk7
CisJCQlzeW50aF93cml0ZV9zdHJpbmcgKHJwdF9idWYgKTsKKwkJfQorCQlyZXBfY291bnQgPSAw
OworCX0KK30KKworc3RhdGljIGNoYXIgKmN0bF9rZXlfaWRzW10gPSB7CisJInNoaWZ0IiwgImFs
dGdyIiwgImNvbnRyb2wiLCAiYXVsdCIsICJsIHNoaWZ0IiwgInNwZWFrdXAiLAorImwgY29udHJv
bCIsICJyIGNvbnRyb2wiCit9OworI2RlZmluZSBOVU1fQ1RMX0xBQkVMUyA4CisKK3N0YXRpYyB2
b2lkIHJlYWRfYWxsX2RvYyhzdHJ1Y3QgdmNfZGF0YSAqdmMpOworc3RhdGljIHZvaWQgY3Vyc29y
X3N0b3BfdGltZXIodm9pZCk7CisKK3N0YXRpYyB2b2lkIGhhbmRsZV9zaGlmdChzdHJ1Y3QgdmNf
ZGF0YSAqdmMsIHVfY2hhciB2YWx1ZSwgY2hhciB1cF9mbGFnKQoreworCSgqZG9fc2hpZnQpKHZj
LCB2YWx1ZSwgdXBfZmxhZyk7CisJaWYgKHN5bnRoID09IE5VTEwgfHwgdXBfZmxhZyB8fCBzcGtf
a2lsbGVkKQorCQlyZXR1cm47CisJaWYgKGN1cnNvcl90cmFjayA9PSByZWFkX2FsbF9tb2RlKSB7
CisJCXN3aXRjaCAodmFsdWUpIHsKKwkJY2FzZSBLVkFMKEtfU0hJRlQpOgorCQkJY3Vyc29yX3N0
b3BfdGltZXIoKTsKKwkJCXNwa19zaHV0X3VwICY9IDB4ZmU7CisJCQlkb19mbHVzaCgpOworCQkJ
cmVhZF9hbGxfZG9jKHZjKTsKKwkJCWJyZWFrOworCQljYXNlIEtWQUwoS19DVFJMKToKKwkJCWN1
cnNvcl9zdG9wX3RpbWVyKCk7CisJCQljdXJzb3JfdHJhY2s9cHJldl9jdXJzb3JfdHJhY2s7CisJ
CQlzcGtfc2h1dF91cCAmPSAweGZlOworCQkJZG9fZmx1c2goKTsKKwkJCWJyZWFrOworCQl9CisJ
fSBlbHNlIHsKKwkJc3BrX3NodXRfdXAgJj0gMHhmZTsKKwkJZG9fZmx1c2goKTsKKwl9CisJaWYg
KHNheV9jdHJsICYmIHZhbHVlIDwgTlVNX0NUTF9MQUJFTFMpCisJCXN5bnRoX3dyaXRlX3N0cmlu
ZyhjdGxfa2V5X2lkc1t2YWx1ZV0pOworfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfbGF0aW4oc3Ry
dWN0IHZjX2RhdGEgKnZjLCB1X2NoYXIgdmFsdWUsIGNoYXIgdXBfZmxhZykKK3sKKwkoKmRvX2xh
dGluKSh2YywgdmFsdWUsIHVwX2ZsYWcpOworCWlmICh1cF9mbGFnKSB7CisJCXNwa19sYXN0a2V5
ID0gc3BrX2tleWRvd24gPSAwOworCQlyZXR1cm47CisJfQorCWlmIChzeW50aCA9PSBOVUxMIHx8
IHNwa19raWxsZWQpCisJCXJldHVybjsKKwlzcGtfc2h1dF91cCAmPSAweGZlOworCXNwa19sYXN0
a2V5ID0gdmFsdWU7CisJc3BrX2tleWRvd24rKzsKKwlzcGtfcGFya2VkICY9IDB4ZmU7CisJaWYg
KGtleV9lY2hvID09IDIgJiYgdmFsdWUgPj0gTUlORUNIT0NIQVIpCisJCXNwZWFrX2NoYXIoIHZh
bHVlICk7Cit9CisKK3N0YXRpYyBpbnQgc2V0X2tleV9pbmZvKGNvbnN0IHVfY2hhciAqa2V5X2lu
Zm8sIHVfY2hhciAqa19idWZmZXIpCit7CisJaW50IGkgPSAwLCBzdGF0ZXMsIGtleV9kYXRhX2xl
bjsKKwljb25zdCB1X2NoYXIgKmNwID0ga2V5X2luZm87CisJdV9jaGFyICpjcDEgPSBrX2J1ZmZl
cjsKKwl1X2NoYXIgY2gsIHZlcnNpb24sIG51bV9rZXlzOworCXZlcnNpb24gPSAqY3ArKzsKKwlp
ZiAodmVyc2lvbiAhPSBLRVlfTUFQX1ZFUikKKwkJcmV0dXJuIC0xOworCW51bV9rZXlzID0gKmNw
OworCXN0YXRlcyA9IChpbnQpIGNwWzFdOworCWtleV9kYXRhX2xlbiA9IChzdGF0ZXMgKyAxKSAq
IChudW1fa2V5cyArIDEpOworCWlmIChrZXlfZGF0YV9sZW4gKyBTSElGVF9UQkxfU0laRSArIDQg
Pj0gc2l6ZW9mKGtleV9idWYpKQorCQlyZXR1cm4gLTI7CisJbWVtc2V0KGtfYnVmZmVyLCAwLCBT
SElGVF9UQkxfU0laRSk7CisJbWVtc2V0KG91cl9rZXlzLCAwLCBzaXplb2Yob3VyX2tleXMpKTsK
KwlzaGlmdF90YWJsZSA9IGtfYnVmZmVyOworCW91cl9rZXlzWzBdID0gc2hpZnRfdGFibGU7CisJ
Y3AxICs9IFNISUZUX1RCTF9TSVpFOworCW1lbWNweShjcDEsIGNwLCBrZXlfZGF0YV9sZW4gKyAz
KTsKKwkvKiBnZXQgbnVtX2tleXMsIHN0YXRlcyBhbmQgZGF0YSovCisJY3AxICs9IDI7IC8qIG5v
dyBwb2ludGluZyBhdCBzaGlmdCBzdGF0ZXMgKi8KKwlmb3IgKGkgPSAxOyBpIDw9IHN0YXRlczsg
aSsrKSB7CisJCWNoID0gKmNwMSsrOworCQlpZiAoY2ggPj0gU0hJRlRfVEJMX1NJWkUpCisJCQly
ZXR1cm4gLTM7CisJCXNoaWZ0X3RhYmxlW2NoXSA9IGk7CisJfQorCWtleW1hcF9mbGFncyA9ICpj
cDErKzsKKwl3aGlsZSAoKGNoID0gKmNwMSkpIHsKKwkJaWYgKGNoID49IE1BWF9LRVkpCisJCQly
ZXR1cm4gLTQ7CisJCW91cl9rZXlzW2NoXSA9IGNwMTsKKwkJY3AxICs9IHN0YXRlcyArIDE7CisJ
fQorCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHN0X251bV92YXIgc3BrX251bV92YXJz
W10gPSB7IC8qIGJlbGwgbXVzdCBiZSBmaXJzdCB0byBzZXQgaGlnaCBsaW1pdCAqLworCXsgQkVM
TF9QT1MsIDAsIDAsIDAsIDAsIDAsIDAsIDAgfSwKKwl7IFNQRUxMX0RFTEFZLCAwLCAwLCAwLCA1
LCAwLCAwLCAwIH0sCisJeyBBVFRSSUJfQkxFRVAsIDAsIDEsIDAsIDMsIDAsIDAsIDAgfSwKKwl7
IEJMRUVQUywgMCwgMywgMCwgMywgMCwgMCwgMCB9LAorCXsgQkxFRVBfVElNRSwgMCwgMzAsIDEs
IDIwMCwgMCwgMCwgMCB9LAorCXsgUFVOQ19MRVZFTCwgMCwgMSwgMCwgNCwgMCwgMCwgMCB9LAor
CXsgUkVBRElOR19QVU5DLCAwLCAxLCAwLCA0LCAwLCAwLCAwIH0sCisJeyBDVVJTT1JfVElNRSwg
MCwgMTIwLCA1MCwgNjAwLCAwLCAwLCAwIH0sCisJeyBTQVlfQ09OVFJPTCwgVE9HR0xFXzAgfSwK
Kwl7IFNBWV9XT1JEX0NUTCwgVE9HR0xFXzAgfSwKKwl7IE5PX0lOVEVSUlVQVCwgVE9HR0xFXzAg
fSwKKwl7IEtFWV9FQ0hPLCAwLCAxLCAwLCAyLCAwLCAwLCAwIH0sCisJVl9MQVNUX05VTQorfTsK
Kworc3RhdGljIGNoYXIgKmN1cnNvcl9tc2dzW10gPSB7ICJjdXJzb3Jpbmcgb2ZmIiwgImN1cnNv
cmluZyBvbiIsCisJImhpZ2hsaWdodCB0cmFja2luZyIsICJyZWFkIHdpbmRvIiwKKyJyZWFkIGFs
bCIgfTsKKworc3RhdGljIHZvaWQgdG9nZ2xlX2N1cnNvcmluZyhzdHJ1Y3QgdmNfZGF0YSAqdmMp
Cit7CisJaWYgKGN1cnNvcl90cmFjayA9PSByZWFkX2FsbF9tb2RlKQorCQljdXJzb3JfdHJhY2sg
PSBwcmV2X2N1cnNvcl90cmFjazsKKwlpZiAoKytjdXJzb3JfdHJhY2sgPj0gQ1RfTWF4KQorCQlj
dXJzb3JfdHJhY2sgPSAwOworCXN5bnRoX3dyaXRlX21zZyhjdXJzb3JfbXNnc1tjdXJzb3JfdHJh
Y2tdKTsKK30KKworc3RhdGljIHZvaWQgcmVzZXRfZGVmYXVsdF9jaGFycyh2b2lkKQoreworCWlu
dCBpOworCWlmIChkZWZhdWx0X2NoYXJzWyhpbnQgKSdhJ10gPT0gTlVMTCkgLyogbG93ZXJzIGFy
ZSBudWxsIGZpcnN0IHRpbWUgKi8KKwkJZm9yIChpID0gKGludCApJ2EnOyBkZWZhdWx0X2NoYXJz
W2ldID09IE5VTEw7IGkrKykKKwkJCWRlZmF1bHRfY2hhcnNbaV0gPSBkZWZhdWx0X2NoYXJzW2kg
LSAzMl07CisJZWxzZSAvKiBmcmVlIGFueSBub24tZGVmYXVsdCAqLworCQlmb3IgKGkgPSAwOyBp
IDwgMjU2OyBpKyspIHsKKwkJCWlmIChjaGFyYWN0ZXJzW2ldICE9IGRlZmF1bHRfY2hhcnNbaV0p
CisJCQkJa2ZyZWUoY2hhcmFjdGVyc1tpXSk7CisJCX0KKwltZW1jcHkoY2hhcmFjdGVycywgZGVm
YXVsdF9jaGFycywgc2l6ZW9mKGRlZmF1bHRfY2hhcnMpKTsKK30KKworc3RhdGljIHZvaWQgcmVz
ZXRfZGVmYXVsdF9jaGFydGFiKHZvaWQpCit7CisJbWVtY3B5KHNwa19jaGFydGFiLCBkZWZhdWx0
X2NoYXJ0YWIsIHNpemVvZihkZWZhdWx0X2NoYXJ0YWIpKTsKK30KKworc3RhdGljIHZvaWQgaGFu
ZGxlX2N1cnNvcihzdHJ1Y3QgdmNfZGF0YSAqdmMsIHVfY2hhciB2YWx1ZSwgY2hhciB1cF9mbGFn
KTsKK3N0YXRpYyB2b2lkIGhhbmRsZV9zcGVjKHN0cnVjdCB2Y19kYXRhICp2YywgdV9jaGFyIHZh
bHVlLCBjaGFyIHVwX2ZsYWcpOworc3RhdGljIHZvaWQgY3Vyc29yX2RvbmUodV9sb25nIGRhdGEg
KTsKKworc3RhdGljIGRlY2xhcmVfdGltZXIoY3Vyc29yX3RpbWVyKTsKKworc3RhdGljIHZvaWQg
X19pbml0IHNwZWFrdXBfb3BlbihzdHJ1Y3QgdmNfZGF0YSAqdmMsCisJCQkJc3RydWN0IHN0X3Nw
a190ICpmaXJzdF9jb25zb2xlKQoreworCWludCBpOworCXN0cnVjdCBzdF9udW1fdmFyICpuX3Zh
cjsKKworCXJlc2V0X2RlZmF1bHRfY2hhcnMoKTsKKwlyZXNldF9kZWZhdWx0X2NoYXJ0YWIoKTsK
KwltZW1zZXQoc3BlYWt1cF9jb25zb2xlLCAwLCBzaXplb2Yoc3BlYWt1cF9jb25zb2xlKSk7CisJ
aWYgKGZpcnN0X2NvbnNvbGUgPT0gTlVMTCkKKwkJcmV0dXJuOworCXNwZWFrdXBfY29uc29sZVt2
Yy0+dmNfbnVtXSA9IGZpcnN0X2NvbnNvbGU7CisJc3BlYWt1cF9kYXRlKHZjKTsKKwlwcl9pbmZv
KCIlczogaW5pdGlhbGl6ZWRcbiIsIFNQRUFLVVBfVkVSU0lPTik7CisJaW5pdF90aW1lcigmY3Vy
c29yX3RpbWVyKTsKKwljdXJzb3JfdGltZXIuZW50cnkucHJldiA9IE5VTEw7CisJY3Vyc29yX3Rp
bWVyLmZ1bmN0aW9uID0gY3Vyc29yX2RvbmU7CisJaW5pdF9zbGVlcGVyKHN5bnRoX3NsZWVwaW5n
X2xpc3QpOworCXN0cmx3cihzeW50aF9uYW1lKTsKKyAJc3BrX251bV92YXJzWzBdLmhpZ2ggPSB2
Yy0+dmNfY29sczsKKwlmb3IgKG5fdmFyID0gc3BrX251bV92YXJzOyBuX3Zhci0+dmFyX2lkID49
IDA7IG5fdmFyKyspCisJCXNwZWFrdXBfcmVnaXN0ZXJfdmFyKG5fdmFyKTsKKwlmb3IgKGkgPSAx
OyBwdW5jX2luZm9baV0ubWFzayAhPSAwOyBpKyspCisJCXNldF9tYXNrX2JpdHMoMCwgaSwgMik7
CisJZG9fbGF0aW4gPSBrZXlfaGFuZGxlcltLVF9MQVRJTl07CisJa2V5X2hhbmRsZXJbS1RfTEFU
SU5dID0gaGFuZGxlX2xhdGluOworCWRvX3NwZWMgPSBrZXlfaGFuZGxlcltLVF9TUEVDXTsKKwlr
ZXlfaGFuZGxlcltLVF9TUEVDXSA9IGhhbmRsZV9zcGVjOworCWRvX2N1cnNvciA9IGtleV9oYW5k
bGVyW0tUX0NVUl07CisJa2V5X2hhbmRsZXJbS1RfQ1VSXSA9IGhhbmRsZV9jdXJzb3I7CisJZG9f
c2hpZnQgPSBrZXlfaGFuZGxlcltLVF9TSElGVF07CisJa2V5X2hhbmRsZXJbS1RfU0hJRlRdID0g
aGFuZGxlX3NoaWZ0OworCXNldF9rZXlfaW5mbyhrZXlfZGVmYXVsdHMsIGtleV9idWYpOworCWlm
IChxdWlldF9ib290KSBzcGtfc2h1dF91cCB8PSAweDAxOworfQorCisjaWZkZWYgQ09ORklHX1BS
T0NfRlMKKworLy8gc3BlYWt1cCAvcHJvYyBpbnRlcmZhY2UgY29kZQorCisvKiBVc2FnZToKK2Nh
dCAvcHJvYy9zcGVha3VwL3ZlcnNpb24KKworY2F0IC9wcm9jL3NwZWFrdXAvY2hhcmFjdGVycyA+
IGZvbworbGVzcyAvcHJvYy9zcGVha3VwL2NoYXJhY3RlcnMKK3ZpIC9wcm9jL3NwZWFrdXAvY2hh
cmFjdGVycworCitjYXQgZm9vID4gL3Byb2Mvc3BlYWt1cC9jaGFyYWN0ZXJzCitjYXQgPiAvcHJv
Yy9zcGVha3VwL2NoYXJhY3RlcnMKK2VjaG8gMzkgYXBvc3Ryb3BoZSA+IC9wcm9jL3NwZWFrdXAv
Y2hhcmFjdGVycworZWNobyA4NyB3ID4gL3Byb2Mvc3BlYWt1cC9jaGFyYWN0ZXJzCitlY2hvIDEx
OSB3ID4gL3Byb2Mvc3BlYWt1cC9jaGFyYWN0ZXJzCitlY2hvIGRlZmF1bHRzID4gL3Byb2Mvc3Bl
YWt1cC9jaGFyYWN0ZXJzCitlY2hvIHJlc2V0ID4gL3Byb2Mvc3BlYWt1cC9jaGFyYWN0ZXJzCisK
KworY2F0IC9wcm9jL3NwZWFrdXAvY2hhcnRhYiA+IGZvbworbGVzcyAvcHJvYy9zcGVha3VwL2No
YXJ0YWIKK3ZpIC9wcm9jL3NwZWFrdXAvY2hhcnRhYgorCitjYXQgZm9vID4gL3Byb2Mvc3BlYWt1
cC9jaGFydGFiCitjYXQgPiAvcHJvYy9zcGVha3VwL2NoYXJ0YWIKK2VjaG8gMjMzIEFMUEhBID4g
L3Byb2Mvc3BlYWt1cC9jaGFydGFiCitlY2hvIDQ2IEFfUFVOQyA+IC9wcm9jL3NwZWFrdXAvY2hh
cnRhYgorZWNobyBkZWZhdWx0cyA+IC9wcm9jL3NwZWFrdXAvY2hhcnRhYgorZWNobyByZXNldCA+
IC9wcm9jL3NwZWFrdXAvY2hhcnRhYgorKi8KKworLy8ga2V5bWFwIGhhbmRsZXJzCisKK3N0YXRp
YyBpbnQga2V5c19yZWFkX3Byb2MoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYs
IGludCBjb3VudCwKKwkJCSAgaW50ICplb2YsIHZvaWQgKmRhdGEpCit7CisJY2hhciAqY3AgPSBw
YWdlOworCWludCBpLCBuLCBudW1fa2V5cywgbnN0YXRlczsKKwl1X2NoYXIgKmNwMSA9IGtleV9i
dWYgKyBTSElGVF9UQkxfU0laRSwgY2g7CisJbnVtX2tleXMgPSAoaW50KSgqY3AxKTsKKwluc3Rh
dGVzID0gKGludCljcDFbMV07CisJY3AgKz0gc3ByaW50ZiggY3AsICIlZCwgJWQsICVkLFxuIiwg
S0VZX01BUF9WRVIsICBudW1fa2V5cywgbnN0YXRlcyApOworCWNwMSArPSAyOyAvKiBub3cgcG9p
bnRpbmcgYXQgc2hpZnQgc3RhdGVzICovCisvKiBkdW1wIG51bV9rZXlzKzEgYXMgZmlyc3Qgcm93
IGlzIHNoaWZ0IHN0YXRlcyArIGZsYWdzLAorICAgZWFjaCBzdWJzZXF1ZW50IHJvdyBpcyBrZXkg
KyBzdGF0ZXMgKi8KKwlmb3IgKCBuID0gMDsgbiA8PSBudW1fa2V5czsgbisrICkgeworCQlmb3Ig
KCBpID0gMDsgaSA8PSBuc3RhdGVzOyBpKysgKSB7CisJCQljaCA9ICpjcDErKzsKKwkJCWNwICs9
IHNwcmludGYoIGNwLCAiJWQsIiwgKGludCljaCApOworCQkJKmNwKysgPSAoIGkgPCBuc3RhdGVz
ICkgPyBTUEFDRSA6ICdcbic7CisJCX0KKwl9CisJY3AgKz0gc3ByaW50ZiggY3AsICIwLCAlZFxu
IiwgS0VZX01BUF9WRVIgKTsKKwkqc3RhcnQgPSAwOworCSplb2YgPSAxOworCXJldHVybiAoaW50
KShjcC1wYWdlKTsKK30KKworc3RhdGljIGNoYXIgKgorczJ1Y2hhciAoIGNoYXIgKnN0YXJ0LCBj
aGFyICpkZXN0ICkKK3sKKwlpbnQgdmFsID0gMDsKKwl3aGlsZSAoICpzdGFydCAmJiAqc3RhcnQg
PD0gU1BBQ0UgKSBzdGFydCsrOworCXdoaWxlICggKnN0YXJ0ID49ICcwJyAmJiAqc3RhcnQgPD0g
JzknICkgeworCQl2YWwgKj0gMTA7CisJCXZhbCArPSAoICpzdGFydCApIC0gJzAnOworCQlzdGFy
dCsrOworCX0KKwlpZiAoICpzdGFydCA9PSAnLCcgKSBzdGFydCsrOworCSpkZXN0ID0gKHVfY2hh
cil2YWw7CisJcmV0dXJuIHN0YXJ0OworfQorCitzdGF0aWMgaW50IGtleXNfd3JpdGVfcHJvYyhz
dHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciAqYnVmZmVyLCB1X2xvbmcgY291bnQsCisJCQkg
ICB2b2lkICpkYXRhKQoreworCWludCBpLCByZXQgPSBjb3VudDsKKwljaGFyICppbl9idWZmLCAq
Y3A7CisJdV9jaGFyICpjcDE7CisJaWYgKGNvdW50IDwgMSB8fCBjb3VudCA+IDE4MDAgKQorCQly
ZXR1cm4gLUVJTlZBTDsKKwlpbl9idWZmID0gKCBjaGFyICogKSBfX2dldF9mcmVlX3BhZ2UgKCBH
RlBfS0VSTkVMICk7CisJaWYgKCAhaW5fYnVmZiApIHJldHVybiAtRU5PTUVNOworCWlmIChjb3B5
X2Zyb21fdXNlciAoaW5fYnVmZiwgYnVmZmVyLCBjb3VudCApICkgeworCQlmcmVlX3BhZ2UgKCAo
IHVuc2lnbmVkIGxvbmcgKSBpbl9idWZmICk7CisJCXJldHVybiAtRUZBVUxUOworCX0KKwlpZiAo
aW5fYnVmZltjb3VudCAtIDFdID09ICdcbicgKSBjb3VudC0tOworCWluX2J1ZmZbY291bnRdID0g
J1wwJzsKKwlpZiAoIGNvdW50ID09IDEgJiYgKmluX2J1ZmYgPT0gJ2QnICkgeworCQlmcmVlX3Bh
Z2UgKCAoIHVuc2lnbmVkIGxvbmcgKSBpbl9idWZmICk7CisJCXNldF9rZXlfaW5mbygga2V5X2Rl
ZmF1bHRzLCBrZXlfYnVmICk7CisJCXJldHVybiByZXQ7CisJfQorCWNwID0gaW5fYnVmZjsKKwlj
cDEgPSAodV9jaGFyICopaW5fYnVmZjsKKwlmb3IgKCBpID0gMDsgaSA8IDM7IGkrKyApIHsKKwkJ
Y3AgPSBzMnVjaGFyKCBjcCwgY3AxICk7CisJCWNwMSsrOworCX0KKwlpID0gKGludCljcDFbLTJd
KzE7CisJaSAqPSAoaW50KWNwMVstMV0rMTsKKwlpKz0gMjsgLyogMCBhbmQgbGFzdCBtYXAgdmVy
ICovCisJaWYgKCBjcDFbLTNdICE9IEtFWV9NQVBfVkVSIHx8IGNwMVstMV0gPiAxMCB8fAorCQkJ
aStTSElGVF9UQkxfU0laRSs0ID49IHNpemVvZihrZXlfYnVmICkgKSB7Citwcl93YXJuKCAiaSAl
ZCAlZCAlZCAlZFxuIiwgaSwgKGludCljcDFbLTNdLCAoaW50KWNwMVstMl0sIChpbnQpY3AxWy0x
XSApOworCQlmcmVlX3BhZ2UgKCAoIHVuc2lnbmVkIGxvbmcgKSBpbl9idWZmICk7CisJCXJldHVy
biAtRUlOVkFMOworCX0KKwl3aGlsZSAoIC0taSA+PSAwICkgeworCQljcCA9IHMydWNoYXIoIGNw
LCBjcDEgKTsKKwkJY3AxKys7CisJCWlmICggISgqY3ApICkgYnJlYWs7CisJfQorCWlmICggaSAh
PSAwIHx8IGNwMVstMV0gIT0gS0VZX01BUF9WRVIgfHwgY3AxWy0yXSAhPSAwICkgeworCQlyZXQg
PSAtRUlOVkFMOworcHJfd2FybiggImVuZCAlZCAlZCAlZCAlZFxuIiwgaSwgKGludCljcDFbLTNd
LCAoaW50KWNwMVstMl0sIChpbnQpY3AxWy0xXSApOworCX0gZWxzZSB7CisJCWlmICggc2V0X2tl
eV9pbmZvKCBpbl9idWZmLCBrZXlfYnVmICkgKSB7CisJCQlzZXRfa2V5X2luZm8oIGtleV9kZWZh
dWx0cywga2V5X2J1ZiApOworCQlyZXQgPSAtRUlOVkFMOworcHJfd2FybiggInNldCBrZXkgZmFp
bGVkXG4iICk7CisJCX0KKwl9CisJZnJlZV9wYWdlICggKCB1bnNpZ25lZCBsb25nICkgaW5fYnVm
ZiApOworCXJldHVybiByZXQ7Cit9CisKKy8vIHRoaXMgaXMgdGhlIGhhbmRsZXIgZm9yIC9wcm9j
L3NwZWFrdXAvdmVyc2lvbgorc3RhdGljIGludCB2ZXJzaW9uX3JlYWRfcHJvYyhjaGFyICpwYWdl
LCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwgaW50IGNvdW50LAorCQkJICAgICBpbnQgKmVvZiwg
dm9pZCAqZGF0YSkKK3sKKwlpbnQgbGVuID0gc3ByaW50ZiAocGFnZSwgIiVzXG4iLCBTUEVBS1VQ
X1ZFUlNJT04gKTsKKwlpZiAoc3ludGggIT0gTlVMTCkKKwkJbGVuICs9IHNwcmludGYocGFnZSts
ZW4sICJzeW50aCAlcyB2ZXJzaW9uICVzXG4iLCBzeW50aC0+bmFtZSwKKwkJCXN5bnRoLT52ZXJz
aW9uKTsKKwkqc3RhcnQgPSAwOworCSplb2YgPSAxOworCXJldHVybiBsZW47Cit9CisKKy8vIHRo
aXMgaXMgdGhlIHJlYWQgaGFuZGxlciBmb3IgL3Byb2Mvc3BlYWt1cC9jaGFyYWN0ZXJzCitzdGF0
aWMgaW50IGNoYXJzX3JlYWRfcHJvYyhjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9m
ZiwgaW50IGNvdW50LAorCQkJICAgaW50ICplb2YsIHZvaWQgKmRhdGEpCit7CisJaW50IGksIGxl
biA9IDA7CisJb2ZmX3QgYmVnaW4gPSAwOworCWNoYXIgKmNwOworCWZvciAoaSA9IDA7IGkgPCAy
NTY7IGkrKykgeworCQljcCA9IChjaGFyYWN0ZXJzW2ldKSA/IGNoYXJhY3RlcnNbaV0gOiAiTlVM
TCI7CisJCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICIlZFx0JXNcbiIsIGksIGNwKTsKKwkJ
aWYgKGxlbiArIGJlZ2luID4gb2ZmICsgY291bnQpCisJCQlicmVhazsKKwkJaWYgKGxlbiArIGJl
Z2luIDwgb2ZmKSB7CisJCQliZWdpbiArPSBsZW47CisJCQlsZW4gPSAwOworCQl9CisJfQorCWlm
IChpID49IDI1NikKKwkJKmVvZiA9IDE7CisJaWYgKG9mZiA+PSBsZW4gKyBiZWdpbikKKwkJcmV0
dXJuIDA7CisJKnN0YXJ0ID0gcGFnZSArIChvZmYgLSBiZWdpbik7CisJcmV0dXJuICgoY291bnQg
PCBiZWdpbiArIGxlbiAtIG9mZikgPyBjb3VudCA6IGJlZ2luICsgbGVuIC0gb2ZmKTsKK30KKwor
c3RhdGljIHZvbGF0aWxlIGludCBjaGFyc190aW1lcl9hY3RpdmUgPSAwOwkvLyBpbmRpY2F0ZXMg
d2hlbiB0aW1lciBpcyBzZXQKK3N0YXRpYyBkZWNsYXJlX3RpbWVyKGNoYXJzX3RpbWVyKTsKKwor
c3RhdGljIHZvaWQgY2hhcnNfc3RvcF90aW1lcih2b2lkKQoreworCWlmIChjaGFyc190aW1lcl9h
Y3RpdmUpCisJCXN0b3BfdGltZXIoY2hhcnNfdGltZXIpOworfQorCitzdGF0aWMgaW50IHN0cmlu
Z3MsIHJlamVjdHMsIHVwZGF0ZXM7CisKK3N0YXRpYyB2b2lkIHNob3dfY2hhcl9yZXN1bHRzICh1
X2xvbmcgZGF0YSkKK3sKKwlpbnQgbGVuOworCWNoYXIgYnVmWzgwXTsKKwljaGFyc19zdG9wX3Rp
bWVyKCk7CisJbGVuID0gc3ByaW50ZihidWYsICIgdXBkYXRlZCAlZCBvZiAlZCBjaGFyYWN0ZXIg
ZGVzY3JpcHRpb25zXG4iLAorCQkgICAgICAgdXBkYXRlcywgc3RyaW5ncyk7CisJaWYgKHJlamVj
dHMpCisJCXNwcmludGYoYnVmICsgKGxlbiAtIDEpLCAiIHdpdGggJWQgcmVqZWN0JXNcbiIsCisJ
CQkgcmVqZWN0cywgcmVqZWN0cyA+IDEgPyAicyIgOiAiIik7CisJcHJpbnRrKGJ1Zik7Cit9CisK
Ky8vIHRoaXMgaXMgdGhlIHJlYWQgaGFuZGxlciBmb3IgL3Byb2Mvc3BlYWt1cC9jaGFydGFiCitz
dGF0aWMgaW50IGNoYXJ0YWJfcmVhZF9wcm9jKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2Zm
X3Qgb2ZmLCBpbnQgY291bnQsCisJCQkgICAgIGludCAqZW9mLCB2b2lkICpkYXRhKQoreworCWlu
dCBpLCBsZW4gPSAwOworCW9mZl90IGJlZ2luID0gMDsKKwljaGFyICpjcDsKKwlmb3IgKGkgPSAw
OyBpIDwgMjU2OyBpKyspIHsJICAKKwkJY3AgPSAiMCI7CisJCWlmIChJU19UWVBFKGksIEJfQ1RM
KSkKKwkJCWNwID0gIkJfQ1RMIjsKKwkJZWxzZSBpZiAoSVNfVFlQRShpLCBXRExNKSkKKwkJCWNw
ID0gIldETE0iOworCQllbHNlIGlmIChJU19UWVBFKGksIEFfUFVOQykpCisJCQljcCA9ICJBX1BV
TkMiOworCQllbHNlIGlmIChJU19UWVBFKGksIFBVTkMpKQorCQkJY3AgPSAiUFVOQyI7CisJCWVs
c2UgaWYgKElTX1RZUEUoaSwgTlVNKSkKKwkJCWNwID0gIk5VTSI7CisJCWVsc2UgaWYgKElTX1RZ
UEUoaSwgQV9DQVApKQorCQkJY3AgPSAiQV9DQVAiOworCQllbHNlIGlmIChJU19UWVBFKGksIEFM
UEhBKSkKKwkJCWNwID0gIkFMUEhBIjsKKwkJZWxzZSBpZiAoSVNfVFlQRShpLCBCX0NBUFNZTSkp
CisJCQljcCA9ICJCX0NBUFNZTSI7CisJCWVsc2UgaWYgKElTX1RZUEUoaSwgQl9TWU0pKQorCQkJ
Y3AgPSAiQl9TWU0iOworCisJCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICIlZFx0JXNcbiIs
IGksIGNwKTsKKwkJaWYgKGxlbiArIGJlZ2luID4gb2ZmICsgY291bnQpCisJCQlicmVhazsKKwkJ
aWYgKGxlbiArIGJlZ2luIDwgb2ZmKSB7CisJCQliZWdpbiArPSBsZW47CisJCQlsZW4gPSAwOwor
CQl9CisJfQorCWlmIChpID49IDI1NikKKwkJKmVvZiA9IDE7CisJaWYgKG9mZiA+PSBsZW4gKyBi
ZWdpbikKKwkJcmV0dXJuIDA7CisJKnN0YXJ0ID0gcGFnZSArIChvZmYgLSBiZWdpbik7CisJcmV0
dXJuICgoY291bnQgPCBiZWdpbiArIGxlbiAtIG9mZikgPyBjb3VudCA6IGJlZ2luICsgbGVuIC0g
b2ZmKTsKK30KKworc3RhdGljIGludCBjaGFydGFiX2dldF92YWx1ZShjaGFyICprZXl3b3JkKQor
eworCWludCB2YWx1ZSA9IDA7CisJCisJaWYgKCFzdHJjbXAoa2V5d29yZCwgIkFMUEhBIikpCisJ
CXZhbHVlID0gQUxQSEE7CisJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiQl9DVEwiKSkKKwkJ
dmFsdWUgPSBCX0NUTDsKKwllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJXRExNIikpCisJCXZh
bHVlID0gV0RMTTsKKwllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJBX1BVTkMiKSkKKwkJdmFs
dWUgPSBBX1BVTkM7CisJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiUFVOQyIpKQorCQl2YWx1
ZSA9IFBVTkM7CisJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiTlVNIikpCisJCXZhbHVlID0g
TlVNOworCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIkFfQ0FQIikpCisJCXZhbHVlID0gQV9D
QVA7CisJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiQl9DQVBTWU0iKSkKKwkJdmFsdWUgPSBC
X0NBUFNZTTsKKwllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJCX1NZTSIpKQorCQl2YWx1ZSA9
IEJfU1lNOworCXJldHVybiB2YWx1ZTsKK30KKworLyogdGhpcyBpcyB0aGUgd3JpdGUgaGFuZGxl
ciBmb3IgL3Byb2Mvc3BlYWt1cC9zaWxlbnQgKi8KK3N0YXRpYyBpbnQgc2lsZW50X3dyaXRlX3By
b2Moc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgKmJ1ZmZlciwKKwkJCSAgICAgdV9sb25n
IGNvdW50LCB2b2lkICpkYXRhKQoreworCXN0cnVjdCB2Y19kYXRhICp2YyA9IHZjX2NvbnNbZmdf
Y29uc29sZV0uZDsKKwljaGFyIGNoID0gMCwgc2h1dDsKKwlpZiAoY291bnQgPiAwIHx8IGNvdW50
IDwgMyApIHsKKwkJZ2V0X3VzZXIgKGNoLCBidWZmZXIgKTsKKwkJaWYgKCBjaCA9PSAnXG4nICkg
Y2ggPSAnMCc7CisJfQorCWlmICggY2ggPCAnMCcgfHwgY2ggPiAnNycgKSB7CisJCXByX3dhcm4g
KCAic2lsZW50IHZhbHVlIG5vdCBpbiByYW5nZSAoMCw3KVxuIiApOworCQlyZXR1cm4gY291bnQ7
CisJfQorCWlmICggKGNoJjIpICkgeworCQlzaHV0ID0gMTsKKwkJZG9fZmx1c2goICk7CisJfSBl
bHNlIHNodXQgPSAwOworCWlmICggKGNoJjQpICkgc2h1dCB8PSAweDQwOworCWlmICggKGNoJjEp
ICkKKwkJc3BrX3NodXRfdXAgfD0gc2h1dDsKKwkJZWxzZSBzcGtfc2h1dF91cCAmPSB+c2h1dDsK
KwlyZXR1cm4gY291bnQ7Cit9CisKKy8vIHRoaXMgaXMgdGhlIHdyaXRlIGhhbmRsZXIgZm9yIC9w
cm9jL3NwZWFrdXAvY2hhcmFjdGVycworc3RhdGljIGludCBjaGFyc193cml0ZV9wcm9jKHN0cnVj
dCBmaWxlICpmaWxlLCBjb25zdCBjaGFyICpidWZmZXIsCisJCQkgICAgdV9sb25nIGNvdW50LCB2
b2lkICpkYXRhKQoreworI2RlZmluZSBtYXhfZGVzY19sZW4gNzIKKwlzdGF0aWMgaW50IGNudCA9
IDAsIHN0YXRlID0gMDsKKwlzdGF0aWMgY2hhciBkZXNjW21heF9kZXNjX2xlbiArIDFdOworCXN0
YXRpYyB1X2xvbmcgamlmZl9sYXN0ID0gMDsKKwlzaG9ydCBpID0gMCwgbnVtOworCWludCBsZW47
CisJY2hhciBjaCwgKmNwLCAqcF9uZXc7CisJLy8gcmVzZXQgY2VydGFpbiB2YXJzIGlmIGVub3Vn
aCB0aW1lIGhhcyBlbGFwc2VkIHNpbmNlIGxhc3QgY2FsbGVkCisJaWYgKGppZmZpZXMgLSBqaWZm
X2xhc3QgPiAxMCApIHsKKwkJY250ID0gc3RhdGUgPSBzdHJpbmdzID0gcmVqZWN0cyA9IHVwZGF0
ZXMgPSAwOworCX0KKwlqaWZmX2xhc3QgPSBqaWZmaWVzOworZ2V0X21vcmU6CisJZGVzY1tjbnRd
ID0gJ1wwJzsKKwlzdGF0ZSA9IDA7CisJZm9yICg7IGkgPCBjb3VudCAmJiBzdGF0ZSA8IDI7IGkr
KyApIHsKKwkJZ2V0X3VzZXIgKGNoLCBidWZmZXIgKyBpICk7CisJCWlmICggY2ggPT0gJ1xuJyAp
IHsKKwkJCWRlc2NbY250XSA9ICdcMCc7CisJCQlzdGF0ZSA9IDI7CisJCX0gZWxzZSBpZiAoY250
IDwgbWF4X2Rlc2NfbGVuICkKKwkJCWRlc2NbY250KytdID0gY2g7CisJfQorCWlmIChzdGF0ZSA8
IDIgKSByZXR1cm4gY291bnQ7CisJY3AgPSBkZXNjOworCXdoaWxlICggKmNwICYmICh1bnNpZ25l
ZCBjaGFyKSgqY3ApIDw9IFNQQUNFICkgY3ArKzsKKwlpZiAoKCFjbnQgKSB8fCBzdHJjaHIgKCJk
RHJSIiwgKmNwICkgKSB7CisJCXJlc2V0X2RlZmF1bHRfY2hhcnMgKCApOworCQlwcl9pbmZvKCAi
Y2hhcmFjdGVyIGRlc2NyaXB0aW9ucyByZXNldCB0byBkZWZhdWx0c1xuIiApOworCQljbnQgPSAw
OworCQlyZXR1cm4gY291bnQ7CisJfQorCWNudCA9IDA7CisJaWYgKCpjcCA9PSAnIycgKSBnb3Rv
IGdldF9tb3JlOworCW51bSA9IC0xOworCWNwID0gc3BlYWt1cF9zMmkoY3AsICZudW0gKTsKKwl3
aGlsZSAoICpjcCAmJiAodW5zaWduZWQgY2hhcikoKmNwKSA8PSBTUEFDRSApIGNwKys7CisJaWYg
KG51bSA8IDAgfHwgbnVtID4gMjU1ICkgewkvLyBub3QgaW4gcmFuZ2UKKwkJcmVqZWN0cysrOwor
CQlzdHJpbmdzKys7CisJCWdvdG8gZ2V0X21vcmU7CisJfQorCWlmIChudW0gPj0gMjcgJiYgbnVt
IDw9IDMxICkgZ290byBnZXRfbW9yZTsKKwlpZiAoIXN0cmNtcChjcCwgY2hhcmFjdGVyc1tudW1d
ICkgKSB7CisJCXN0cmluZ3MrKzsKKwkJZ290byBnZXRfbW9yZTsKKwl9CisJbGVuID0gc3RybGVu
KGNwICk7CisJaWYgKGNoYXJhY3RlcnNbbnVtXSA9PSBkZWZhdWx0X2NoYXJzW251bV0gKQorCQlw
X25ldyA9IGttYWxsb2Moc2l6ZW9mIChjaGFyKSAqIGxlbisxLCBHRlBfS0VSTkVMICk7CisJZWxz
ZSBpZiAoIHN0cmxlbihjaGFyYWN0ZXJzW251bV0gKSA+PSBsZW4gKQorCQlwX25ldyA9IGNoYXJh
Y3RlcnNbbnVtXTsKKwllbHNlIHsKKwkJa2ZyZWUoY2hhcmFjdGVyc1tudW1dICk7CisJCWNoYXJh
Y3RlcnNbbnVtXSA9IGRlZmF1bHRfY2hhcnNbbnVtXTsKKwkJcF9uZXcgPSBrbWFsbG9jKHNpemVv
ZiAoY2hhcikgKiBsZW4rMSwgR0ZQX0tFUk5FTCApOworCX0KKwlpZiAoIXBfbmV3ICkgcmV0dXJu
IC1FTk9NRU07CisJc3RyY3B5ICggcF9uZXcsIGNwICk7CisJY2hhcmFjdGVyc1tudW1dID0gcF9u
ZXc7CisJdXBkYXRlcysrOworCXN0cmluZ3MrKzsKKwlpZiAoaSA8IGNvdW50ICkgZ290byBnZXRf
bW9yZTsKKwljaGFyc19zdG9wX3RpbWVyICggKTsKKwlpbml0X3RpbWVyICgmY2hhcnNfdGltZXIg
KTsKKwljaGFyc190aW1lci5mdW5jdGlvbiA9IHNob3dfY2hhcl9yZXN1bHRzOworCWNoYXJzX3Rp
bWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgNTsKKwkJc3RhcnRfdGltZXIgKGNoYXJzX3RpbWVyICk7
CisJY2hhcnNfdGltZXJfYWN0aXZlKys7CisJcmV0dXJuIGNvdW50OworfQorCisvLyB0aGlzIGlz
IHRoZSB3cml0ZSBoYW5kbGVyIGZvciAvcHJvYy9zcGVha3VwL2NoYXJ0YWIKK3N0YXRpYyBpbnQg
Y2hhcnRhYl93cml0ZV9wcm9jKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyICpidWZmZXIs
CisJCQkgICAgICB1X2xvbmcgY291bnQsIHZvaWQgKmRhdGEpCit7CisjZGVmaW5lIG1heF9kZXNj
X2xlbiA3MgorCXN0YXRpYyBpbnQgY250ID0gMCwgc3RhdGUgPSAwOworCXN0YXRpYyBjaGFyIGRl
c2NbbWF4X2Rlc2NfbGVuICsgMV07CisJc3RhdGljIHVfbG9uZyBqaWZmX2xhc3QgPSAwOworCXNo
b3J0IGkgPSAwLCBudW07CisJY2hhciBjaCwgKmNwOworCWludCB2YWx1ZT0wOworCS8vIHJlc2V0
IGNlcnRhaW4gdmFycyBpZiBlbm91Z2ggdGltZSBoYXMgZWxhcHNlZCBzaW5jZSBsYXN0IGNhbGxl
ZAorCWlmIChqaWZmaWVzIC0gamlmZl9sYXN0ID4gMTAgKSB7CisJCWNudCA9IHN0YXRlID0gc3Ry
aW5ncyA9IHJlamVjdHMgPSB1cGRhdGVzID0gMDsKKwl9CisJamlmZl9sYXN0ID0gamlmZmllczsK
K2dldF9tb3JlOgorCWRlc2NbY250XSA9ICdcMCc7CisJc3RhdGUgPSAwOworCWZvciAoOyBpIDwg
Y291bnQgJiYgc3RhdGUgPCAyOyBpKysgKSB7CisJCWdldF91c2VyIChjaCwgYnVmZmVyICsgaSAp
OworCQlpZiAoIGNoID09ICdcbicgKSB7CisJCQlkZXNjW2NudF0gPSAnXDAnOworCQkJc3RhdGUg
PSAyOworCQl9IGVsc2UgaWYgKGNudCA8IG1heF9kZXNjX2xlbiApCisJCQlkZXNjW2NudCsrXSA9
IGNoOworCX0KKwlpZiAoc3RhdGUgPCAyICkgcmV0dXJuIGNvdW50OworCWNwID0gZGVzYzsKKwl3
aGlsZSAoICpjcCAmJiAodW5zaWduZWQgY2hhcikoKmNwKSA8PSBTUEFDRSApIGNwKys7CisJaWYg
KCghY250ICkgfHwgc3RyY2hyICgiZERyUiIsICpjcCApICkgeworCQlyZXNldF9kZWZhdWx0X2No
YXJ0YWIgKCApOworCQlwcl9pbmZvKCAiY2hhcmFjdGVyIGRlc2NyaXB0aW9ucyByZXNldCB0byBk
ZWZhdWx0c1xuIiApOworCQljbnQgPSAwOworCQlyZXR1cm4gY291bnQ7CisJfQorCWNudCA9IDA7
CisJaWYgKCpjcCA9PSAnIycgKSBnb3RvIGdldF9tb3JlOworCW51bSA9IC0xOworCWNwID0gc3Bl
YWt1cF9zMmkoY3AsICZudW0gKTsKKwl3aGlsZSAoICpjcCAmJiAodW5zaWduZWQgY2hhcikoKmNw
KSA8PSBTUEFDRSApIGNwKys7CisJaWYgKG51bSA8IDAgfHwgbnVtID4gMjU1ICkgewkvLyBub3Qg
aW4gcmFuZ2UKKwkJcmVqZWN0cysrOworCQlzdHJpbmdzKys7CisJCWdvdG8gZ2V0X21vcmU7CisJ
fQorCS8qCWlmIChudW0gPj0gMjcgJiYgbnVtIDw9IDMxICkgZ290byBnZXRfbW9yZTsgKi8KKwor
CXZhbHVlID0gY2hhcnRhYl9nZXRfdmFsdWUgKGNwKTsKKwlpZiAoIXZhbHVlKSB7CS8vIG5vdCBp
biByYW5nZQorCQlyZWplY3RzKys7CisJCXN0cmluZ3MrKzsKKwkJZ290byBnZXRfbW9yZTsKKwl9
CisKKwlpZiAodmFsdWU9PXNwa19jaGFydGFiW251bV0pIHsKKwkJc3RyaW5ncysrOworCQlnb3Rv
IGdldF9tb3JlOworCX0KKworCXNwa19jaGFydGFiW251bV0gPSB2YWx1ZTsKKwl1cGRhdGVzKys7
CisJc3RyaW5ncysrOworCWlmIChpIDwgY291bnQgKSBnb3RvIGdldF9tb3JlOworCWNoYXJzX3N0
b3BfdGltZXIgKCApOworCWluaXRfdGltZXIgKCZjaGFyc190aW1lciApOworCWNoYXJzX3RpbWVy
LmZ1bmN0aW9uID0gc2hvd19jaGFyX3Jlc3VsdHM7CisJY2hhcnNfdGltZXIuZXhwaXJlcyA9IGpp
ZmZpZXMgKyA1OworCQlzdGFydF90aW1lciAoY2hhcnNfdGltZXIgKTsKKwljaGFyc190aW1lcl9h
Y3RpdmUrKzsKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBpbnQgYml0c19yZWFkX3Byb2Mo
Y2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsIGludCBjb3VudCwKKwkJCSAgaW50
ICplb2YsIHZvaWQgKmRhdGEpCit7CisJaW50IGk7CisJc3RydWN0IHN0X3Zhcl9oZWFkZXIgKnBf
aGVhZGVyID0gZGF0YTsKKwlzdHJ1Y3Qgc3RfcHJvY192YXIgKnZhciA9IHBfaGVhZGVyLT5kYXRh
OworCWNvbnN0IHN0cnVjdCBzdF9iaXRzX2RhdGEgKnBiID0gJnB1bmNfaW5mb1t2YXItPnZhbHVl
XTsKKwlzaG9ydCBtYXNrID0gcGItPm1hc2s7CisJY2hhciAqY3AgPSBwYWdlOworCSpzdGFydCA9
IDA7CisJKmVvZiA9IDE7CisJZm9yICggaSA9IDMzOyBpIDwgMTI4OyBpKysgKSB7CisJCWlmICgg
IShzcGtfY2hhcnRhYltpXSZtYXNrICkgKSBjb250aW51ZTsKKwkJKmNwKysgPSAoY2hhciApaTsK
Kwl9CisJKmNwKysgPSAnXG4nOworCXJldHVybiBjcC1wYWdlOworfQorCisvKiBzZXRfbWFza19i
aXRzIHNldHMgb3IgY2xlYXJzIHRoZSBwdW5jL2RlbGltL3JlcGVhdCBiaXRzLAorICogaWYgaW5w
dXQgaXMgbnVsbCB1c2VzIHRoZSBkZWZhdWx0cy4KKyAqIHZhbHVlcyBmb3IgaG93OiAwIGNsZWFy
cyBiaXRzIG9mIGNoYXJzIHN1cHBsaWVkLAorICogMSBjbGVhcnMgYWxsaywgMiBzZXRzIGJpdHMg
Zm9yIGNoYXJzICovCisKK3N0YXRpYyBpbnQgc2V0X21hc2tfYml0cyhjb25zdCBjaGFyICppbnB1
dCwgY29uc3QgaW50IHdoaWNoLCBjb25zdCBpbnQgaG93KQoreworCXVfY2hhciAqY3A7CisJc2hv
cnQgbWFzayA9IHB1bmNfaW5mb1t3aGljaF0ubWFzazsKKwlpZiAoIGhvdyYxICkgeworCQlmb3Ig
KCBjcCA9ICh1X2NoYXIgKiApcHVuY19pbmZvWzNdLnZhbHVlOyAqY3A7IGNwKysgKQorCQkJc3Br
X2NoYXJ0YWJbKmNwXSAmPSB+bWFzazsKKwl9CisJY3AgPSAodV9jaGFyICogKWlucHV0OworCWlm
ICggY3AgPT0gMCApIGNwID0gcHVuY19pbmZvW3doaWNoXS52YWx1ZTsKKwllbHNlIHsKKwkJZm9y
ICggOyAqY3A7IGNwKysgKSB7CisJCQlpZiAoICpjcCA8IFNQQUNFICkgYnJlYWs7CisJCQlpZiAo
IG1hc2sgPCBQVU5DICkgeworCQkJCWlmICggIShzcGtfY2hhcnRhYlsqY3BdJlBVTkMpICkgYnJl
YWs7CisJCQl9IGVsc2UgaWYgKCAoc3BrX2NoYXJ0YWJbKmNwXSZCX05VTSkgKSBicmVhazsKKwkJ
fQorCQlpZiAoICpjcCApIHJldHVybiAtRUlOVkFMOworCQljcCA9ICh1X2NoYXIgKiApaW5wdXQ7
CisJfQorCWlmICggaG93JjIgKSB7CisJCWZvciAoIDsgKmNwOyBjcCsrICkKKwkJCWlmICggKmNw
ID4gU1BBQ0UgKSBzcGtfY2hhcnRhYlsqY3BdIHw9IG1hc2s7CisJfSBlbHNlIHsKKwkJZm9yICgg
OyAqY3A7IGNwKysgKQorCQkJaWYgKCAqY3AgPiBTUEFDRSApIHNwa19jaGFydGFiWypjcF0gJj0g
fm1hc2s7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHN0X2JpdHNf
ZGF0YSAqcGJfZWRpdCA9IE5VTEw7CisKK3N0YXRpYyBpbnQgZWRpdF9iaXRzIChzdHJ1Y3QgdmNf
ZGF0YSAqdmMsIHVfY2hhciB0eXBlLCB1X2NoYXIgY2gsIHVfc2hvcnQga2V5ICkKK3sKKwlzaG9y
dCBtYXNrID0gcGJfZWRpdC0+bWFzaywgY2hfdHlwZSA9IHNwa19jaGFydGFiW2NoXTsKKwlpZiAo
IHR5cGUgIT0gS1RfTEFUSU4gfHwgKGNoX3R5cGUmQl9OVU0gKSB8fCBjaCA8IFNQQUNFICkgcmV0
dXJuIC0xOworCWlmICggY2ggPT0gU1BBQ0UgKSB7CisJCXN5bnRoX3dyaXRlX21zZyggImVkaXQg
ZG9uZSIgKTsKKwkJc3BlY2lhbF9oYW5kbGVyID0gTlVMTDsKKwkJcmV0dXJuIDE7CisJfQorCWlm
ICggbWFzayA8IFBVTkMgJiYgIShjaF90eXBlJlBVTkMpICkgcmV0dXJuIC0xOworCXNwa19jaGFy
dGFiW2NoXSBePSBtYXNrOworCXNwZWFrX2NoYXIoIGNoICk7CisJc3ludGhfd3JpdGVfbXNnKCAo
c3BrX2NoYXJ0YWJbY2hdJm1hc2sgKSA/ICIgb24iIDogIiBvZmYiICk7CisJcmV0dXJuIDE7Cit9
CisKK3N0YXRpYyBpbnQgYml0c193cml0ZV9wcm9jKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBj
aGFyICpidWZmZXIsIHVfbG9uZyBjb3VudCwKKwkJCSAgIHZvaWQgKmRhdGEpCit7CisJc3RydWN0
IHN0X3Zhcl9oZWFkZXIgKnBfaGVhZGVyID0gZGF0YTsKKwlzdHJ1Y3Qgc3RfcHJvY192YXIgKnZh
ciA9IHBfaGVhZGVyLT5kYXRhOworCWludCByZXQgPSBjb3VudDsKKwljaGFyIHB1bmNfYnVmWzEw
MF07CisJaWYgKGNvdW50IDwgMSB8fCBjb3VudCA+IDk5ICkKKwkJcmV0dXJuIC1FSU5WQUw7CisJ
aWYgKGNvcHlfZnJvbV91c2VyIChwdW5jX2J1ZiwgYnVmZmVyLCBjb3VudCApICkKKwkJcmV0dXJu
IC1FRkFVTFQ7CisJaWYgKHB1bmNfYnVmW2NvdW50IC0gMV0gPT0gJ1xuJyApCisJCWNvdW50LS07
CisJcHVuY19idWZbY291bnRdID0gJ1wwJzsKKwlpZiAoICpwdW5jX2J1ZiA9PSAnZCcgfHwgKnB1
bmNfYnVmID09ICdyJyApCisJCWNvdW50ID0gc2V0X21hc2tfYml0cyggMCwgdmFyLT52YWx1ZSwg
MyApOworCWVsc2UKKwkJY291bnQgPSBzZXRfbWFza19iaXRzKCBwdW5jX2J1ZiwgdmFyLT52YWx1
ZSwgMyApOworCWlmICggY291bnQgPCAwICkgcmV0dXJuIGNvdW50OworCXJldHVybiByZXQ7Cit9
CisKKy8vIHRoaXMgaXMgdGhlIHJlYWQgaGFuZGxlciBmb3IgL3Byb2Mvc3BlYWt1cC9zeW50aAor
c3RhdGljIGludCBzeW50aF9yZWFkX3Byb2MoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZf
dCBvZmYsIGludCBjb3VudCwKKwkJCSAgIGludCAqZW9mLCB2b2lkICpkYXRhKQoreworCWludCBs
ZW47CisJaWYgKCBzeW50aCA9PSBOVUxMICkgc3RyY3B5KCBzeW50aF9uYW1lLCAibm9uZSIgKTsK
KwllbHNlIHN0cmNweSggc3ludGhfbmFtZSwgc3ludGgtPm5hbWUgKTsKKwlsZW4gPSBzcHJpbnRm
IChwYWdlLCAiJXNcbiIsIHN5bnRoX25hbWUgKTsKKwkqc3RhcnQgPSAwOworCSplb2YgPSAxOwor
CXJldHVybiBsZW47Cit9CisKKy8vIHRoaXMgaXMgdGhlIHdyaXRlIGhhbmRsZXIgZm9yIC9wcm9j
L3NwZWFrdXAvc3ludGgKK3N0YXRpYyBpbnQgc3ludGhfd3JpdGVfcHJvYyhzdHJ1Y3QgZmlsZSAq
ZmlsZSwgY29uc3QgY2hhciAqYnVmZmVyLAorCQkJICAgIHVfbG9uZyBjb3VudCwgdm9pZCAqZGF0
YSkKK3sKKwlpbnQgcmV0ID0gY291bnQ7CisJY2hhciBuZXdfc3ludGhfbmFtZVsxMF07CisJY29u
c3QgY2hhciAqb2xkX25hbWUgPSAoIHN5bnRoICE9IE5VTEwgKSA/IHN5bnRoLT5uYW1lIDogIm5v
bmUiOworCWlmIChjb3VudCA8IDIgfHwgY291bnQgPiA5ICkKKwkJcmV0dXJuIC1FSU5WQUw7CisJ
aWYgKGNvcHlfZnJvbV91c2VyIChuZXdfc3ludGhfbmFtZSwgYnVmZmVyLCBjb3VudCApICkKKwkJ
cmV0dXJuIC1FRkFVTFQ7CisJaWYgKG5ld19zeW50aF9uYW1lW2NvdW50IC0gMV0gPT0gJ1xuJyAp
CisJCWNvdW50LS07CisJbmV3X3N5bnRoX25hbWVbY291bnRdID0gJ1wwJzsKKwlzdHJsd3IgKG5l
d19zeW50aF9uYW1lICk7CisJaWYgKCFzdHJjbXAgKG5ld19zeW50aF9uYW1lLCBvbGRfbmFtZSAp
ICkgeworCQlwcl93YXJuICggIiVzIGFscmVhZHkgaW4gdXNlXG4iLCBuZXdfc3ludGhfbmFtZSAp
OworCQlyZXR1cm4gcmV0OworCX0KKwlpZiAoIHN5bnRoX2luaXQoIG5ld19zeW50aF9uYW1lICkg
PT0gMCApIHJldHVybiByZXQ7CisJcHJfd2FybiggImZhaWxlZCB0byBpbml0IHN5bnRoICVzXG4i
LCBuZXdfc3ludGhfbmFtZSApOworCXJldHVybiAtRU5PREVWOworfQorCitzdHJ1Y3Qgc3RfcHJv
Y192YXIgc3BrX3Byb2NfdmFyc1tdID0geworCSB7IFZFUlNJT04sIHZlcnNpb25fcmVhZF9wcm9j
LCAwLCAwIH0sCisJIHsgU0lMRU5ULCAwLCBzaWxlbnRfd3JpdGVfcHJvYywgMCB9LAorCSB7IENI
QVJTLCBjaGFyc19yZWFkX3Byb2MsIGNoYXJzX3dyaXRlX3Byb2MsIDAgfSwKKwkgeyBTWU5USCwg
c3ludGhfcmVhZF9wcm9jLCBzeW50aF93cml0ZV9wcm9jLCAwIH0sCisJIHsgS0VZTUFQLCBrZXlz
X3JlYWRfcHJvYywga2V5c193cml0ZV9wcm9jLCAwIH0sCisJIHsgUFVOQ19TT01FLCBiaXRzX3Jl
YWRfcHJvYywgYml0c193cml0ZV9wcm9jLCAxIH0sCisJIHsgUFVOQ19NT1NULCBiaXRzX3JlYWRf
cHJvYywgYml0c193cml0ZV9wcm9jLCAyIH0sCisJIHsgUFVOQ19BTEwsIGJpdHNfcmVhZF9wcm9j
LCAwLCAzIH0sCisJIHsgREVMSU0sIGJpdHNfcmVhZF9wcm9jLCBiaXRzX3dyaXRlX3Byb2MsIDQg
fSwKKwkgeyBSRVBFQVRTLCBiaXRzX3JlYWRfcHJvYywgYml0c193cml0ZV9wcm9jLCA1IH0sCisJ
IHsgRVhOVU1CRVIsIGJpdHNfcmVhZF9wcm9jLCBiaXRzX3dyaXRlX3Byb2MsIDYgfSwKKwkgeyBD
SEFSVEFCLCBjaGFydGFiX3JlYWRfcHJvYywgY2hhcnRhYl93cml0ZV9wcm9jLCAwIH0sCisJeyAt
MSwgMCwgMCwgMCB9Cit9OworCisjZW5kaWYgLy8gQ09ORklHX1BST0NfRlMKKwordm9pZCBfX2lu
aXQgc3BlYWt1cF9pbml0KHN0cnVjdCB2Y19kYXRhICp2YykKK3sKKwlzdHJ1Y3Qgc3Rfc3BrX3Qg
KmZpcnN0X2NvbnNvbGUgPQorCQlhbGxvY19ib290bWVtKHNpemVvZihzdHJ1Y3Qgc3Rfc3BrX3Qp
ICsgMSk7CisJbWVtc2V0KCBmaXJzdF9jb25zb2xlLCAwLCBzaXplb2Yoc3RydWN0IHN0X3Nwa190
KSk7CisJc3BlYWt1cF9vcGVuKHZjLCBmaXJzdF9jb25zb2xlKTsKK30KKwordm9pZCBzcGVha3Vw
X2FsbG9jYXRlKHN0cnVjdCB2Y19kYXRhICp2YykKK3sKKwlpbnQgdmNfbnVtOworCisJdmNfbnVt
ID0gdmMtPnZjX251bTsKKwlpZiAoIHNwZWFrdXBfY29uc29sZVt2Y19udW1dID09IE5VTEwgKSB7
CisJCXNwZWFrdXBfY29uc29sZVt2Y19udW1dID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHN0X3Nw
a190KSArIDEsCisJCQlHRlBfS0VSTkVMKTsKKwkJaWYgKHNwZWFrdXBfY29uc29sZVt2Y19udW1d
ID09IE5VTEwpCisJCQlyZXR1cm47CisJCXNwZWFrdXBfZGF0ZSggdmMpOworCX0gZWxzZSBpZiAo
ICFzcGtfcGFya2VkICkgc3BlYWt1cF9kYXRlKCB2Yyk7Cit9CisKK3N0YXRpYyB1X2NoYXIgaXNf
Y3Vyc29yID0gMDsKK3N0YXRpYyB1X2xvbmcgb2xkX2N1cnNvcl9wb3MsIG9sZF9jdXJzb3JfeCwg
b2xkX2N1cnNvcl95Oworc3RhdGljIGludCBjdXJzb3JfY29uOworc3RhdGljIGludCBjdXJzb3Jf
dGltZXJfYWN0aXZlID0gMDsKKworc3RhdGljIHZvaWQgY3Vyc29yX3N0b3BfdGltZXIodm9pZCkK
K3sKKyAgaWYgKCFjdXJzb3JfdGltZXJfYWN0aXZlICkgcmV0dXJuOworCQlzdG9wX3RpbWVyICgg
Y3Vyc29yX3RpbWVyICk7CisJY3Vyc29yX3RpbWVyX2FjdGl2ZSA9IDA7Cit9CisKK3N0YXRpYyB2
b2lkIHJlc2V0X2hpZ2hsaWdodF9idWZmZXJzKCBzdHJ1Y3QgdmNfZGF0YSAqICk7CisKKy8vZXh0
ZXJuIHZvaWQga2JkX2Zha2VrZXkodW5zaWduZWQgaW50KTsKK2V4dGVybiBzdHJ1Y3QgaW5wdXRf
ZGV2ICpmYWtla2V5ZGV2OworCitzdGF0aWMgaW50IHJlYWRfYWxsX2tleTsKKwordm9pZCByZXNl
dF9pbmRleF9jb3VudChpbnQpOwordm9pZCBnZXRfaW5kZXhfY291bnQoaW50ICosIGludCAqKTsK
Ky8vaW50IHN5bnRoX3N1cHBvcnRzX2luZGV4aW5nKHZvaWQpOworc3RhdGljIHZvaWQgc3RhcnRf
cmVhZF9hbGxfdGltZXIoIHN0cnVjdCB2Y19kYXRhICp2YywgaW50IGNvbW1hbmQgKTsKKworZW51
bSB7UkFfTk9USElORyxSQV9ORVhUX1NFTlQsUkFfUFJFVl9MSU5FLFJBX05FWFRfTElORSxSQV9Q
UkVWX1NFTlQsUkFfRE9XTl9BUlJPVyxSQV9USU1FUixSQV9GSU5EX05FWFRfU0VOVCxSQV9GSU5E
X1BSRVZfU0VOVH07CisKK3N0YXRpYyB2b2lkCitrYmRfZmFrZWtleTIoc3RydWN0IHZjX2RhdGEg
KnZjLGludCB2LGludCBjb21tYW5kKQoreworCWN1cnNvcl9zdG9wX3RpbWVyKCk7CisgICAgICAg
ICgqZG9fY3Vyc29yKSggdmMsdiwwKTsKKyAgICAgICAgKCpkb19jdXJzb3IpKCB2Yyx2LDEpOwor
CXN0YXJ0X3JlYWRfYWxsX3RpbWVyKHZjLGNvbW1hbmQpOworfQorCitzdGF0aWMgdm9pZAorcmVh
ZF9hbGxfZG9jKCBzdHJ1Y3QgdmNfZGF0YSAqdmMpCit7CisJaWYgKCBzeW50aCA9PSBOVUxMIHx8
IHNwa19zaHV0X3VwIHx8ICh2Yy0+dmNfbnVtICE9IGZnX2NvbnNvbGUgKSApCisJCXJldHVybjsK
KwlpZiAoIXN5bnRoX3N1cHBvcnRzX2luZGV4aW5nKCkpCisJCXJldHVybjsKKwlpZiAoY3Vyc29y
X3RyYWNrIT1yZWFkX2FsbF9tb2RlKQorCQlwcmV2X2N1cnNvcl90cmFjaz1jdXJzb3JfdHJhY2s7
CisJY3Vyc29yX3RyYWNrPXJlYWRfYWxsX21vZGU7CisJcmVzZXRfaW5kZXhfY291bnQoMCk7CisJ
aWYgKGdldF9zZW50ZW5jZV9idWYodmMsMCk9PS0xKQorCQlrYmRfZmFrZWtleTIodmMsMCxSQV9E
T1dOX0FSUk9XKTsKKwllbHNlIHsKKwkJc2F5X3NlbnRlbmNlX251bSgwLDApOworCQlzeW50aF9p
bnNlcnRfbmV4dF9pbmRleCgwKTsKKwkJc3RhcnRfcmVhZF9hbGxfdGltZXIodmMsUkFfVElNRVIp
OworCX0KK30KKworc3RhdGljIHZvaWQKK3N0b3BfcmVhZF9hbGwoIHN0cnVjdCB2Y19kYXRhICp2
YykKK3sKKwljdXJzb3Jfc3RvcF90aW1lciggKTsKKwljdXJzb3JfdHJhY2s9cHJldl9jdXJzb3Jf
dHJhY2s7CisJc3BrX3NodXRfdXAgJj0gMHhmZTsKKwlkb19mbHVzaCgpOworfQorCitzdGF0aWMg
dm9pZAorc3RhcnRfcmVhZF9hbGxfdGltZXIoIHN0cnVjdCB2Y19kYXRhICp2YywgaW50IGNvbW1h
bmQgKQoreworCWN1cnNvcl9jb24gPSB2Yy0+dmNfbnVtOworCWN1cnNvcl90aW1lci5leHBpcmVz
ID0gamlmZmllcyArIGN1cnNvcl90aW1lb3V0OworCXJlYWRfYWxsX2tleT1jb21tYW5kOworCXN0
YXJ0X3RpbWVyIChjdXJzb3JfdGltZXIgKTsKKwljdXJzb3JfdGltZXJfYWN0aXZlKys7Cit9CisK
K3N0YXRpYyB2b2lkCitoYW5kbGVfY3Vyc29yX3JlYWRfYWxsKCBzdHJ1Y3QgdmNfZGF0YSAqdmMs
aW50IGNvbW1hbmQgKQoreworCWludCBpbmRjb3VudCxzZW50Y291bnQscnYsc247CisKKwlzd2l0
Y2ggKGNvbW1hbmQpCisJeworCQljYXNlIFJBX05FWFRfU0VOVDoKKwkJCS8vIEdldCBDdXJyZW50
IFNlbnRlbmNlCisJCQlnZXRfaW5kZXhfY291bnQoJmluZGNvdW50LCZzZW50Y291bnQpOworCQkJ
Ly9wcmludGsoIiVkICVkICAiLGluZGNvdW50LHNlbnRjb3VudCk7CisJCQlyZXNldF9pbmRleF9j
b3VudChzZW50Y291bnQrMSk7CisJCQlpZiAoaW5kY291bnQ9PTEpCisJCQl7CisJCQkJaWYgKCFz
YXlfc2VudGVuY2VfbnVtKHNlbnRjb3VudCsxLDApKQorCQkJCXsKKwkJCQkJa2JkX2Zha2VrZXky
KHZjLDAsUkFfRklORF9ORVhUX1NFTlQpOworCQkJCQlyZXR1cm47CisJCQkJfQorCQkJCXN5bnRo
X2luc2VydF9uZXh0X2luZGV4KDApOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCXNuPTA7CisJ
CQkJaWYgKCFzYXlfc2VudGVuY2VfbnVtKHNlbnRjb3VudCsxLDEpKQorCQkJCXsKKwkJCQkJc249
MTsKKwkJCQkJcmVzZXRfaW5kZXhfY291bnQoc24pOworCQkJCX0KKwkJCQllbHNlCisJCQkJCXN5
bnRoX2luc2VydF9uZXh0X2luZGV4KDApOworCQkJCWlmICghc2F5X3NlbnRlbmNlX251bShzbiww
KSkKKwkJCQl7CisJCQkJCWtiZF9mYWtla2V5Mih2YywwLFJBX0ZJTkRfTkVYVF9TRU5UKTsKKwkJ
CQkJcmV0dXJuOworCQkJCX0KKwkJCQlzeW50aF9pbnNlcnRfbmV4dF9pbmRleCgwKTsKKwkJCX0K
KwkJCXN0YXJ0X3JlYWRfYWxsX3RpbWVyKHZjLFJBX1RJTUVSKTsKKwkJCWJyZWFrOworCQljYXNl
IFJBX1BSRVZfU0VOVDoKKwkJCWJyZWFrOworCQljYXNlIFJBX05FWFRfTElORToKKwkJCXJlYWRf
YWxsX2RvYyh2Yyk7CisJCQlicmVhazsKKwkJY2FzZSBSQV9QUkVWX0xJTkU6CisJCQlicmVhazsK
KwkJY2FzZSBSQV9ET1dOX0FSUk9XOgorCQkJaWYgKGdldF9zZW50ZW5jZV9idWYodmMsMCk9PS0x
KQorCQkJeworCQkJCWtiZF9mYWtla2V5Mih2YywwLFJBX0RPV05fQVJST1cpOworCQkJfQorCQkJ
ZWxzZQorCQkJeworCQkJCXNheV9zZW50ZW5jZV9udW0oMCwwKTsKKwkJCQlzeW50aF9pbnNlcnRf
bmV4dF9pbmRleCgwKTsKKwkJCQlzdGFydF9yZWFkX2FsbF90aW1lcih2YyxSQV9USU1FUik7CisJ
CQl9CisJCQlicmVhazsKKwkJY2FzZSBSQV9GSU5EX05FWFRfU0VOVDoKKwkJCXJ2PWdldF9zZW50
ZW5jZV9idWYodmMsMCk7CisJCQlpZiAocnY9PS0xKQorCQkJeworCQkJCXJlYWRfYWxsX2RvYyh2
Yyk7CisJCQl9CisJCQlpZiAocnY9PTApCisJCQl7CisJCQkJa2JkX2Zha2VrZXkyKHZjLDAsUkFf
RklORF9ORVhUX1NFTlQpOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCXNheV9zZW50ZW5jZV9u
dW0oMSwwKTsKKwkJCQlzeW50aF9pbnNlcnRfbmV4dF9pbmRleCgwKTsKKwkJCQlzdGFydF9yZWFk
X2FsbF90aW1lcih2YyxSQV9USU1FUik7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBSQV9GSU5E
X1BSRVZfU0VOVDoKKwkJCWJyZWFrOworCQljYXNlIFJBX1RJTUVSOgorCQkJZ2V0X2luZGV4X2Nv
dW50KCZpbmRjb3VudCwmc2VudGNvdW50KTsKKwkJCWlmIChpbmRjb3VudDwyKQorCQkJeworCQkJ
CWtiZF9mYWtla2V5Mih2YywwLFJBX0RPV05fQVJST1cpOworCQkJfQorCQkJZWxzZQorCQkJewor
CQkJCXN0YXJ0X3JlYWRfYWxsX3RpbWVyKHZjLFJBX1RJTUVSKTsKKwkJCX0KKwkJCWJyZWFrOwor
CX0KK30KKworc3RhdGljIHZvaWQgaGFuZGxlX2N1cnNvcihzdHJ1Y3QgdmNfZGF0YSAqdmMsIHVf
Y2hhciB2YWx1ZSwgY2hhciB1cF9mbGFnKQoreworCWlmIChjdXJzb3JfdHJhY2sgPT0gcmVhZF9h
bGxfbW9kZSkKKwl7CisJCXNwa19wYXJrZWQgJj0gMHhmZTsKKwkJaWYgKCBzeW50aCA9PSBOVUxM
IHx8IHVwX2ZsYWcgfHwgc3BrX3NodXRfdXAgKQorCQkJcmV0dXJuOworCQljdXJzb3Jfc3RvcF90
aW1lcigpOworCQlzcGtfc2h1dF91cCAmPSAweGZlOworCQlkb19mbHVzaCgpOworCQlzdGFydF9y
ZWFkX2FsbF90aW1lcih2Yyx2YWx1ZSsxKTsKKwkJcmV0dXJuOworCX0KKwkoKmRvX2N1cnNvciko
dmMsIHZhbHVlLCB1cF9mbGFnKTsKKwlzcGtfcGFya2VkICY9IDB4ZmU7CisJaWYgKCBzeW50aCA9
PSBOVUxMIHx8IHVwX2ZsYWcgfHwgc3BrX3NodXRfdXAgfHwgY3Vyc29yX3RyYWNrID09IENUX09m
ZiApCisJICByZXR1cm47CisJc3BrX3NodXRfdXAgJj0gMHhmZTsKKwlpZiAoIG5vX2ludHIgKSBk
b19mbHVzaCggKTsKKy8qIHRoZSBrZXkgcHJlc3MgZmx1c2hlcyBpZiAhbm9faW50ZXIgYnV0IHdl
IHdhbnQgdG8gZmx1c2ggb24gY3Vyc29yCisgKiBtb3ZlcyByZWdhcmRsZXNzIG9mIG5vX2ludGVy
IHN0YXRlICovCisJaXNfY3Vyc29yID0gdmFsdWUrMTsKKwlvbGRfY3Vyc29yX3BvcyA9IHZjLT52
Y19wb3M7CisJb2xkX2N1cnNvcl94ID0gdmMtPnZjX3g7CisJb2xkX2N1cnNvcl95ID0gdmMtPnZj
X3k7CisJc3BlYWt1cF9jb25zb2xlW3ZjLT52Y19udW1dLT5odC5jeT12Yy0+dmNfeTsKKwljdXJz
b3JfY29uID0gdmMtPnZjX251bTsKKwljdXJzb3Jfc3RvcF90aW1lciggKTsKKwljdXJzb3JfdGlt
ZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBjdXJzb3JfdGltZW91dDsKKwlpZiAoIGN1cnNvcl90cmFj
ayA9PSBDVF9IaWdobGlnaHQpCisJCXJlc2V0X2hpZ2hsaWdodF9idWZmZXJzKCB2YyApOworCXJl
YWRfYWxsX2tleT12YWx1ZSsxOworCXN0YXJ0X3RpbWVyIChjdXJzb3JfdGltZXIgKTsKKwljdXJz
b3JfdGltZXJfYWN0aXZlKys7Cit9CisKK3N0YXRpYyB2b2lkCit1cGRhdGVfY29sb3JfYnVmZmVy
KCBzdHJ1Y3QgdmNfZGF0YSAqdmMgLCBjb25zdCBjaGFyICppYyAsIGludCBsZW4gKQoreworCWlu
dCBpLGJpLGhpOworCWludCB2Y19udW09dmMtPnZjX251bTsKKwkKKwliaSA9ICggKHZjLT52Y19h
dHRyICYgMHg3MCkgPj4gNCApIDsKKwloaT1zcGVha3VwX2NvbnNvbGVbdmNfbnVtXS0+aHQuaGln
aHNpemVbYmldOworCQorCWk9MDsKKwlpZiAoc3BlYWt1cF9jb25zb2xlW3ZjX251bV0tPmh0Lmhp
Z2hzaXplW2JpXT09MCkKKwl7CisJCXNwZWFrdXBfY29uc29sZVt2Y19udW1dLT5odC5ycG9zW2Jp
XT12Yy0+dmNfcG9zOworCQlzcGVha3VwX2NvbnNvbGVbdmNfbnVtXS0+aHQucnhbYmldPXZjLT52
Y194OworCQlzcGVha3VwX2NvbnNvbGVbdmNfbnVtXS0+aHQucnlbYmldPXZjLT52Y195OworCX0K
Kwl3aGlsZSAoKCBoaTxDT0xPUl9CVUZGRVJfU0laRSApICYmICggaSA8IGxlbiApKQorCXsKKwkJ
aWYgKCggaWNbaV0+MzIgKSAmJiAoIGljW2ldPDEyNyApKQorCQl7CisJCQlzcGVha3VwX2NvbnNv
bGVbdmNfbnVtXS0+aHQuaGlnaGJ1ZltiaV1baGldID0gaWNbaV07CisJCQloaSsrOworCQl9CisJ
CWVsc2UgaWYgKCggaWNbaV0gPT0gMzIgKSAmJiAoIGhpICE9IDAgKSkKKwkJeworCQkJaWYgKHNw
ZWFrdXBfY29uc29sZVt2Y19udW1dLT5odC5oaWdoYnVmW2JpXVtoaS0xXSE9MzIpCisJCQl7CisJ
CQkJc3BlYWt1cF9jb25zb2xlW3ZjX251bV0tPmh0LmhpZ2hidWZbYmldW2hpXSA9IGljW2ldOwor
CQkJCWhpKys7CisJCQl9CisJCX0KKwkJaSsrOworCX0KKwlzcGVha3VwX2NvbnNvbGVbdmNfbnVt
XS0+aHQuaGlnaHNpemVbYmldPWhpOworfQorCitzdGF0aWMgdm9pZAorcmVzZXRfaGlnaGxpZ2h0
X2J1ZmZlcnMoIHN0cnVjdCB2Y19kYXRhICp2YyApCit7CisJaW50IGk7CisJaW50IHZjX251bT12
Yy0+dmNfbnVtOworCWZvciAoIGk9MCA7IGk8OCA7IGkrKyApCisJCXNwZWFrdXBfY29uc29sZVt2
Y19udW1dLT5odC5oaWdoc2l6ZVtpXT0wOworfQorCitzdGF0aWMgaW50Citjb3VudF9oaWdobGln
aHRfY29sb3Ioc3RydWN0IHZjX2RhdGEgKnZjKQoreworCWludCBpLGJnOworCWludCBjYzsKKwlp
bnQgdmNfbnVtPXZjLT52Y19udW07CisJdTE2IGNoOworCXUxNiAqc3RhcnQgPSAodTE2ICopIHZj
LT52Y19vcmlnaW47CisKKwlmb3IgKCBpPTAgOyBpPDggOyBpKysgKQorCQlzcGVha3VwX2NvbnNv
bGVbdmNfbnVtXS0+aHQuYmdjb3VudFtpXT0wOwkJCisKKwlmb3IgKCBpPTAgOyBpPHZjLT52Y19y
b3dzOyBpKysgKSB7CisJCXUxNiAqZW5kID0gc3RhcnQgKyB2Yy0+dmNfY29scyoyOworCQl1MTYg
KnB0cjsKKwkJZm9yICggcHRyPXN0YXJ0IDsgcHRyPGVuZCA7IHB0cisrKSB7CisJCQljaCA9IGdl
dF9hdHRyaWJ1dGVzKCBwdHIgKTsKKwkJCWJnID0gKCBjaCAmIDB4NzAgKSA+PiA0OworCQkJc3Bl
YWt1cF9jb25zb2xlW3ZjX251bV0tPmh0LmJnY291bnRbYmddKys7CisJCX0KKwkJc3RhcnQgKz0g
dmMtPnZjX3NpemVfcm93OworCX0KKworCWNjPTA7CisJZm9yICggaT0wIDsgaTw4IDsgaSsrICkK
KwkJaWYgKHNwZWFrdXBfY29uc29sZVt2Y19udW1dLT5odC5iZ2NvdW50W2ldPjApCisJCQljYysr
OwkJCisJcmV0dXJuIGNjOworfQorCitzdGF0aWMgaW50CitnZXRfaGlnaGxpZ2h0X2NvbG9yKCBz
dHJ1Y3QgdmNfZGF0YSAqdmMgKQoreworCWludCBpLGo7CisJdW5zaWduZWQgaW50IGNwdHJbOF0s
dG1wOworCWludCB2Y19udW09dmMtPnZjX251bTsKKworCWZvciAoIGk9MCA7IGk8OCA7IGkrKyAp
CisJCWNwdHJbaV09aTsKKworCWZvciAoIGk9MCA7IGk8NyA7IGkrKyApCisJCWZvciAoIGo9aSsx
IDsgajw4IDsgaisrICkKKwkJCWlmICggc3BlYWt1cF9jb25zb2xlW3ZjX251bV0tPmh0LmJnY291
bnRbY3B0cltpXV0gPiBzcGVha3VwX2NvbnNvbGVbdmNfbnVtXS0+aHQuYmdjb3VudFtjcHRyW2pd
XSkgeworCQkJCXRtcD1jcHRyW2ldOworCQkJCWNwdHJbaV09Y3B0cltqXTsKKwkJCQljcHRyW2pd
PXRtcDsKKwkJCX0KKworCWZvciAoIGk9MDsgaTw4OyBpKysgKQorCQlpZiAoIHNwZWFrdXBfY29u
c29sZVt2Y19udW1dLT5odC5iZ2NvdW50W2NwdHJbaV1dICE9IDApCisJCQlpZiAoIHNwZWFrdXBf
Y29uc29sZVt2Y19udW1dLT5odC5oaWdoc2l6ZVtjcHRyW2ldXSA+IDApCisJCQl7CisJCQkJcmV0
dXJuIGNwdHJbaV07CisJCQl9CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50CitzcGVha19o
aWdobGlnaHQoIHN0cnVjdCB2Y19kYXRhICp2YyApCit7CisJaW50IGhjLGQ7CisJaW50IHZjX251
bT12Yy0+dmNfbnVtOworCWlmIChjb3VudF9oaWdobGlnaHRfY29sb3IoIHZjICk9PTEpCisJCXJl
dHVybiAwOworCWhjPWdldF9oaWdobGlnaHRfY29sb3IoIHZjICk7CisJaWYgKCBoYyAhPSAtMSAp
CisJeworCQlkPXZjLT52Y195LXNwZWFrdXBfY29uc29sZVt2Y19udW1dLT5odC5jeTsKKwkJaWYg
KChkPT0xKXx8KGQ9PS0xKSkKKwkJeworCQkJaWYgKHNwZWFrdXBfY29uc29sZVt2Y19udW1dLT5o
dC5yeVtoY10hPXZjLT52Y195KQorCQkJCXJldHVybiAwOworCQl9CisJCXNwa19wYXJrZWQgfD0g
MHgwMTsKKwkJZG9fZmx1c2goKTsKKwkJc3BrdXBfd3JpdGUgKHNwZWFrdXBfY29uc29sZVt2Y19u
dW1dLT5odC5oaWdoYnVmW2hjXSAsIHNwZWFrdXBfY29uc29sZVt2Y19udW1dLT5odC5oaWdoc2l6
ZVtoY10gKTsKKwkJc3BrX3Bvcz1zcGtfY3A9c3BlYWt1cF9jb25zb2xlW3ZjX251bV0tPmh0LnJw
b3NbaGNdOwkJCisJCXNwa194PXNwa19jeD1zcGVha3VwX2NvbnNvbGVbdmNfbnVtXS0+aHQucnhb
aGNdOwkJCisJCXNwa195PXNwa19jeT1zcGVha3VwX2NvbnNvbGVbdmNfbnVtXS0+aHQucnlbaGNd
OwkJCisJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK2N1cnNv
cl9kb25lICh1X2xvbmcgZGF0YSApCit7CisJc3RydWN0IHZjX2RhdGEgKnZjID0gdmNfY29uc1tj
dXJzb3JfY29uXS5kOworCWN1cnNvcl9zdG9wX3RpbWVyKCApOworCWlmIChjdXJzb3JfY29uICE9
IGZnX2NvbnNvbGUgKSB7CisJCWlzX2N1cnNvciA9IDA7CisJCXJldHVybjsKKwl9CisJc3BlYWt1
cF9kYXRlICh2YyApOworCWlmICggd2luX2VuYWJsZWQgKSB7CisJCWlmICggdmMtPnZjX3ggPj0g
d2luX2xlZnQgJiYgdmMtPnZjX3ggPD0gd2luX3JpZ2h0ICYmCisJCXZjLT52Y195ID49IHdpbl90
b3AgJiYgdmMtPnZjX3kgPD0gd2luX2JvdHRvbSApIHsKKwkJCXNwa19rZXlkb3duID0gaXNfY3Vy
c29yID0gMDsKKwkJCXJldHVybjsKKwkJfQorCX0KKwlpZiAoIGN1cnNvcl90cmFjayA9PSByZWFk
X2FsbF9tb2RlICkgeworCQloYW5kbGVfY3Vyc29yX3JlYWRfYWxsKHZjLHJlYWRfYWxsX2tleSk7
CisJCXJldHVybjsKKwl9CisJaWYgKCBjdXJzb3JfdHJhY2sgPT0gQ1RfSGlnaGxpZ2h0KSB7CisJ
CWlmICggc3BlYWtfaGlnaGxpZ2h0KCB2YyApKSB7CisJCQlzcGtfa2V5ZG93biA9IGlzX2N1cnNv
ciA9IDA7CisJCQlyZXR1cm47CisJCX0KKwl9CisJaWYgKCBjdXJzb3JfdHJhY2sgPT0gQ1RfV2lu
ZG93KSB7CisJCXNwZWFrdXBfd2luX3NheSAodmMpOworCX0gZWxzZSBpZiAoIGlzX2N1cnNvciA9
PSAxIHx8IGlzX2N1cnNvciA9PSA0ICkKKwkJc2F5X2xpbmVfZnJvbV90byAodmMsIDAsIHZjLT52
Y19jb2xzLCAwICk7CisJZWxzZQorCQlzYXlfY2hhciAoIHZjICk7CisJc3BrX2tleWRvd24gPSBp
c19jdXJzb3IgPSAwOworfQorCisvKiBUaGVzZSBmdW5jdGlvbnMgYXJlIHRoZSBpbnRlcmZhY2Ug
dG8gc3BlYWt1cCBmcm9tIHRoZSBhY3R1YWwga2VybmVsIGNvZGUuICovCisKK3ZvaWQKK3NwZWFr
dXBfYnMgKHN0cnVjdCB2Y19kYXRhICp2YyApCit7CisJaWYgKCFzcGtfcGFya2VkICkKKwkJc3Bl
YWt1cF9kYXRlICh2YyApOworCWlmICggc3BrX3NodXRfdXAgfHwgc3ludGggPT0gTlVMTCApIHJl
dHVybjsKKwlpZiAoIHZjLT52Y19udW0gPT0gZmdfY29uc29sZSAgJiYgc3BrX2tleWRvd24gKSB7
CisJCXNwa19rZXlkb3duID0gMDsKKwkJaWYgKCFpc19jdXJzb3IgKSBzYXlfY2hhciAodmMgKTsK
Kwl9Cit9CisKK3ZvaWQKK3NwZWFrdXBfY29uX3dyaXRlIChzdHJ1Y3QgdmNfZGF0YSAqdmMsIGNv
bnN0IGNoYXIgKnN0ciwgaW50IGxlbiApCit7CisJaWYgKHNwa19zaHV0X3VwIHx8ICh2Yy0+dmNf
bnVtICE9IGZnX2NvbnNvbGUgKSApCisJCXJldHVybjsKKwlpZiAoYmVsbF9wb3MgJiYgc3BrX2tl
eWRvd24gJiYgKHZjLT52Y194ID09IGJlbGxfcG9zIC0gMSApICkKKwkJYmxlZXAoMyApOworCWlm
IChzeW50aCA9PSBOVUxMKSByZXR1cm47CisJaWYgKChpc19jdXJzb3IpfHwoY3Vyc29yX3RyYWNr
ID09IHJlYWRfYWxsX21vZGUgKSkgeworCQlpZiAoY3Vyc29yX3RyYWNrID09IENUX0hpZ2hsaWdo
dCApCisJCQl1cGRhdGVfY29sb3JfYnVmZmVyKCB2Yywgc3RyLCBsZW4pOworCQlyZXR1cm47CisJ
fQorCWlmICggd2luX2VuYWJsZWQgKSB7CisJCWlmICggdmMtPnZjX3ggPj0gd2luX2xlZnQgJiYg
dmMtPnZjX3ggPD0gd2luX3JpZ2h0ICYmCisJCXZjLT52Y195ID49IHdpbl90b3AgJiYgdmMtPnZj
X3kgPD0gd2luX2JvdHRvbSApIHJldHVybjsKKwl9CisKKwlzcGt1cF93cml0ZSAoc3RyLCBsZW4g
KTsKK30KKwordm9pZAorc3BlYWt1cF9jb25fdXBkYXRlIChzdHJ1Y3QgdmNfZGF0YSAqdmMgKQor
eworCWlmICggc3BlYWt1cF9jb25zb2xlW3ZjLT52Y19udW1dID09IE5VTEwgfHwgc3BrX3Bhcmtl
ZCApCisJCXJldHVybjsKKwlzcGVha3VwX2RhdGUgKHZjICk7Cit9CisKK3N0YXRpYyB2b2lkIGhh
bmRsZV9zcGVjKHN0cnVjdCB2Y19kYXRhICp2YywgdV9jaGFyIHZhbHVlLCBjaGFyIHVwX2ZsYWcp
Cit7CisJaW50IG9uX29mZiA9IDI7CisJY2hhciAqbGFiZWw7CisJc3RhdGljIGNvbnN0IGNoYXIg
KmxvY2tfc3RhdHVzW10gPSB7ICIgb2ZmIiwgIiBvbiIsICIiIH07CisJKCpkb19zcGVjKSh2Yywg
dmFsdWUsIHVwX2ZsYWcpOworCWlmICggc3ludGggPT0gTlVMTCB8fCB1cF9mbGFnIHx8IHNwa19r
aWxsZWQgKSByZXR1cm47CisJc3BrX3NodXRfdXAgJj0gMHhmZTsKKwlpZiAoIG5vX2ludHIgKSBk
b19mbHVzaCggKTsKKwlzd2l0Y2ggKHZhbHVlICkgeworCQljYXNlIEtWQUwoIEtfQ0FQUyApOgor
CQkJbGFiZWwgPSAiY2FwcyBsb2NrIjsKKwkJCW9uX29mZiA9ICAodmNfa2JkX2xlZChrYmQgLCBW
Q19DQVBTTE9DSyApICk7CisJCQlicmVhazsKKwkJY2FzZSBLVkFMKCBLX05VTSApOgorCQkJbGFi
ZWwgPSAibnVtIGxvY2siOworCQkJb25fb2ZmID0gKHZjX2tiZF9sZWQoa2JkICwgVkNfTlVNTE9D
SyApICk7CisJCQlicmVhazsKKwkJY2FzZSBLVkFMKCBLX0hPTEQgKToKKwkJCWxhYmVsID0gInNj
cm9sbCBsb2NrIjsKKwkJCW9uX29mZiA9ICh2Y19rYmRfbGVkKGtiZCAsIFZDX1NDUk9MTE9DSyAp
ICk7CisJCQlicmVhazsKKwlkZWZhdWx0OgorCQlzcGtfcGFya2VkICY9IDB4ZmU7CisJCXJldHVy
bjsKKwl9CisJc3ludGhfd3JpdGVfc3RyaW5nICggbGFiZWwgKTsKKwlzeW50aF93cml0ZV9tc2cg
KCBsb2NrX3N0YXR1c1tvbl9vZmZdICk7Cit9CisKK3N0YXRpYyBpbnQKK2luY19kZWNfdmFyKCB1
X2NoYXIgdmFsdWUgKQoreworCXN0cnVjdCBzdF92YXJfaGVhZGVyICpwX2hlYWRlcjsKKwlzdHJ1
Y3Qgc3RfbnVtX3ZhciAqdmFyX2RhdGE7CisJY2hhciBudW1fYnVmWzMyXTsKKwljaGFyICpjcCA9
IG51bV9idWYsICpwbjsKKwlpbnQgdmFyX2lkID0gKGludCl2YWx1ZSAtIFZBUl9TVEFSVDsKKwlp
bnQgaG93ID0gKHZhcl9pZCYxKSA/IEVfSU5DIDogRV9ERUM7CisJdmFyX2lkID0gdmFyX2lkLzIr
RklSU1RfU0VUX1ZBUjsKKwlwX2hlYWRlciA9IGdldF92YXJfaGVhZGVyKCB2YXJfaWQgKTsKKwlp
ZiAoIHBfaGVhZGVyID09IE5VTEwgKSByZXR1cm4gLTE7CisJaWYgKCBwX2hlYWRlci0+dmFyX3R5
cGUgIT0gVkFSX05VTSApIHJldHVybiAtMTsKKwl2YXJfZGF0YSA9IHBfaGVhZGVyLT5kYXRhOwor
CWlmICggc2V0X251bV92YXIoIDEsIHBfaGVhZGVyLCBob3cgKSAhPSAwICkKKwkJcmV0dXJuIC0x
OworCWlmICggIXNwa19jbG9zZV9wcmVzcyApIHsKKwkJZm9yICggcG4gPSBwX2hlYWRlci0+bmFt
ZTsgKnBuOyBwbisrICkgeworCQkJaWYgKCAqcG4gPT0gJ18nICkgKmNwID0gU1BBQ0U7CisJCQll
bHNlICpjcCsrID0gKnBuOworCQl9CisJfQorCXNwcmludGYoIGNwLCAiICVkICIsIChpbnQpdmFy
X2RhdGEtPnZhbHVlICk7CisJc3ludGhfd3JpdGVfc3RyaW5nKCBudW1fYnVmICk7CisJcmV0dXJu
IDA7Cit9CisKK3N0YXRpYyB2b2lkCitzcGVha3VwX3dpbl9zZXQgKHN0cnVjdCB2Y19kYXRhICp2
YyApCit7CisJY2hhciBpbmZvWzQwXTsKKwlpZiAoIHdpbl9zdGFydCA+IDEgKSB7CisJCXN5bnRo
X3dyaXRlX21zZyggIndpbmRvdyBhbHJlYWR5IHNldCwgY2xlYXIgdGhlbiByZXNldCIgKTsKKwkJ
cmV0dXJuOworCX0KKwlpZiAoIHNwa194IDwgd2luX2xlZnQgfHwgc3BrX3kgPCB3aW5fdG9wICkg
eworCQlzeW50aF93cml0ZV9tc2coICJlcnJvciBlbmQgYmVmb3JlIHN0YXJ0IiApOworCQlyZXR1
cm47CisJfQorCWlmICggd2luX3N0YXJ0ICYmIHNwa194ID09IHdpbl9sZWZ0ICYmIHNwa195ID09
IHdpbl90b3AgKSB7CisJCXdpbl9sZWZ0ID0gMDsKKwkJd2luX3JpZ2h0ID0gdmMtPnZjX2NvbHMt
MTsKKwkJd2luX2JvdHRvbSA9IHNwa195OworCQlzcHJpbnRmKCBpbmZvLCAid2luZG93IGlzIGxp
bmUgJWQiLCAoaW50KXdpbl90b3ArMSApOworCX0gZWxzZSB7CisJCWlmICggIXdpbl9zdGFydCAp
IHsKKwkJCXdpbl90b3AgPSBzcGtfeTsKKwkJCXdpbl9sZWZ0ID0gc3BrX3g7CisJCX0gZWxzZSB7
CisJCQl3aW5fYm90dG9tID0gc3BrX3k7CisJCQl3aW5fcmlnaHQgPSBzcGtfeDsKKwkJfQorCQlz
cHJpbnRmKCBpbmZvLCAiJXMgYXQgbGluZSAlZCwgY29sdW1uICVkIiwKKwkJCSh3aW5fc3RhcnQp
ID8gImVuZCIgOiAic3RhcnQiLAorCQkJKGludClzcGtfeSsxLCAoaW50KXNwa194KzEgKTsKKwl9
CisJc3ludGhfd3JpdGVfbXNnKCBpbmZvICk7CisJd2luX3N0YXJ0Kys7Cit9CisKK3N0YXRpYyB2
b2lkCitzcGVha3VwX3dpbl9jbGVhciAoc3RydWN0IHZjX2RhdGEgKnZjICkKK3sKKwl3aW5fdG9w
ID0gd2luX2JvdHRvbSA9IDA7CisJd2luX2xlZnQgPSB3aW5fcmlnaHQgPSAwOworCXdpbl9zdGFy
dCA9IDA7CisJc3ludGhfd3JpdGVfbXNnKCAid2luZG93IGNsZWFyZWQiICk7Cit9CisKK3N0YXRp
YyB2b2lkCitzcGVha3VwX3dpbl9lbmFibGUgKHN0cnVjdCB2Y19kYXRhICp2YyApCit7CisJaWYg
KCB3aW5fc3RhcnQgPCAyICkgeworCQlzeW50aF93cml0ZV9tc2coICJubyB3aW5kb3ciICk7CisJ
CXJldHVybjsKKwl9CisJd2luX2VuYWJsZWQgXj0gMTsKKwlpZiAoIHdpbl9lbmFibGVkICkgc3lu
dGhfd3JpdGVfbXNnKCAid2luZG93IHNpbGVuY2VkIiApOworCWVsc2Ugc3ludGhfd3JpdGVfbXNn
KCAid2luZG93IHNpbGVuY2UgZGlzYWJsZWQiICk7Cit9CisKK3N0YXRpYyB2b2lkCitzcGVha3Vw
X2JpdHMgKHN0cnVjdCB2Y19kYXRhICp2YyApCit7CisJaW50IHZhbCA9IHRoaXNfc3BlYWt1cF9r
ZXkgLSAoIEZJUlNUX0VESVRfQklUUyAtIDEgKTsKKwlpZiAoIHNwZWNpYWxfaGFuZGxlciAhPSBO
VUxMIHx8IHZhbCA8IDEgfHwgdmFsID4gNiApIHsKKwkJc3ludGhfd3JpdGVfbXNnKCAiZXJyb3Ii
ICk7CisJCXJldHVybjsKKwl9CisJcGJfZWRpdCA9ICZwdW5jX2luZm9bdmFsXTsKKwlzcHJpbnRm
KCBidWYsICJlZGl0ICAlcywgcHJlc3Mgc3BhY2Ugd2hlbiBkb25lIiwgcGJfZWRpdC0+bmFtZSAp
OworCXN5bnRoX3dyaXRlX21zZyggYnVmICk7CisJc3BlY2lhbF9oYW5kbGVyID0gZWRpdF9iaXRz
OworfQorCitzdGF0aWMgaW50IGhhbmRsZV9nb3RvIChzdHJ1Y3QgdmNfZGF0YSAqdmMsIHVfY2hh
ciB0eXBlLCB1X2NoYXIgY2gsIHVfc2hvcnQga2V5ICkKK3sKKwlzdGF0aWMgdV9jaGFyICpnb3Rv
X2J1ZiA9ICJcMFwwXDBcMFwwXDAiOworCXN0YXRpYyBpbnQgbnVtID0gMDsKKwlzaG9ydCBtYXhs
ZW4sIGdvX3BvczsKKwljaGFyICpjcDsKKwlpZiAoIHR5cGUgPT0gS1RfU1BLVVAgJiYgY2ggPT0g
U1BFQUtVUF9HT1RPICkgZ290byBkb19nb3RvOworCWlmICggdHlwZSA9PSBLVF9MQVRJTiAmJiBj
aCA9PSAnXG4nICkgZ290byBkb19nb3RvOworCWlmICggdHlwZSAhPSAwICkgZ290byBvb3BzOwor
CWlmIChjaCA9PSA4ICkgeworCQlpZiAoIG51bSA9PSAwICkgcmV0dXJuIC0xOworCQljaCA9IGdv
dG9fYnVmWy0tbnVtXTsKKwkJZ290b19idWZbbnVtXSA9ICdcMCc7CisJCXNwa3VwX3dyaXRlKCAm
Y2gsIDEgKTsKKwkJcmV0dXJuIDE7Cit9CisJaWYgKCBjaCA8ICcrJyB8fCBjaCA+ICd5JyApIGdv
dG8gb29wczsKKwlnb3RvX2J1ZltudW0rK10gPSBjaDsKKwlnb3RvX2J1ZltudW1dID0gJ1wwJzsK
KwlzcGt1cF93cml0ZSggJmNoLCAxICk7CisJbWF4bGVuID0gKCAqZ290b19idWYgPj0gJzAnICkg
PyAzIDogNDsKKwlpZiAoKGNoID09ICcrJyB8fCBjaCA9PSAnLScgKSAmJiBudW0gPT0gMSApIHJl
dHVybiAxOworCWlmIChjaCA+PSAnMCcgJiYgY2ggPD0gJzknICYmIG51bSA8IG1heGxlbiApIHJl
dHVybiAxOworCWlmICggbnVtIDwgbWF4bGVuLTEgfHwgbnVtID4gbWF4bGVuICkgZ290byBvb3Bz
OworCWlmICggY2ggPCAneCcgfHwgY2ggPiAneScgKSB7Citvb3BzOgorCQlpZiAoIXNwa19raWxs
ZWQgKQorCQkJc3ludGhfd3JpdGVfbXNnICgiIGdvdG8gY2FuY2VsZWQiICk7CisJCWdvdG9fYnVm
W251bSA9IDBdID0gJ1wwJzsKKwkJc3BlY2lhbF9oYW5kbGVyID0gTlVMTDsKKwkJcmV0dXJuIDE7
CisJfQorCWNwID0gc3BlYWt1cF9zMmkgKGdvdG9fYnVmLCAmZ29fcG9zICk7CisJZ290b19wb3Mg
PSAodV9sb25nKWdvX3BvczsKKwlpZiAoKmNwID09ICd4JyApIHsKKwkJaWYgKCpnb3RvX2J1ZiA8
ICcwJyApIGdvdG9fcG9zICs9IHNwa194OworCQllbHNlIGdvdG9fcG9zLS07CisJCWlmIChnb3Rv
X3BvcyA8IDAgKSBnb3RvX3BvcyA9IDA7CisJCWlmIChnb3RvX3BvcyA+PSB2Yy0+dmNfY29scyAp
CisJCQlnb3RvX3BvcyA9IHZjLT52Y19jb2xzLTE7CisJCWdvdG9feCA9IDE7CisJfSBlbHNlIHsK
KwkJaWYgKCpnb3RvX2J1ZiA8ICcwJyApIGdvdG9fcG9zICs9IHNwa195OworCQllbHNlIGdvdG9f
cG9zLS07CisJCWlmIChnb3RvX3BvcyA8IDAgKSBnb3RvX3BvcyA9IDA7CisJaWYgKGdvdG9fcG9z
ID49IHZjLT52Y19yb3dzICkgZ290b19wb3MgPSB2Yy0+dmNfcm93cy0xOworCQlnb3RvX3ggPSAw
OworCX0KKwkJZ290b19idWZbbnVtID0gMF0gPSAnXDAnOworZG9fZ290bzoKKwlzcGVjaWFsX2hh
bmRsZXIgPSBOVUxMOworCXNwa19wYXJrZWQgfD0gMHgwMTsKKwlpZiAoIGdvdG9feCApIHsKKwkJ
c3BrX3BvcyAtPSBzcGtfeCAqIDI7CisJCXNwa194ID0gZ290b19wb3M7CisJCXNwa19wb3MgKz0g
Z290b19wb3MgKiAyOworCQlzYXlfd29yZCggdmMgKTsKKwl9IGVsc2UgeworCQlzcGtfeSA9IGdv
dG9fcG9zOworCQlzcGtfcG9zID0gdmMtPnZjX29yaWdpbiArICggZ290b19wb3MgKiB2Yy0+dmNf
c2l6ZV9yb3cgKTsKKwkJc2F5X2xpbmUoIHZjICk7CisJfQorCXJldHVybiAxOworfQorCitzdGF0
aWMgdm9pZAorc3BlYWt1cF9nb3RvIChzdHJ1Y3QgdmNfZGF0YSAqdmMgKQoreworCWlmICggc3Bl
Y2lhbF9oYW5kbGVyICE9IE5VTEwgKSB7CisJCXN5bnRoX3dyaXRlX21zZyggImVycm9yIiApOwor
CQlyZXR1cm47CisJfQorCXN5bnRoX3dyaXRlX21zZyggImdvIHRvPyIgKTsKKwlzcGVjaWFsX2hh
bmRsZXIgPSBoYW5kbGVfZ290bzsKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkCitsb2FkX2hl
bHAgKCBzdHJ1Y3Qgd29ya19zdHJ1Y3QgKmR1bW15ICkKK3sKKwlyZXF1ZXN0X21vZHVsZSggInNw
ZWFrdXBfa2V5aGVscCIgKTsKKwlpZiAoIGhlbHBfaGFuZGxlciApIHsKKwkJKCpoZWxwX2hhbmRs
ZXIpKDAsIEtUX1NQS1VQLCBTUEVBS1VQX0hFTFAsIDAgKTsKKwl9IGVsc2Ugc3ludGhfd3JpdGVf
c3RyaW5nKCAiaGVscCBtb2R1bGUgbm90IGZvdW5kIiApOworfQorCitzdGF0aWMgREVDTEFSRV9X
T1JLKGxkX2hlbHAsIGxvYWRfaGVscCk7CisjZGVmaW5lIHNjaGVkdWxlX2hlbHAgc2NoZWR1bGVf
d29yaworCitzdGF0aWMgdm9pZAorc3BlYWt1cF9oZWxwIChzdHJ1Y3QgdmNfZGF0YSAqdmMgKQor
eworCWlmICggaGVscF9oYW5kbGVyID09IE5VTEwgKSB7CisvKiB3ZSBjYW4ndCBjYWxsIHJlcXVl
c3RfbW9kdWxlIGZyb20gdGhpcyBjb250ZXh0IHNvIHNjaGVkdWxlIGl0Ki8KKy8qICoqKiogbm90
ZSBrZXJuZWwgaGFuZ3MgYW5kIG15IHdyYXRoIHdpbGwgYmUgb24geW91ICovCisJCXNjaGVkdWxl
X2hlbHAgKCZsZF9oZWxwKTsKKwkJcmV0dXJuOworCX0KKwkoKmhlbHBfaGFuZGxlcikodmMsIEtU
X1NQS1VQLCBTUEVBS1VQX0hFTFAsIDAgKTsKK30KKworc3RhdGljIHZvaWQKK2RvX25vdGhpbmcg
KHN0cnVjdCB2Y19kYXRhICp2YyApCit7CisJcmV0dXJuOyAvKiBmbHVzaCBkb25lIGluIGRvX3Nw
a3VwICovCit9CitzdGF0aWMgdV9jaGFyIGtleV9zcGVha3VwID0gMCwgc3BrX2tleV9sb2NrZWQg
PSAwOworCitzdGF0aWMgdm9pZAorc3BlYWt1cF9sb2NrIChzdHJ1Y3QgdmNfZGF0YSAqdmMgKQor
eworCWlmICggIXNwa19rZXlfbG9ja2VkICkKKwkJc3BrX2tleV9sb2NrZWQgPSBrZXlfc3BlYWt1
cCA9IDE2OworCWVsc2Ugc3BrX2tleV9sb2NrZWQgPSBrZXlfc3BlYWt1cCA9IDA7Cit9CisKK3R5
cGVkZWYgdm9pZCAoKnNwa3VwX2hhbmQgKShzdHJ1Y3QgdmNfZGF0YSAqICk7CitzcGt1cF9oYW5k
IHNwa3VwX2hhbmRsZXJbXSA9IHsgLyogbXVzdCBiZSBvcmRlcmVkIHNhbWUgYXMgZGVmaW5lcyBp
biBzcGVha3VwLmggKi8KKwlkb19ub3RoaW5nLCBzcGVha3VwX2dvdG8sIHNwZWVjaF9raWxsLCBz
cGVha3VwX3NodXRfdXAsCisJc3BlYWt1cF9jdXQsIHNwZWFrdXBfcGFzdGUsIHNheV9maXJzdF9j
aGFyLCBzYXlfbGFzdF9jaGFyLAorCXNheV9jaGFyLCBzYXlfcHJldl9jaGFyLCBzYXlfbmV4dF9j
aGFyLAorCXNheV93b3JkLCBzYXlfcHJldl93b3JkLCBzYXlfbmV4dF93b3JkLAorCXNheV9saW5l
LCBzYXlfcHJldl9saW5lLCBzYXlfbmV4dF9saW5lLAorCXRvcF9lZGdlLCBib3R0b21fZWRnZSwg
bGVmdF9lZGdlLCByaWdodF9lZGdlLAorCSAgICAgICAgc3BlbGxfd29yZCwgc3BlbGxfd29yZCwg
c2F5X3NjcmVlbiwKKwlzYXlfcG9zaXRpb24sIHNheV9hdHRyaWJ1dGVzLAorCXNwZWFrdXBfb2Zm
LCBzcGVha3VwX3BhcmtlZCwgc2F5X2xpbmUsIC8vIHRoaXMgaXMgZm9yIGluZGVudAorCXNheV9m
cm9tX3RvcCwgc2F5X3RvX2JvdHRvbSwKKwlzYXlfZnJvbV9sZWZ0LCBzYXlfdG9fcmlnaHQsCisJ
c2F5X2NoYXJfbnVtLCBzcGVha3VwX2JpdHMsIHNwZWFrdXBfYml0cywgc2F5X3Bob25ldGljX2No
YXIsCisJc3BlYWt1cF9iaXRzLCBzcGVha3VwX2JpdHMsIHNwZWFrdXBfYml0cywKKwlzcGVha3Vw
X3dpbl9zZXQsIHNwZWFrdXBfd2luX2NsZWFyLCBzcGVha3VwX3dpbl9lbmFibGUsIHNwZWFrdXBf
d2luX3NheSwKKwlzcGVha3VwX2xvY2ssIHNwZWFrdXBfaGVscCwgdG9nZ2xlX2N1cnNvcmluZywg
cmVhZF9hbGxfZG9jLCAgTlVMTAorfTsKKworc3RhdGljIHZvaWQgZG9fc3BrdXAoIHN0cnVjdCB2
Y19kYXRhICp2Yyx1X2NoYXIgdmFsdWUgKQoreworCWlmIChzcGtfa2lsbGVkICYmIHZhbHVlICE9
IFNQRUVDSF9LSUxMICkgcmV0dXJuOworCXNwa19rZXlkb3duID0gMDsKKwlzcGtfbGFzdGtleSA9
IDA7CisJc3BrX3NodXRfdXAgJj0gMHhmZTsKKwl0aGlzX3NwZWFrdXBfa2V5ID0gdmFsdWU7CisJ
aWYgKHZhbHVlIDwgU1BLVVBfTUFYX0ZVTkMgJiYgc3BrdXBfaGFuZGxlclt2YWx1ZV0gKSB7CisJ
CWRvX2ZsdXNoKCApOworCQkoKnNwa3VwX2hhbmRsZXJbdmFsdWVdICkodmMgKTsKKwl9IGVsc2Ug
eworCQlpZiAoIGluY19kZWNfdmFyKCB2YWx1ZSApIDwgMCApCisJCQlibGVlcCggOSApOworCX0K
K30KKworCXN0YXRpYyBjb25zdCBjaGFyICpwYWRfY2hhcnMgPSAiMDEyMzQ1Njc4OSstKi9cMDE1
LC4/KCkiOworCitpbnQKK3NwZWFrdXBfa2V5IChzdHJ1Y3QgdmNfZGF0YSAqdmMsIGludCBzaGlm
dF9zdGF0ZSwgaW50IGtleWNvZGUsIHVfc2hvcnQga2V5c3ltLCBpbnQgdXBfZmxhZykKK3sKKwlp
bnQga2g7CisJdV9jaGFyICprZXlfaW5mbzsKKwl1X2NoYXIgdHlwZSA9IEtUWVAoIGtleXN5bSAp
LCB2YWx1ZSA9IEtWQUwoIGtleXN5bSApLCBuZXdfa2V5ID0gMDsKKwl1X2NoYXIgc2hpZnRfaW5m
bywgb2Zmc2V0OworCXR0eSA9IHZjLT52Y190dHk7CisJaWYgKCBzeW50aCA9PSBOVUxMICkgcmV0
dXJuIDA7CisJaWYgKCB0eXBlID49IDB4ZjAgKSB0eXBlIC09IDB4ZjA7CisJaWYgKCB0eXBlID09
IEtUX1BBRCAmJiAodmNfa2JkX2xlZChrYmQgLCBWQ19OVU1MT0NLICkgKSApIHsKKwkJaWYgKCB1
cF9mbGFnICkgeworCQkJc3BrX2tleWRvd24gPSAwOworCQkJcmV0dXJuIDA7CisJCX0KKwkJdmFs
dWUgPSBzcGtfbGFzdGtleSA9IHBhZF9jaGFyc1t2YWx1ZV07CisJCXNwa19rZXlkb3duKys7CisJ
CXNwa19wYXJrZWQgJj0gMHhmZTsKKwkJZ290byBub19tYXA7CisJfQorCWlmICgga2V5Y29kZSA+
PSBNQVhfS0VZICkgZ290byBub19tYXA7CisJaWYgKCAoIGtleV9pbmZvID0gb3VyX2tleXNba2V5
Y29kZV0gKSA9PSAwICkgZ290byBub19tYXA7CisJLy8gQ2hlY2sgdmFsaWQgcmVhZCBhbGwgbW9k
ZSBrZXlzCisgICAgICAgIGlmICggKGN1cnNvcl90cmFjaz09cmVhZF9hbGxfbW9kZSkgJiYgKCAh
dXBfZmxhZyApKQorCXsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHZhbHVlKQorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgS1ZBTChLX0RPV04pOgorICAg
ICAgICAgICAgICAgICAgICAgICAgY2FzZSBLVkFMKEtfVVApOgorICAgICAgICAgICAgICAgICAg
ICAgICAgY2FzZSBLVkFMKEtfTEVGVCk6CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEtW
QUwoS19SSUdIVCk6CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEtWQUwoS19QR1VQKToK
KyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgS1ZBTChLX1BHRE4pOgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1
bHQ6CisJCQkJc3RvcF9yZWFkX2FsbCh2Yyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKwl9CisJc2hpZnRfaW5mbyA9ICggc2hpZnRf
c3RhdGUmMHgwZiApICsga2V5X3NwZWFrdXA7CisJb2Zmc2V0ID0gc2hpZnRfdGFibGVbc2hpZnRf
aW5mb107CisJaWYgKCBvZmZzZXQgJiYgKCBuZXdfa2V5ID0ga2V5X2luZm9bb2Zmc2V0XSApICkg
eworCQlpZiAoIG5ld19rZXkgPT0gU1BLX0tFWSApIHsKKwkJCWlmICggIXNwa19rZXlfbG9ja2Vk
ICkKKwkJCQlrZXlfc3BlYWt1cCA9ICggdXBfZmxhZyApID8gMCA6IDE2OworCQkJaWYgKCB1cF9m
bGFnIHx8IHNwa19raWxsZWQgKSByZXR1cm4gMTsKKwkJCXNwa19zaHV0X3VwICY9IDB4ZmU7CisJ
CQlkb19mbHVzaCggKTsKKwkJCXJldHVybiAxOworCQl9CisJCWlmICggdXBfZmxhZyApIHJldHVy
biAxOworCQlpZiAoIGxhc3Rfa2V5Y29kZSA9PSBrZXljb2RlICYmIGxhc3Rfc3BrX2ppZmZ5K01B
WF9ERUxBWSA+IGppZmZpZXMgKSB7CisJCQlzcGtfY2xvc2VfcHJlc3MgPSAxOworCQkJb2Zmc2V0
ID0gc2hpZnRfdGFibGVbc2hpZnRfaW5mbyszMl07CisvKiBkb3VibGUgcHJlc3M/ICovCisJCQlp
ZiAoIG9mZnNldCAmJiBrZXlfaW5mb1tvZmZzZXRdICkKKwkJCQluZXdfa2V5ID0ga2V5X2luZm9b
b2Zmc2V0XTsKKwkJfQorCQlsYXN0X2tleWNvZGUgPSBrZXljb2RlOworCQlsYXN0X3Nwa19qaWZm
eSA9IGppZmZpZXM7CisJCXR5cGUgPSBLVF9TUEtVUDsKKwkJdmFsdWUgPSBuZXdfa2V5OworCX0K
K25vX21hcDoKKwlpZiAoIHR5cGUgPT0gS1RfU1BLVVAgJiYgc3BlY2lhbF9oYW5kbGVyID09IE5V
TEwgKSB7CisJCWRvX3Nwa3VwKCB2YywgbmV3X2tleSApOworCQlzcGtfY2xvc2VfcHJlc3MgPSAw
OworCQlyZXR1cm4gMTsKKwl9CisJaWYgKCB1cF9mbGFnIHx8IHNwa19raWxsZWQgfHwgdHlwZSA9
PSBLVF9TSElGVCApIHJldHVybiAwOworCXNwa19zaHV0X3VwICY9IDB4ZmU7CisJa2g9KHZhbHVl
PT1LVkFMKEtfRE9XTikpfHwodmFsdWU9PUtWQUwoS19VUCkpfHwodmFsdWU9PUtWQUwoS19MRUZU
KSl8fCh2YWx1ZT09S1ZBTChLX1JJR0hUKSk7CisJaWYgKChjdXJzb3JfdHJhY2sgIT0gcmVhZF9h
bGxfbW9kZSkgfHwgIWtoKQorCQlpZiAoIW5vX2ludHIgKSBkb19mbHVzaCggKTsKKwlpZiAoIHNw
ZWNpYWxfaGFuZGxlciApIHsKKwkJaW50IHN0YXR1czsKKwkJaWYgKCB0eXBlID09IEtUX1NQRUMg
JiYgdmFsdWUgPT0gMSApIHsKKwkJCXZhbHVlID0gJ1xuJzsKKwkJCXR5cGUgPSBLVF9MQVRJTjsK
KwkJfSBlbHNlIGlmICggdHlwZSA9PSBLVF9MRVRURVIgKSB0eXBlID0gS1RfTEFUSU47CisJCWVs
c2UgaWYgKCB2YWx1ZSA9PSAweDdmICkgdmFsdWUgPSA4OyAvKiBtYWtlIGRlbCA9IGJhY2tzcGFj
ZSAqLworCQlzdGF0dXMgPSAoKnNwZWNpYWxfaGFuZGxlcikodmMsIHR5cGUsIHZhbHVlLCBrZXlj
b2RlICk7CisJCXNwa19jbG9zZV9wcmVzcyA9IDA7CisJCWlmICggc3RhdHVzIDwgMCApIGJsZWVw
KCA5ICk7CisJCXJldHVybiBzdGF0dXM7CisJfQorCWxhc3Rfa2V5Y29kZSA9IDA7CisJcmV0dXJu
IDA7Cit9CisKKyNpZmRlZiBNT0RVTEUKKworZXh0ZXJuIHZvaWQgc3BlYWt1cF9yZW1vdmUodm9p
ZCk7CitleHRlcm4gdm9pZCBzcGVha3VwX3NldF9hZGRyZXNzZXMgKCBzcGtfY29uX2Z1bmMsIHNw
a19jb25fZnVuYywgc3BrX3dyaXRlX2Z1bmMsIHNwa19jb25fZnVuYywgc3BrX2tleV9mdW5jKTsK
Kworc3RhdGljIHZvaWQgX19leGl0IG1vZF9zcGVha3VwX2V4aXQodm9pZCkKK3sKKwlpbnQgaTsK
KworCWtleV9oYW5kbGVyW0tUX0xBVElOXSA9IGRvX2xhdGluOworCWtleV9oYW5kbGVyW0tUX1NQ
RUNdID0gZG9fc3BlYzsKKwlrZXlfaGFuZGxlcltLVF9DVVJdID0gZG9fY3Vyc29yOworCWtleV9o
YW5kbGVyW0tUX1NISUZUXSA9IGRvX3NoaWZ0OworCXNwZWFrdXBfc2V0X2FkZHJlc3NlcyhOVUxM
LCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKTsKKwlzeW50aF9yZWxlYXNlKCk7CisJc3BlYWt1cF9y
ZW1vdmUoKTsKKwlmb3IoaSA9IDA7IGkgPCAyNTY7IGkrKykgeworCQlpZiAoY2hhcmFjdGVyc1tp
XSAhPSBkZWZhdWx0X2NoYXJzW2ldKQorCQkJa2ZyZWUoY2hhcmFjdGVyc1tpXSk7CisJfQorCWZv
cihpID0gMDsgc3BlYWt1cF9jb25zb2xlW2ldOyBpKyspIHsKKwkgIGtmcmVlKHNwZWFrdXBfY29u
c29sZVtpXSk7CisJICBzcGVha3VwX2NvbnNvbGVbaV0gPSBOVUxMOworCX0KK30KKworc3RhdGlj
IGludCBfX2luaXQgbW9kX3NwZWFrdXBfaW5pdCggdm9pZCApCit7CisJaW50IGk7CisJc3RydWN0
IHN0X3Nwa190ICpmaXJzdF9jb25zb2xlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHN0X3Nwa190
KSArIDEsCisJCUdGUF9LRVJORUwpOworCXNwZWFrdXBfb3BlbiggdmNfY29uc1tmZ19jb25zb2xl
XS5kLCBmaXJzdF9jb25zb2xlICk7Citmb3IgKCBpID0gMDsgdmNfY29uc1tpXS5kOyBpKyspCisg
IHNwZWFrdXBfYWxsb2NhdGUodmNfY29uc1tpXS5kKTsKKwlzcGVha3VwX3NldF9hZGRyZXNzZXMo
IHNwZWFrdXBfYWxsb2NhdGUsIHNwZWFrdXBfYnMsCisJCXNwZWFrdXBfY29uX3dyaXRlLCBzcGVh
a3VwX2Nvbl91cGRhdGUsIHNwZWFrdXBfa2V5ICk7CisJc3BlYWt1cF9kZXZfaW5pdCgpOworCXJl
dHVybiAwOworfQorCittb2R1bGVfaW5pdCggbW9kX3NwZWFrdXBfaW5pdCApOworbW9kdWxlX2V4
aXQoIG1vZF9zcGVha3VwX2V4aXQgKTsKKworI2VuZGlmCmRpZmYgLS1leGNsdWRlPScqLm9yaWcn
IC0tZXhjbHVkZT0nKi5wYXRjaCcgLXVyTnAgbGludXgtMi42LjIwL2RyaXZlcnMvY2hhci9zcGVh
a3VwL3NwZWFrdXBjb25mIGxpbnV4LTIuNi4yMC1zcGsvZHJpdmVycy9jaGFyL3NwZWFrdXAvc3Bl
YWt1cGNvbmYKLS0tIGxpbnV4LTIuNi4yMC9kcml2ZXJzL2NoYXIvc3BlYWt1cC9zcGVha3VwY29u
ZgkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysgbGludXgtMi42LjIwLXNw
ay9kcml2ZXJzL2NoYXIvc3BlYWt1cC9zcGVha3VwY29uZgkyMDA3LTAyLTA0IDE2OjA5OjE5LjAw
MDAwMDAwMCAtMDUwMApAQCAtMCwwICsxLDUxIEBACisjIS9iaW4vc2gKKyMgc2NyaXB0IHRvIGxv
YWQvc2F2ZSBhbGwgdGhlIHZhcnMgaW4gc3BlYWt1cAorIyBzcGVha3VwY29uZiBzYXZlIG9yIHNw
ZWFrdXBjb25mIGxvYWQKKyMgaWYgcm9vdCBzYXZlcyBpbiAvZXRjL3NwZWFrdXAvPHN5bnRoX25h
bWU+IGVsc2UgaW4gJEhPTUUvLnNwZWFrdXAvPHN5bnRoX25hbWU+CitpZiBbICRVSUQgLWVxICIw
IiBdOyB0aGVuCisgIFNBVkVESVI9Ii9ldGMvc3BlYWt1cCIKK2Vsc2UKKyAgU0FWRURJUj0iJEhP
TUUvLnNwZWFrdXAiCitmaQoraWYgWyAhIC1kIC9wcm9jL3NwZWFrdXAgXTsgdGhlbgorICBlY2hv
ICJubyBkaXJlY3RvcnkgL3Byb2Mvc3BlYWt1cCIKKyAgZXhpdCAwCitmaQorU1lOVEg9YGNhdCAv
cHJvYy9zcGVha3VwL3N5bnRoX25hbWVgCitjYXNlICIkMSIgaW4KKypzYXZlKQorICBpZiBbICEg
LWQgJFNBVkVESVIgXSA7IHRoZW4KKyAgICBlY2hvIGNyZWF0aW5nICRTQVZFRElSCisgICAgbWtk
aXIgJFNBVkVESVIKKyAgZmkKKyAgaWYgWyAhIC1kICRTQVZFRElSLyRTWU5USCBdIDsgdGhlbgor
ICAgIGVjaG8gY3JlYXRpbmcgJFNBVkVESVIvJFNZTlRICisgICAgbWtkaXIgJFNBVkVESVIvJFNZ
TlRICisgIGZpCisgIGNkIC9wcm9jL3NwZWFrdXAKKyAgU0FWRUxJU1Q9YCAgICBmaW5kIC4gLXBl
cm0gLTYgfHNlZCAncy8uLi8vJyB8ZmdyZXAgLXYgc3ludGhgCisgIGZvciBmIGluICRTQVZFTElT
VDsgZG8KKyAgICBjcCAkZiAkU0FWRURJUi8kU1lOVEgvJGYKKyAgZG9uZQorOzsKKypsb2FkKQor
ICBpZiBbICEgLWQgJFNBVkVESVIgXSA7IHRoZW4KKyAgICBlY2hvIG5vIGRpcmVjdG9yeSAkU0FW
RURJUgorICAgIGV4aXQgMQorICBmaQorICBpZiBbICEgLWQgJFNBVkVESVIvJFNZTlRIIF0gOyB0
aGVuCisgICAgZWNobyBubyBkaXJlY3RvcnkgJFNBVkVESVIvJFNZTlRICisgICAgZXhpdCAxCisg
IGZpCisgIGNkICRTQVZFRElSLyRTWU5USAorICBmb3IgZiBpbiAqOyBkbworICAgIGlmIFsgLXcg
L3Byb2Mvc3BlYWt1cC8kZiBdOyB0aGVuCisgICAgICBjYXQgJGYgPi9wcm9jL3NwZWFrdXAvJGYK
KyAgICBmaQorICBkb25lCis7OworKikKKyAgZWNobyAidXNhZ2U6IHNwZWFrdXBjb25mIGxvYWQv
c2F2ZSIKKyAgZXhpdCAxCis7OworZXNhYwpkaWZmIC0tZXhjbHVkZT0nKi5vcmlnJyAtLWV4Y2x1
ZGU9JyoucGF0Y2gnIC11ck5wIGxpbnV4LTIuNi4yMC9kcml2ZXJzL2NoYXIvc3BlYWt1cC9zcGVh
a3VwX2RlY2V4dC5jIGxpbnV4LTIuNi4yMC1zcGsvZHJpdmVycy9jaGFyL3NwZWFrdXAvc3BlYWt1
cF9kZWNleHQuYwotLS0gbGludXgtMi42LjIwL2RyaXZlcnMvY2hhci9zcGVha3VwL3NwZWFrdXBf
ZGVjZXh0LmMJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrIGxpbnV4LTIu
Ni4yMC1zcGsvZHJpdmVycy9jaGFyL3NwZWFrdXAvc3BlYWt1cF9kZWNleHQuYwkyMDA3LTAyLTA0
IDE2OjA5OjE5LjAwMDAwMDAwMCAtMDUwMApAQCAtMCwwICsxLDIwNiBAQAorLyoKKyAqIG9yaWdp
bmlhbGx5IHdyaXR0ZW4gYnk6IEtpcmsgUmVpc2VyIDxraXJrQGJyYWlsbGUudXdvLmNhPgorKiB0
aGlzIHZlcnNpb24gY29uc2lkZXJhYmx5IG1vZGlmaWVkIGJ5IERhdmlkIEJvcm93c2tpLCBkYXZp
ZDU3NUByb2dlcnMuY29tCisKKwkJQ29weXJpZ2h0IChDKSAxOTk4LTk5ICBLaXJrIFJlaXNlci4K
KwkJQ29weXJpZ2h0IChDKSAyMDAzIERhdmlkIEJvcm93c2tpLgorCisJCVRoaXMgcHJvZ3JhbSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisJ
CWl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5CisJCXRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisJCShhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisKKwkJVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisJCWJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisJCU1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKwkJR05VIEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworCQlZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorCQlhbG9uZyB3aXRoIHRo
aXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorCQlGb3VuZGF0
aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEt
MTMwNyAgVVNBCisKKyAqIHRoaXMgY29kZSBpcyBzcGVjaWZpY2x5IHdyaXR0ZW4gYXMgYSBkcml2
ZXIgZm9yIHRoZSBzcGVha3VwIHNjcmVlbnJldmlldworICogcGFja2FnZSBhbmQgaXMgbm90IGEg
Z2VuZXJhbCBkZXZpY2UgZHJpdmVyLgorCQkqLworI2luY2x1ZGUgInNwa19wcml2LmgiCisjaW5j
bHVkZSAic2VyaWFsaW8uaCIKKworI2RlZmluZSBNWV9TWU5USCBzeW50aF9kZWNleHQKKyNkZWZp
bmUgU1lOVEhfQ0xFQVIgMHgwMworI2RlZmluZSBQUk9DU1BFRUNIIDB4MGIKKyNkZWZpbmUgc3lu
dGhfZnVsbCggKSAoIGluYl9wKCBzeW50aF9wb3J0X3R0cyApID09IDB4MTMgKQorCitzdGF0aWMg
aW50IHRpbWVvdXRzID0gMDsKK3N0YXRpYyBpbnQgaW5fZXNjYXBlID0gMDsKKworc3RhdGljIGlu
dCB3YWl0X2Zvcl94bWl0ciAoIHZvaWQgKQoreworCWludCBjaGVjaywgdG1vdXQgPSBTUEtfWE1J
VFJfVElNRU9VVDsKKwlpZiAoICggc3ludGhfYWxpdmUgKSAmJiAoIHRpbWVvdXRzID49IE5VTV9E
SVNBQkxFX1RJTUVPVVRTICkgKSB7CisJCXN5bnRoX2FsaXZlID0gMDsKKwkJdGltZW91dHMgPSAw
OworCQlyZXR1cm4gMDsKKwl9CisJZG8geyAvKiBob2xkaW5nIHJlZ2lzdGVyIGVtcHR5PyAqLwor
CQljaGVjayA9IGluYl9wKCBzeW50aF9wb3J0X3R0cyArIFVBUlRfTFNSICk7CisJCWlmICggLS10
bW91dCA9PSAwICkgeworCQkJcHJfd2FybiAoICIlczogIHRpbWVkIG91dFxuIiwgc3ludGgtPmxv
bmdfbmFtZSApOworCQkJdGltZW91dHMrKzsKKwkJCXJldHVybiAwOworCQl9CisJfSB3aGlsZSAo
ICggY2hlY2sgJiBCT1RIX0VNUFRZICkgIT0gQk9USF9FTVBUWSApOworCXRtb3V0ID0gU1BLX1hN
SVRSX1RJTUVPVVQ7CisJZG8geyAvKiBDVFMgKi8KKwkJY2hlY2sgPSBpbmJfcCAoIHN5bnRoX3Bv
cnRfdHRzICsgVUFSVF9NU1IgKTsKKwkJaWYgKCAtLXRtb3V0ID09IDAgKSB7CisJCQl0aW1lb3V0
cysrOworCQkJcmV0dXJuIDA7CisJCX0KKwl9IHdoaWxlICggKCBjaGVjayAmIFVBUlRfTVNSX0NU
UyApICE9IFVBUlRfTVNSX0NUUyApOworCXRpbWVvdXRzID0gMDsKKwlyZXR1cm4gMTsKK30KKwor
c3RhdGljIGludCBzcGtfc2VyaWFsX291dChjb25zdCBjaGFyIGNoKQoreworCWlmICggc3ludGhf
YWxpdmUgJiYgd2FpdF9mb3JfeG1pdHIgKCApICkgeworCQlvdXRiX3AgKCBjaCwgc3ludGhfcG9y
dF90dHMgKTsKKwkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdV9jaGFy
CitzcGtfc2VyaWFsX2luICggdm9pZCApCit7CisJaW50IGxzciwgdG1vdXQgPSBTUEtfU0VSSUFM
X1RJTUVPVVQsIGM7CisJZG8geworCQlsc3IgPSBpbmJfcCAoIHN5bnRoX3BvcnRfdHRzICsgVUFS
VF9MU1IgKTsKKwkJaWYgKCAtLXRtb3V0ID09IDAgKQorCQkJcmV0dXJuIDB4ZmY7CisJfSB3aGls
ZSAoICEoIGxzciAmIFVBUlRfTFNSX0RSICkgKTsKKwljID0gaW5iX3AgKCBzeW50aF9wb3J0X3R0
cyArIFVBUlRfUlggKTsKKwlyZXR1cm4gKCB1X2NoYXIgKSBjOworfQorCitzdGF0aWMgdm9pZCBk
b19jYXRjaF91cCggdW5zaWduZWQgbG9uZyBkYXRhICkKK3sKKwl1bnNpZ25lZCBsb25nIGppZmZf
bWF4ID0gamlmZmllcytzeW50aF9qaWZmeV9kZWx0YTsKKwl1X2NoYXIgY2g7CitzdGF0aWMgdV9j
aGFyIGxhc3Q9J1wwJzsKKwlzeW50aF9zdG9wX3RpbWVyKCApOworCXdoaWxlICggc3ludGhfYnVm
Zl9vdXQgPCBzeW50aF9idWZmX2luICkgeworCQljaCA9ICpzeW50aF9idWZmX291dDsKKwkJaWYg
KCBjaCA9PSAnXG4nICkgY2ggPSAweDBEOworCQlpZiAoIHN5bnRoX2Z1bGwoICkgfHwgIXNwa19z
ZXJpYWxfb3V0KCBjaCApICkgeworCQkJc3ludGhfZGVsYXkoIHN5bnRoX2Z1bGxfdGltZSApOwor
CQkJcmV0dXJuOworCQl9CisJCXN5bnRoX2J1ZmZfb3V0Kys7CisJCWlmICggY2ggPT0gJ1snICkg
aW5fZXNjYXBlID0gMTsKKwkJZWxzZSBpZiAoIGNoID09ICddJyApIGluX2VzY2FwZSA9IDA7CisJ
CWVsc2UgaWYgKCBjaCA8PSBTUEFDRSApIHsKKwkJCWlmICggIWluX2VzY2FwZSAmJiBzdHJjaHIo
ICIsLiE/OzoiLCBsYXN0ICkgKQorCQkJCXNwa19zZXJpYWxfb3V0KCBQUk9DU1BFRUNIICk7CisJ
CQlpZiAoIGppZmZpZXMgPj0gamlmZl9tYXggKSB7IAorCQkJCWlmICggIWluX2VzY2FwZSApCisJ
CQkJCXNwa19zZXJpYWxfb3V0KCBQUk9DU1BFRUNIICk7CisJCQkJc3ludGhfZGVsYXkoIHN5bnRo
X2RlbGF5X3RpbWUgKTsgCisJCQkJcmV0dXJuOyAKKwkJCX0KKwkJfQorCQlsYXN0ID0gY2g7CisJ
fQorCWlmICggc3ludGhfZG9uZSggKSB8fCAhaW5fZXNjYXBlICkKKwlzcGtfc2VyaWFsX291dCgg
UFJPQ1NQRUVDSCApOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqc3ludGhfaW1tZWRpYXRlICgg
Y29uc3QgY2hhciAqYnVmICkKK3sKKwl1X2NoYXIgY2g7CisJd2hpbGUgKCAoIGNoID0gKmJ1ZiAp
ICkgeworCWlmICggY2ggPT0gMHgwYSApIGNoID0gUFJPQ1NQRUVDSDsKKyAgICAgICAgaWYgKCB3
YWl0X2Zvcl94bWl0ciggKSApCisgICAgICAgICAgb3V0YiggY2gsIHN5bnRoX3BvcnRfdHRzICk7
CisgICAgICAgIGVsc2UgcmV0dXJuIGJ1ZjsKKwlidWYrKzsKKwl9CisJcmV0dXJuIDA7Cit9CisK
K3N0YXRpYyB2b2lkIHN5bnRoX2ZsdXNoKCB2b2lkICkKK3sKKwlpbl9lc2NhcGUgPSAwOworCXN5
bnRoX2ltbWVkaWF0ZSggIlwwMzNQOzEwelwwMzNcXCIgKTsKK30KKworc3RhdGljIGludCBzZXJw
cm9iZSggaW50IGluZGV4ICkKK3sKKwkJdV9jaGFyIHRlc3Q9MDsKKwkJc3RydWN0IHNlcmlhbF9z
dGF0ZSAqc2VyID0gc3BrX3NlcmlhbF9pbml0KCBpbmRleCApOworCQlpZiAoIHNlciA9PSBOVUxM
ICkgcmV0dXJuIC0xOworCQkvKiBpZ25vcmUgYW55IGVycm9yIHJlc3VsdHMsIGlmIHBvcnQgd2Fz
IGZvcmNlZCAqLworCWlmICggc3ludGhfcG9ydF9mb3JjZWQgKSAKKwkJCQlyZXR1cm4gMDsKKwlz
eW50aF9pbW1lZGlhdGUoICJcMDMzWzs1blwwMzNcXCIgKTsKKwlpZiAoICggdGVzdCA9IHNwa19z
ZXJpYWxfaW4oICkgKSA9PSAnXDAzMycgKQorCQlyZXR1cm4gMDsgIAorCXNwa19zZXJpYWxfcmVs
ZWFzZSggKTsKKwl0aW1lb3V0cyA9IHN5bnRoX2FsaXZlID0gc3ludGhfcG9ydF90dHMgPSAwOyAv
KiBub3QgaWdub3JpbmcgKi8KKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbnQgc3ludGhfcHJv
YmUoIHZvaWQgKQoreworCWludCBpPTAsIGZhaWxlZD0wOworCXByX2luZm8oICJQcm9iaW5nIGZv
ciAlcy5cbiIsIHN5bnRoLT5sb25nX25hbWUgKTsKKwkJLyogY2hlY2sgdHR5UzAtdHR5UzMgKi8K
Kwlmb3IgKCBpPVNQS19MT19UVFk7IGkgPD0gU1BLX0hJX1RUWTsgaSsrICkgeworCSAgaWYgKCgg
ZmFpbGVkID0gc2VycHJvYmUoIGkgKSkgPT0gMCApIGJyZWFrOyAvKiBmb3VuZCBpdCAqLworICAg
ICAgICB9CisgICAgICAgIGlmICggZmFpbGVkICkgeworCQlwcl9pbmZvKCAiJXM6ICBub3QgZm91
bmRcbiIsIHN5bnRoLT5sb25nX25hbWUgKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCXByX2lu
Zm8oICIlczogJTAzeC0lMDN4LCBEcml2ZXIgVmVyc2lvbiAlcyxcbiIsIHN5bnRoLT5sb25nX25h
bWUsCisJCXN5bnRoX3BvcnRfdHRzLCBzeW50aF9wb3J0X3R0cys3LCBzeW50aC0+dmVyc2lvbiAp
OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN5bnRoX2lzX2FsaXZlKCB2b2lkICkKK3sK
KwlpZiAoIHN5bnRoX2FsaXZlICkgcmV0dXJuIDE7CisJaWYgKCAhc3ludGhfYWxpdmUmJiB3YWl0
X2Zvcl94bWl0ciggKSA+IDAgKSB7IC8qIHJlc3RhcnQgKi8KKwkJc3ludGhfYWxpdmUgPSAxOwor
CQlzeW50aF93cml0ZV9zdHJpbmcoIHN5bnRoLT5pbml0ICk7CisJCXJldHVybiAyOworCX0KKwlw
cl93YXJuKCAiJXM6IGNhbid0IHJlc3RhcnQgc3ludGhcbiIsIHN5bnRoLT5sb25nX25hbWUgKTsK
KwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgaW5pdF9zdHJpbmdbXSA9ICJbOnBl
IC0zODBdIjsKKworc3RhdGljIHN0cnVjdCBzdF9zdHJpbmdfdmFyIHN0cmluZ3ZhcnNbXSA9IHsK
Kwl7IENBUFNfU1RBUlQsICJbOmR2IGFwIDIyMl0iIH0sCisJeyBDQVBTX1NUT1AsICJbOmR2IGFw
IDEwMF0iIH0sCisJVl9MQVNUX1NUUklORworfTsKK3N0YXRpYyBzdHJ1Y3Qgc3RfbnVtX3ZhciBu
dW12YXJzW10gPSB7CisJeyBSQVRFLCAiWzpyYSAlZF0iLCA3LCAwLCA5LCAxNTAsIDI1LCAwIH0s
CisJeyBQSVRDSCwgIls6ZHYgYXAgJWRdIiwgMTAwLCAwLCAxMDAsIDAsIDAsIDAgfSwKKwl7IFZP
TCwgIls6ZHYgZ3YgJWRdIiwgMTMsIDAsIDE2LCAwLCA1LCAwIH0sCisJeyBQVU5DVCwgIls6cHUg
JWNdIiwgMCwgMCwgMiwgMCwgMCwgIm5zYSIgfSwKKwl7IFZPSUNFLCAiWzpuJWNdIiwgMCwgMCwg
OSwgMCwgMCwgInBoZmRidXJ3a3YiIH0sCisJVl9MQVNUX05VTQorfTsKKworc3RydWN0IHNwa19z
eW50aCBzeW50aF9kZWNleHQgPSB7ImRlY2V4dCIsICIxLjEiLCAiRGVjdGFsayBFeHRlcm5hbCIs
CisJIGluaXRfc3RyaW5nLCA1MDAsIDUwLCA1MCwgMTAwMCwgMCwgU0ZfREVDLCBTWU5USF9DSEVD
SywKKwlzdHJpbmd2YXJzLCBudW12YXJzLCBzeW50aF9wcm9iZSwgc3BrX3NlcmlhbF9yZWxlYXNl
LCBzeW50aF9pbW1lZGlhdGUsCisJZG9fY2F0Y2hfdXAsIE5VTEwsIHN5bnRoX2ZsdXNoLCBzeW50
aF9pc19hbGl2ZSwgTlVMTCwgTlVMTCwgTlVMTCwKKwl7TlVMTCwwLDAsMH0gfTsKKworI2lmZGVm
IE1PRFVMRQorI2luY2x1ZGUgIm1vZF9jb2RlLmMiCisjZW5kaWYKZGlmZiAtLWV4Y2x1ZGU9Jyou
b3JpZycgLS1leGNsdWRlPScqLnBhdGNoJyAtdXJOcCBsaW51eC0yLjYuMjAvZHJpdmVycy9jaGFy
L3NwZWFrdXAvc3BlYWt1cF9kZWNwYy5jIGxpbnV4LTIuNi4yMC1zcGsvZHJpdmVycy9jaGFyL3Nw
ZWFrdXAvc3BlYWt1cF9kZWNwYy5jCi0tLSBsaW51eC0yLjYuMjAvZHJpdmVycy9jaGFyL3NwZWFr
dXAvc3BlYWt1cF9kZWNwYy5jCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisr
KyBsaW51eC0yLjYuMjAtc3BrL2RyaXZlcnMvY2hhci9zcGVha3VwL3NwZWFrdXBfZGVjcGMuYwky
MDA3LTAyLTA0IDE2OjA5OjIwLjAwMDAwMDAwMCAtMDUwMApAQCAtMCwwICsxLDI0MyBAQAorLyoK
Kyogd3JpdHRlbiBieSBEYXZpZCBCb3Jvd3NraSwgZGF2aWQ1NzVAZ29sZGVuLm5ldAorCisJCUNv
cHlyaWdodCAoQykgMjAwMyBEYXZpZCBCb3Jvd3NraS4KKworCQlUaGlzIHByb2dyYW0gaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorCQlpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieQorCQl0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvcgorCQkoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorCisJCVRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorCQlidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorCQlNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisJCUdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisKKwkJWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKwkJYWxvbmcgd2l0aCB0aGlzIHBy
b2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKwkJRm91bmRhdGlvbiwg
SW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcg
IFVTQQorCisgKiB0aGlzIGNvZGUgaXMgc3BlY2lmaWNseSB3cml0dGVuIGFzIGEgZHJpdmVyIGZv
ciB0aGUgc3BlYWt1cCBzY3JlZW5yZXZpZXcKKyAqIHBhY2thZ2UgYW5kIGlzIG5vdCBhIGdlbmVy
YWwgZGV2aWNlIGRyaXZlci4KKwkJKi8KKyNpbmNsdWRlICJzcGtfcHJpdi5oIgorI2luY2x1ZGUg
ImR0cGNfcmVnLmgiCisKKyNkZWZpbmUgTVlfU1lOVEggc3ludGhfZGVjX3BjCisjZGVmaW5lIFBS
T0NTUEVFQ0ggMHgwYgorI2RlZmluZSBTWU5USF9JT19FWFRFTlQgOAorCitzdGF0aWMgaW50IHN5
bnRoX3BvcnRsaXN0W10gPSB7IDB4MzQwLCAweDM1MCwgMHgyNDAsIDB4MjUwLCAwIH07CitzdGF0
aWMgaW50IGluX2VzY2FwZSA9IDAsIGlzX2ZsdXNoaW5nID0gMDsKK3N0YXRpYyBpbnQgZHRfc3Rh
dCwgZG1hX3N0YXRlID0gMDsKKworc3RhdGljIGludCBkdF9nZXRzdGF0dXModm9pZCkKK3sKKwlk
dF9zdGF0ID0gIGluYl9wKCBzeW50aF9wb3J0X3R0cyApfChpbmJfcCggc3ludGhfcG9ydF90dHMr
MSApPDw4KTsKKwlyZXR1cm4gZHRfc3RhdDsKK30KKworc3RhdGljIHZvaWQgZHRfc2VuZGNtZCh1
X2ludCBjbWQpCit7CisJb3V0Yl9wKCBjbWQgJiAweEZGLCBzeW50aF9wb3J0X3R0cyApOworCW91
dGJfcCggKGNtZD4+OCkgJiAweEZGLCBzeW50aF9wb3J0X3R0cysxICk7Cit9CisKK3N0YXRpYyBp
bnQgZHRfd2FpdGJpdCggaW50IGJpdCApCit7CisJaW50IHRpbWVvdXQgPSAxMDA7CisJd2hpbGUg
KCAtLXRpbWVvdXQgPiAwICkgeworCQlpZiggKGR0X2dldHN0YXR1cyggKSAmIGJpdCApID09IGJp
dCApIHJldHVybiAxOworCQl1ZGVsYXkoIDUwICk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0
aWMgaW50IGR0X3dhaXRfZG1hKCB2b2lkICkKK3sKKwlpbnQgdGltZW91dCA9IDEwMCwgc3RhdGUg
PSBkbWFfc3RhdGU7CisJaWYoICEgZHRfd2FpdGJpdCggU1RBVF9kbWFfcmVhZHkgKSApIHJldHVy
biAwOworCXdoaWxlICggLS10aW1lb3V0ID4gMCApIHsKKwkJaWYoIChkdF9nZXRzdGF0dXMoKSZT
VEFUX2RtYV9zdGF0ZSkgPT0gc3RhdGUgKSByZXR1cm4gMTsKKwkJdWRlbGF5KCA1MCApOworCX0K
KwlkbWFfc3RhdGUgPSBkdF9nZXRzdGF0dXMoICkgJiBTVEFUX2RtYV9zdGF0ZTsKKwlyZXR1cm4g
MTsKK30KKworc3RhdGljIGludCBkdF9jdHJsKCB1X2ludCBjbWQgKQoreworCWludCB0aW1lb3V0
ID0gMTA7CisJaWYgKCAhZHRfd2FpdGJpdCggU1RBVF9jbWRfcmVhZHkgKSApIHJldHVybiAtMTsK
KwlvdXRiX3AoIDAsIHN5bnRoX3BvcnRfdHRzKzIgKTsKKwlvdXRiX3AoIDAsIHN5bnRoX3BvcnRf
dHRzKzMgKTsKKwlkdF9nZXRzdGF0dXMoICk7CisJZHRfc2VuZGNtZCggQ01EX2NvbnRyb2x8Y21k
ICk7CisJb3V0Yl9wKCAwLCBzeW50aF9wb3J0X3R0cys2ICk7CisJd2hpbGUgKCBkdF9nZXRzdGF0
dXMoICkgJiBTVEFUX2NtZF9yZWFkeSApIHsKKwkJdWRlbGF5KCAyMCApOworCQlpZiAoIC0tdGlt
ZW91dCA9PSAwICkgYnJlYWs7CisJfQorCWR0X3NlbmRjbWQoIENNRF9udWxsICk7CisJcmV0dXJu
IDA7Cit9CisKK3N0YXRpYyB2b2lkIHN5bnRoX2ZsdXNoKCB2b2lkICkKK3sKKwlpbnQgdGltZW91
dCA9IDEwOworCWlmICggaXNfZmx1c2hpbmcgKSByZXR1cm47CisJaXNfZmx1c2hpbmcgPSA0Owor
CWluX2VzY2FwZSA9IDA7CisJd2hpbGUgKCBkdF9jdHJsKCBDVFJMX2ZsdXNoICkgKSB7CisJCWlm
ICggLS10aW1lb3V0ID09IDAgKSBicmVhazsKK3VkZWxheSggNTAgKTsKKwl9CisJZm9yICggdGlt
ZW91dCA9IDA7IHRpbWVvdXQgPCAxMDsgdGltZW91dCsrICkgeworCQlpZiAoIGR0X3dhaXRiaXQo
IFNUQVRfZG1hX3JlYWR5ICkgKSBicmVhazsKK3VkZWxheSggNTAgKTsKKwl9CisJb3V0Yl9wKCBE
TUFfc3luYywgc3ludGhfcG9ydF90dHMrNCApOworCW91dGJfcCggMCwgc3ludGhfcG9ydF90dHMr
NCApOworCXVkZWxheSggMTAwICk7CisJZm9yICggdGltZW91dCA9IDA7IHRpbWVvdXQgPCAxMDsg
dGltZW91dCsrICkgeworCQlpZiAoICEoIGR0X2dldHN0YXR1cyggKSAmIFNUQVRfZmx1c2hpbmcg
KSApIGJyZWFrOwordWRlbGF5KCA1MCApOworCX0KKwlkbWFfc3RhdGUgPSBkdF9nZXRzdGF0dXMo
ICkgJiBTVEFUX2RtYV9zdGF0ZTsKKwlkbWFfc3RhdGUgXj0gU1RBVF9kbWFfc3RhdGU7CisJaXNf
Zmx1c2hpbmcgPSAwOworfQorCitzdGF0aWMgaW50IGR0X3NlbmRjaGFyKCBjaGFyIGNoICkKK3sK
KwlpZiggISBkdF93YWl0X2RtYSggKSApIHJldHVybiAtMTsKKwlpZiggISAoZHRfc3RhdCAmIFNU
QVRfcnJfY2hhcikgKSByZXR1cm4gLTI7CisJb3V0Yl9wKCBETUFfc2luZ2xlX2luLCBzeW50aF9w
b3J0X3R0cys0ICk7CisJb3V0Yl9wKCBjaCwgc3ludGhfcG9ydF90dHMrNCApOworCWRtYV9zdGF0
ZSBePSBTVEFUX2RtYV9zdGF0ZTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0ZXN0a2Vy
bmVsKCB2b2lkICkKK3sKKwlpbnQgc3RhdHVzID0gMDsKKwlpZiAoIGR0X2dldHN0YXR1cyggKSA9
PSAweGZmZmYgKSB7CisJCXN0YXR1cyA9IC0xOworCQlnb3RvIG9vcHM7CisJfQorCWR0X3NlbmRj
bWQoIENNRF9zeW5jICk7CisJaWYoICEgZHRfd2FpdGJpdCggU1RBVF9jbWRfcmVhZHkgKSApIHN0
YXR1cyA9IC0yOworCWVsc2UgaWYgKCAoIGR0X3N0YXQmMHg4MDAwICkgKSB7CisJCXJldHVybiAw
OworCX0gZWxzZSBpZiAoIGR0X3N0YXQgPT0gMHgwZGVjICkKKwkJcHJfd2FybiggImRlY19wYyBh
dCAweCV4LCBzb2Z0d2FyZSBub3QgbG9hZGVkXG4iLCBzeW50aF9wb3J0X3R0cyApOworCXN0YXR1
cyA9IC0zOworb29wczoJc3ludGhfcmVsZWFzZV9yZWdpb24oIHN5bnRoX3BvcnRfdHRzLCBTWU5U
SF9JT19FWFRFTlQgKTsKKwlzeW50aF9wb3J0X3R0cyA9IDA7CisJcmV0dXJuIHN0YXR1czsKK30K
Kworc3RhdGljIHZvaWQgZG9fY2F0Y2hfdXAoIHVuc2lnbmVkIGxvbmcgZGF0YSApCit7CisJdW5z
aWduZWQgbG9uZyBqaWZmX21heCA9IGppZmZpZXMrc3ludGhfamlmZnlfZGVsdGE7CisJdV9jaGFy
IGNoOworc3RhdGljIHVfY2hhciBsYXN0PSdcMCc7CisJc3ludGhfc3RvcF90aW1lciggKTsKKwl3
aGlsZSAoIHN5bnRoX2J1ZmZfb3V0IDwgc3ludGhfYnVmZl9pbiApIHsKKwkJY2ggPSAqc3ludGhf
YnVmZl9vdXQ7CisJCWlmICggY2ggPT0gJ1xuJyApIGNoID0gMHgwRDsKKwkJaWYgKCBkdF9zZW5k
Y2hhciggY2ggKSApIHsKKwkJCXN5bnRoX2RlbGF5KCBzeW50aF9mdWxsX3RpbWUgKTsKKwkJCXJl
dHVybjsKKwkJfQorCQlzeW50aF9idWZmX291dCsrOworCQlpZiAoIGNoID09ICdbJyApIGluX2Vz
Y2FwZSA9IDE7CisJCWVsc2UgaWYgKCBjaCA9PSAnXScgKSBpbl9lc2NhcGUgPSAwOworCQllbHNl
IGlmICggY2ggPD0gU1BBQ0UgKSB7CisJCQlpZiAoICFpbl9lc2NhcGUgJiYgc3RyY2hyKCAiLC4h
Pzs6IiwgbGFzdCApICkKKwkJCQlkdF9zZW5kY2hhciggUFJPQ1NQRUVDSCApOworCQkJaWYgKCBq
aWZmaWVzID49IGppZmZfbWF4ICkgeyAKKwkJCQlpZiAoICFpbl9lc2NhcGUgKQorCQkJCQlkdF9z
ZW5kY2hhciggUFJPQ1NQRUVDSCApOworCQkJCXN5bnRoX2RlbGF5KCBzeW50aF9kZWxheV90aW1l
ICk7IAorCQkJCXJldHVybjsgCisJCQl9CisJCX0KKwkJbGFzdCA9IGNoOworCX0KKwlpZiAoIHN5
bnRoX2RvbmUoICkgfHwgIWluX2VzY2FwZSApCisJZHRfc2VuZGNoYXIoIFBST0NTUEVFQ0ggKTsK
K30KKworc3RhdGljIGNvbnN0IGNoYXIgKnN5bnRoX2ltbWVkaWF0ZSAoIGNvbnN0IGNoYXIgKmJ1
ZiApCit7CisJdV9jaGFyIGNoOworCXdoaWxlICggKCBjaCA9ICpidWYgKSApIHsKKwlpZiAoIGNo
ID09IDB4MGEgKSBjaCA9IFBST0NTUEVFQ0g7CisJCWlmICggZHRfc2VuZGNoYXIgKCBjaCApICkK
KwkJCXJldHVybiBidWY7CisJYnVmKys7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50
IHN5bnRoX3Byb2JlICggdm9pZCApCit7CisJaW50IGk9MCwgZmFpbGVkPTA7CisJcHJfaW5mbyAo
ICJQcm9iaW5nIGZvciAlcy5cbiIsIHN5bnRoLT5sb25nX25hbWUgKTsKKwlmb3IoIGk9MDsgc3lu
dGhfcG9ydGxpc3RbaV07IGkrKyApIHsKKwkJaWYgKCBzeW50aF9yZXF1ZXN0X3JlZ2lvbiggc3lu
dGhfcG9ydGxpc3RbaV0sIFNZTlRIX0lPX0VYVEVOVCApICkgeworCQkJcHJfd2FybiggInJlcXVl
c3RfcmVnaW9uOiAgZmFpbGVkIHdpdGggMHgleCwgJWRcbiIsCisJCQkJc3ludGhfcG9ydGxpc3Rb
aV0sIFNZTlRIX0lPX0VYVEVOVCApOworCQkJY29udGludWU7CisJCX0KKwkJc3ludGhfcG9ydF90
dHMgPSBzeW50aF9wb3J0bGlzdFtpXTsKKwkJaWYgKCggZmFpbGVkID0gdGVzdGtlcm5lbCggKSkg
PT0gMCApIGJyZWFrOworCX0KKwlpZiAoIGZhaWxlZCApIHsKKwkJcHJfaW5mbyAoICIlczogIG5v
dCBmb3VuZFxuIiwgc3ludGgtPmxvbmdfbmFtZSApOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJ
cHJfaW5mbyAoICIlczogJTAzeC0lMDN4LCBEcml2ZXIgVmVyc2lvbiAlcyxcbiIsIHN5bnRoLT5s
b25nX25hbWUsCisJCXN5bnRoX3BvcnRfdHRzLCBzeW50aF9wb3J0X3R0cyArIDcsIHN5bnRoLT52
ZXJzaW9uICk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGR0cGNfcmVsZWFzZSggIHZv
aWQgKQoreworCWlmICggIHN5bnRoX3BvcnRfdHRzICkKKwkJc3ludGhfcmVsZWFzZV9yZWdpb24o
IHN5bnRoX3BvcnRfdHRzLCBTWU5USF9JT19FWFRFTlQgKTsKKwlzeW50aF9wb3J0X3R0cyA9IDA7
Cit9CisKK3N0YXRpYyBpbnQgc3ludGhfaXNfYWxpdmUoIHZvaWQgKQoreworCXN5bnRoX2FsaXZl
ID0gMTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgaW5pdF9zdHJpbmdbXSA9
ICJbOnBlIC0zODBdIjsKKworc3RhdGljIHN0cnVjdCBzdF9zdHJpbmdfdmFyIHN0cmluZ3ZhcnNb
XSA9IHsKKwl7IENBUFNfU1RBUlQsICJbOmR2IGFwIDIwMF0iIH0sCisJeyBDQVBTX1NUT1AsICJb
OmR2IGFwIDEwMF0iIH0sCisJVl9MQVNUX1NUUklORworfTsKK3N0YXRpYyBzdHJ1Y3Qgc3RfbnVt
X3ZhciBudW12YXJzW10gPSB7CisJeyBSQVRFLCAiWzpyYSAlZF0iLCA5LCAwLCAxOCwgMTUwLCAy
NSwgMCB9LAorCXsgUElUQ0gsICJbOmR2IGFwICVkXSIsIDgwLCAwLCAxMDAsIDIwLCAwLCAwIH0s
CisJeyBWT0wsICJbOnZvIHNlICVkXSIsIDUsIDAsIDksIDUsIDEwLCAwIH0sCisJeyBQVU5DVCwg
Ils6cHUgJWNdIiwgMCwgMCwgMiwgMCwgMCwgIm5zYSIgfSwKKwl7IFZPSUNFLCAiWzpuJWNdIiwg
MCwgMCwgOSwgMCwgMCwgInBoZmRidXJ3a3YiIH0sCisJVl9MQVNUX05VTQorfTsKKyAgIAorc3Ry
dWN0IHNwa19zeW50aCBzeW50aF9kZWNfcGMgPSB7ICJkZWNwYyIsICIxLjEiLCAiRGVjdGFsayBQ
QyIsCisJaW5pdF9zdHJpbmcsIDUwMCwgNTAsIDUwLCAxMDAwLCAwLCBTRl9ERUMsIFNZTlRIX0NI
RUNLLAorCXN0cmluZ3ZhcnMsIG51bXZhcnMsIHN5bnRoX3Byb2JlLCBkdHBjX3JlbGVhc2UsIHN5
bnRoX2ltbWVkaWF0ZSwKKwlkb19jYXRjaF91cCwgTlVMTCwgc3ludGhfZmx1c2gsIHN5bnRoX2lz
X2FsaXZlLCBOVUxMLCBOVUxMLCBOVUxMLAorCXtOVUxMLDAsMCwwfSB9OworCisjaWZkZWYgTU9E
VUxFCisjaW5jbHVkZSAibW9kX2NvZGUuYyIKKyNlbmRpZgpkaWZmIC0tZXhjbHVkZT0nKi5vcmln
JyAtLWV4Y2x1ZGU9JyoucGF0Y2gnIC11ck5wIGxpbnV4LTIuNi4yMC9kcml2ZXJzL2NoYXIvc3Bl
YWt1cC9zcGVha3VwX2RlY3Rsay5jIGxpbnV4LTIuNi4yMC1zcGsvZHJpdmVycy9jaGFyL3NwZWFr
dXAvc3BlYWt1cF9kZWN0bGsuYwotLS0gbGludXgtMi42LjIwL2RyaXZlcnMvY2hhci9zcGVha3Vw
L3NwZWFrdXBfZGVjdGxrLmMJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysr
IGxpbnV4LTIuNi4yMC1zcGsvZHJpdmVycy9jaGFyL3NwZWFrdXAvc3BlYWt1cF9kZWN0bGsuYwky
MDA3LTAyLTA0IDE2OjA5OjE5LjAwMDAwMDAwMCAtMDUwMApAQCAtMCwwICsxLDI4NSBAQAorLyoK
KyAqIG9yaWdpbmlhbGx5IHdyaXR0ZW4gYnk6IEtpcmsgUmVpc2VyIDxraXJrQGJyYWlsbGUudXdv
LmNhPgorKiB0aGlzIHZlcnNpb24gY29uc2lkZXJhYmx5IG1vZGlmaWVkIGJ5IERhdmlkIEJvcm93
c2tpLCBkYXZpZDU3NUByb2dlcnMuY29tCisKKwkJQ29weXJpZ2h0IChDKSAxOTk4LTk5ICBLaXJr
IFJlaXNlci4KKwkJQ29weXJpZ2h0IChDKSAyMDAzIERhdmlkIEJvcm93c2tpLgorCisJCVRoaXMg
cHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3Ig
bW9kaWZ5CisJCWl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisJCXRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisJCShhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisKKwkJVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisJCWJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisJCU1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKwkJR05VIEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworCQlZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorCQlhbG9u
ZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQor
CQlGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBN
QSAgMDIxMTEtMTMwNyAgVVNBCisKKyAqIHRoaXMgY29kZSBpcyBzcGVjaWZpY2x5IHdyaXR0ZW4g
YXMgYSBkcml2ZXIgZm9yIHRoZSBzcGVha3VwIHNjcmVlbnJldmlldworICogcGFja2FnZSBhbmQg
aXMgbm90IGEgZ2VuZXJhbCBkZXZpY2UgZHJpdmVyLgorCQkqLworI2luY2x1ZGUgInNwa19wcml2
LmgiCisjaW5jbHVkZSAic2VyaWFsaW8uaCIKKyNpbmNsdWRlIDxsaW51eC91bmlzdGQuaD4KKyNp
bmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisKKyNkZWZpbmUgTVlfU1lOVEggc3ludGhfZGVjdGxr
CisjZGVmaW5lIFNZTlRIX0NMRUFSIDB4MDMKKyNkZWZpbmUgUFJPQ1NQRUVDSCAweDBiCisjZGVm
aW5lIHN5bnRoX2Z1bGwoICkgICggaW5iX3AoIHN5bnRoX3BvcnRfdHRzICkgPT0gMHgxMyApCisK
K3N0YXRpYyBpbnQgdGltZW91dHMgPSAwOworc3RhdGljIGludCBpbl9lc2NhcGUgPSAwLCBpc19m
bHVzaGluZyA9IDA7CithdG9taWNfdCBkZWN0ZXN0PUFUT01JQ19JTklUKDApOworCitzdGF0aWMg
aW50IHdhaXRfZm9yX3htaXRyICggdm9pZCApCit7CisJaW50IGNoZWNrLCB0bW91dCA9IFNQS19Y
TUlUUl9USU1FT1VUOworCWlmICggKCBzeW50aF9hbGl2ZSApICYmICggdGltZW91dHMgPj0gTlVN
X0RJU0FCTEVfVElNRU9VVFMgKSApIHsKKwkJc3ludGhfYWxpdmUgPSAwOworCQl0aW1lb3V0cyA9
IDA7CisJCXJldHVybiAwOworCX0KKwlkbyB7IC8qIGhvbGRpbmcgcmVnaXN0ZXIgZW1wdHk/ICov
CisJCWNoZWNrID0gaW5iX3AoIHN5bnRoX3BvcnRfdHRzICsgVUFSVF9MU1IgKTsKKwkJaWYgKCAt
LXRtb3V0ID09IDAgKSB7CisJCQlwcl93YXJuICggIiVzOiAgdGltZWQgb3V0XG4iLCBzeW50aC0+
bG9uZ19uYW1lICk7CisJCQl0aW1lb3V0cysrOworCQkJcmV0dXJuIDA7CisJCX0KKwl9IHdoaWxl
ICggKCBjaGVjayAmIEJPVEhfRU1QVFkgKSAhPSBCT1RIX0VNUFRZICk7CisJLy99IHdoaWxlICgg
KCBjaGVjayAmIFVBUlRfTFNSX1RIUkUgKSAhPSBVQVJUX0xTUl9USFJFICk7CisJdG1vdXQgPSBT
UEtfWE1JVFJfVElNRU9VVDsKKwlkbyB7IC8qIENUUyAqLworCQljaGVjayA9IGluYl9wICggc3lu
dGhfcG9ydF90dHMgKyBVQVJUX01TUiApOworCQlpZiAoIC0tdG1vdXQgPT0gMCApIHsKKwkJCXRp
bWVvdXRzKys7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0gd2hpbGUgKCAoIGNoZWNrICYgVUFSVF9N
U1JfQ1RTICkgIT0gVUFSVF9NU1JfQ1RTICk7CisJdGltZW91dHMgPSAwOworCXJldHVybiAxOwor
fQorCitzdGF0aWMgaW50IHNwa19zZXJpYWxfb3V0ICggY29uc3QgY2hhciBjaCApCit7CisJaWYg
KCBzeW50aF9hbGl2ZSAmJiB3YWl0X2Zvcl94bWl0ciAoICkgKSB7CisJCW91dGJfcCAoIGNoLCBz
eW50aF9wb3J0X3R0cyApOworCisJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworLypz
dGF0aWMgdV9jaGFyCitzcGtfc2VyaWFsX2luICggdm9pZCApCit7CisJaW50IGMgPSAwOworCisJ
d2hpbGUgKGluYl9wKHN5bnRoX3BvcnRfdHRzICsgVUFSVF9MU1IpICYgVUFSVF9MU1JfRFIpIHsK
KwkJYyA9IGluYl9wKHN5bnRoX3BvcnRfdHRzK1VBUlRfUlgpOworCX0KKwlyZXR1cm4gKHVfY2hh
cikgYzsKK30qLworCitzdGF0aWMgaW50IGlzX2luZG51bSh1X2NoYXIgKmNoKQoreworCWlmICgo
KmNoPjQ3KSYmKCpjaDw1OCkpCisJeworCQkqY2g9KmNoLTQ4OworCQlyZXR1cm4gMTsKKwl9CisJ
cmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpzeW50aF9pbW1lZGlhdGUgKGNvbnN0
IGNoYXIgKik7CisKK3N0YXRpYyB1X2NoYXIgbGFzdGluZD0wOworCitzdGF0aWMgdW5zaWduZWQg
Y2hhciBnZXRfaW5kZXgoIHZvaWQgKQoreworCXVfY2hhciBydjsKKwlydj1sYXN0aW5kOworCWxh
c3RpbmQ9MDsKKwlyZXR1cm4gcnY7Cit9CisKK3ZvaWQgcmVhZF9idWZmX2FkZCh1X2NoYXIgYykK
K3sKKwlzdGF0aWMgaW50IGluZD0tMTsKKworCWlmIChjPT0weDAxKQorCXsKKwkJaXNfZmx1c2hp
bmc9MDsKKwkJYXRvbWljX3NldCgmZGVjdGVzdCwwKTsKKwl9CisJZWxzZSBpZiAoaXNfaW5kbnVt
KCZjKSkKKwl7CisJCWlmIChpbmQ9PS0xKQorCQkJaW5kPWM7CisJCWVsc2UKKwkJCWluZD1pbmQq
MTArYzsKKwl9CisJZWxzZSBpZiAoKGM+MzEpICYmIChjPDEyNykpCisJeworCQlpZiAoaW5kIT0t
MSkKKwkJCWxhc3RpbmQ9KHVfY2hhcilpbmQ7CisJCWluZD0tMTsKKwl9Cit9CisKK3N0YXRpYyB2
b2lkIGRvX2NhdGNoX3VwKCB1bnNpZ25lZCBsb25nIGRhdGEgKQoreworCXVuc2lnbmVkIGxvbmcg
amlmZl9tYXggPSBqaWZmaWVzK3N5bnRoX2ppZmZ5X2RlbHRhOworCXVfY2hhciBjaDsKKwlzdGF0
aWMgdV9jaGFyIGxhc3Q9J1wwJzsKKwlzeW50aF9zdG9wX3RpbWVyKCApOworCWlmIChpc19mbHVz
aGluZykKKwl7CisJCWlmICgtLWlzX2ZsdXNoaW5nID09IDAgKQorCQkJcHJfd2FybiAoICJmbHVz
aCB0aW1lb3V0XG4iICk7CisJCWVsc2UKKwkJeworCQkJc3ludGhfZGVsYXkoIHN5bnRoX2RlbGF5
X3RpbWUgKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKwl3aGlsZSAoIHN5bnRoX2J1ZmZfb3V0IDwg
c3ludGhfYnVmZl9pbiApIHsKKwkJY2ggPSAqc3ludGhfYnVmZl9vdXQ7CisJCWlmICggY2ggPT0g
J1xuJyApIGNoID0gMHgwRDsKKwkJaWYgKCBzeW50aF9mdWxsKCApIHx8ICFzcGtfc2VyaWFsX291
dCggY2ggKSApIHsKKwkJCXN5bnRoX2RlbGF5KCBzeW50aF9mdWxsX3RpbWUgKTsKKwkJCXJldHVy
bjsKKwkJfQorCQlzeW50aF9idWZmX291dCsrOworCQlpZiAoIGNoID09ICdbJyApIGluX2VzY2Fw
ZSA9IDE7CisJCWVsc2UgaWYgKCBjaCA9PSAnXScgKSBpbl9lc2NhcGUgPSAwOworCQllbHNlIGlm
ICggY2ggPD0gU1BBQ0UgKSB7CisJCQlpZiAoICFpbl9lc2NhcGUgJiYgc3RyY2hyKCAiLC4hPzs6
IiwgbGFzdCApICkKKwkJCQlzcGtfc2VyaWFsX291dCggUFJPQ1NQRUVDSCApOworCQkJaWYgKCBq
aWZmaWVzID49IGppZmZfbWF4ICkgeyAKKwkJCQlpZiAoICFpbl9lc2NhcGUgKQorCQkJCQlzcGtf
c2VyaWFsX291dCggUFJPQ1NQRUVDSCApOworCQkJCXN5bnRoX2RlbGF5KCBzeW50aF9kZWxheV90
aW1lICk7IAorCQkJCXJldHVybjsgCisJCQl9CisJCX0KKwkJbGFzdCA9IGNoOworCX0KKwlpZiAo
IHN5bnRoX2RvbmUoICkgfHwgIWluX2VzY2FwZSApCisJc3BrX3NlcmlhbF9vdXQoIFBST0NTUEVF
Q0ggKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKnN5bnRoX2ltbWVkaWF0ZSAoIGNvbnN0IGNo
YXIgKmJ1ZiApCit7CisJdV9jaGFyIGNoOworCXdoaWxlICggKCBjaCA9ICpidWYgKSApIHsKKwlp
ZiAoIGNoID09IDB4MGEgKSBjaCA9IFBST0NTUEVFQ0g7CisgICAgICAgIGlmICggd2FpdF9mb3Jf
eG1pdHIoICkgKQorICAgICAgICAgIG91dGIoIGNoLCBzeW50aF9wb3J0X3R0cyApOworICAgICAg
ICBlbHNlIHJldHVybiBidWY7CisJYnVmKys7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMg
dm9pZCBzeW50aF9mbHVzaCggdm9pZCApCit7CisJaWYgKGluX2VzY2FwZSkKKwl7CisJCS8vIGlm
IGluIGNvbW1hbmQgb3V0cHV0ICddJyBzbyB3ZSBkb24ndCBnZXQgYW4gZXJyb3IKKwkJc3BrX3Nl
cmlhbF9vdXQoICddJyApOworCX0KKwlpbl9lc2NhcGUgPSAwOworCXNwa19zZXJpYWxfb3V0ICgg
U1lOVEhfQ0xFQVIgKTsKKwlpc19mbHVzaGluZyA9IDU7IC8qIGlmIG5vIGN0bC1hIGluIDQsIHNl
bmQgZGF0YSBhbnl3YXkgKi8KK30KKworc3RhdGljIGludCBzZXJwcm9iZSAoIGludCBpbmRleCAp
Cit7CisJc3RydWN0IHNlcmlhbF9zdGF0ZSAqc2VyID0gc3BrX3NlcmlhbF9pbml0KCBpbmRleCAp
OworCS8vdV9jaGFyIHRlc3Q7Ly8sIHRpbWVvdXQgPSAxMDAwMDsKKwlpbnQgdGltZW91dD0xMDAw
MDAwOworCWlmICggc2VyID09IE5VTEwgKSByZXR1cm4gLTE7CisJb3V0YiAoIDB4MGQsIHNlci0+
cG9ydCApOworCS8qIGlnbm9yZSBhbnkgZXJyb3IgcmVzdWx0cywgaWYgcG9ydCB3YXMgZm9yY2Vk
ICovCisJaWYgKCBzeW50aF9wb3J0X2ZvcmNlZCApIHJldHVybiAwOworCS8qIGNoZWNrIGZvciBk
ZWN0YWxrIGV4cHJlc3Mgbm93Li4uICovCisKKwlhdG9taWNfc2V0KCZkZWN0ZXN0LDUpOworCWlm
ICggIXN5bnRoX2ltbWVkaWF0ZSAoICJceDAzIiApICkgeworCQkvKmRvIHsKKwkJCXRlc3QgPSBz
cGtfc2VyaWFsX2luICggKTsKKwkJCWlmICggdGVzdCA9PSAweDAxICkgcmV0dXJuIDA7CisJCX0g
d2hpbGUgKCAtLXRpbWVvdXQgPiAwICk7Ki8KKwkKKwkJZG8geworCQkJaWYgKCBhdG9taWNfcmVh
ZCgmZGVjdGVzdCk9PTApIHJldHVybiAwOworCQkJb3V0YignYScsMHg4MCk7ICAvLyBTbGVlcCBh
Ym91dCBhIG1pY3Jvc2Vjb25kCisJCX0gd2hpbGUgKCAtLXRpbWVvdXQgPiAwKTsKKwkJCisJfQor
CXNwa19zZXJpYWxfcmVsZWFzZSggKTsKKwl0aW1lb3V0cyA9IHN5bnRoX2FsaXZlID0gc3ludGhf
cG9ydF90dHMgPSAwOwkvKiBub3QgaWdub3JpbmcgKi8KKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRp
YyBpbnQgc3ludGhfcHJvYmUgKCB2b2lkICkKK3sKKwlpbnQgaSA9IDAsIGZhaWxlZD0wOworCXBy
X2luZm8gKCAiUHJvYmluZyBmb3IgJXMuXG4iLCBzeW50aC0+bG9uZ19uYW1lICk7CisJLyogY2hl
Y2sgdHR5UzAtdHR5UzMgKi8KKwlmb3IgKCBpID0gU1BLX0xPX1RUWTsgaSA8PSBTUEtfSElfVFRZ
OyBpKysgKSB7CisJICBpZiAoKCBmYWlsZWQgPSBzZXJwcm9iZSggaSApKSA9PSAwICkgYnJlYWs7
IC8qIGZvdW5kIGl0ICovCisgICAgICAgIH0KKyAgICAgICAgaWYgKCBmYWlsZWQgKSB7CisJCXBy
X2luZm8gKCAiJXM6ICBub3QgZm91bmRcbiIsIHN5bnRoLT5sb25nX25hbWUgKTsKKwkJcmV0dXJu
IC1FTk9ERVY7CisJfQorCXByX2luZm8gKCAiJXM6ICUwM3gtJTAzeCwgRHJpdmVyIFZlcnNpb24g
JXMsXG4iLCBzeW50aC0+bG9uZ19uYW1lLAorCQlzeW50aF9wb3J0X3R0cywgc3ludGhfcG9ydF90
dHMgKyA3LCBzeW50aC0+dmVyc2lvbiApOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50Citz
eW50aF9pc19hbGl2ZSAoIHZvaWQgKQoreworCWlmICggc3ludGhfYWxpdmUgKSByZXR1cm4gMTsK
KwlpZiAoICFzeW50aF9hbGl2ZSAmJiB3YWl0X2Zvcl94bWl0ciAoICkgPiAwICkgewkvKiByZXN0
YXJ0ICovCisJCXN5bnRoX2FsaXZlID0gMTsKKwkJc3ludGhfd3JpdGVfc3RyaW5nICggc3ludGgt
PmluaXQgKTsKKwkJcmV0dXJuIDI7CisJfSBlbHNlCisJCXByX3dhcm4gKCAiJXM6IGNhbid0IHJl
c3RhcnQgc3ludGhcbiIsIHN5bnRoLT5sb25nX25hbWUgKTsKKwlyZXR1cm4gMDsKK30KKworc3Rh
dGljIGNvbnN0IGNoYXIgaW5pdF9zdHJpbmdbXSA9ICJbOnBlIC0zODBdWzpkdiBhcCAxMDBdWzpl
cnJvciBzcF0iOworCitzdGF0aWMgc3RydWN0IHN0X3N0cmluZ192YXIgc3RyaW5ndmFyc1tdID0g
eworCXsgQ0FQU19TVEFSVCwgIls6ZHYgYXAgMjAwXSIgfSwKKwl7IENBUFNfU1RPUCwgIls6ZHYg
YXAgMTAwXSIgfSwKKwlWX0xBU1RfU1RSSU5HCit9Oworc3RhdGljIHN0cnVjdCBzdF9udW1fdmFy
IG51bXZhcnNbXSA9IHsKKwl7IFJBVEUsICJbOnJhICVkXSIsIDksIDAsIDE4LCAxNTAsIDI1LCAw
IH0sCisJeyBQSVRDSCwgIls6ZHYgYXAgJWRdIiwgODAsIDAsIDIwMCwgMjAsIDAsIDAgfSwKKwl7
IFZPTCwgIls6ZHYgZ3YgJWRdIiwgMTMsIDAsIDE0LCAwLCA1LCAwIH0sCisJeyBQVU5DVCwgIls6
cHUgJWNdIiwgMCwgMCwgMiwgMCwgMCwgIm5zYSIgfSwKKwl7IFZPSUNFLCAiWzpuJWNdIiwgMCwg
MCwgOSwgMCwgMCwgInBoZmRidXJ3a3YiIH0sCisJVl9MQVNUX05VTQorfTsKKyAgIAorc3RydWN0
IHNwa19zeW50aCBzeW50aF9kZWN0bGsgPSB7ICJkZWN0bGsiLCAiMS4zIiwgIkRlY3RhbGsgRXhw
cmVzcyIsCisJaW5pdF9zdHJpbmcsIDUwMCwgNTAsIDUwLCAxMDAwLCAwLCBTRl9ERUMsIFNZTlRI
X0NIRUNLLAorCXN0cmluZ3ZhcnMsIG51bXZhcnMsIHN5bnRoX3Byb2JlLCBzcGtfc2VyaWFsX3Jl
bGVhc2UsIHN5bnRoX2ltbWVkaWF0ZSwKKwlkb19jYXRjaF91cCwgTlVMTCwgc3ludGhfZmx1c2gs
IHN5bnRoX2lzX2FsaXZlLCBOVUxMLCByZWFkX2J1ZmZfYWRkLAorCWdldF9pbmRleCwgeyJbOmlu
IHJlICVkXSAiLDEsOCwxfSB9OworCisjaWZkZWYgTU9EVUxFCisjaW5jbHVkZSAibW9kX2NvZGUu
YyIKKyNlbmRpZgpkaWZmIC0tZXhjbHVkZT0nKi5vcmlnJyAtLWV4Y2x1ZGU9JyoucGF0Y2gnIC11
ck5wIGxpbnV4LTIuNi4yMC9kcml2ZXJzL2NoYXIvc3BlYWt1cC9zcGVha3VwX2RydmNvbW1vbi5j
IGxpbnV4LTIuNi4yMC1zcGsvZHJpdmVycy9jaGFyL3NwZWFrdXAvc3BlYWt1cF9kcnZjb21tb24u
YwotLS0gbGludXgtMi42LjIwL2RyaXZlcnMvY2hhci9zcGVha3VwL3NwZWFrdXBfZHJ2Y29tbW9u
LmMJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrIGxpbnV4LTIuNi4yMC1z
cGsvZHJpdmVycy9jaGFyL3NwZWFrdXAvc3BlYWt1cF9kcnZjb21tb24uYwkyMDA3LTAyLTA0IDE2
OjA5OjE5LjAwMDAwMDAwMCAtMDUwMApAQCAtMCwwICsxLDEwMzEgQEAKKyNkZWZpbmUgS0VSTkVM
CisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Cisj
aW5jbHVkZSA8bGludXgvY3R5cGUuaD4JLyogZm9yIGlzZGlnaXQoICkgYW5kIGZyaWVuZHMgKi8K
KyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CQkvKiBmb3IgdmVy
aWZ5X2FyZWEgKi8KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgkvKiBmb3IgLUVCVVNZICovCisj
aW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CS8qIGZvciBjaGVja19yZWdpb24sIHJlcXVlc3RfcmVn
aW9uICovCisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVs
YXkuaD4JLyogZm9yIGxvb3BzX3Blcl9zZWMgKi8KKyNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+
CisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgkJLyogZm9yIHdhaXRfcXVldWUgKi8KKyNpbmNsdWRl
IDxsaW51eC9taXNjZGV2aWNlLmg+CS8qIGZvciBtaXNjX3JlZ2lzdGVyLCBhbmQgU1lOVEhfTUlO
T1IgKi8KKyNpbmNsdWRlICJzcGtfcHJpdi5oIgorI2luY2x1ZGUgInNlcmlhbGlvLmgiCisjaW5j
bHVkZSA8bGludXgva21vZC5oPgorCisjaWZkZWYgX19wb3dlcnBjX18KKyNpbmNsdWRlIDxhc20t
cHBjL3BjX3NlcmlhbC5oPiAvKiBmb3IgU0VSSUFMX1BPUlRfREZOUyAqLworI2VuZGlmCisKK3N0
YXRpYyBzdHJ1Y3Qgc2VyaWFsX3N0YXRlIHJzX3RhYmxlW10gPSB7CisJU0VSSUFMX1BPUlRfREZO
UworfTsKKworI2luY2x1ZGUgInN5bnRobGlzdC5oIgorc3RhdGljIHN0cnVjdCBzcGtfc3ludGgg
KnN5bnRoc1sxNl0gPSB7CisjaW5jbHVkZSAic3ludGhsaXN0LmgiCisJTlVMTCB9OworCisjZGVm
aW5lIHN5bnRoQnVmZmVyU2l6ZSA4MTkyCS8qIGN1cnJlbnRseSA4SyBieXRlcyAqLworc3RydWN0
IHNwa19zeW50aCAqc3ludGggPSBOVUxMOworaW50IHN5bnRoX3BvcnRfdHRzID0gMCwgc3ludGhf
cG9ydF9mb3JjZWQgPSAwOworc3RhdGljIGludCBzeW50aF90aW1lcl9hY3RpdmUgPSAwOwkvKiBp
bmRpY2F0ZXMgd2hlbiBhIHRpbWVyIGlzIHNldCAqLworCXN0YXRpYyBzdHJ1Y3QgbWlzY2Rldmlj
ZSBzeW50aF9kZXZpY2U7CitzdGF0aWMgaW50IG1pc2NfcmVnaXN0ZXJlZCA9IDA7CitzdGF0aWMg
Y2hhciBwaXRjaF9idWZmWzMyXSA9ICIiOworc3RhdGljIERFQ0xBUkVfTVVURVgoc2VtKTsKK2Rl
Y2xhcmVfc2xlZXBlciggc3ludGhfc2xlZXBpbmdfbGlzdCApOworc3RhdGljIGludCBtb2R1bGVf
c3RhdHVzID0gMDsKK3N0YXRpYyBkZWNsYXJlX3RpbWVyKCBzeW50aF90aW1lciApOworc2hvcnQg
c3ludGhfZGVsYXlfdGltZSA9IDUwMCwgc3ludGhfdHJpZ2dlcl90aW1lID0gNTA7CitzaG9ydCBz
eW50aF9qaWZmeV9kZWx0YSA9IDUwLCBzeW50aF9mdWxsX3RpbWUgPSAxMDAwOworaW50IHN5bnRo
X2FsaXZlID0gMCwgcXVpZXRfYm9vdCA9IDA7Cit1X2NoYXIgc3ludGhfYnVmZmVyW3N5bnRoQnVm
ZmVyU2l6ZV07CS8qIGd1ZXNzIHdoYXQgdGhpcyBpcyBmb3IhICovCitzdGF0aWMgdV9jaGFyICpi
dWZmZXJfaGlnaHdhdGVyID0gc3ludGhfYnVmZmVyK3N5bnRoQnVmZmVyU2l6ZS0xMDA7Cit1X2No
YXIgKmJ1ZmZlcl9lbmQgPSBzeW50aF9idWZmZXIrc3ludGhCdWZmZXJTaXplLTE7Cit2b2xhdGls
ZSB1X2NoYXIgKnN5bnRoX2J1ZmZfaW4gPSBzeW50aF9idWZmZXIsICpzeW50aF9idWZmX291dCA9
IHN5bnRoX2J1ZmZlcjsKK3N0YXRpYyBpcnFyZXR1cm5fdCBzeW50aF9yZWFkYnVmX2hhbmRsZXIo
aW50IGlycSwgdm9pZCAqZGV2X2lkKTsKK3N0YXRpYyBzdHJ1Y3Qgc2VyaWFsX3N0YXRlICpzZXJz
dGF0ZTsKKworc3RhdGljIHZvaWQgc3BlYWt1cF91bnJlZ2lzdGVyX3ZhcihzaG9ydCB2YXJfaWQp
Oworc3RhdGljIHZvaWQgc3RhcnRfc2VyaWFsX2ludGVycnVwdChpbnQgaXJxKTsKK3N0YXRpYyB2
b2lkIHNwZWFrdXBfcmVnaXN0ZXJfZGV2c3ludGgodm9pZCk7CisKK3N0YXRpYyBjaGFyICp4bGF0
ZShjaGFyICpzKQoreworCXN0YXRpYyBjb25zdCBjaGFyIGZpbmRzW10gPSAibnJ0dmFmZSI7CisJ
c3RhdGljIGNvbnN0IGNoYXIgc3Vic1tdID0gIlxuXHJcdFwwMTNcMDAxXDAxNFwwMzMiOworCXN0
YXRpYyBjb25zdCBjaGFyIGh4W10gPSAiMDEyMzQ1Njc4OWFiY2RlZkFCQ0RFRiI7CisJY2hhciAq
cCA9IHMsICpwMSwgKnAyLCBjOworCWludCBudW07CisJd2hpbGUgKCAoIHAgPSBzdHJjaHIgKCBw
LCAnXFwnICkgKSApIHsKKwkJcDEgPSBwKzE7CisJCXAyID0gc3RyY2hyKCBmaW5kcywgKnAxICk7
CisJCWlmICggcDIgKSB7CisJCQkqcCsrID0gc3Vic1twMi1maW5kc107CisJCQlwMSsrOworCQl9
IGVsc2UgaWYgKCAqcDEgPj0gJzAnICYmICpwMSA8PSAnNycgKSB7CisJCQludW0gPSAoICpwMSsr
ICkmNzsKKwkJCXdoaWxlICggbnVtIDwgMjU2ICYmICpwMSA+PSAnMCcgJiYgKnAxIDw9ICc3JyAp
IHsKKwkJCQludW0gPDw9IDM7CisJCQkJbnVtID0gKCAqcDErKyApJjc7CisJCQl9CisJCQkqcCsr
ID0gbnVtOworCQl9IGVsc2UgaWYgKCAqcDEgPT0gJ3gnJiYgc3RyY2hyKCBoeCwgcDFbMV0gKSAm
JiBzdHJjaHIoIGh4LCBwMVsyXSApICkgeworCQkJcDErKzsKKwkJCWMgPSAqcDErKzsKKwkJCWlm
ICggYyA+ICc5JyApCisJCQkJYyA9ICggYy0nNycgKSYweDBmOworCQkJZWxzZQorCQkJCWMgLT0g
JzAnOworCQkJbnVtID0gYzw8NDsKKwkJCWMgPSAqcDErKzsKKwkJCWlmICggYyA+ICc5JyApCisJ
CQkJYyA9ICggYy0nNycgKSYweDBmOworCQkJZWxzZQorCQkJCWMgLT0gJzAnOworCQkJbnVtICs9
IGM7CisJCQkqcCsrID0gbnVtOworCQl9IGVsc2UKKwkJCSpwKysgPSAqcDErKzsKKwkJcDIgPSBw
OworCQl3aGlsZSAoICpwMSApICpwMisrID0gKnAxKys7CisJCSpwMiA9ICdcMCc7CisJfQorCXJl
dHVybiBzOworfQorCitzdHJ1Y3Qgc2VyaWFsX3N0YXRlICpzcGtfc2VyaWFsX2luaXQoIGludCBp
bmRleCApCit7CisJaW50IGJhdWQgPSA5NjAwLCBxdW90ID0gMDsKKwl1bnNpZ25lZCBpbnQgY3Zh
bCA9IDA7CisJaW50ICAgICBpLCBjZmxhZyA9IENSRUFEIHwgSFVQQ0wgfCBDTE9DQUwgfCBCOTYw
MCB8IENTODsKKwlzdHJ1Y3Qgc2VyaWFsX3N0YXRlICpzZXIgPSBOVUxMOworIAorCWlmICggc3lu
dGhfcG9ydF9mb3JjZWQgKSB7CisJCWlmICggaW5kZXggPiAwICkgcmV0dXJuIE5VTEw7CisJCXBy
X2luZm8gKCAicHJvYmUgZm9yY2VkIHRvIDB4JXggYnkga2VybmVsIGNvbW1hbmQgbGluZVxuIiwK
KwkJCXN5bnRoX3BvcnRfZm9yY2VkICk7CisgICAgICAgICAgZm9yICggaT0wOyBpIDw9IFNQS19I
SV9UVFk7IGkrKyApCisgICAgICAgICAgICBpZiAoICggcnNfdGFibGUraSApLT5wb3J0ID09IHN5
bnRoX3BvcnRfZm9yY2VkICkgeworICAgICAgICAgICAgICBzZXIgPSByc190YWJsZStpOworICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlICBzZXIgPSBy
c190YWJsZSArIGluZGV4OworCS8qCURpdmlzb3IsIGJ5dGVzaXplIGFuZCBwYXJpdHkgKi8KKwlx
dW90ID0gc2VyLT5iYXVkX2Jhc2UgLyBiYXVkOworCWN2YWwgPSBjZmxhZyAmICggQ1NJWkUgfCBD
U1RPUEIgKTsKKyNpZiBkZWZpbmVkKCBfX3Bvd2VycGNfXyApIHx8IGRlZmluZWQoIF9fYWxwaGFf
XyApCisJY3ZhbCA+Pj0gODsKKyNlbHNlIC8qICFfX3Bvd2VycGNfXyAmJiAhX19hbHBoYV9fICov
CisJY3ZhbCA+Pj0gNDsKKyNlbmRpZiAvKiAhX19wb3dlcnBjX18gJiYgIV9fYWxwaGFfXyAqLwor
CWlmICggY2ZsYWcgJiBQQVJFTkIgKQorCQljdmFsIHw9IFVBUlRfTENSX1BBUklUWTsKKwlpZiAo
ICEoIGNmbGFnICYgUEFST0REICkgKQorCQljdmFsIHw9IFVBUlRfTENSX0VQQVI7CisJaWYgKCBz
eW50aF9yZXF1ZXN0X3JlZ2lvbiggc2VyLT5wb3J0LCA4ICkgKSB7IC8vIHRyeSB0byB0YWtlIGl0
IGJhY2suCisJICAgX19yZWxlYXNlX3JlZ2lvbigmaW9wb3J0X3Jlc291cmNlLCBzZXItPnBvcnQs
IDggKTsKKwlpZiAoIHN5bnRoX3JlcXVlc3RfcmVnaW9uKCBzZXItPnBvcnQsIDggKSApIHJldHVy
biBOVUxMOworCX0KKworCS8qCURpc2FibGUgVUFSVCBpbnRlcnJ1cHRzLCBzZXQgRFRSIGFuZCBS
VFMgaGlnaAorCSAqCWFuZCBzZXQgc3BlZWQuICovCisJb3V0YiggY3ZhbCB8IFVBUlRfTENSX0RM
QUIsIHNlci0+cG9ydCArIFVBUlRfTENSICk7CS8qIHNldCBETEFCICovCisJb3V0YiggcXVvdCAm
IDB4ZmYsIHNlci0+cG9ydCArIFVBUlRfRExMICk7CS8qIExTIG9mIGRpdmlzb3IgKi8KKwlvdXRi
KCBxdW90ID4+IDgsIHNlci0+cG9ydCArIFVBUlRfRExNICk7CQkvKiBNUyBvZiBkaXZpc29yICov
CisJb3V0YiggY3ZhbCwgc2VyLT5wb3J0ICsgVUFSVF9MQ1IgKTsJCS8qIHJlc2V0IERMQUIgKi8K
KworCS8vIFR1cm4gb2ZmIEludGVycnVwdHMKKwlvdXRiKCAwLCBzZXItPnBvcnQgKyBVQVJUX0lF
UiApOworCW91dGIoIFVBUlRfTUNSX0RUUiB8IFVBUlRfTUNSX1JUUywgc2VyLT5wb3J0ICsgVUFS
VF9NQ1IgKTsKKworCS8qIElmIHdlIHJlYWQgMHhmZiBmcm9tIHRoZSBMU1IsIHRoZXJlIGlzIG5v
IFVBUlQgaGVyZS4gKi8KKwlpZiAoIGluYiAoIHNlci0+cG9ydCArIFVBUlRfTFNSICkgPT0gMHhm
ZiApIHsKKwkJc3ludGhfcmVsZWFzZV9yZWdpb24oIHNlci0+cG9ydCwgOCApOworCQlzZXJzdGF0
ZT1OVUxMOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwltZGVsYXkoIDEgKTsKKwlzeW50aF9wb3J0
X3R0cyA9IHNlci0+cG9ydDsKKwlzZXJzdGF0ZT1zZXI7CisKKwlzdGFydF9zZXJpYWxfaW50ZXJy
dXB0KHNlci0+aXJxKTsKKworCXJldHVybiBzZXI7Cit9CisKK3N0YXRpYyB2b2lkIHN0YXJ0X3Nl
cmlhbF9pbnRlcnJ1cHQoaW50IGlycSkKK3sKKwlpbnQgcnY7CisKKwlpZiAoc3ludGgtPnJlYWRf
YnVmZl9hZGQgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJcnYgPSByZXF1ZXN0X2lycShpcnEsIHN5
bnRoX3JlYWRidWZfaGFuZGxlciwgU0FfU0hJUlEsIAorCQkJICJzZXJpYWwiLCAodm9pZCAqKSBz
eW50aF9yZWFkYnVmX2hhbmRsZXIpOworCisJaWYgKHJ2KQorCXsKKwkJcHJpbnRrKEtFUk5fRVJS
ICJVbmFibGUgdG8gcmVxdWVzdCBTcGVha3VwIHNlcmlhbCBJIFIgUVxuIik7CisJfQorCS8vIFNl
dCBNQ1IKKwlvdXRiKFVBUlRfTUNSX0RUUiB8IFVBUlRfTUNSX1JUUyB8IFVBUlRfTUNSX09VVDIs
IHN5bnRoX3BvcnRfdHRzICsgVUFSVF9NQ1IpOworCS8vIFR1cm4gb24gSW50ZXJydXB0cworCW91
dGIoVUFSVF9JRVJfTVNJfFVBUlRfSUVSX1JMU0l8VUFSVF9JRVJfUkRJLHN5bnRoX3BvcnRfdHRz
KyBVQVJUX0lFUiApOworCWluYihzeW50aF9wb3J0X3R0cytVQVJUX0xTUik7CisJaW5iKHN5bnRo
X3BvcnRfdHRzK1VBUlRfUlgpOworCWluYihzeW50aF9wb3J0X3R0cytVQVJUX0lJUik7CisJaW5i
KHN5bnRoX3BvcnRfdHRzK1VBUlRfTVNSKTsKKwlvdXRiKCAxLCBzeW50aF9wb3J0X3R0cyArIFVB
UlRfRkNSICk7CS8qIFR1cm4gRklGTyBPbiAqLworfQorCitzdGF0aWMgdm9pZCBzdG9wX3Nlcmlh
bF9pbnRlcnJ1cHQodm9pZCkKK3sKKwlpZiAoIHN5bnRoX3BvcnRfdHRzID09IDAgKSByZXR1cm47
CisKKwkvLyBUdXJuIG9mZiBpbnRlcnJ1cHRzCisJb3V0YigwLHN5bnRoX3BvcnRfdHRzK1VBUlRf
SUVSKTsKKwkvLyBGcmVlIElSUQorCWZyZWVfaXJxKHNlcnN0YXRlLT5pcnEsICh2b2lkICopIHN5
bnRoX3JlYWRidWZfaGFuZGxlcik7Cit9CisKK3ZvaWQgc3BrX3NlcmlhbF9yZWxlYXNlKCB2b2lk
ICkKK3sKKwlpZiAoIHN5bnRoX3BvcnRfdHRzID09IDAgKSByZXR1cm47CisJc3ludGhfcmVsZWFz
ZV9yZWdpb24oIHN5bnRoX3BvcnRfdHRzLCA4ICk7CisJc3ludGhfcG9ydF90dHMgPSAwOworfQor
CitzdGF0aWMgaXJxcmV0dXJuX3Qgc3ludGhfcmVhZGJ1Zl9oYW5kbGVyKGludCBpcnEsIHZvaWQg
KmRldl9pZCkKK3sKKy8vcHJpbnRrKEtFUk5fRVJSICJpbiBpcnFcbiIpOworLy9wcl93YXJuKCJp
biBJUlFcbiIpOworCWludCBjOworCXdoaWxlIChpbmJfcChzeW50aF9wb3J0X3R0cyArIFVBUlRf
TFNSKSAmIFVBUlRfTFNSX0RSKQorCXsKKworCQljPWluYl9wKHN5bnRoX3BvcnRfdHRzK1VBUlRf
UlgpOworCQlzeW50aC0+cmVhZF9idWZmX2FkZCgodV9jaGFyKSBjKTsKKy8vcHJpbnRrKEtFUk5f
RVJSICJjID0gJWRcbiIsYyk7CisvL3ByX3dhcm4oIkMgPSAlZFxuIixjKTsKKwl9CisJcmV0dXJu
IElSUV9IQU5ETEVEOworfQorCisvKiBzbGVlcCBmb3IgbXMgbWlsbGlzZWNvbmRzICovCit2b2lk
CitzeW50aF9kZWxheSAoIGludCB2YWwgKQoreworICAgICAgICBpZiAodmFsID09IDApIHJldHVy
bjsKKwlzeW50aF90aW1lci5leHBpcmVzID0gamlmZmllcyArIHZhbDsKKwkJc3RhcnRfdGltZXIo
IHN5bnRoX3RpbWVyICk7CisJc3ludGhfdGltZXJfYWN0aXZlKys7Cit9CisKK3N0YXRpYyB2b2lk
IHN5bnRoX2R1bW15X2NhdGNodXAodW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN5bnRoX3N0b3Bf
dGltZXIoKTsKKwlzeW50aF9kb25lKCk7Cit9IC8qIGEgYm9ndXMgY2F0Y2h1cCBpZiBubyBzeW50
aCAqLworCit2b2lkCitzeW50aF9zdG9wX3RpbWVyICggdm9pZCApCit7CisJaWYgKCBzeW50aF90
aW1lcl9hY3RpdmUgKQorCQlzdG9wX3RpbWVyICggc3ludGhfdGltZXIgKTsKKwlzeW50aF90aW1l
cl9hY3RpdmUgPSAwOworfQorCitpbnQgc3ludGhfZG9uZSggdm9pZCApCit7CisJc3ludGhfYnVm
Zl9vdXQgPSBzeW50aF9idWZmX2luID0gc3ludGhfYnVmZmVyOworCWlmICh3YWl0cXVldWVfYWN0
aXZlKCZzeW50aF9zbGVlcGluZ19saXN0KSkgeworCQkgIHdha2VfdXBfaW50ZXJydXB0aWJsZSgm
c3ludGhfc2xlZXBpbmdfbGlzdCk7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gMTsKK30KKwor
c3RhdGljIHZvaWQgc3ludGhfc3RhcnQodm9pZCkKK3sKKwlpZiAoIXN5bnRoX2FsaXZlKQorCQlz
eW50aF9kb25lKCk7CisJZWxzZSBpZiAoc3ludGgtPnN0YXJ0KQorCQlzeW50aC0+c3RhcnQoKTsK
KwllbHNlIGlmIChzeW50aF90aW1lcl9hY3RpdmUgPT0gMCkKKwkJc3ludGhfZGVsYXkoc3ludGhf
dHJpZ2dlcl90aW1lKTsKK30KKwordm9pZCBkb19mbHVzaCggdm9pZCApCit7CisJc3ludGhfc3Rv
cF90aW1lciggKTsKKwlzeW50aF9idWZmX291dCA9IHN5bnRoX2J1ZmZfaW4gPSBzeW50aF9idWZm
ZXI7CisJaWYgKCBzeW50aF9hbGl2ZSApIHsKKwkJc3ludGgtPmZsdXNoKCApOworCQlpZiAoIHN5
bnRoLT5mbHVzaF93YWl0ICkKKwkJCXN5bnRoX2RlbGF5KCAoIHN5bnRoLT5mbHVzaF93YWl0ICog
SFogKSAvIDEwMDAgKTsKKwkJaWYgKCBwaXRjaF9zaGlmdCApIHsKKwkJCXN5bnRoX3dyaXRlX3N0
cmluZyggcGl0Y2hfYnVmZiApOworCQkJcGl0Y2hfc2hpZnQgPSAwOworCQl9CisJfQorCWlmICh3
YWl0cXVldWVfYWN0aXZlKCZzeW50aF9zbGVlcGluZ19saXN0KSkKKwkJd2FrZV91cF9pbnRlcnJ1
cHRpYmxlKCZzeW50aF9zbGVlcGluZ19saXN0KTsKK30KKwordm9pZAorc3ludGhfYnVmZmVyX2Fk
ZCAoIGNoYXIgY2ggKQoreworCWlmICggc3ludGhfYnVmZl9pbiA+PSBidWZmZXJfaGlnaHdhdGVy
ICkgeworCQlzeW50aF9zdGFydCAoICk7CisJCWlmICggIXdhaXRxdWV1ZV9hY3RpdmUgKCAmc3lu
dGhfc2xlZXBpbmdfbGlzdCApICkKKwkJCWludGVycnVwdGlibGVfc2xlZXBfb24gKCAmc3ludGhf
c2xlZXBpbmdfbGlzdCApOworCQlpZiAoIHN5bnRoX2J1ZmZfaW4gPj0gYnVmZmVyX2VuZCApIHJl
dHVybjsKKwl9CisJKnN5bnRoX2J1ZmZfaW4rKyA9IGNoOworfQorCit2b2lkCitzeW50aF93cml0
ZSAoIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50ICkKK3sKKwl3aGlsZSAoIGNvdW50LS0g
KQorCQlzeW50aF9idWZmZXJfYWRkICggKmJ1ZisrICk7CisJc3ludGhfc3RhcnQgKCApOworfQor
Cit2b2lkCitzeW50aF93cml0ZV9zdHJpbmcgKCBjb25zdCBjaGFyICpidWYgKQoreworCXdoaWxl
ICggKmJ1ZiApCisJCXN5bnRoX2J1ZmZlcl9hZGQgKCAqYnVmKysgKTsKKwlzeW50aF9zdGFydCAo
ICk7Cit9CisKK3ZvaWQKK3N5bnRoX3dyaXRlX21zZyAoIGNvbnN0IGNoYXIgKmJ1ZiApCit7CisJ
d2hpbGUgKCAqYnVmICkKKwkJc3ludGhfYnVmZmVyX2FkZCAoICpidWYrKyApOworCQlzeW50aF9i
dWZmZXJfYWRkICggJ1xuJyApOworCXN5bnRoX3N0YXJ0ICggKTsKK30KKworc3RhdGljIGludCBp
bmRleF9jb3VudD0wOworc3RhdGljIGludCBzZW50ZW5jZV9jb3VudD0wOworCit2b2lkCityZXNl
dF9pbmRleF9jb3VudChpbnQgc2MpCit7CisJc3RhdGljIGludCBmaXJzdCA9IDE7CisJaWYgKGZp
cnN0KQorCQlmaXJzdD0wOworCWVsc2UKKwkJc3ludGgtPmdldF9pbmRleCgpOworCWluZGV4X2Nv
dW50PTA7CisJc2VudGVuY2VfY291bnQ9c2M7Cit9CisKK2ludAorc3ludGhfc3VwcG9ydHNfaW5k
ZXhpbmcoIHZvaWQgKQoreworCWlmICggc3ludGgtPmdldF9pbmRleCE9TlVMTCApCisJCXJldHVy
biAxOworCXJldHVybiAwOworfQorCit2b2lkCitzeW50aF9pbnNlcnRfbmV4dF9pbmRleCggaW50
IHNlbnRfbnVtICkKK3sKKwlpbnQgb3V0OworCWNoYXIgYnVmWzUwXTsKKwlpZiAoIHN5bnRoX2Fs
aXZlICkgeworCQlpZiAoc2VudF9udW09PTApCisJCXsKKwkJCXN5bnRoLT5pbmRleGluZy5jdXJy
aW5kZXgrKzsKKwkJCWluZGV4X2NvdW50Kys7CisJCQlpZiAoc3ludGgtPmluZGV4aW5nLmN1cnJp
bmRleD5zeW50aC0+aW5kZXhpbmcuaGlnaGluZGV4KQorCQkJCXN5bnRoLT5pbmRleGluZy5jdXJy
aW5kZXg9c3ludGgtPmluZGV4aW5nLmxvd2luZGV4OworCQl9CisKKwkJb3V0PXN5bnRoLT5pbmRl
eGluZy5jdXJyaW5kZXgqMTArc2VudF9udW07CisJCXNwcmludGYoYnVmLHN5bnRoLT5pbmRleGlu
Zy5jb21tYW5kLG91dCxvdXQpOworCQlzeW50aF93cml0ZV9zdHJpbmcoYnVmKTsKKwl9Cit9CisK
K3ZvaWQKK2dldF9pbmRleF9jb3VudChpbnQgKmxpbmVjb3VudCxpbnQgKnNlbnRjb3VudCkKK3sK
KwlpbnQgaW5kPXN5bnRoLT5nZXRfaW5kZXgoKTsKKwlpZiAoaW5kKQorCXsKKwkJc2VudGVuY2Vf
Y291bnQ9aW5kJTEwOworCisJCWlmICgoaW5kLzEwKTw9c3ludGgtPmluZGV4aW5nLmN1cnJpbmRl
eCkKKwkJCWluZGV4X2NvdW50ID0gc3ludGgtPmluZGV4aW5nLmN1cnJpbmRleC0oaW5kLzEwKTsK
KwkJZWxzZQorCQkJaW5kZXhfY291bnQgPSBzeW50aC0+aW5kZXhpbmcuY3VycmluZGV4LXN5bnRo
LT5pbmRleGluZy5sb3dpbmRleCArIHN5bnRoLT5pbmRleGluZy5oaWdoaW5kZXgtKGluZC8xMCkr
MTsKKworCX0KKwkqc2VudGNvdW50PXNlbnRlbmNlX2NvdW50OworCSpsaW5lY291bnQ9aW5kZXhf
Y291bnQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc3ludGhfcmVzOworCitpbnQgc3lu
dGhfcmVxdWVzdF9yZWdpb24gKCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIG4g
KQoreworCXN0cnVjdCByZXNvdXJjZSAqcGFyZW50ID0gJmlvcG9ydF9yZXNvdXJjZTsKKwltZW1z
ZXQgKCAmc3ludGhfcmVzLCAwLCBzaXplb2YgKCBzeW50aF9yZXMgKSApOworCXN5bnRoX3Jlcy5u
YW1lID0gc3ludGgtPm5hbWU7CisJc3ludGhfcmVzLnN0YXJ0ID0gc3RhcnQ7CisJc3ludGhfcmVz
LmVuZCA9IHN0YXJ0ICsgbiAtIDE7CisJc3ludGhfcmVzLmZsYWdzID0gSU9SRVNPVVJDRV9CVVNZ
OworCXJldHVybiByZXF1ZXN0X3Jlc291cmNlICggcGFyZW50LCAmc3ludGhfcmVzICk7Cit9CisK
K2ludCBzeW50aF9yZWxlYXNlX3JlZ2lvbiAoIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVk
IGxvbmcgbiApCit7CisJcmV0dXJuIHJlbGVhc2VfcmVzb3VyY2UgKCAmc3ludGhfcmVzICk7Cit9
CisKKyNpZmRlZiBDT05GSUdfUFJPQ19GUworCisvLyAvcHJvYy9zeW50aC1zcGVjaWZpYyBjb2Rl
CisKKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L2xpbWl0cy5oPgor
CisvLyB0aGlzIGlzIHRoZSB3cml0ZSBoYW5kbGVyIGZvciAvcHJvYy9zcGVha3VwL3N5bnRoLXNw
ZWNpZmljL2RpcmVjdAorc3RhdGljIGludCBzcGtfZGlyZWN0X3dyaXRlX3Byb2Moc3RydWN0IGZp
bGUgKmZpbGUsIGNvbnN0IGNoYXIgKmJ1ZmZlciwKKwkJCQkgdV9sb25nIGNvdW50LCB2b2lkICpk
YXRhKQoreworCXVfY2hhciBidWZbMjU2XTsKKwlpbnQgcmV0ID0gY291bnQsIGJ5dGVzOworCWNv
bnN0IGNoYXIgKnB0ciA9IGJ1ZmZlcjsKKwlpZiAoIHN5bnRoID09IE5VTEwgKSByZXR1cm4gLUVQ
RVJNOworCXdoaWxlICggY291bnQgPiAwICkgeworCQlieXRlcyA9IG1pbl90ICggc2l6ZV90LCBj
b3VudCwgMjUwICk7CisJCWlmICggY29weV9mcm9tX3VzZXIgKCBidWYsIHB0ciwgYnl0ZXMgICkg
KQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCWJ1ZltieXRlc10gPSAnXDAnOworCQl4bGF0ZSAoIGJ1
ZiApOworCQlzeW50aF93cml0ZV9zdHJpbmcgKCBidWYgKTsKKwkJcHRyICs9IGJ5dGVzOworCQlj
b3VudCAtPSBieXRlczsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RydWN0IHN0X3Byb2NfdmFy
IHN5bnRoX2RpcmVjdCA9IHsgU1lOVEhfRElSRUNULCAwLCBzcGtfZGlyZWN0X3dyaXRlX3Byb2Ms
IDAgfTsKKworI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3Qgc3RfbnVtX3ZhciBzeW50aF90aW1lX3Zh
cnNbXSA9IHsKKwl7IERFTEFZLCAwLCAxMDAsIDEwMCwgMjAwMCwgMCwgMCwgMCB9LAorCXsgVFJJ
R0dFUiwgMCwgMjAsIDEwLCAyMDAsIDAsIDAsIDAgfSwKKwl7IEpJRkZZLCAwLCA1MCwgMjAsIDIw
MCwgMCwgMCwgMCB9LAorCXsgRlVMTCwgMCwgNDAwLCAyMDAsIDEwMDAwLCAwLCAwLCAwIH0sCisJ
Vl9MQVNUX05VTQorfTsKKworc3RhdGljIHN0cnVjdCBzcGtfc3ludGggKmRvX2xvYWRfc3ludGgo
Y29uc3QgY2hhciAqc3ludGhfbmFtZSkKK3sKKwlpbnQgaTsKKworCWlmIChyZXF1ZXN0X21vZHVs
ZSgic3BlYWt1cF8lcyIsIHN5bnRoX25hbWUpKQorCQlyZXR1cm4gTlVMTDsKKworCWZvciAoaSA9
IDA7IHN5bnRoc1tpXSAhPSBOVUxMOyBpKyspIHsKKwkJaWYgKHN0cmNtcChzeW50aHNbaV0tPm5h
bWUsIHN5bnRoX25hbWUpID09IDApCisJCQlyZXR1cm4gc3ludGhzW2ldOworCX0KKworCXJldHVy
biBOVUxMOworfQorCitpbnQgc3ludGhfaW5pdChjaGFyICpzeW50aF9uYW1lKQoreworCWludCBp
OworCXN0cnVjdCBzcGtfc3ludGggKnN5bnRoID0gTlVMTDsKKworCWlmIChzeW50aF9uYW1lID09
IE5VTEwpCisJCXJldHVybiAwOworCisJaWYgKHN0cmNtcChzeW50aF9uYW1lLCAibm9uZSIpID09
IDApIHsKKwkJc3ludGhfcmVsZWFzZSgpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBGaXJzdCwg
Y2hlY2sgaWYgd2UgYWxyZWFkeSBoYXZlIGl0IGxvYWRlZC4gKi8KKwlmb3IgKGkgPSAwOyBzeW50
aHNbaV0gIT0gTlVMTDsgaSsrKQorCQlpZiAoc3RyY21wKHN5bnRoc1tpXS0+bmFtZSwgc3ludGhf
bmFtZSkgPT0gMCkKKwkJCXN5bnRoID0gc3ludGhzW2ldOworCisJLyogTm8gc3ludGggbG9hZGVk
IG1hdGNoaW5nIHRoaXMgb25lLCB0cnkgbG9hZGluZyBpdC4gKi8KKwlpZiAoIXN5bnRoKQorCQlz
eW50aCA9IGRvX2xvYWRfc3ludGgoc3ludGhfbmFtZSk7CisKKwkvKiBJZiB3ZSBnb3Qgb25lLCBp
bml0aWFsaXplIGl0IG5vdy4gKi8KKwlpZiAoc3ludGgpCisJCXJldHVybiBkb19zeW50aF9pbml0
KHN5bnRoKTsKKworCXJldHVybiAwOworfQorCitpbnQgZG9fc3ludGhfaW5pdChzdHJ1Y3Qgc3Br
X3N5bnRoICppbl9zeW50aCkKK3sKKwlzdHJ1Y3Qgc3RfbnVtX3ZhciAqbl92YXI7CisJc3RydWN0
IHN0X3N0cmluZ192YXIgKnNfdmFyOworCisJc3ludGhfcmVsZWFzZSgpOworCWlmIChpbl9zeW50
aC0+Y2hlY2t2YWwgIT0gU1lOVEhfQ0hFQ0spIHJldHVybiAtRUlOVkFMOworCXN5bnRoID0gaW5f
c3ludGg7Citwcl93YXJuKCJzeW50aCBwcm9iZVxuIik7CisJaWYgKHN5bnRoLT5wcm9iZSgpIDwg
MCkgeworCQlwcl93YXJuKCIlczogZGV2aWNlIHByb2JlIGZhaWxlZFxuIiwgaW5fc3ludGgtPm5h
bWUpOworCQlzeW50aCA9IE5VTEw7CisJCXJldHVybiAtRU5PREVWOworCX0KKwlzeW50aF90aW1l
X3ZhcnNbMF0uZGVmYXVsdF92YWwgPSBzeW50aC0+ZGVsYXk7CisJc3ludGhfdGltZV92YXJzWzFd
LmRlZmF1bHRfdmFsID0gc3ludGgtPnRyaWdnZXI7CisJc3ludGhfdGltZV92YXJzWzJdLmRlZmF1
bHRfdmFsID0gc3ludGgtPmppZmZpZXM7CisJc3ludGhfdGltZV92YXJzWzNdLmRlZmF1bHRfdmFs
ID0gc3ludGgtPmZ1bGw7CisJICBzeW50aF90aW1lci5mdW5jdGlvbiA9IHN5bnRoLT5jYXRjaF91
cDsKKwkgIHN5bnRoX3RpbWVyLmVudHJ5LnByZXYgPSBOVUxMOworCSAgaW5pdF90aW1lcigmc3lu
dGhfdGltZXIpOworCSAgZm9yKG5fdmFyID0gc3ludGhfdGltZV92YXJzOyBuX3Zhci0+dmFyX2lk
ID49IDA7IG5fdmFyKyspCisJICAgIHNwZWFrdXBfcmVnaXN0ZXJfdmFyKG5fdmFyKTsKKwlzeW50
aF9hbGl2ZSA9IDE7CisJc3ludGhfd3JpdGVfc3RyaW5nKHN5bnRoLT5pbml0KTsKKwlmb3Ioc192
YXIgPSBzeW50aC0+c3RyaW5nX3ZhcnM7IHNfdmFyLT52YXJfaWQgPj0gMDsgc192YXIrKykKKwkJ
c3BlYWt1cF9yZWdpc3Rlcl92YXIoKHN0cnVjdCBzdF9udW1fdmFyICopIHNfdmFyKTsKKwlmb3Io
bl92YXIgPSBzeW50aC0+bnVtX3ZhcnM7IG5fdmFyLT52YXJfaWQgPj0gMDsgbl92YXIrKykKKwkJ
c3BlYWt1cF9yZWdpc3Rlcl92YXIobl92YXIpOworCWlmICghcXVpZXRfYm9vdCkgeworCQlzeW50
aF93cml0ZV9zdHJpbmcoc3ludGgtPmxvbmdfbmFtZSk7CisJCXN5bnRoX3dyaXRlX21zZygiIGZv
dW5kIik7CisJfQorI2lmZGVmIENPTkZJR19QUk9DX0ZTCisJc3BlYWt1cF9yZWdpc3Rlcl92YXIo
KHN0cnVjdCBzdF9udW1fdmFyICopICZzeW50aF9kaXJlY3QpOworI2VuZGlmCisJc3ludGhfZmxh
Z3MgPSBzeW50aC0+ZmxhZ3M7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgCitzeW50aF9yZWxlYXNl
ICggdm9pZCApCit7CisJc3RydWN0IHN0X251bV92YXIgKm5fdmFyOworCXN0cnVjdCBzdF9zdHJp
bmdfdmFyICpzX3ZhcjsKKwlpZiAoIHN5bnRoID09IE5VTEwgKSByZXR1cm47CisJaWYgKGRvd25f
aW50ZXJydXB0aWJsZSAoICZzZW0gKSkgcmV0dXJuOworCXByX2luZm8gKCAicmVsZWFzaW5nIHN5
bnRoICVzXG4iLCBzeW50aC0+bmFtZSApOworCWZvciAoIHNfdmFyID0gc3ludGgtPnN0cmluZ192
YXJzOyBzX3Zhci0+dmFyX2lkID49IDA7IHNfdmFyKysgKQorCQlzcGVha3VwX3VucmVnaXN0ZXJf
dmFyKCBzX3Zhci0+dmFyX2lkICk7CisJZm9yICggbl92YXIgPSBzeW50aF90aW1lX3ZhcnM7IG5f
dmFyLT52YXJfaWQgPj0gMDsgbl92YXIrKyApCisJCXNwZWFrdXBfdW5yZWdpc3Rlcl92YXIoIG5f
dmFyLT52YXJfaWQgKTsKKwlmb3IgKCBuX3ZhciA9IHN5bnRoLT5udW1fdmFyczsgbl92YXItPnZh
cl9pZCA+PSAwOyBuX3ZhcisrICkKKwkJc3BlYWt1cF91bnJlZ2lzdGVyX3Zhciggbl92YXItPnZh
cl9pZCApOworI2lmZGVmIENPTkZJR19QUk9DX0ZTCisJc3BlYWt1cF91bnJlZ2lzdGVyX3Zhcigg
U1lOVEhfRElSRUNUICk7CisjZW5kaWYKKwlzeW50aF9kdW1teV9jYXRjaHVwKCh1bnNpZ25lZCBs
b25nKSBOVUxMICk7CisJc3ludGhfdGltZXIuZnVuY3Rpb24gPSBzeW50aF9kdW1teV9jYXRjaHVw
OworCXN0b3Bfc2VyaWFsX2ludGVycnVwdCgpOworCXN5bnRoLT5yZWxlYXNlKCApOworCXN5bnRo
ID0gTlVMTDsKKwl1cCggJnNlbSApOworfQorCit2b2lkIHN5bnRoX2FkZCAoIHN0cnVjdCBzcGtf
c3ludGggKmluX3N5bnRoICkKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBzeW50aHNbaV0gIT0g
TlVMTDsgaSsrICkKKwlpZiAoIGluX3N5bnRoID09IHN5bnRoc1tpXSApIHJldHVybjsKKwlzeW50
aHNbaSsrXSA9IGluX3N5bnRoOworCXN5bnRoc1tpXSA9IE5VTEw7Cit9CisKK3ZvaWQgc3ludGhf
cmVtb3ZlICggc3RydWN0IHNwa19zeW50aCAqaW5fc3ludGggKQoreworCWludCBpOworCWZvciAo
aSA9IDA7IHN5bnRoc1tpXSAhPSBOVUxMOyBpKysgKSB7CisJCWlmICggaW5fc3ludGggPT0gc3lu
dGhzW2ldICkgYnJlYWs7CisJfQorZm9yICggO3N5bnRoc1tpXSAhPSBOVUxMOyBpKysgKSAvKiBj
b21wcmVzcyB0YWJsZSAqLworCQlzeW50aHNbaV0gPSBzeW50aHNbaSsxXTsKKwltb2R1bGVfc3Rh
dHVzID0gMDsKK30KKworc3RhdGljIHN0cnVjdCBzdF92YXJfaGVhZGVyIHZhcl9oZWFkZXJzW10g
PSB7CisgIHsgInZlcnNpb24iLCBWRVJTSU9OLCBWQVJfUFJPQywgVVNFUl9SLCAwLCAwLCAwIH0s
CisgIHsgInN5bnRoX25hbWUiLCBTWU5USCwgVkFSX1BST0MsIFVTRVJfUlcsIDAsIDAsIDAgfSwK
KyAgeyAia2V5bWFwIiwgS0VZTUFQLCBWQVJfUFJPQywgVVNFUl9SVywgMCwgMCwgMCB9LAorICB7
ICJzaWxlbnQiLCBTSUxFTlQsIFZBUl9QUk9DLCBVU0VSX1csIDAsIDAsIDAgfSwKKyAgeyAicHVu
Y19zb21lIiwgUFVOQ19TT01FLCBWQVJfUFJPQywgVVNFUl9SVywgMCwgMCwgMCB9LAorICB7ICJw
dW5jX21vc3QiLCBQVU5DX01PU1QsIFZBUl9QUk9DLCBVU0VSX1JXLCAwLCAwLCAwIH0sCisgIHsg
InB1bmNfYWxsIiwgUFVOQ19BTEwsIFZBUl9QUk9DLCBVU0VSX1IsIDAsIDAsIDAgfSwKKyAgeyAi
ZGVsaW1pdGVycyIsIERFTElNLCBWQVJfUFJPQywgVVNFUl9SVywgMCwgMCwgMCB9LAorICB7ICJy
ZXBlYXRzIiwgUkVQRUFUUywgVkFSX1BST0MsIFVTRVJfUlcsIDAsIDAsIDAgfSwKKyAgeyAiZXhf
bnVtIiwgRVhOVU1CRVIsIFZBUl9QUk9DLCBVU0VSX1JXLCAwLCAwLCAwIH0sCisgIHsgImNoYXJh
Y3RlcnMiLCBDSEFSUywgVkFSX1BST0MsIFVTRVJfUlcsIDAsIDAsIDAgfSwKKyAgeyAic3ludGhf
ZGlyZWN0IiwgU1lOVEhfRElSRUNULCBWQVJfUFJPQywgVVNFUl9XLCAwLCAwLCAwIH0sCisgIHsg
ImNhcHNfc3RhcnQiLCBDQVBTX1NUQVJULCBWQVJfU1RSSU5HLCBVU0VSX1JXLCAwLCBzdHJfY2Fw
c19zdGFydCwgMCB9LAorICB7ICJjYXBzX3N0b3AiLCBDQVBTX1NUT1AsIFZBUl9TVFJJTkcsIFVT
RVJfUlcsIDAsIHN0cl9jYXBzX3N0b3AsIDAgfSwKKyAgeyAiZGVsYXlfdGltZSIsIERFTEFZLCBW
QVJfVElNRSwgUk9PVF9XLCAwLCAmc3ludGhfZGVsYXlfdGltZSwgMCB9LAorICB7ICJ0cmlnZ2Vy
X3RpbWUiLCBUUklHR0VSLCBWQVJfVElNRSwgUk9PVF9XLCAwLCAmc3ludGhfdHJpZ2dlcl90aW1l
LCAwIH0sCisgIHsgImppZmZ5X2RlbHRhIiwgSklGRlksIFZBUl9USU1FLCBST09UX1csIDAsICZz
eW50aF9qaWZmeV9kZWx0YSwgMCB9LAorICB7ICJmdWxsX3RpbWUiLCBGVUxMLCBWQVJfVElNRSwg
Uk9PVF9XLCAwLCAmc3ludGhfZnVsbF90aW1lLCAwIH0sCisgIHsgInNwZWxsX2RlbGF5IiwgU1BF
TExfREVMQVksIFZBUl9OVU0sIFVTRVJfUlcsIDAsICZzcGVsbF9kZWxheSwgMCB9LAorICB7ICJi
bGVlcHMiLCBCTEVFUFMsIFZBUl9OVU0sIFVTRVJfUlcsIDAsICZibGVlcHMsIDAgfSwKKyAgeyAi
YXR0cmliX2JsZWVwIiwgQVRUUklCX0JMRUVQLCBWQVJfTlVNLCBVU0VSX1JXLCAwLCAmYXR0cmli
X2JsZWVwLCAwIH0sCisgIHsgImJsZWVwX3RpbWUiLCBCTEVFUF9USU1FLCBWQVJfVElNRSwgVVNF
Ul9SVywgMCwgJmJsZWVwX3RpbWUsIDAgfSwKKyAgeyAiY3Vyc29yX3RpbWUiLCBDVVJTT1JfVElN
RSwgVkFSX1RJTUUsIFVTRVJfUlcsIDAsICZjdXJzb3JfdGltZW91dCwgMCB9LAorICB7ICJwdW5j
X2xldmVsIiwgUFVOQ19MRVZFTCwgVkFSX05VTSwgVVNFUl9SVywgMCwgJnB1bmNfbGV2ZWwsIDAg
fSwKKyAgeyAicmVhZGluZ19wdW5jIiwgUkVBRElOR19QVU5DLCBWQVJfTlVNLCBVU0VSX1JXLCAw
LCAmcmVhZGluZ19wdW5jLCAwIH0sCisgIHsgInNheV9jb250cm9sIiwgU0FZX0NPTlRST0wsIFZB
Ul9OVU0sIFVTRVJfUlcsIDAsICZzYXlfY3RybCwgMCB9LAorICB7ICJzYXlfd29yZF9jdGwiLCBT
QVlfV09SRF9DVEwsIFZBUl9OVU0sIFVTRVJfUlcsIDAsICZzYXlfd29yZF9jdGwsIDAgfSwKKyAg
eyAibm9faW50ZXJydXB0IiwgTk9fSU5URVJSVVBULCBWQVJfTlVNLCBVU0VSX1JXLCAwLCAmbm9f
aW50ciwgMCB9LAorICB7ICJrZXlfZWNobyIsIEtFWV9FQ0hPLCBWQVJfTlVNLCBVU0VSX1JXLCAw
LCAma2V5X2VjaG8sIDAgfSwKKyAgeyAiYmVsbF9wb3MiLCBCRUxMX1BPUywgVkFSX05VTSwgVVNF
Ul9SVywgMCwgJmJlbGxfcG9zLCAwIH0sCisgIHsgInJhdGUiLCBSQVRFLCBWQVJfTlVNLCBVU0VS
X1JXLCAwLCAwLCAwIH0sCisgIHsgInBpdGNoIiwgUElUQ0gsIFZBUl9OVU0sIFVTRVJfUlcsIDAs
IDAsIDAgfSwKKyAgeyAidm9sIiwgVk9MLCBWQVJfTlVNLCBVU0VSX1JXLCAwLCAwLCAwIH0sCisg
IHsgInRvbmUiLCBUT05FLCBWQVJfTlVNLCBVU0VSX1JXLCAwLCAwLCAwIH0sCisgIHsgInB1bmN0
IiwgUFVOQ1QsIFZBUl9OVU0sIFVTRVJfUlcsIDAsIDAsIDAgfSwKKyAgeyAidm9pY2UiLCBWT0lD
RSwgVkFSX05VTSwgVVNFUl9SVywgMCwgMCwgMCB9LAorICB7ICJmcmVxIiwgRlJFUSwgVkFSX05V
TSwgVVNFUl9SVywgMCwgMCwgMCB9LAorICB7ICJsYW5nIiwgTEFORywgVkFSX05VTSwgVVNFUl9S
VywgMCwgMCwgMCB9LAorICB7ICJjaGFydGFiIiwgQ0hBUlRBQiwgVkFSX1BST0MsIFVTRVJfUlcs
IDAsIDAsIDAgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc3RfdmFyX2hlYWRlciAqdmFyX3B0cnNb
TUFYVkFSU10gPSB7IDAsIDAsIDAgfTsKKworY2hhciAqCitzcGVha3VwX3MyaSAoIGNoYXIgKnN0
YXJ0LCBzaG9ydCAqZGVzdCApCit7CisJaW50IHZhbDsKKwljaGFyIGNoID0gKnN0YXJ0OworCWlm
ICggY2ggPT0gJy0nIHx8IGNoID09ICcrJyApIHN0YXJ0Kys7CisJaWYgKCAqc3RhcnQgPCAnMCcg
fHwgKnN0YXJ0ID4gJzknICkgcmV0dXJuIHN0YXJ0OworCXZhbCA9ICggKnN0YXJ0ICkgLSAnMCc7
CisJc3RhcnQrKzsKKwl3aGlsZSAoICpzdGFydCA+PSAnMCcgJiYgKnN0YXJ0IDw9ICc5JyApIHsK
KwkJdmFsICo9IDEwOworCQl2YWwgKz0gKCAqc3RhcnQgKSAtICcwJzsKKwkJc3RhcnQrKzsKKwl9
CisJaWYgKCBjaCA9PSAnLScgKSAqZGVzdCA9IC12YWw7CisJZWxzZSAqZGVzdCA9IHZhbDsKKwly
ZXR1cm4gc3RhcnQ7Cit9CisKK3Nob3J0IHB1bmNfbWFza3NbXSA9IHsgMCwgU09NRSwgTU9TVCwg
UFVOQywgUFVOQ3xCX1NZTSB9OworCisvLyBoYW5kbGVycyBmb3Igc2V0dGluZyB2YXJzCitpbnQg
c2V0X251bV92YXIoc2hvcnQgaW5wdXQsIHN0cnVjdCBzdF92YXJfaGVhZGVyICp2YXIsIGludCBo
b3cpCit7CisJc2hvcnQgdmFsLCByZXQgPSAwOworCXNob3J0ICpwX3ZhbCA9IHZhci0+cF92YWw7
CisJaW50IGw7CisJY2hhciBidWZbMzJdLCAqY3A7CisJc3RydWN0IHN0X251bV92YXIgKnZhcl9k
YXRhID0gdmFyLT5kYXRhOworCWlmICh2YXJfZGF0YSA9PSBOVUxMKQorCQlyZXR1cm4gRV9VTkRF
RjsKKwlpZiAoaG93ID09IEVfREVGQVVMVCkgeworCQl2YWwgPSB2YXJfZGF0YS0+ZGVmYXVsdF92
YWw7CisJCXJldCA9IFNFVF9ERUZBVUxUOworCX0gZWxzZSB7CisJCWlmICggaG93ID09IEVfU0VU
ICkgdmFsID0gaW5wdXQ7CisJCWVsc2UgdmFsID0gdmFyX2RhdGEtPnZhbHVlOworCQlpZiAoIGhv
dyA9PSBFX0lOQyApIHZhbCArPSBpbnB1dDsKKwkJZWxzZSBpZiAoIGhvdyA9PSBFX0RFQyApIHZh
bCAtPSBpbnB1dDsKKwkJaWYgKCB2YWwgPCB2YXJfZGF0YS0+bG93IHx8IHZhbCA+IHZhcl9kYXRh
LT5oaWdoICkKKwkJCXJldHVybiBFX1JBTkdFOworCX0KKwl2YXJfZGF0YS0+dmFsdWUgPSB2YWw7
CisJaWYgKCB2YXItPnZhcl90eXBlID09IFZBUl9USU1FICYmIHBfdmFsICE9IDAgKSB7CisJCSpw
X3ZhbCA9ICggdmFsICogSFogKyAxMDAwIC0gSFogKSAvIDEwMDA7CisJCXJldHVybiByZXQ7CisJ
fQorCWlmICggcF92YWwgIT0gMCApICpwX3ZhbCA9IHZhbDsKKwlpZiAoIHZhci0+dmFyX2lkID09
IFBVTkNfTEVWRUwgKSB7CisJCXB1bmNfbWFzayA9IHB1bmNfbWFza3NbdmFsXTsKKwlyZXR1cm4g
cmV0OworCX0KKwlpZiAoIHZhcl9kYXRhLT5tdWx0aXBsaWVyICE9IDAgKQorCQl2YWwgKj0gdmFy
X2RhdGEtPm11bHRpcGxpZXI7CisJdmFsICs9IHZhcl9kYXRhLT5vZmZzZXQ7CisJaWYgKCB2YXIt
PnZhcl9pZCA8IEZJUlNUX1NZTlRIX1ZBUiB8fCBzeW50aCA9PSBOVUxMICkgcmV0dXJuIHJldDsK
KwlpZiAoIHN5bnRoLT5zeW50aF9hZGp1c3QgIT0gTlVMTCApIHsKKwkJaW50IHN0YXR1cyA9IHN5
bnRoLT5zeW50aF9hZGp1c3QoIHZhciApOworCQlyZXR1cm4gKCBzdGF0dXMgIT0gMCApID8gc3Rh
dHVzIDogcmV0OworCX0KKwlpZiAoICF2YXJfZGF0YS0+c3ludGhfZm10ICkgcmV0dXJuIHJldDsK
KwlpZiAoIHZhci0+dmFyX2lkID09IFBJVENIICkgY3AgPSBwaXRjaF9idWZmOworCWVsc2UgY3Ag
PSBidWY7CisJaWYgKCAhdmFyX2RhdGEtPm91dF9zdHIgKQorCQlsID0gc3ByaW50ZiggY3AsIHZh
cl9kYXRhLT5zeW50aF9mbXQsIChpbnQpdmFsICk7CisJZWxzZSBsID0gc3ByaW50ZiggY3AsIHZh
cl9kYXRhLT5zeW50aF9mbXQsIHZhcl9kYXRhLT5vdXRfc3RyW3ZhbF0gKTsKKwlzeW50aF93cml0
ZV9zdHJpbmcoIGNwICk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBzZXRfc3RyaW5n
X3ZhcihjaGFyICpwYWdlLCBzdHJ1Y3Qgc3RfdmFyX2hlYWRlciAqdmFyLCBpbnQgbGVuKQorewor
CWludCByZXQgPSAwOworCXN0cnVjdCBzdF9zdHJpbmdfdmFyICp2YXJfZGF0YSA9IHZhci0+ZGF0
YTsKKwlpZiAoIHZhcl9kYXRhID09IE5VTEwgKSByZXR1cm4gRV9VTkRFRjsKKwlpZiAoIGxlbiA+
IE1BWFZBUkxFTiApCisJCXJldHVybiAtRV9UT09MT05HOworCWlmICggIWxlbiApIHsKKwlpZiAo
ICF2YXJfZGF0YS0+ZGVmYXVsdF92YWwgKSByZXR1cm4gMDsKKwkJcmV0ID0gU0VUX0RFRkFVTFQ7
CisJCWlmICggIXZhci0+cF92YWwgKSB2YXItPnBfdmFsID0gdmFyX2RhdGEtPmRlZmF1bHRfdmFs
OworCQlpZiAoIHZhci0+cF92YWwgIT0gdmFyX2RhdGEtPmRlZmF1bHRfdmFsICkKKwkJCXN0cmNw
eSggKGNoYXIgKil2YXItPnBfdmFsLCB2YXJfZGF0YS0+ZGVmYXVsdF92YWwgKTsKKwkJfSBlbHNl
IGlmICggdmFyLT5wX3ZhbCApCisJCQlzdHJjcHkoIChjaGFyICopdmFyLT5wX3ZhbCwgcGFnZSAp
OworCWVsc2UgcmV0dXJuIC1FX1RPT0xPTkc7CisJcmV0dXJuIHJldDsKK30KKworc3RydWN0IHN0
X3Zhcl9oZWFkZXIgKmdldF92YXJfaGVhZGVyKHNob3J0IHZhcl9pZCkKK3sKKwlzdHJ1Y3Qgc3Rf
dmFyX2hlYWRlciAqcF9oZWFkZXI7CisJaWYgKCB2YXJfaWQgPCAwIHx8IHZhcl9pZCA+PSBNQVhW
QVJTICkgcmV0dXJuIE5VTEw7CisJcF9oZWFkZXIgPSB2YXJfcHRyc1t2YXJfaWRdOworCWlmICgg
cF9oZWFkZXItPmRhdGEgPT0gTlVMTCApIHJldHVybiBOVUxMOworCXJldHVybiBwX2hlYWRlcjsK
K30KKworI2lmZGVmIENPTkZJR19QUk9DX0ZTCisvLyB0aGlzIGlzIHRoZSB3cml0ZSBoYW5kbGVy
IGZvciAvcHJvYy9zcGVha3VwIHZhcnMKK3N0YXRpYyBpbnQgc3BlYWt1cF92YXJzX3dyaXRlX3By
b2Moc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgKmJ1ZmZlciwKKwkJCQkgICB1X2xvbmcg
Y291bnQsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHN0X3Zhcl9oZWFkZXIgKnBfaGVhZGVyID0g
ZGF0YTsKKwlpbnQgbGVuID0gY291bnQsIHJldCA9IDA7CisJY2hhciAqcGFnZSA9ICggY2hhciAq
ICkgX19nZXRfZnJlZV9wYWdlICggR0ZQX0tFUk5FTCApOworCWNoYXIgKnZfbmFtZSA9IHBfaGVh
ZGVyLT5uYW1lLCAqY3A7CisJc3RydWN0IHN0X251bV92YXIgKnZhcl9kYXRhOworCXNob3J0IHZh
bHVlOworCWlmICggIXBhZ2UgKSByZXR1cm4gLUVOT01FTTsKKwlpZiAoIGNvcHlfZnJvbV91c2Vy
ICggcGFnZSwgYnVmZmVyLCBjb3VudCApICkgeworCQlyZXQgPSAtRUZBVUxUOworCQlnb3RvIG91
dDsKKwl9CisJaWYgKCBwYWdlW2xlbiAtIDFdID09ICdcbicgKSAtLWxlbjsKKwlwYWdlW2xlbl0g
PSAnXDAnOworCWNwID0geGxhdGUoIHBhZ2UgKTsKKwlzd2l0Y2goIHBfaGVhZGVyLT52YXJfdHlw
ZSApIHsKKwkJY2FzZSBWQVJfTlVNOgorCQljYXNlIFZBUl9USU1FOgorCQkJaWYgKCAqY3AgPT0g
J2QnIHx8ICpjcCA9PSAncicgfHwgKmNwID09ICdcMCcgKQorCQkJCWxlbiA9IEVfREVGQVVMVDsK
KwkJCWVsc2UgaWYgKCAqY3AgPT0gJysnIHx8ICpjcCA9PSAnLScgKSBsZW4gPSBFX0lOQzsKKwkJ
CWVsc2UgbGVuID0gRV9TRVQ7CisJCQlzcGVha3VwX3MyaSggY3AsICZ2YWx1ZSApOworCQkJcmV0
ID0gc2V0X251bV92YXIoIHZhbHVlLCBwX2hlYWRlciwgbGVuICk7CisJCQlpZiAoIHJldCAhPSBF
X1JBTkdFICkgYnJlYWs7CisJdmFyX2RhdGEgPSBwX2hlYWRlci0+ZGF0YTsKKwkJCXByX3dhcm4o
ICJ2YWx1ZSBmb3IgJXMgb3V0IG9mIHJhbmdlLCBleHBlY3QgJWQgdG8gJWRcbiIsCisJCQl2X25h
bWUsIChpbnQpdmFyX2RhdGEtPmxvdywgKGludCl2YXJfZGF0YS0+aGlnaCApOworCQkJYnJlYWs7
CisJCWNhc2UgVkFSX1NUUklORzoKKwkJCWxlbiA9IHN0cmxlbiggcGFnZSApOworCQkJcmV0ID0g
c2V0X3N0cmluZ192YXIoIHBhZ2UsIHBfaGVhZGVyLCBsZW4gKTsKKwkJCWlmICggcmV0ICE9IEVf
VE9PTE9ORyApIGJyZWFrOworCQkJcHJfd2FybiggInZhbHVlIHRvbyBsb25nIGZvciAlc1xuIiwg
dl9uYW1lICk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXByX3dhcm4oICIlcyB1bmtub3du
IHR5cGUgJWRcbiIsCisJCQkJcF9oZWFkZXItPm5hbWUsICggaW50IClwX2hlYWRlci0+dmFyX3R5
cGUgKTsKKwkJYnJlYWs7CisJfQorb3V0OgorCWlmICggcmV0ID09IFNFVF9ERUZBVUxUICkKKwkJ
cHJfaW5mbyggIiVzIHJlc2V0IHRvIGRlZmF1bHQgdmFsdWVcbiIsIHZfbmFtZSApOworCWZyZWVf
cGFnZSAoICggdW5zaWduZWQgbG9uZyApIHBhZ2UgKTsKKwlyZXR1cm4gY291bnQ7Cit9CisKKy8v
IHRoaXMgaXMgdGhlIHJlYWQgaGFuZGxlciBmb3IgL3Byb2Mvc3BlYWt1cCB2YXJzCitzdGF0aWMg
aW50IHNwZWFrdXBfdmFyc19yZWFkX3Byb2MoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZf
dCBvZmYsCisJCQkJICBpbnQgY291bnQsIGludCAqZW9mLCB2b2lkICpkYXRhKQoreworCXN0cnVj
dCBzdF92YXJfaGVhZGVyICp2YXIgPSBkYXRhOworCXN0cnVjdCBzdF9udW1fdmFyICpuX3ZhciA9
IHZhci0+ZGF0YTsKKwljaGFyIGNoLCAqY3AsICpjcDE7CisJKnN0YXJ0ID0gMDsKKwkqZW9mID0g
MTsKKwlzd2l0Y2goIHZhci0+dmFyX3R5cGUgKSB7CisJCWNhc2UgVkFSX05VTToKKwkJY2FzZSBW
QVJfVElNRToKKwkJCXJldHVybiBzcHJpbnRmKCBwYWdlLCAiJWRcbiIsICggaW50ICluX3Zhci0+
dmFsdWUgKTsKKwkJCWJyZWFrOworCQljYXNlIFZBUl9TVFJJTkc6CisJCQljcDEgPSBwYWdlOwor
CQkJKmNwMSsrID0gJyInOworCQkJZm9yICggY3AgPSAoY2hhciAqKXZhci0+cF92YWw7ICggY2gg
PSAqY3AgKTsgY3ArKyApIHsKKwkJCQlpZiAoIGNoID49ICcgJyAmJiBjaCA8ICd+JyApCisJCQkJ
CSpjcDErKyA9IGNoOworCQkJCWVsc2UKKwkJCQkJY3AxICs9IHNwcmludGYoIGNwMSwgIlxcIiJ4
JTAyeCIsIGNoICk7CisJCQl9CisJCQkqY3AxKysgPSAnIic7CisJCQkqY3AxKysgPSAnXG4nOwor
CQkJKmNwMSA9ICdcMCc7CisJCQlyZXR1cm4gY3AxLXBhZ2U7CisJCQlicmVhazsKKwkJZGVmYXVs
dDoKKwkJCXJldHVybiBzcHJpbnRmKCBwYWdlLCAib29wcyBiYWQgdHlwZSAlZFxuIiwKKwkJCQko
IGludCApdmFyLT52YXJfdHlwZSApOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0
IGNoYXIgc3BrX2RpcltdID0gInNwZWFrdXAiOworc3RhdGljIHN0cnVjdCBwcm9jX2Rpcl9lbnRy
eSAqZGlyX2VudCA9IDA7CisKK3N0YXRpYyBpbnQgc3BrX21ha2VfcHJvYyhzdHJ1Y3Qgc3RfdmFy
X2hlYWRlciAqcF9oZWFkZXIpCit7CisJc3RydWN0IHByb2NfZGlyX2VudHJ5ICplbnQgPSBwX2hl
YWRlci0+cHJvY19lbnRyeTsKKwljaGFyICpuYW1lID0gcF9oZWFkZXItPm5hbWU7CisJc3RydWN0
IHN0X3Byb2NfdmFyICpwX3ZhcjsKKwlpZiAoIGRpcl9lbnQgPT0gMCB8fCBwX2hlYWRlci0+cHJv
Y19tb2RlID09IDAgfHwgZW50ICE9IDAgKSByZXR1cm4gMDsKKwllbnQgPSBjcmVhdGVfcHJvY19l
bnRyeSAoIG5hbWUsIHBfaGVhZGVyLT5wcm9jX21vZGUsIGRpcl9lbnQgKTsKKwlpZiAoICFlbnQg
KSB7CisJCXByX3dhcm4oICJVbmFibGUgdG8gY3JlYXRlIC9wcm9jLyVzLyVzIGVudHJ5LlxuIiwK
KwkJCXNwa19kaXIsIG5hbWUgKTsKKwkJcmV0dXJuIC0xOworCX0KKwlpZiAoIHBfaGVhZGVyLT52
YXJfdHlwZSA9PSBWQVJfUFJPQyApIHsKKwkJcF92YXIgPSAoc3RydWN0IHN0X3Byb2NfdmFyICop
IHBfaGVhZGVyLT5kYXRhOworCQlpZiAoIHBfaGVhZGVyLT5wcm9jX21vZGUmU19JUlVTUiApCisJ
CQllbnQtPnJlYWRfcHJvYyA9IHBfdmFyLT5yZWFkX3Byb2M7CisJCWlmICggcF9oZWFkZXItPnBy
b2NfbW9kZSZTX0lXVVNSICkKKwkJCWVudC0+d3JpdGVfcHJvYyA9IHBfdmFyLT53cml0ZV9wcm9j
OworCX0gZWxzZSB7CisJCWlmICggcF9oZWFkZXItPnByb2NfbW9kZSZTX0lSVVNSICkKKwkJCWVu
dC0+cmVhZF9wcm9jID0gc3BlYWt1cF92YXJzX3JlYWRfcHJvYzsKKwkJaWYgKCBwX2hlYWRlci0+
cHJvY19tb2RlJlNfSVdVU1IgKQorCQkJZW50LT53cml0ZV9wcm9jID0gc3BlYWt1cF92YXJzX3dy
aXRlX3Byb2M7CisJfQorCWVudC0+ZGF0YSA9ICggdm9pZCAqIClwX2hlYWRlcjsKKwlwX2hlYWRl
ci0+cHJvY19lbnRyeSA9ICggdm9pZCAqICkgZW50OworCXJldHVybiAwOworfQorCisjZW5kaWYK
KworaW50IHNwZWFrdXBfcmVnaXN0ZXJfdmFyKHN0cnVjdCBzdF9udW1fdmFyICp2YXIpCit7CisJ
c3RhdGljIGNoYXIgbm90aGluZ1syXSA9ICJcMCI7CisJaW50IGksIHZhcl9pZCA9IHZhci0+dmFy
X2lkOworCXN0cnVjdCBzdF92YXJfaGVhZGVyICpwX2hlYWRlcjsKKwlzdHJ1Y3Qgc3Rfc3RyaW5n
X3ZhciAqc192YXI7CisJaWYgKHZhcl9pZCA8IDAgfHwgdmFyX2lkID49IE1BWFZBUlMpCisJCXJl
dHVybiAtMTsKKwlpZiAoIHZhcl9wdHJzWzBdID09IDAgKSB7CisJCWZvciAoIGkgPSAwOyBpIDwg
TUFYVkFSUzsgaSsrICkgeworCQkJcF9oZWFkZXIgPSAmdmFyX2hlYWRlcnNbaV07CisJCQl2YXJf
cHRyc1twX2hlYWRlci0+dmFyX2lkXSA9IHBfaGVhZGVyOworCQkJcF9oZWFkZXItPmRhdGEgPSAw
OworCQl9CisJfQorCXBfaGVhZGVyID0gdmFyX3B0cnNbdmFyX2lkXTsKKwlpZiAoIHBfaGVhZGVy
LT5kYXRhICE9IDAgKSByZXR1cm4gMDsKKwlwX2hlYWRlci0+ZGF0YSAgPSB2YXI7CisJc3dpdGNo
ICggcF9oZWFkZXItPnZhcl90eXBlICkgeworCQljYXNlIFZBUl9TVFJJTkc6CisJCQlzX3ZhciA9
IChzdHJ1Y3Qgc3Rfc3RyaW5nX3ZhciAqKSB2YXI7CisJCQlzZXRfc3RyaW5nX3Zhciggbm90aGlu
ZywgcF9oZWFkZXIsIDAgKTsKKwkJCWJyZWFrOworCQljYXNlIFZBUl9OVU06CisJCWNhc2UgVkFS
X1RJTUU6CisJCQlzZXRfbnVtX3ZhciggMCwgcF9oZWFkZXIsIEVfREVGQVVMVCApOworCQkJYnJl
YWs7CisJfQorI2lmZGVmIENPTkZJR19QUk9DX0ZTCisJcmV0dXJuIHNwa19tYWtlX3Byb2MoIHBf
aGVhZGVyICk7CisjZWxzZQorCXJldHVybiAwOworI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkIHNw
ZWFrdXBfdW5yZWdpc3Rlcl92YXIoc2hvcnQgdmFyX2lkKQoreworCXN0cnVjdCBzdF92YXJfaGVh
ZGVyICpwX2hlYWRlcjsKKwlpZiAoIHZhcl9pZCA8IDAgfHwgdmFyX2lkID49IE1BWFZBUlMgKSBy
ZXR1cm47CisJcF9oZWFkZXIgPSB2YXJfcHRyc1t2YXJfaWRdOworCXBfaGVhZGVyLT5kYXRhID0g
MDsKKyNpZmRlZiBDT05GSUdfUFJPQ19GUworCWlmICggZGlyX2VudCAhPSAwICYmIHBfaGVhZGVy
LT5wcm9jX2VudHJ5ICE9IDAgKQorCQlyZW1vdmVfcHJvY19lbnRyeSggcF9oZWFkZXItPm5hbWUs
IGRpcl9lbnQgKTsKKwlwX2hlYWRlci0+cHJvY19lbnRyeSA9IDA7CisjZW5kaWYKK30KKworZXh0
ZXJuIGNoYXIgc3ludGhfbmFtZVtdOworCitpbnQgc3BlYWt1cF9kZXZfaW5pdCh2b2lkKQorewor
CWludCBpOworCXN0cnVjdCBzdF92YXJfaGVhZGVyICpwX2hlYWRlcjsKKwlzdHJ1Y3Qgc3RfcHJv
Y192YXIgKnB2ID0gc3BrX3Byb2NfdmFyczsKKworCS8vcHJfd2Fybigic3ludGggbmFtZSBvbiBl
bnRyeSBpczogJXNcbiIsIHN5bnRoX25hbWUpOworCXN5bnRoX2luaXQoc3ludGhfbmFtZSk7CisJ
c3BlYWt1cF9yZWdpc3Rlcl9kZXZzeW50aCgpOworI2lmZGVmIENPTkZJR19QUk9DX0ZTCisJZGly
X2VudCA9IGNyZWF0ZV9wcm9jX2VudHJ5KHNwa19kaXIsIFNfSUZESVIsIDApOworCWlmICghZGly
X2VudCkgeworCQlwcl93YXJuKCJVbmFibGUgdG8gY3JlYXRlIC9wcm9jLyVzIGVudHJ5LlxuIiwg
c3BrX2Rpcik7CisJCXJldHVybiAtMTsKKwl9CisJd2hpbGUocHYtPnZhcl9pZCA+PSAwKSB7CisJ
CXNwZWFrdXBfcmVnaXN0ZXJfdmFyKCh2b2lkICopIHB2KTsKKwkJcHYrKzsKKwl9CisJCWZvciAo
aSA9IDA7IGkgPCBNQVhWQVJTOyBpKyspIHsKKwkJCXBfaGVhZGVyID0gJnZhcl9oZWFkZXJzW2ld
OworCQlpZiAoIHBfaGVhZGVyLT5kYXRhICE9IDAgKSBzcGtfbWFrZV9wcm9jKHBfaGVhZGVyKTsK
Kwl9CisjZW5kaWYKKwlyZXR1cm4gMDsKK30KKwordm9pZCBzcGVha3VwX3JlbW92ZSh2b2lkKQor
eworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IE1BWFZBUlM7IGkrKykKKwkJc3BlYWt1cF91
bnJlZ2lzdGVyX3ZhcihpKTsKKwlwcl9pbmZvKCJzcGVha3VwOiB1bnJlZ2lzdGVyaW5nIHN5bnRo
IGRldmljZSAvZGV2L3N5bnRoXG4iKTsKKwltaXNjX2RlcmVnaXN0ZXIoJnN5bnRoX2RldmljZSk7
CisJbWlzY19yZWdpc3RlcmVkID0gMDsKKyNpZmRlZiBDT05GSUdfUFJPQ19GUworCWlmIChkaXJf
ZW50ICE9IDApCisJCXJlbW92ZV9wcm9jX2VudHJ5KHNwa19kaXIsIE5VTEwpOworI2VuZGlmCit9
CisKKy8vIHByb3ZpZGUgYSBmaWxlIHRvIHVzZXJzLCBzbyBwZW9wbGUgY2FuIHNlbmQgdG8gL2Rl
di9zeW50aAorCitzdGF0aWMgc3NpemVfdAorc3BlYWt1cF9maWxlX3dyaXRlICggc3RydWN0IGZp
bGUgKmZwLCBjb25zdCBjaGFyICpidWZmZXIsCisJCSAgICBzaXplX3QgbmJ5dGVzLCBsb2ZmX3Qg
KiBwcG9zICkKK3sKKwlzaXplX3QgY291bnQgPSBuYnl0ZXM7CisJY29uc3QgY2hhciAqcHRyID0g
YnVmZmVyOworCWludCBieXRlczsKKwl1X2NoYXIgYnVmWzI1Nl07CisJaWYgKCBzeW50aCA9PSBO
VUxMICkgcmV0dXJuIC1FTk9ERVY7CisJd2hpbGUgKCBjb3VudCA+IDAgKSB7CisJCWJ5dGVzID0g
bWluX3QgKHNpemVfdCwgY291bnQsIHNpemVvZiAoIGJ1ZiApICk7CisJCWlmICggY29weV9mcm9t
X3VzZXIgKCBidWYsIHB0ciwgYnl0ZXMgKSApCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJY291bnQg
LT0gYnl0ZXM7CisJCXB0ciArPSBieXRlczsKKwkJc3ludGhfd3JpdGUgKCBidWYsIGJ5dGVzICk7
CisJfQorCXJldHVybiAoIHNzaXplX3QgKSBuYnl0ZXM7Cit9CisKK3N0YXRpYyBpbnQKK3NwZWFr
dXBfZmlsZV9pb2N0bCAoIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAor
CQkgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcgKQoreworCXJldHVybiAw
OwkJLy8gc2lsZW50bHkgaWdub3JlCit9CisKK3N0YXRpYyBzc2l6ZV90CitzcGVha3VwX2ZpbGVf
cmVhZCAoIHN0cnVjdCBmaWxlICpmcCwgY2hhciAqYnVmLCBzaXplX3QgbmJ5dGVzLCBsb2ZmX3Qg
KiBwcG9zICkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzeW50aF9maWxlX2ludXNl
ID0gMDsKKworc3RhdGljIGludAorc3BlYWt1cF9maWxlX29wZW4gKCBzdHJ1Y3QgaW5vZGUgKmlw
LCBzdHJ1Y3QgZmlsZSAqZnAgKQoreworCWlmICggc3ludGhfZmlsZV9pbnVzZSApCisJCXJldHVy
biAtRUJVU1k7CisJZWxzZSBpZiAoIHN5bnRoID09IE5VTEwgKQorCQlyZXR1cm4gLUVOT0RFVjsK
KwlzeW50aF9maWxlX2ludXNlKys7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3NwZWFr
dXBfZmlsZV9yZWxlYXNlICggc3RydWN0IGlub2RlICppcCwgc3RydWN0IGZpbGUgKmZwICkKK3sK
KwlzeW50aF9maWxlX2ludXNlID0gMDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBm
aWxlX29wZXJhdGlvbnMgc3ludGhfZm9wcyA9IHsKKwlyZWFkOnNwZWFrdXBfZmlsZV9yZWFkLAor
CXdyaXRlOnNwZWFrdXBfZmlsZV93cml0ZSwKKwlpb2N0bDpzcGVha3VwX2ZpbGVfaW9jdGwsCisJ
b3BlbjpzcGVha3VwX2ZpbGVfb3BlbiwKKwlyZWxlYXNlOnNwZWFrdXBfZmlsZV9yZWxlYXNlLAor
fTsKKworc3RhdGljIHZvaWQgc3BlYWt1cF9yZWdpc3Rlcl9kZXZzeW50aCh2b2lkKQoreworCWlm
ICggbWlzY19yZWdpc3RlcmVkICE9IDAgKSByZXR1cm47CisJbWlzY19yZWdpc3RlcmVkID0gMTsK
KwltZW1zZXQoICZzeW50aF9kZXZpY2UsIDAsIHNpemVvZiggc3ludGhfZGV2aWNlICkgKTsKKy8q
IHplcm8gaXQgc28gaWYgcmVnaXN0ZXIgZmFpbHMsIGRlcmVnaXN0ZXIgd2lsbCBub3QgcmVmIGlu
dmFsaWQgcHRycyAqLworCXN5bnRoX2RldmljZS5taW5vciA9IFNZTlRIX01JTk9SOworCXN5bnRo
X2RldmljZS5uYW1lID0gInN5bnRoIjsKKwlzeW50aF9kZXZpY2UuZm9wcyA9ICZzeW50aF9mb3Bz
OworCWlmICggbWlzY19yZWdpc3RlciAoICZzeW50aF9kZXZpY2UgKSApCisJCXByX3dhcm4oCisJ
CQkiQ291bGRuJ3QgaW5pdGlhbGl6ZSBtaXNjZGV2aWNlIC9kZXYvc3ludGguXG4iICk7CisJZWxz
ZQorCQlwcl9pbmZvKAorCQkgICAgImluaXRpYWxpemVkIGRldmljZTogL2Rldi9zeW50aCwgbm9k
ZSAoIE1BSk9SIDEwLCBNSU5PUiAyNSApXG4iICk7Cit9CisKK19faW5pdGNhbGwoc3BlYWt1cF9k
ZXZfaW5pdCk7CisKKy8qIGV4cG9ydGVkIHN5bWJvbHMgbmVlZGVkIGJ5IHN5bnRoIG1vZHVsZXMg
Ki8KK0VYUE9SVF9TWU1CT0xfR1BMKHNwZWFrdXBfZGV2X2luaXQpOworRVhQT1JUX1NZTUJPTF9H
UEwoc3ludGhfaW5pdCk7CitFWFBPUlRfU1lNQk9MX0dQTChkb19zeW50aF9pbml0KTsKK0VYUE9S
VF9TWU1CT0xfR1BMKHNwa19zZXJpYWxfaW5pdCk7CitFWFBPUlRfU1lNQk9MX0dQTChzcGtfc2Vy
aWFsX3JlbGVhc2UpOworRVhQT1JUX1NZTUJPTF9HUEwoc3ludGgpOworRVhQT1JUX1NZTUJPTF9H
UEwoc3ludGhfYWxpdmUpOworRVhQT1JUX1NZTUJPTF9HUEwoc3ludGhfYnVmZmVyKTsKK0VYUE9S
VF9TWU1CT0xfR1BMKHN5bnRoX2J1ZmZfaW4pOworRVhQT1JUX1NZTUJPTF9HUEwoc3ludGhfYnVm
Zl9vdXQpOworRVhQT1JUX1NZTUJPTF9HUEwoc3ludGhfZGVsYXkpOworRVhQT1JUX1NZTUJPTF9H
UEwoc3ludGhfZGVsYXlfdGltZSk7CitFWFBPUlRfU1lNQk9MX0dQTChzeW50aF9kb25lKTsKK0VY
UE9SVF9TWU1CT0xfR1BMKHN5bnRoX2Z1bGxfdGltZSk7CitFWFBPUlRfU1lNQk9MX0dQTChzeW50
aF9qaWZmeV9kZWx0YSk7CitFWFBPUlRfU1lNQk9MX0dQTChzeW50aF9wb3J0X2ZvcmNlZCk7CitF
WFBPUlRfU1lNQk9MX0dQTChzeW50aF9wb3J0X3R0cyk7CitFWFBPUlRfU1lNQk9MX0dQTChzeW50
aF9yZXF1ZXN0X3JlZ2lvbik7CitFWFBPUlRfU1lNQk9MX0dQTChzeW50aF9yZWxlYXNlX3JlZ2lv
bik7CitFWFBPUlRfU1lNQk9MX0dQTChzeW50aF9yZWxlYXNlKTsKK0VYUE9SVF9TWU1CT0xfR1BM
KHN5bnRoX2FkZCk7CitFWFBPUlRfU1lNQk9MX0dQTChzeW50aF9yZW1vdmUpOworRVhQT1JUX1NZ
TUJPTF9HUEwoc3ludGhfc3RvcF90aW1lcik7CitFWFBPUlRfU1lNQk9MX0dQTChzeW50aF93cml0
ZV9zdHJpbmcpOworRVhQT1JUX1NZTUJPTF9HUEwoc3ludGhfd3JpdGVfbXNnKTsKK0VYUE9SVF9T
WU1CT0xfR1BMKHN5bnRoX3dyaXRlKTsKK0VYUE9SVF9TWU1CT0xfR1BMKHN5bnRoX3N1cHBvcnRz
X2luZGV4aW5nKTsKK01PRFVMRV9BVVRIT1IoIktpcmsgUmVpc2VyIDxraXJrQGJyYWlsbGUudXdv
LmNhPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJTcGVha3VwIG1vZHVsZSByZXF1aXJlZCBieSBh
bGwgc3ludGhlc2l6ZXIgc3BlY2lmaWMgbW9kdWxlcyIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIp
OwpkaWZmIC0tZXhjbHVkZT0nKi5vcmlnJyAtLWV4Y2x1ZGU9JyoucGF0Y2gnIC11ck5wIGxpbnV4
LTIuNi4yMC9kcml2ZXJzL2NoYXIvc3BlYWt1cC9zcGVha3VwX2R0bGsuYyBsaW51eC0yLjYuMjAt
c3BrL2RyaXZlcnMvY2hhci9zcGVha3VwL3NwZWFrdXBfZHRsay5jCi0tLSBsaW51eC0yLjYuMjAv
ZHJpdmVycy9jaGFyL3NwZWFrdXAvc3BlYWt1cF9kdGxrLmMJMTk2OS0xMi0zMSAxOTowMDowMC4w
MDAwMDAwMDAgLTA1MDAKKysrIGxpbnV4LTIuNi4yMC1zcGsvZHJpdmVycy9jaGFyL3NwZWFrdXAv
c3BlYWt1cF9kdGxrLmMJMjAwNy0wMi0wNCAxNjowOToxOS4wMDAwMDAwMDAgLTA1MDAKQEAgLTAs
MCArMSwyMzMgQEAKKy8qCisgKiBvcmlnaW5pYWxseSB3cml0dGVuIGJ5OiBLaXJrIFJlaXNlciA8
a2lya0BicmFpbGxlLnV3by5jYT4KKyogdGhpcyB2ZXJzaW9uIGNvbnNpZGVyYWJseSBtb2RpZmll
ZCBieSBEYXZpZCBCb3Jvd3NraSwgZGF2aWQ1NzVAcm9nZXJzLmNvbQorCisJCUNvcHlyaWdodCAo
QykgMTk5OC05OSAgS2lyayBSZWlzZXIuCisJCUNvcHlyaWdodCAoQykgMjAwMyBEYXZpZCBCb3Jv
d3NraS4KKworCQlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorCQlpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorCQl0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorCQkoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisJCVRoaXMgcHJvZ3JhbSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorCQlidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorCQlN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlCisJCUdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKwkJ
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKwkJYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhl
IEZyZWUgU29mdHdhcmUKKwkJRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0
ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorCisgKiB0aGlzIGNvZGUgaXMgc3Bl
Y2lmaWNseSB3cml0dGVuIGFzIGEgZHJpdmVyIGZvciB0aGUgc3BlYWt1cCBzY3JlZW5yZXZpZXcK
KyAqIHBhY2thZ2UgYW5kIGlzIG5vdCBhIGdlbmVyYWwgZGV2aWNlIGRyaXZlci4KKwkJKi8KKyNp
bmNsdWRlICJzcGtfcHJpdi5oIgorI2luY2x1ZGUgInNlcmlhbGlvLmgiCisjaW5jbHVkZSAic3Bl
YWt1cF9kdGxrLmgiIC8qIGxvY2FsIGhlYWRlciBmaWxlIGZvciBEb3VibGVUYWxrIHZhbHVlcyAq
LworCisjZGVmaW5lIE1ZX1NZTlRIIHN5bnRoX2R0bGsKKyNkZWZpbmUgUFJPQ1NQRUVDSCAweDAw
CisjZGVmaW5lIHN5bnRoX3JlYWRhYmxlKCkgKChzeW50aF9zdGF0dXMgPSBpbmJfcChzeW50aF9w
b3J0X3R0cykpICYgVFRTX1JFQURBQkxFKSAKKyNkZWZpbmUgc3ludGhfZnVsbCgpICgoc3ludGhf
c3RhdHVzID0gaW5iX3Aoc3ludGhfcG9ydF90dHMpKSAmIFRUU19BTE1PU1RfRlVMTCkgCisKK3N0
YXRpYyBpbnQgc3ludGhfbHBjOworc3RhdGljIHVuc2lnbmVkIGludCBzeW50aF9wb3J0bGlzdFtd
ID0KKwkJeyAweDI1ZSwgMHgyOWUsIDB4MmRlLCAweDMxZSwgMHgzNWUsIDB4MzllLCAwIH07Citz
dGF0aWMgdV9jaGFyIHN5bnRoX3N0YXR1cyA9IDA7CisKK3N0YXRpYyB2b2lkIHNwa19vdXQoY29u
c3QgY2hhciBjaCkKK3sKKwlpbnQgdG1vdXQgPSAxMDAwMDA7CisJd2hpbGUgKCgoc3ludGhfc3Rh
dHVzID0gaW5iX3Aoc3ludGhfcG9ydF90dHMpKSAmIFRUU19XUklUQUJMRSkgPT0gMCk7IAorCW91
dGJfcChjaCwgc3ludGhfcG9ydF90dHMpOworCXdoaWxlICgoKChzeW50aF9zdGF0dXMgPSBpbmJf
cChzeW50aF9wb3J0X3R0cykpICYgVFRTX1dSSVRBQkxFKSAhPSAwKQorCQkmJiAoLS10bW91dCAh
PSAwKSApOworfQorCitzdGF0aWMgdm9pZCBkb19jYXRjaF91cCh1bnNpZ25lZCBsb25nIGRhdGEp
Cit7CisJdW5zaWduZWQgbG9uZyBqaWZmX21heCA9IGppZmZpZXMrc3ludGhfamlmZnlfZGVsdGE7
CisJdV9jaGFyIGNoOworCXN5bnRoX3N0b3BfdGltZXIoKTsKKwlzeW50aF9zdGF0dXMgPSBpbmJf
cChzeW50aF9wb3J0X3R0cyk7CisJd2hpbGUgKHN5bnRoX2J1ZmZfb3V0IDwgc3ludGhfYnVmZl9p
bikgeworCQlpZiAoc3ludGhfc3RhdHVzICYgVFRTX0FMTU9TVF9GVUxMKSB7CisJCQlzeW50aF9k
ZWxheShzeW50aF9mdWxsX3RpbWUpOworCQkJcmV0dXJuOworCQl9CisJCWNoID0gKnN5bnRoX2J1
ZmZfb3V0Kys7CisJCWlmIChjaCA9PSAweDBhKSBjaCA9IFBST0NTUEVFQ0g7CisJCXNwa19vdXQo
IGNoICk7CisJCWlmIChqaWZmaWVzID49IGppZmZfbWF4ICYmIGNoID09IFNQQUNFKSB7IAorCQkJ
c3BrX291dChQUk9DU1BFRUNIKTsKKwkJCXN5bnRoX2RlbGF5KHN5bnRoX2RlbGF5X3RpbWUpOyAK
KwkJCXJldHVybjsgCisJCX0KKwl9CisJc3BrX291dChQUk9DU1BFRUNIKTsKKwlzeW50aF9kb25l
KCApOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqc3ludGhfaW1tZWRpYXRlKGNvbnN0IGNoYXIg
KmJ1ZiApCit7CisJdV9jaGFyIGNoOworCXN5bnRoX3N0YXR1cyA9IGluYl9wKHN5bnRoX3BvcnRf
dHRzKTsKKwl3aGlsZSAoIChjaCA9ICh1X2NoYXIpKmJ1ZiApICkgeworCQlpZiAoc3ludGhfc3Rh
dHVzICYgVFRTX0FMTU9TVF9GVUxMKQorCQkJcmV0dXJuIGJ1ZjsKKwkJaWYgKCBjaCA9PSAweDBh
ICkgY2ggPSBQUk9DU1BFRUNIOworCQlzcGtfb3V0KGNoKTsKKwkJYnVmKys7CisJfQorCXJldHVy
biAwOworfQorCitzdGF0aWMgdW5zaWduZWQgY2hhciBnZXRfaW5kZXgoIHZvaWQgKQoreworICAg
ICAgICBpbnQgYywgbHNyOy8vLCB0bW91dCA9IFNQS19TRVJJQUxfVElNRU9VVDsKKyAgICAgICAg
bHNyID0gaW5iX3AoIHN5bnRoX3BvcnRfdHRzICsgVUFSVF9MU1IgKTsKKyAgICAgICAgaWYgKCAo
IGxzciAmIFVBUlRfTFNSX0RSKSA9PSBVQVJUX0xTUl9EUiApCisgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBjID0gaW5iX3AoIHN5bnRoX3BvcnRfdHRzICsgVUFSVF9SWCApOworICAgICAgICAg
ICAgICAgIHJldHVybiAoIHVuc2lnbmVkIGNoYXIgKSBjOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzeW50aF9mbHVzaCh2b2lkKQoreworCW91dGJfcChT
WU5USF9DTEVBUiwgc3ludGhfcG9ydF90dHMpOworCXdoaWxlICgoKHN5bnRoX3N0YXR1cyA9IGlu
Yl9wKHN5bnRoX3BvcnRfdHRzKSkgJiBUVFNfV1JJVEFCTEUpICE9IDApOworCX0KKworc3RhdGlj
IGNoYXIgc3ludGhfcmVhZF90dHModm9pZCkKK3sKKwl1X2NoYXIgY2g7CisJd2hpbGUgKCgoc3lu
dGhfc3RhdHVzID0gaW5iX3Aoc3ludGhfcG9ydF90dHMpKSAmIFRUU19SRUFEQUJMRSkgPT0gMCk7
CisJY2ggPSBzeW50aF9zdGF0dXMgJiAweDdmOworCW91dGJfcChjaCwgc3ludGhfcG9ydF90dHMp
OworCXdoaWxlICgoaW5iX3Aoc3ludGhfcG9ydF90dHMpICYgVFRTX1JFQURBQkxFKSAhPSAwKTsK
K3JldHVybiAoY2hhcikgY2g7Cit9CisKKy8qIGludGVycm9nYXRlIHRoZSBEb3VibGVUYWxrIFBD
IGFuZCByZXR1cm4gaXRzIHNldHRpbmdzICovCitzdGF0aWMgc3RydWN0IHN5bnRoX3NldHRpbmdz
ICogc3ludGhfaW50ZXJyb2dhdGUodm9pZCkKK3sKKwl1X2NoYXIgKnQ7CisJc3RhdGljIGNoYXIg
YnVmW3NpemVvZihzdHJ1Y3Qgc3ludGhfc2V0dGluZ3MpICsgMV07CisJaW50IHRvdGFsLCBpOwor
CXN0YXRpYyBzdHJ1Y3Qgc3ludGhfc2V0dGluZ3Mgc3RhdHVzOworCXN5bnRoX2ltbWVkaWF0ZSgi
XHgxOFx4MDE/Iik7CisJZm9yICh0b3RhbCA9IDAsIGkgPSAwOyBpIDwgNTA7IGkrKykgeworCQkJ
YnVmW3RvdGFsXSA9IHN5bnRoX3JlYWRfdHRzKCk7CisJCQlpZiAodG90YWwgPiAyICYmIGJ1Zlt0
b3RhbF0gPT0gMHg3ZikgYnJlYWs7CisJCQlpZiAodG90YWwgPCBzaXplb2Yoc3RydWN0IHN5bnRo
X3NldHRpbmdzKSkgdG90YWwrKzsKKwkJfQorCXQgPSBidWY7CisJc3RhdHVzLnNlcmlhbF9udW1i
ZXIgPSB0WzBdICsgdFsxXSoyNTY7IC8qIHNlcmlhbCBudW1iZXIgaXMgbGl0dGxlIGVuZGlhbiAq
LworCXQgKz0gMjsKKwlmb3IgKCBpID0gMDsgKnQgIT0gJ1xyJzsgdCsrICkgeworCQkJc3RhdHVz
LnJvbV92ZXJzaW9uW2ldID0gKnQ7CisJCQlpZiAoaSA8IHNpemVvZihzdGF0dXMucm9tX3ZlcnNp
b24pLTEpIGkrKzsKKwkJfQorCXN0YXR1cy5yb21fdmVyc2lvbltpXSA9IDA7CisJdCsrOworCXN0
YXR1cy5tb2RlID0gKnQrKzsKKwlzdGF0dXMucHVuY19sZXZlbCA9ICp0Kys7CisJc3RhdHVzLmZv
cm1hbnRfZnJlcSA9ICp0Kys7CisJc3RhdHVzLnBpdGNoID0gKnQrKzsKKwlzdGF0dXMuc3BlZWQg
PSAqdCsrOworCXN0YXR1cy52b2x1bWUgPSAqdCsrOworCXN0YXR1cy50b25lID0gKnQrKzsKKwlz
dGF0dXMuZXhwcmVzc2lvbiA9ICp0Kys7CisJc3RhdHVzLmV4dF9kaWN0X2xvYWRlZCA9ICp0Kys7
CisJc3RhdHVzLmV4dF9kaWN0X3N0YXR1cyA9ICp0Kys7CisJc3RhdHVzLmZyZWVfcmFtID0gKnQr
KzsKKwlzdGF0dXMuYXJ0aWN1bGF0aW9uID0gKnQrKzsKKwlzdGF0dXMucmV2ZXJiID0gKnQrKzsK
KwlzdGF0dXMuZW9iID0gKnQrKzsKKwlyZXR1cm4gJnN0YXR1czsKK30KKworc3RhdGljIGludCBz
eW50aF9wcm9iZSh2b2lkKQoreworCQl1bnNpZ25lZCBpbnQgcG9ydF92YWwgPSAwOworCWludCBp
ID0gMDsKKwlzdHJ1Y3Qgc3ludGhfc2V0dGluZ3MgKnNwOworCXByX2luZm8oIlByb2JpbmcgZm9y
IERvdWJsZVRhbGsuXG4iKTsKKwlpZiAoc3ludGhfcG9ydF9mb3JjZWQpIHsKKwkJc3ludGhfcG9y
dF90dHMgPSBzeW50aF9wb3J0X2ZvcmNlZDsKKwkJcHJfaW5mbygicHJvYmUgZm9yY2VkIHRvICV4
IGJ5IGtlcm5lbCBjb21tYW5kIGxpbmVcbiIsIHN5bnRoX3BvcnRfdHRzKTsKKwkJaWYgKHN5bnRo
X3JlcXVlc3RfcmVnaW9uKHN5bnRoX3BvcnRfdHRzLTEsIFNZTlRIX0lPX0VYVEVOVCkpIHsKKwkJ
CXByX3dhcm4oInNvcnJ5LCBwb3J0IGFscmVhZHkgcmVzZXJ2ZWRcbiIpOworCQkJcmV0dXJuIC1F
QlVTWTsKKwkJfQorCQlwb3J0X3ZhbCA9IGludyhzeW50aF9wb3J0X3R0cy0xKTsKKwkJc3ludGhf
bHBjID0gc3ludGhfcG9ydF90dHMtMTsKKwl9IGVsc2UgeworCQlmb3IoaT0wOyBzeW50aF9wb3J0
bGlzdFtpXTsgaSsrKSB7CisJCQlpZiAoc3ludGhfcmVxdWVzdF9yZWdpb24oc3ludGhfcG9ydGxp
c3RbaV0sIFNZTlRIX0lPX0VYVEVOVCkpCisJY29udGludWU7CisJCQlwb3J0X3ZhbCA9IGludyhz
eW50aF9wb3J0bGlzdFtpXSk7CisJCQlpZiAoKHBvcnRfdmFsICY9IDB4ZmJmZikgPT0gMHgxMDdm
KSB7CisJc3ludGhfbHBjID0gc3ludGhfcG9ydGxpc3RbaV07CisJc3ludGhfcG9ydF90dHMgPSBz
eW50aF9scGMrMTsKKwlicmVhazsKKwkJCX0KKwkJCXN5bnRoX3JlbGVhc2VfcmVnaW9uKHN5bnRo
X3BvcnRsaXN0W2ldLCBTWU5USF9JT19FWFRFTlQpOworCQl9CisJfQorCWlmICgocG9ydF92YWwg
Jj0gMHhmYmZmKSAhPSAweDEwN2YpIHsKKwkJcHJfaW5mbygiRG91YmxlVGFsayBQQzogIG5vdCBm
b3VuZFxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKwl3aGlsZSAoaW53X3Aoc3ludGhfbHBj
KSAhPSAweDE0N2YgKTsgLyogd2FpdCB1bnRpbCBpdCdzIHJlYWR5ICovCisJc3AgPSBzeW50aF9p
bnRlcnJvZ2F0ZSgpOworCXByX2luZm8oIiVzOiAgJTAzeC0lMDN4LCBST00gdmVyICVzLCBzL24g
JXUsIGRyaXZlcjogJXNcbiIsCisJCXN5bnRoLT5sb25nX25hbWUsIHN5bnRoX2xwYywgc3ludGhf
bHBjK1NZTlRIX0lPX0VYVEVOVCAtIDEsCisJIHNwLT5yb21fdmVyc2lvbiwgc3AtPnNlcmlhbF9u
dW1iZXIsIHN5bnRoLT52ZXJzaW9uKTsKKwkvLwlzeW50aF9hbGl2ZSA9IDE7CisJcmV0dXJuIDA7
Cit9CisKK3N0YXRpYyBpbnQgc3ludGhfaXNfYWxpdmUodm9pZCkKK3sKKwlyZXR1cm4gMTsJLyog
SSdtICpJTlZJTkNJQkxFKiAqLworfQorCitzdGF0aWMgdm9pZAorZHRsa19yZWxlYXNlKCB2b2lk
ICkKK3sKKwlpZiAoIHN5bnRoX3BvcnRfdHRzICkKKwkJc3ludGhfcmVsZWFzZV9yZWdpb24oc3lu
dGhfcG9ydF90dHMtMSwgU1lOVEhfSU9fRVhURU5UKTsKKwlzeW50aF9wb3J0X3R0cyA9IDA7Cit9
CisKK3N0YXRpYyBjb25zdCBjaGFyIGluaXRfc3RyaW5nW10gPSAiXHgwMUBceDAxXHgzMXkiOwor
CitzdGF0aWMgc3RydWN0IHN0X3N0cmluZ192YXIgc3RyaW5ndmFyc1tdID0geworCXsgQ0FQU19T
VEFSVCwgIlx4MDErMzVwIiB9LAorCXsgQ0FQU19TVE9QLCAiXHgwMS0zNXAiIH0sCisJVl9MQVNU
X1NUUklORworfTsKK3N0YXRpYyBzdHJ1Y3Qgc3RfbnVtX3ZhciBudW12YXJzW10gPSB7CisJeyBS
QVRFLCAiXHgwMSVkcyIsIDgsIDAsIDksIDAsIDAsIDAgfSwKKwl7IFBJVENILCAiXHgwMSVkcCIs
IDUwLCAwLCA5OSwgMCwgMCwgMCB9LAorCXsgVk9MLCAiXHgwMSVkdiIsIDUsIDAsIDksIDAsIDAs
IDAgfSwKKwl7IFRPTkUsICJceDAxJWR4IiwgMSwgMCwgMiwgMCwgMCwgMCB9LAorCXsgUFVOQ1Qs
ICJceDAxJWRiIiwgNywgMCwgMTUsIDAsIDAsIDAgfSwKKwl7IFZPSUNFLCAiXHgwMSVkbyIsIDAs
IDAsIDcsIDAsIDAsIDAgfSwKKwl7IEZSRVEsICJceDAxJWRmIiwgNSwgMCwgOSwgMCwgMCwgMCB9
LAorCVZfTEFTVF9OVU0KK307CisJIAorc3RydWN0IHNwa19zeW50aCBzeW50aF9kdGxrID0geyJk
dGxrIiwgIjEuMSIsICJEb3VibGVUYWxrIFBDIiwKKwkJCSAgIGluaXRfc3RyaW5nLCA1MDAsIDMw
LCA1MCwgMTAwMCwgMCwgMCwgU1lOVEhfQ0hFQ0ssCisJc3RyaW5ndmFycywgbnVtdmFycywgc3lu
dGhfcHJvYmUsIGR0bGtfcmVsZWFzZSwgc3ludGhfaW1tZWRpYXRlLAorCWRvX2NhdGNoX3VwLCBO
VUxMLCBzeW50aF9mbHVzaCwgc3ludGhfaXNfYWxpdmUsIE5VTEwsIE5VTEwsIGdldF9pbmRleCwK
Kwl7Ilx4MDElZGkiLDEsNSwxfSB9OworCisjaWZkZWYgTU9EVUxFCisjaW5jbHVkZSAibW9kX2Nv
ZGUuYyIKKyNlbmRpZgpkaWZmIC0tZXhjbHVkZT0nKi5vcmlnJyAtLWV4Y2x1ZGU9JyoucGF0Y2gn
IC11ck5wIGxpbnV4LTIuNi4yMC9kcml2ZXJzL2NoYXIvc3BlYWt1cC9zcGVha3VwX2R0bGsuaCBs
aW51eC0yLjYuMjAtc3BrL2RyaXZlcnMvY2hhci9zcGVha3VwL3NwZWFrdXBfZHRsay5oCi0tLSBs
aW51eC0yLjYuMjAvZHJpdmVycy9jaGFyL3NwZWFrdXAvc3BlYWt1cF9kdGxrLmgJMTk2OS0xMi0z
MSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrIGxpbnV4LTIuNi4yMC1zcGsvZHJpdmVycy9j
aGFyL3NwZWFrdXAvc3BlYWt1cF9kdGxrLmgJMjAwNy0wMi0wNCAxNjowOToyMC4wMDAwMDAwMDAg
LTA1MDAKQEAgLTAsMCArMSw1NCBAQAorLyogc3BlYWt1cF9kdGxrLmggLSBoZWFkZXIgZmlsZSBm
b3Igc3BlYWt1cHMgRG91YmxlVGFsayBkcml2ZXIuICovCisKKyNkZWZpbmUgU1lOVEhfSU9fRVhU
RU5UCTB4MDIKKyNkZWZpbmUgU1lOVEhfQ0xFQVIgMHgxOAkJLyogc3RvcHMgc3BlZWNoICovCisJ
LyogVFRTIFBvcnQgU3RhdHVzIEZsYWdzICovCisjZGVmaW5lIFRUU19SRUFEQUJMRQkgICAweDgw
CS8qIG1hc2sgZm9yIGJpdCB3aGljaCBpcyBub256ZXJvIGlmIGEKKwkJCQkJIGJ5dGUgY2FuIGJl
IHJlYWQgZnJvbSB0aGUgVFRTIHBvcnQgKi8KKyNkZWZpbmUgVFRTX1NQRUFLSU5HCSAgIDB4NDAJ
LyogbWFzayBmb3IgU1lOQyBiaXQsIHdoaWNoIGlzIG5vbnplcm8KKwkJCQkJIHdoaWxlIERvdWJs
ZVRhbGsgaXMgcHJvZHVjaW5nCisJCQkJCSBvdXRwdXQgd2l0aCBUVFMsIFBDTSBvciBDVlNECisJ
CQkJCSBzeW50aGVzaXplcnMgb3IgdG9uZSBnZW5lcmF0b3JzCisJCQkJCSAodGhhdCBpcywgYWxs
IGJ1dCBMUEMpICovCisjZGVmaW5lIFRUU19TUEVBS0lORzIJICAweDIwCS8qIG1hc2sgZm9yIFNZ
TkMyIGJpdCwKKwkJCQkJIHdoaWNoIGZhbGxzIHRvIHplcm8gdXAgdG8gMC40IHNlYworCQkJCQkg
YmVmb3JlIHNwZWVjaCBzdG9wcyAqLworI2RlZmluZSBUVFNfV1JJVEFCTEUJICAgMHgxMAkvKiBt
YXNrIGZvciBSRFkgYml0LCB3aGljaCB3aGVuIHNldCB0bworCSAgICAgICAgICAgCQkJICAgMSwg
aW5kaWNhdGVzIHRoZSBUVFMgcG9ydCBpcyByZWFkeQorCSAgICAgICAgICAgCQkJICAgdG8gYWNj
ZXB0IGEgYnl0ZSBvZiBkYXRhLiAgVGhlIFJEWQorCSAgICAgICAgICAgCQkJICAgYml0IGdvZXMg
emVybyAyLTMgdXNlYyBhZnRlcgorCSAgICAgICAgICAgCQkJICAgd3JpdGluZywgYW5kIGdvZXMg
MSBhZ2FpbiAxODAtMTkwCisJICAgICAgICAgICAJCQkgICB1c2VjIGxhdGVyLiAqLworI2RlZmlu
ZSBUVFNfQUxNT1NUX0ZVTEwJMHgwOAkvKiBtYXNrIGZvciBBRiBiaXQ6IFdoZW4gc2V0IHRvIDEs
CisJCQkJCSBpbmRpY2F0ZXMgdGhhdCBsZXNzIHRoYW4gMzAwIGJ5dGVzCisJCQkJCSBhcmUgYXZh
aWxhYmxlIGluIHRoZSBUVFMgaW5wdXQKKwkJCQkJIGJ1ZmZlci4gQUYgaXMgYWx3YXlzIDAgaW4g
dGhlIFBDTSwKKwkJCQkJIFRHTiBhbmQgQ1ZTRCBtb2Rlcy4gKi8KKyNkZWZpbmUgVFRTX0FMTU9T
VF9FTVBUWSAweDA0CS8qIG1hc2sgZm9yIEFFIGJpdDogV2hlbiBzZXQgdG8gMSwKKwkJCQkJIGlu
ZGljYXRlcyB0aGF0IGxlc3MgdGhhbiAzMDAgYnl0ZXMKKwkJCQkJIGFyZSByZW1haW5pbmcgaW4g
RG91YmxlVGFsaydzIGlucHV0CisJCQkJCSAoVFRTIG9yIFBDTSkgYnVmZmVyLiBBRSBpcyBhbHdh
eXMgMQorCQkJCQkgaW4gdGhlIFRHTiBhbmQgQ1ZTRCBtb2Rlcy4gKi8KKworCQkJCS8qIGRhdGEg
cmV0dXJuZWQgYnkgSW50ZXJyb2dhdGUgY29tbWFuZCAqLworc3RydWN0IHN5bnRoX3NldHRpbmdz
IHsKKwl1X3Nob3J0IHNlcmlhbF9udW1iZXI7CS8qIDAtN0ZoOjAtN0ZoICovCisJdV9jaGFyIHJv
bV92ZXJzaW9uWzI0XTsgLyogbnVsbCB0ZXJtaW5hdGVkIHN0cmluZyAqLworCXVfY2hhciBtb2Rl
OwkJLyogMD1DaGFyYWN0ZXI7IDE9UGhvbmVtZTsgMj1UZXh0ICovCisJdV9jaGFyIHB1bmNfbGV2
ZWw7CS8qIG5COyAwLTcgKi8KKwl1X2NoYXIgZm9ybWFudF9mcmVxOwkvKiBuRjsgMC05ICovCisJ
dV9jaGFyIHBpdGNoOwkJLyogblA7IDAtOTkgKi8KKwl1X2NoYXIgc3BlZWQ7CQkvKiBuUzsgMC05
ICovCisJdV9jaGFyIHZvbHVtZTsJCS8qIG5WOyAwLTkgKi8KKwl1X2NoYXIgdG9uZTsJCS8qIG5Y
OyAwLTIgKi8KKwl1X2NoYXIgZXhwcmVzc2lvbjsJLyogbkU7IDAtOSAqLworCXVfY2hhciBleHRf
ZGljdF9sb2FkZWQ7IC8qIDE9ZXhjZXB0aW9uIGRpY3Rpb25hcnkgbG9hZGVkICovCisJdV9jaGFy
IGV4dF9kaWN0X3N0YXR1czsgLyogMT1leGNlcHRpb24gZGljdGlvbmFyeSBlbmFibGVkICovCisJ
dV9jaGFyIGZyZWVfcmFtOwkvKiAjIHBhZ2VzICh0cnVuY2F0ZWQpIHJlbWFpbmluZyBmb3IKKwkg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0IGJ1ZmZlciAqLworCXVfY2hhciBh
cnRpY3VsYXRpb247CS8qIG5BOyAwLTkgKi8KKwl1X2NoYXIgcmV2ZXJiOwkJLyogblI7IDAtOSAq
LworCXVfY2hhciBlb2I7CQkvKiA3RmggdmFsdWUgaW5kaWNhdGluZyBlbmQgb2YKKwkgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXIgYmxvY2sgKi8KKwl1X2NoYXIgaGFz
X2luZGV4aW5nOwkvKiBub256ZXJvIGlmIGluZGV4aW5nIGlzIGltcGxlbWVudGVkICovCit9Owpk
aWZmIC0tZXhjbHVkZT0nKi5vcmlnJyAtLWV4Y2x1ZGU9JyoucGF0Y2gnIC11ck5wIGxpbnV4LTIu
Ni4yMC9kcml2ZXJzL2NoYXIvc3BlYWt1cC9zcGVha3VwX2tleWhlbHAuYyBsaW51eC0yLjYuMjAt
c3BrL2RyaXZlcnMvY2hhci9zcGVha3VwL3NwZWFrdXBfa2V5aGVscC5jCi0tLSBsaW51eC0yLjYu
MjAvZHJpdmVycy9jaGFyL3NwZWFrdXAvc3BlYWt1cF9rZXloZWxwLmMJMTk2OS0xMi0zMSAxOTow
MDowMC4wMDAwMDAwMDAgLTA1MDAKKysrIGxpbnV4LTIuNi4yMC1zcGsvZHJpdmVycy9jaGFyL3Nw
ZWFrdXAvc3BlYWt1cF9rZXloZWxwLmMJMjAwNy0wMi0wNCAxNjowOToxOS4wMDAwMDAwMDAgLTA1
MDAKQEAgLTAsMCArMSwyODggQEAKKy8qIHNwZWFrdXBfa2V5aGVscC5jCisgICBoZWxwIG1vZHVs
ZSBmb3Igc3BlYWt1cAorCisgIHdyaXR0ZW4gYnkgRGF2aWQgQm9yb3dza2kuCisKKyAgICBDb3B5
cmlnaHQgKEMgKSAyMDAzICBEYXZpZCBCb3Jvd3NraS4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbiApIGFueSBsYXRl
ciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
ICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29m
dHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwg
Qm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisqLworCisjaW5jbHVkZSA8bGludXgvdmVyc2lv
bi5oPgorI2luY2x1ZGUgPGxpbnV4L2tleWJvYXJkLmg+CisjaW5jbHVkZSAic3BrX3ByaXYuaCIK
KworZXh0ZXJuIHVfY2hhciAqb3VyX2tleXNbXTsKK2V4dGVybiBzcGVjaWFsX2Z1bmMgc3BlY2lh
bF9oYW5kbGVyOworZXh0ZXJuIHNwZWNpYWxfZnVuYyBoZWxwX2hhbmRsZXI7CisjZGVmaW5lIE1B
WEZVTkNTIDEzMAorI2RlZmluZSBNQVhLRVlTIDI1Ngorc3RhdGljIHVfc2hvcnQga2V5X29mZnNl
dHNbTUFYRlVOQ1NdLCBrZXlfYnVmW01BWEtFWVNdOworc3RhdGljIHVfc2hvcnQgbWFza3NbXSA9
IHsgMzIsIDE2LCA4LCA0LCAyLCAxIH07CitzdGF0aWMgY2hhciBoZWxwX2luZm9bXSA9CisJInBy
ZXNzIHNwYWNlIHRvIGxlYXYgaGVscCwgY3Vyc29yIHVwIG9yIGRvd24gdG8gc2Nyb2xsLCBvciBh
IGxldHRlciB0byBnbyB0byBjb21tYW5kcyBpbiBsaXN0IjsKK3N0YXRpYyBjaGFyICpzdGF0ZW5h
bWVzW10gPSB7CisJIiBkb3VibGUiLCAiIHNwZWFrdXAiLCAiIGFsdCIsCisJIiBjdHJsIiwgIiBh
bHRnciIsICIgc2hpZnQiCit9Oworc3RhdGljIGNoYXIgKmtleW5hbWVzW10gPSB7CisJImVzY2Fw
ZSIsICIxIiwgIjIiLCAiMyIsICI0IiwKKwkiNSIsICI2IiwgIjciLCAiOCIsICI5IiwKKwkiMCIs
ICJtaW51cyIsICJlcXVhbCIsICJiYWNrIHNwYWNlIiwgInRhYiIsCisJInEiLCAidyIsICJlIiwg
InIiLCAidCIsCisJInkiLCAidSIsICJpIiwgIm8iLCAicCIsCisJImxlZnQgYnJhY2UiLCAicmln
aHQgYnJhY2UiLCAiZW50ZXIiLCAibGVmdCBjb250cm9sIiwgImEiLAorCSJzIiwgImQiLCAiZiIs
ICJnIiwgImgiLAorCSJqIiwgImsiLCAibCIsICJzZW1pY29sb24iLCAiYXBvc3Ryb3BoZSIsCisJ
ImFjY2VudCIsICJsZWZ0IHNoaWZ0IiwgImJhY2sgc2xhc2giLCAieiIsICJ4IiwKKwkiYyIsICJ2
IiwgImIiLCAibiIsICJtIiwKKwkiY29tbWEiLCAiZG90IiwgInNsYXNoIiwgInJpZ2h0IHNoaWZ0
IiwgImtleXBhZCBhc3RlcmlzayIsCisJImxlZnQgYWx0IiwgInNwYWNlIiwgImNhcHMgbG9jayIs
ICJmMSIsICJmMiIsCisJImYzIiwgImY0IiwgImY1IiwgImY2IiwgImY3IiwKKwkiZjgiLCAiZjki
LCAiZjEwIiwgIm51bSBsb2NrIiwgInNjcm9sbCBsb2NrIiwKKwkia2V5cGFkIDciLCAia2V5cGFk
IDgiLCAia2V5cGFkIDkiLCAia2V5cGFkIG1pbnVzIiwgImtleXBhZCA0IiwKKwkia2V5cGFkIDUi
LCAia2V5cGFkIDYiLCAia2V5cGFkIHBsdXMiLCAia2V5cGFkIDEiLCAia2V5cGFkIDIiLAorCSJr
ZXlwYWQgMyIsICJrZXlwYWQgMCIsICJrZXlwYWQgZG90IiwgIjEwM3JkIiwgImYxMyIsCisJIjEw
Mm5kIiwgImYxMSIsICJmMTIiLCAiZjE0IiwgImYxNSIsCisJImYxNiIsICJmMTciLCAiZjE4Iiwg
ImYxOSIsICJmMjAiLAorCSJrZXlwYWQgZW50ZXIiLCAicmlnaHQgY29udHJvbCIsICJrZXlwYWQg
c2xhc2giLCAic3lzcnEiLCAicmlnaHQgYWx0IiwKKwkibGluZSBmZWVkIiwgImhvbWUiLCAidXAi
LCAicGFnZSB1cCIsICJsZWZ0IiwKKwkicmlnaHQiLCAiZW5kIiwgImRvd24iLCAicGFnZSBkb3du
IiwgImluc2VydCIsCisJImRlbGV0ZSIsICJtYWNybyIsICJtdXRlIiwgInZvbHVtZSBkb3duIiwg
InZvbHVtZSB1cCIsCisJInBvd2VyIiwgImtleXBhZCBlcXVhbCIsICJrZXlwYWQgcGx1c21pbnVz
IiwgInBhdXNlIiwgImYyMSIsCisJImYyMiIsICJmMjMiLCAiZjI0IiwgImtleXBhZCBjb21tYSIs
ICJsZWZ0IG1ldGEiLAorCSJyaWdodCBtZXRhIiwgImNvbXBvc2UiLCAic3RvcCIsICJhZ2FpbiIs
ICJwcm9wcyIsCisJInVuZG8iLCAiZnJvbnQiLCAiY29weSIsICJvcGVuIiwgInBhc3RlIiwKKwki
ZmluZCIsICJjdXQiLCAiaGVscCIsICJtZW51IiwgImNhbGMiLAorCSJzZXR1cCIsICJzbGVlcCIs
ICJ3YWtldXAiLCAiZmlsZSIsICJzZW5kIGZpbGUiLAorCSJkZWxldGUgZmlsZSIsICJ0cmFuc2Zl
ciIsICJwcm9nMSIsICJwcm9nMiIsICJ3d3ciLAorCSJtc2RvcyIsICJjb2ZmZWUiLCAiZGlyZWN0
aW9uIiwgImN5Y2xlIHdpbmRvd3MiLCAibWFpbCIsCisJImJvb2ttYXJrcyIsICJjb21wdXRlciIs
ICJiYWNrIiwgImZvcndhcmQiLCAiY2xvc2UgY2QiLAorCSJlamVjdCBjZCIsICJlamVjdCBjbG9z
ZSBjZCIsICJuZXh0IHNvbmciLCAicGxheSBwYXVzZSIsICJwcmV2aW91cyBzb25nIiwKKwkic3Rv
cCBjZCIsICJyZWNvcmQiLCAicmV3aW5kIiwgInBob25lIiwgImlzbyIsCisJImNvbmZpZyIsICJo
b21lIHBhZ2UiLCAicmVmcmVzaCIsICJleGl0IiwgIm1vdmUiLAorCSJlZGl0IiwgInNjcm9sbCB1
cCIsICJzY3JvbGwgZG93biIsICJrZXlwYWQgbGVmdCBwYXJlbiIsICJrZXlwYWQgcmlnaHQgcGFy
ZW4iLAorfTsKKworc3RhdGljIHNob3J0IGxldHRlcl9vZmZzZXRzWzI2XTsKKworc3RhdGljIHVf
Y2hhciBmdW5jdmFsc1tdID0geworCUFUVFJJQl9CTEVFUF9ERUMsIEFUVFJJQl9CTEVFUF9JTkMs
IEJMRUVQU19ERUMsIEJMRUVQU19JTkMsCisJU0FZX0ZJUlNUX0NIQVIsIFNBWV9MQVNUX0NIQVIs
IFNBWV9DSEFSLCBTQVlfQ0hBUl9OVU0sCisJU0FZX05FWFRfQ0hBUiwgU0FZX1BIT05FVElDX0NI
QVIsIFNBWV9QUkVWX0NIQVIsIFNQRUFLVVBfUEFSS0VELAorCVNQRUFLVVBfQ1VULCBFRElUX0RF
TElNLCBFRElUX0VYTlVNLCBFRElUX01PU1QsCisJRURJVF9SRVBFQVQsIEVESVRfU09NRSwgU1BF
QUtVUF9HT1RPLCBCT1RUT01fRURHRSwKKwlMRUZUX0VER0UsIFJJR0hUX0VER0UsIFRPUF9FREdF
LCBTUEVBS1VQX0hFTFAsCisJU0FZX0xJTkUsIFNBWV9ORVhUX0xJTkUsIFNBWV9QUkVWX0xJTkUs
IFNBWV9MSU5FX0lOREVOVCwKKwlTUEVBS1VQX1BBU1RFLCBQSVRDSF9ERUMsIFBJVENIX0lOQywg
UFVOQ1RfREVDLAorCVBVTkNUX0lOQywgUFVOQ19MRVZFTF9ERUMsIFBVTkNfTEVWRUxfSU5DLCBT
UEVBS1VQX1FVSUVULAorCVJBVEVfREVDLCBSQVRFX0lOQywgUkVBRElOR19QVU5DX0RFQywgUkVB
RElOR19QVU5DX0lOQywKKwlTQVlfQVRUUklCVVRFUywgU0FZX0ZST01fTEVGVCwgU0FZX0ZST01f
VE9QLCBTQVlfUE9TSVRJT04sCisJU0FZX1NDUkVFTiwgU0FZX1RPX0JPVFRPTSwgU0FZX1RPX1JJ
R0hULCBTUEtfS0VZLAorCVNQS19MT0NLLCBTUEVBS1VQX09GRiwgU1BFRUNIX0tJTEwsIFNQRUxM
X0RFTEFZX0RFQywKKwlTUEVMTF9ERUxBWV9JTkMsIFNQRUxMX1dPUkQsIFNQRUxMX1BIT05FVElD
LCBUT05FX0RFQywKKwlUT05FX0lOQywgVk9JQ0VfREVDLCBWT0lDRV9JTkMsIFZPTF9ERUMsCisJ
Vk9MX0lOQywgQ0xFQVJfV0lOLCBTQVlfV0lOLCBTRVRfV0lOLAorCUVOQUJMRV9XSU4sIFNBWV9X
T1JELCBTQVlfTkVYVF9XT1JELCBTQVlfUFJFVl9XT1JELCAwCit9OworCitzdGF0aWMgY2hhciAq
ZnVuY25hbWVzW10gPSB7CisJImF0dHJpYnV0ZSBibGVlcCBkZWNyZW1lbnQiLCAiYXR0cmlidXRl
IGJsZWVwIGluY3JlbWVudCIsCisJImJsZWVwcyBkZWNyZW1lbnQiLCAiYmxlZXBzIGluY3JlbWVu
dCIsCisJImNoYXJhY3RlciwgZmlyc3QiLCAiY2hhcmFjdGVyLCBsYXN0IiwKKwkiY2hhcmFjdGVy
LCBzYXkgY3VycmVudCIsCisJImNoYXJhY3Rlciwgc2F5IGhleCBhbmQgZGVjaW1hbCIsICJjaGFy
YWN0ZXIsIHNheSBuZXh0IiwKKwkiY2hhcmFjdGVyLCBzYXkgcGhvbmV0aWMiLCAiY2hhcmFjdGVy
LCBzYXkgcHJldmlvdXMiLAorCSJjdXJzb3IgcGFyayIsICJjdXQiLAorCSJlZGl0IGRlbGltaXRl
cnMiLCAiZWRpdCBleG51bSIsCisJImVkaXQgbW9zdCIsICJlZGl0IHJlcGVhdHMiLCAiZWRpdCBz
b21lIiwKKwkiZ28gdG8iLCAiZ28gdG8gYm90dG9tIGVkZ2UiLCAiZ28gdG8gbGVmdCBlZGdlIiwK
KwkiZ28gdG8gcmlnaHQgZWRnZSIsICJnbyB0byB0b3AgZWRnZSIsICJoZWxwIiwKKwkibGluZSwg
c2F5IGN1cnJlbnQiLCAibGluZSwgc2F5IG5leHQiLAorCSJsaW5lLCBzYXkgcHJldmlvdXMiLCAi
bGluZSwgc2F5IHdpdGggaW5kZW50IiwKKwkicGFzdGUiLCAicGl0Y2ggZGVjcmVtZW50IiwgInBp
dGNoIGluY3JlbWVudCIsCisJInB1bmN0dWF0aW9uIGRlY3JlbWVudCIsICJwdW5jdHVhdGlvbiBp
bmNyZW1lbnQiLAorCSJwdW5jICBsZXZlbCBkZWNyZW1lbnQiLCAicHVuYyBsZXZlbCBpbmNyZW1l
bnQiLAorCSJxdWlldCIsCisJInJhdGUgZGVjcmVtZW50IiwgInJhdGUgaW5jcmVtZW50IiwKKwki
cmVhZGluZyBwdW5jdHVhdGlvbiBkZWNyZW1lbnQiLCAicmVhZGluZyBwdW5jdHVhdGlvbiBpbmNy
ZW1lbnQiLAorCSJzYXkgYXR0cmlidXRlcyIsCisJInNheSBmcm9tIGxlZnQiLCAic2F5IGZyb20g
dG9wIiwKKwkic2F5IHBvc2l0aW9uIiwgInNheSBzY3JlZW4iLAorCSJzYXkgdG8gYm90dG9tIiwg
InNheSB0byByaWdodCIsCisJInNwZWFrdXAiLCAic3BlYWt1cCBsb2NrIiwKKwkic3BlYWt1cCBv
ZmYiLCAic3BlZWNoIGtpbGwiLAorCSJzcGVsbCBkZWxheSBkZWNyZW1lbnQiLCAic3BlbGwgZGVs
YXkgaW5jcmVtZW50IiwKKwkic3BlbGwgd29yZCIsICJzcGVsbCB3b3JkIHBob25ldGljbHkiLAor
CSJ0b25lIGRlY3JlbWVudCIsICJ0b25lIGluY3JlbWVudCIsCisJInZvaWNlIGRlY3JlbWVudCIs
ICJ2b2ljZSBpbmNyZW1lbnQiLAorCSJ2b2x1bWUgZGVjcmVtZW50IiwgInZvbHVtZSBpbmNyZW1l
bnQiLAorCSJ3aW5kb3csIGNsZWFyIiwgIndpbmRvdywgc2F5IiwKKwkid2luZG93LCBzZXQiLCAi
d2luZG93LCBzaWxlbmNlIiwKKwkid29yZCwgc2F5IGN1cnJlbnQiLCAid29yZCwgc2F5IG5leHQi
LAorCSJ3b3JkLCBzYXkgcHJldmlvdXMiLCAwCit9OworCitzdGF0aWMgdV9jaGFyICpzdGF0ZV90
Ymw7CitzdGF0aWMgaW50IGN1cl9pdGVtID0gMCwgbnN0YXRlcyA9IDA7CisKK3N0YXRpYyB2b2lk
IGJ1aWxkX2tleV9kYXRhKCB2b2lkICkKK3sKKwl1X2NoYXIgKmtwLCBjb3VudGVyc1tNQVhGVU5D
U10sIGNoLCBjaDE7CisJdV9zaG9ydCAqcF9rZXkgPSBrZXlfYnVmLCBrZXk7CisJaW50IGksIG9m
ZnNldCA9IDE7CisJbnN0YXRlcyA9IChpbnQpKCBzdGF0ZV90YmxbLTFdICk7CisJbWVtc2V0KCBj
b3VudGVycywgMCwgc2l6ZW9mKCBjb3VudGVycyApICk7CisJbWVtc2V0KCBrZXlfb2Zmc2V0cywg
MCwgc2l6ZW9mKCBrZXlfb2Zmc2V0cyApICk7CisJa3AgPSBzdGF0ZV90YmwgKyBuc3RhdGVzICsg
MTsKKwl3aGlsZSAoICprcCsrICkgeyAvKiBjb3VudCBvY2N1cnJhbmNlcyBvZiBlYWNoIGZ1bmN0
aW9uICovCisJCWZvciAoIGkgPSAwOyBpIDwgbnN0YXRlczsgaSsrLCBrcCsrICkgeworCQkJaWYg
KCAhKmtwICkgY29udGludWU7CisJCQlpZiAoIChzdGF0ZV90YmxbaV0mMTYpICE9IDAgJiYgKmtw
ID09IFNQS19LRVkgKQorCQkJCWNvbnRpbnVlOworCQkJY291bnRlcnNbKmtwXSsrOworCQl9CisJ
fQorCWZvciAoIGkgPSAwOyBpIDwgTUFYRlVOQ1M7IGkrKyApIHsKKwkJaWYgKCBjb3VudGVyc1tp
XSA9PSAwICkgY29udGludWU7CisJCWtleV9vZmZzZXRzW2ldID0gb2Zmc2V0OworCQlvZmZzZXQg
Kz0gKCBjb3VudGVyc1tpXSsxICk7CisJCWlmICggb2Zmc2V0ID49IE1BWEtFWVMgKSBicmVhazsK
Kwl9CisvKiBsZWF2ZSBjb3VudGVycyBzZXQgc28gaGlnaCBrZXljb2RlcyBjb21lIGZpcnN0Lgor
ICAgdGhpcyBpcyBkb25lIHNvIG51bSBwYWQgYW5kIG90aGVyIGV4dGVuZGVkIGtleXMgbWFwcyBh
cmUgc3Bva2VuIGJlZm9yZQorICAgdGhlIGFscGhhIHdpdGggc3BlYWt1cCB0eXBlIG1hcHBpbmcu
ICovCisJa3AgPSBzdGF0ZV90YmwgKyBuc3RhdGVzICsgMTsKKwl3aGlsZSAoICggY2ggPSAqa3Ar
KyApICkgeworCQlmb3IgKCBpID0gMDsgaSA8IG5zdGF0ZXM7IGkrKyApIHsKKwkJCWNoMSA9ICpr
cCsrOworCQkJaWYgKCAhY2gxICkgY29udGludWU7CisJCQlpZiAoIChzdGF0ZV90YmxbaV0mMTYp
ICE9IDAgJiYgY2gxID09IFNQS19LRVkgKQorCQkJCWNvbnRpbnVlOworCQkJa2V5ID0gKCBzdGF0
ZV90YmxbaV08PDggKSArIGNoOworCQkJY291bnRlcnNbY2gxXS0tOworCQkJaWYgKCAhKG9mZnNl
dCA9IGtleV9vZmZzZXRzW2NoMV0pICkgY29udGludWU7CisJCQlwX2tleSA9IGtleV9idWYgKyBv
ZmZzZXQgKyBjb3VudGVyc1tjaDFdOworCQkJKnBfa2V5ID0ga2V5OworCQl9CisJfQorfQorCitz
dGF0aWMgdm9pZCBzYXlfa2V5KCBpbnQga2V5ICkKK3sKKwlpbnQgaSwgc3RhdGUgPSBrZXk+Pjg7
CisJa2V5ICY9IDB4ZmY7CisJZm9yICggaSA9IDA7IGkgPCA2OyBpKysgKSB7CisJCWlmICggKCBz
dGF0ZSAmIG1hc2tzW2ldICkgKQorCQkJc3ludGhfd3JpdGVfc3RyaW5nKCBzdGF0ZW5hbWVzW2ld
ICk7CisJfQorCXN5bnRoX3dyaXRlX3N0cmluZyggIiAiICk7CisJCXN5bnRoX3dyaXRlX21zZygg
a2V5bmFtZXNbLS1rZXldICk7Cit9CisKK3N0YXRpYyBpbnQgaGFuZGxlX2hlbHAgKCBzdHJ1Y3Qg
dmNfZGF0YSAqdmMsIHVfY2hhciB0eXBlLCB1X2NoYXIgY2gsIHVfc2hvcnQga2V5ICkKK3sKKwlp
bnQgaSwgbjsKKwljaGFyICpuYW1lOworCXVfY2hhciBmdW5jLCAqa3A7CisJdV9zaG9ydCAqcF9r
ZXlzLCB2YWw7CisJaWYgKCB0eXBlID09IEtUX0xBVElOICkgeworCQlpZiAoIGNoID09IFNQQUNF
ICkgeworCQkJc3BlY2lhbF9oYW5kbGVyID0gTlVMTDsKKwkJCXN5bnRoX3dyaXRlX21zZyggImxl
YXZpbmcgaGVscCIgKTsKKwkJCXJldHVybiAxOworCQl9CisJCWNoIHw9IDMyOyAvKiBsb3dlciBj
YXNlICovCisJCWlmICggY2ggPCAnYScgfHwgY2ggPiAneicgKSByZXR1cm4gLTE7CisJCWlmICgg
bGV0dGVyX29mZnNldHNbY2gtJ2EnXSA9PSAtMSApIHsKKwkJCXN5bnRoX3dyaXRlX3N0cmluZygg
Im5vIGNvbW1hbmRzIGZvciAiICk7CisJCQlzeW50aF93cml0ZSggJmNoLCAxICk7CisJCQlzeW50
aF93cml0ZSggIlxuIiwgMSApOworCQkJcmV0dXJuIDE7CisJCX0KKwljdXJfaXRlbQk9IGxldHRl
cl9vZmZzZXRzW2NoLSdhJ107CisJfSBlbHNlIGlmICggdHlwZSA9PSBLVF9DVVIgKSB7CisJCWlm
ICggY2ggPT0gMCAmJiBmdW5jbmFtZXNbY3VyX2l0ZW0rMV0gIT0gTlVMTCApCisJCQljdXJfaXRl
bSsrOworCQllbHNlIGlmICggY2ggPT0gMyAmJiBjdXJfaXRlbSA+IDAgKQorCQkJY3VyX2l0ZW0t
LTsKKwkJZWxzZSByZXR1cm4gLTE7CisJfSBlbHNlIGlmICh0eXBlID09IEtUX1NQS1VQICYmIGNo
ID09IFNQRUFLVVBfSEVMUCAmJiAhc3BlY2lhbF9oYW5kbGVyKSB7CisJCXNwZWNpYWxfaGFuZGxl
ciA9IGhlbHBfaGFuZGxlcjsKKwkJc3ludGhfd3JpdGVfbXNnKCBoZWxwX2luZm8gKTsKKwkJYnVp
bGRfa2V5X2RhdGEoICk7IC8qIHJlYnVpbGQgZWFjaCB0aW1lIGluIGNhc2UgbmV3IG1hcHBpbmcg
Ki8KKwkJcmV0dXJuIDE7CisJfSBlbHNlIHsKKwkJbmFtZSA9IE5VTEw7CisJCWlmICggdHlwZSAh
PSBLVF9TUEtVUCApIHsKKwkJCXN5bnRoX3dyaXRlX21zZygga2V5bmFtZXNba2V5LTFdICk7CisJ
CQlyZXR1cm4gMTsKKwkJfQorCQlmb3IgKCBpID0gMDsgZnVuY3ZhbHNbaV0gIT0gMCAmJiAhbmFt
ZTsgaSsrICkgeworCQkJaWYgKCBjaCA9PSBmdW5jdmFsc1tpXSApCisJCQkJbmFtZSA9IGZ1bmNu
YW1lc1tpXTsKKwkJfQorCQlpZiAoICFuYW1lICkgcmV0dXJuIC0xOworCQlrcCA9IG91cl9rZXlz
W2tleV0rMTsKKwkJZm9yICggaSA9IDA7IGkgPCBuc3RhdGVzOyBpKysgKSB7CisJCQlpZiAoIGNo
ID09IGtwW2ldICkgYnJlYWs7CisJCX0KKwkJa2V5ICs9ICggc3RhdGVfdGJsW2ldPDw4ICk7CisJ
CXNheV9rZXkoIGtleSApOworCQlzeW50aF93cml0ZV9zdHJpbmcoICJpcyAiICk7CisJCXN5bnRo
X3dyaXRlX21zZyggbmFtZSApOworCQlyZXR1cm4gMTsKKwl9CisJbmFtZSA9IGZ1bmNuYW1lc1tj
dXJfaXRlbV07CisJZnVuYyA9IGZ1bmN2YWxzW2N1cl9pdGVtXTsKKwlzeW50aF93cml0ZV9zdHJp
bmcoIG5hbWUgKTsKKwlpZiAoIGtleV9vZmZzZXRzW2Z1bmNdID09IDAgKSB7CisJCXN5bnRoX3dy
aXRlX21zZyggIiBpcyB1bmFzc2lnbmVkIiApOworCQlyZXR1cm4gMTsKKwl9CisJcF9rZXlzID0g
a2V5X2J1ZiArIGtleV9vZmZzZXRzW2Z1bmNdOworCWZvciAoIG4gPSAwOyBwX2tleXNbbl07IG4r
KyApIHsKKwkJdmFsID0gcF9rZXlzW25dOworCQlpZiAoIG4gPiAwICkgc3ludGhfd3JpdGVfc3Ry
aW5nKCAib3IgIiApOworCQlzYXlfa2V5KCB2YWwgKTsKKwl9CisJcmV0dXJuIDE7Cit9CisKK3N0
YXRpYyB2b2lkIF9fZXhpdCBtb2RfaGVscF9leGl0KCB2b2lkICkKK3sKKwloZWxwX2hhbmRsZXIg
PSAwOworfQorCitzdGF0aWMgaW50IF9faW5pdCBtb2RfaGVscF9pbml0KCB2b2lkICkKK3sKKwlj
aGFyIHN0YXJ0ID0gU1BBQ0U7CisJaW50IGk7CitzdGF0ZV90YmwgPSBvdXJfa2V5c1swXStTSElG
VF9UQkxfU0laRSsyOworCWZvciAoaSA9IDA7IGkgPCAyNjsgaSsrICkgbGV0dGVyX29mZnNldHNb
aV0gPSAtMTsKKwlmb3IgKCBpID0gMDsgZnVuY25hbWVzW2ldOyBpKysgKSB7CisJCWlmICggc3Rh
cnQgPT0gKmZ1bmNuYW1lc1tpXSApIGNvbnRpbnVlOworCQlzdGFydCA9ICpmdW5jbmFtZXNbaV07
CisJCWxldHRlcl9vZmZzZXRzWyhzdGFydCYzMSktMV0gPSBpOworCX0KKwloZWxwX2hhbmRsZXIg
PSBoYW5kbGVfaGVscDsKKwlyZXR1cm4gMDsKK30KKworbW9kdWxlX2luaXQoIG1vZF9oZWxwX2lu
aXQgKTsKK21vZHVsZV9leGl0KCBtb2RfaGVscF9leGl0ICk7CitNT0RVTEVfQVVUSE9SKCJEYXZp
ZCBCb3Jvd3NraSIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJTcGVha3VwIGtleWJvYXJkIGhlbHAg
TU9EVUxFIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1leGNsdWRlPScqLm9yaWcn
IC0tZXhjbHVkZT0nKi5wYXRjaCcgLXVyTnAgbGludXgtMi42LjIwL2RyaXZlcnMvY2hhci9zcGVh
a3VwL3NwZWFrdXBfa2V5cGMuYyBsaW51eC0yLjYuMjAtc3BrL2RyaXZlcnMvY2hhci9zcGVha3Vw
L3NwZWFrdXBfa2V5cGMuYwotLS0gbGludXgtMi42LjIwL2RyaXZlcnMvY2hhci9zcGVha3VwL3Nw
ZWFrdXBfa2V5cGMuYwkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysgbGlu
dXgtMi42LjIwLXNway9kcml2ZXJzL2NoYXIvc3BlYWt1cC9zcGVha3VwX2tleXBjLmMJMjAwNy0w
Mi0wNCAxNjowOToyMC4wMDAwMDAwMDAgLTA1MDAKQEAgLTAsMCArMSwxOTAgQEAKKy8qCisqIHdy
aXR0ZW4gYnkgRGF2aWQgQm9yb3dza2kKKworCQlDb3B5cmlnaHQgKEMpIDIwMDMgRGF2aWQgQm9y
b3dza2kuCisKKwkJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKwkJaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKwkJdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKwkJKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworCQlUaGlzIHByb2dyYW0gaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKwkJYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKwkJ
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZQorCQlHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisJ
CVlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisJCWFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRo
ZSBGcmVlIFNvZnR3YXJlCisJCUZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3Vp
dGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKworICogdGhpcyBjb2RlIGlzIHNw
ZWNpZmljbHkgd3JpdHRlbiBhcyBhIGRyaXZlciBmb3IgdGhlIHNwZWFrdXAgc2NyZWVucmV2aWV3
CisgKiBwYWNrYWdlIGFuZCBpcyBub3QgYSBnZW5lcmFsIGRldmljZSBkcml2ZXIuCisJCSovCisj
aW5jbHVkZSAic3BrX3ByaXYuaCIKKworI2RlZmluZSBNWV9TWU5USCBzeW50aF9rZXlwYworI2Rl
ZmluZSBTWU5USF9JT19FWFRFTlQJMHgwNAorI2RlZmluZSBTV0FJVCB1ZGVsYXkoIDcwICkKKyNk
ZWZpbmUgc3ludGhfd3JpdGFibGUoICkgKCBpbmJfcCggc3ludGhfcG9ydCApICYgMHgxMCApCisj
ZGVmaW5lIHN5bnRoX3JlYWRhYmxlKCApICggaW5iX3AoIHN5bnRoX3BvcnQgKSAmIDB4MTAgKQor
I2RlZmluZSBzeW50aF9mdWxsKCApICggKCBpbmJfcCggc3ludGhfcG9ydCApICYgMHg4MCApID09
IDAgKQorI2RlZmluZSBQUk9DU1BFRUNIIDB4MWYKKyNkZWZpbmUgU1lOVEhfQ0xFQVIgMHgwMwor
CitzdGF0aWMgaW50IHN5bnRoX3BvcnQ7CitzdGF0aWMgdW5zaWduZWQgaW50IHN5bnRoX3BvcnRs
aXN0W10gPQorICAgIHsgMHgyYTgsIDAgfTsKKworc3RhdGljIGludCAKK29vcHMoIHZvaWQgKSAK
K3sKKwlpbnQgczEsIHMyLCBzMywgczQ7CisJczEgPSBpbmJfcCggc3ludGhfcG9ydCApOworCXMy
ID0gaW5iX3AoIHN5bnRoX3BvcnQrMSApOworCXMzID0gaW5iX3AoIHN5bnRoX3BvcnQrMiApOwor
CXM0ID0gaW5iX3AoIHN5bnRoX3BvcnQrMyApOworCXByX3dhcm4oICJzeW50aCB0aW1lb3V0ICVk
ICVkICVkICVkXG4iLCBzMSwgczIsIHMzLCBzNCApOworCXJldHVybiAwOworfQorCitzdGF0aWMg
Y29uc3QgY2hhciAqc3ludGhfaW1tZWRpYXRlICggY29uc3QgY2hhciAqYnVmICkKK3sKKwl1X2No
YXIgY2g7CisJaW50IHRpbWVvdXQ7CisJd2hpbGUgKCAgKCAgY2ggPSAqYnVmICkgKSB7CisJCWlm
ICggY2ggPT0gMHgwYSApIGNoID0gUFJPQ1NQRUVDSDsKKwkJaWYgKCBzeW50aF9mdWxsKCApICkK
KwkJCXJldHVybiBidWY7CisJdGltZW91dCA9IDEwMDA7CisJCXdoaWxlICggc3ludGhfd3JpdGFi
bGUoICkgKQorCQkJaWYgKCAtLXRpbWVvdXQgPD0gMCApIHJldHVybiAoY2hhciAqKSBvb3BzKCAp
OworCQlvdXRiX3AoIGNoLCBzeW50aF9wb3J0ICk7CisJCVNXQUlUOworCWJ1ZisrOworCX0KKwly
ZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZG9fY2F0Y2hfdXAoIHVuc2lnbmVkIGxvbmcgZGF0
YSApCit7CisJdW5zaWduZWQgbG9uZyBqaWZmX21heCA9IGppZmZpZXMrc3ludGhfamlmZnlfZGVs
dGE7CisJdV9jaGFyIGNoOworCWludCB0aW1lb3V0OworCXN5bnRoX3N0b3BfdGltZXIoICk7CisJ
d2hpbGUgKCAgc3ludGhfYnVmZl9vdXQgPCBzeW50aF9idWZmX2luICkgeworIAkJaWYgKCBzeW50
aF9mdWxsKCApICkgeworCQkJc3ludGhfZGVsYXkoIHN5bnRoX2Z1bGxfdGltZSApOworCQkJcmV0
dXJuOworCQl9CisJdGltZW91dCA9IDEwMDA7CisJCXdoaWxlICggc3ludGhfd3JpdGFibGUoICkg
KQorCQkJaWYgKCAtLXRpbWVvdXQgPD0gMCApIGJyZWFrOworCQlpZiAoIHRpbWVvdXQgPD0gMCAp
IHsKKwkJCW9vcHMoICk7CisJCQlicmVhazsKKwkJfQorCQljaCA9ICpzeW50aF9idWZmX291dCsr
OworCWlmICggY2ggPT0gMHgwYSApIGNoID0gUFJPQ1NQRUVDSDsKKwkJb3V0Yl9wKCBjaCwgc3lu
dGhfcG9ydCApOworCQlTV0FJVDsKKwkJaWYgKCBqaWZmaWVzID49IGppZmZfbWF4ICYmIGNoID09
IFNQQUNFICkgeworCXRpbWVvdXQgPSAxMDAwOworCQl3aGlsZSAoIHN5bnRoX3dyaXRhYmxlKCAp
ICkKKwkJCWlmICggLS10aW1lb3V0IDw9IDAgKSBicmVhazsKKwkJaWYgKCB0aW1lb3V0IDw9IDAg
KSB7CisJCQlvb3BzKCApOworCQkJYnJlYWs7CisJCQl9CisJCQlvdXRiX3AoIFBST0NTUEVFQ0gs
IHN5bnRoX3BvcnQgKTsKKwkJCXN5bnRoX2RlbGF5KCBzeW50aF9kZWxheV90aW1lICk7IAorCQkJ
cmV0dXJuOyAKKwkJfQorCX0KKwl0aW1lb3V0ID0gMTAwMDsKKwkJd2hpbGUgKCBzeW50aF93cml0
YWJsZSggKSApCisJCQlpZiAoIC0tdGltZW91dCA8PSAwICkgYnJlYWs7CisJCWlmICggdGltZW91
dCA8PSAwICkgb29wcyggKTsKKwkJCWVsc2UKKwlvdXRiX3AoIFBST0NTUEVFQ0gsIHN5bnRoX3Bv
cnQgKTsKKwlzeW50aF9kb25lKCAgKTsKK30KKworc3RhdGljIHZvaWQgc3ludGhfZmx1c2goIHZv
aWQgKQoreworCW91dGJfcCggU1lOVEhfQ0xFQVIsIHN5bnRoX3BvcnQgKTsKK30KKworc3RhdGlj
IGludCBzeW50aF9wcm9iZSggdm9pZCApCit7CisJdW5zaWduZWQgaW50IHBvcnRfdmFsID0gMDsK
KwlpbnQgaSA9IDA7CisJcHJfaW5mbyggIlByb2JpbmcgZm9yICVzLlxuIiwgc3ludGgtPmxvbmdf
bmFtZSApOworCWlmICggc3ludGhfcG9ydF9mb3JjZWQgKSB7CisJCXN5bnRoX3BvcnQgPSBzeW50
aF9wb3J0X2ZvcmNlZDsKKwkJcHJfaW5mbyggInByb2JlIGZvcmNlZCB0byAleCBieSBrZXJuZWwg
Y29tbWFuZCBsaW5lXG4iLCBzeW50aF9wb3J0ICk7CisJCWlmICggc3ludGhfcmVxdWVzdF9yZWdp
b24oIHN5bnRoX3BvcnQtMSwgU1lOVEhfSU9fRVhURU5UICkgKSB7CisJCQlwcl93YXJuKCAic29y
cnksIHBvcnQgYWxyZWFkeSByZXNlcnZlZFxuIiApOworCQkJcmV0dXJuIC1FQlVTWTsKKwkJfQor
CQlwb3J0X3ZhbCA9IGluYiggc3ludGhfcG9ydCApOworCX0gZWxzZSB7CisJCWZvciggaT0wOyBz
eW50aF9wb3J0bGlzdFtpXTsgaSsrICkgeworCQkJaWYgKCBzeW50aF9yZXF1ZXN0X3JlZ2lvbigg
c3ludGhfcG9ydGxpc3RbaV0sIFNZTlRIX0lPX0VYVEVOVCApICkgeworCQkJCXByX3dhcm4oICJy
ZXF1ZXN0X3JlZ2lvbjogIGZhaWxlZCB3aXRoIDB4JXgsICVkXG4iLAorCQkJCQlzeW50aF9wb3J0
bGlzdFtpXSwgU1lOVEhfSU9fRVhURU5UICk7CisJCQkJY29udGludWU7CisJCQl9CisJCQlwb3J0
X3ZhbCA9IGluYiggc3ludGhfcG9ydGxpc3RbaV0gKTsKKwkJCWlmICggcG9ydF92YWwgPT0gMHg4
MCApIHsKKwkJCQlzeW50aF9wb3J0ID0gc3ludGhfcG9ydGxpc3RbaV07CisJCQkJYnJlYWs7CisJ
CQl9CisJCX0KKwl9CisJaWYgKCBwb3J0X3ZhbCAhPSAweDgwICkgeworCQlwcl9pbmZvKCAiJXM6
ICBub3QgZm91bmRcbiIsIHN5bnRoLT5sb25nX25hbWUgKTsKKwkJc3ludGhfcmVsZWFzZV9yZWdp
b24oIHN5bnRoX3BvcnRsaXN0W2ldLCBTWU5USF9JT19FWFRFTlQgKTsKKwkJc3ludGhfcG9ydCA9
IDA7CisJCXJldHVybiAtRU5PREVWOworCX0KKwlwcl9pbmZvKCAiJXM6ICAlMDN4LSUwM3gsIGRy
aXZlciB2ZXJzaW9uICVzLFxuIiwgc3ludGgtPmxvbmdfbmFtZSwKKwkJc3ludGhfcG9ydCwJc3lu
dGhfcG9ydCtTWU5USF9JT19FWFRFTlQtMSwgCisJCXN5bnRoLT52ZXJzaW9uICk7CisJcmV0dXJu
IDA7Cit9CisKK3N0YXRpYyB2b2lkIGtleW5vdGVfcmVsZWFzZSggIHZvaWQgKQoreworCWlmICgg
IHN5bnRoX3BvcnQgKQorCQlzeW50aF9yZWxlYXNlX3JlZ2lvbiggc3ludGhfcG9ydCwgU1lOVEhf
SU9fRVhURU5UICk7CisJc3ludGhfcG9ydCA9IDA7Cit9CisKK3N0YXRpYyBpbnQgc3ludGhfaXNf
YWxpdmUoIHZvaWQgKQoreworCXN5bnRoX2FsaXZlID0gMTsKKwlyZXR1cm4gMTsKK30KKworc3Rh
dGljIGNvbnN0IGNoYXIgaW5pdF9zdHJpbmdbXSA9ICJbdF1bbjcsMV1bbjgsMF0iOworCitzdGF0
aWMgc3RydWN0IHN0X3N0cmluZ192YXIgc3RyaW5ndmFyc1tdID0geworCXsgQ0FQU19TVEFSVCwg
IltmMTMwXSIgfSwKKwl7IENBUFNfU1RPUCwgIltmOTBdIiB9LAorCVZfTEFTVF9TVFJJTkcKK307
CitzdGF0aWMgc3RydWN0IHN0X251bV92YXIgbnVtdmFyc1tdID0geworCXsgUkFURSwgIlwwNCVj
ICIsIDgsIDAsIDEwLCA4MSwgLTgsIDAgfSwKKwl7IFBJVENILCAiW2YlZF0iLCA1LCAwLCA5LCA0
MCwgMTAsIDAgfSwKKwlWX0xBU1RfTlVNCit9OworCitzdHJ1Y3Qgc3BrX3N5bnRoIHN5bnRoX2tl
eXBjID0geyJrZXlwYyIsICIxLjEiLCAiS2V5bm90ZSBQQyIsCisJIGluaXRfc3RyaW5nLCA1MDAs
IDUwLCA1MCwgMTAwMCwgMCwgMCwgU1lOVEhfQ0hFQ0ssCisJc3RyaW5ndmFycywgbnVtdmFycywg
c3ludGhfcHJvYmUsIGtleW5vdGVfcmVsZWFzZSwgc3ludGhfaW1tZWRpYXRlLAorCWRvX2NhdGNo
X3VwLCBOVUxMLCBzeW50aF9mbHVzaCwgc3ludGhfaXNfYWxpdmUsIE5VTEwsIE5VTEwsIE5VTEws
CisJe05VTEwsMCwwLDB9IH07CisKKyNpZmRlZiBNT0RVTEUKKyNpbmNsdWRlICJtb2RfY29kZS5j
IgorI2VuZGlmCmRpZmYgLS1leGNsdWRlPScqLm9yaWcnIC0tZXhjbHVkZT0nKi5wYXRjaCcgLXVy
TnAgbGludXgtMi42LjIwL2RyaXZlcnMvY2hhci9zcGVha3VwL3NwZWFrdXBfbHRsay5jIGxpbnV4
LTIuNi4yMC1zcGsvZHJpdmVycy9jaGFyL3NwZWFrdXAvc3BlYWt1cF9sdGxrLmMKLS0tIGxpbnV4
LTIuNi4yMC9kcml2ZXJzL2NoYXIvc3BlYWt1cC9zcGVha3VwX2x0bGsuYwkxOTY5LTEyLTMxIDE5
OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysgbGludXgtMi42LjIwLXNway9kcml2ZXJzL2NoYXIv
c3BlYWt1cC9zcGVha3VwX2x0bGsuYwkyMDA3LTAyLTA0IDE2OjA5OjIwLjAwMDAwMDAwMCAtMDUw
MApAQCAtMCwwICsxLDIyOSBAQAorLyoKKyAqIG9yaWdpbmFsbHkgd3JpdHRlbiBieTogS2lyayBS
ZWlzZXIgPGtpcmtAYnJhaWxsZS51d28uY2E+CisqIHRoaXMgdmVyc2lvbiBjb25zaWRlcmFibHkg
bW9kaWZpZWQgYnkgRGF2aWQgQm9yb3dza2ksIGRhdmlkNTc1QHJvZ2Vycy5jb20KKworCQlDb3B5
cmlnaHQgKEMpIDE5OTgtOTkgIEtpcmsgUmVpc2VyLgorCQlDb3B5cmlnaHQgKEMpIDIwMDMgRGF2
aWQgQm9yb3dza2kuCisKKwkJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKwkJaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKwkJdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IK
KwkJKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworCQlUaGlzIHByb2dyYW0g
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKwkJYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKwkJTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZQorCQlHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorCisJCVlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisJCWFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRl
IHRvIHRoZSBGcmVlIFNvZnR3YXJlCisJCUZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFj
ZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKworICogdGhpcyBjb2Rl
IGlzIHNwZWNpZmljbHkgd3JpdHRlbiBhcyBhIGRyaXZlciBmb3IgdGhlIHNwZWFrdXAgc2NyZWVu
cmV2aWV3CisgKiBwYWNrYWdlIGFuZCBpcyBub3QgYSBnZW5lcmFsIGRldmljZSBkcml2ZXIuCisJ
CSovCisjaW5jbHVkZSAic3BrX3ByaXYuaCIKKyNpbmNsdWRlICJzZXJpYWxpby5oIgorCisjaW5j
bHVkZSAic3BlYWt1cF9kdGxrLmgiIC8qIGxvY2FsIGhlYWRlciBmaWxlIGZvciBMaXRlVGFsayB2
YWx1ZXMgKi8KKworI2RlZmluZSBNWV9TWU5USCBzeW50aF9sdGxrCisjZGVmaW5lIFBST0NTUEVF
Q0ggMHgwZAorI2RlZmluZSBzeW50aF9mdWxsKCApICggISggaW5iKCBzeW50aF9wb3J0X3R0cyAr
IFVBUlRfTVNSICkgJiBVQVJUX01TUl9DVFMgKSApCisKK3N0YXRpYyBpbnQgd2FpdF9mb3JfeG1p
dHIoIHZvaWQgKQoreworCXN0YXRpYyBpbnQgdGltZW91dHMgPSAwOwkvKiBzZXF1ZW50aWFsIG51
bWJlciBvZiB0aW1lb3V0cyAqLworCWludCBjaGVjaywgdG1vdXQgPSBTUEtfWE1JVFJfVElNRU9V
VDsKKwlpZiAoICggc3ludGhfYWxpdmUgKSAmJiAoIHRpbWVvdXRzID49IE5VTV9ESVNBQkxFX1RJ
TUVPVVRTICkgKSB7CisJCXN5bnRoX2FsaXZlID0gMDsgCisJCXRpbWVvdXRzID0gMDsKKwkJcmV0
dXJuIDA7IAorCX0KKwlkbyB7IC8qIGhvbGRpbmcgcmVnaXN0ZXIgZW1wdHk/ICovCisJCWNoZWNr
ID0gaW5iKCBzeW50aF9wb3J0X3R0cyArIFVBUlRfTFNSICk7CisgICAgCQlpZiAoIC0tdG1vdXQg
PT0gMCApIHsKKyAgICAJCQlwcl93YXJuKCAiJXM6ICByZWdpc3RlciB0aW1lZCBvdXRcbiIsIHN5
bnRoLT5sb25nX25hbWUgKTsKKwkJCXRpbWVvdXRzKys7CisgICAgCQkJcmV0dXJuIDA7CisgICAg
CQl9CisJfSB3aGlsZSAoICggY2hlY2sgJiBCT1RIX0VNUFRZICkgIT0gQk9USF9FTVBUWSApOwor
CXRtb3V0ID0gU1BLX1hNSVRSX1RJTUVPVVQ7CisJZG8geyAvKiBDVFMgKi8KKwkJY2hlY2sgPSBp
bmIoIHN5bnRoX3BvcnRfdHRzICsgVUFSVF9NU1IgKTsKKyAgICAJCWlmICggLS10bW91dCA9PSAw
ICkgeworICAgIAkJCXRpbWVvdXRzKys7CisgICAgCQkJcmV0dXJuIDA7CisgICAgCQl9CisJfSB3
aGlsZSAoICggY2hlY2sgJiBVQVJUX01TUl9DVFMgKSAhPSBVQVJUX01TUl9DVFMgKTsKKwl0aW1l
b3V0cyA9IDA7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgc3BrX3NlcmlhbF9vdXQoIGNv
bnN0IGNoYXIgY2ggKQoreworCWlmICggc3ludGhfYWxpdmUgJiYgd2FpdF9mb3JfeG1pdHIoICkg
KSB7CisJCW91dGIoIGNoLCBzeW50aF9wb3J0X3R0cyApOworCQlyZXR1cm4gMTsKKwl9CisJcmV0
dXJuIDA7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIHNwa19zZXJpYWxfaW4oIHZvaWQgKQor
eworCWludCBjLCBsc3IsIHRtb3V0ID0gU1BLX1NFUklBTF9USU1FT1VUOworCWRvIHsKKwkJbHNy
ID0gaW5iKCBzeW50aF9wb3J0X3R0cyArIFVBUlRfTFNSICk7CisJCWlmICggLS10bW91dCA9PSAw
ICkgeworCQkJcHJfd2FybiggInRpbWUgb3V0IHdoaWxlIHdhaXRpbmcgZm9yIGlucHV0LlxuIiAp
OworCQkJcmV0dXJuIDB4ZmY7IAorCQl9CisJfSB3aGlsZSAoICggbHNyICYgVUFSVF9MU1JfRFIg
KSAhPSBVQVJUX0xTUl9EUiApOworCWMgPSBpbmIoIHN5bnRoX3BvcnRfdHRzICsgVUFSVF9SWCAp
OworCXJldHVybiAoIHVuc2lnbmVkIGNoYXIgKSBjOworfQorCitzdGF0aWMgdm9pZCBkb19jYXRj
aF91cCggdW5zaWduZWQgbG9uZyBkYXRhICkKK3sKKwl1bnNpZ25lZCBsb25nIGppZmZfbWF4ID0g
amlmZmllcytzeW50aF9qaWZmeV9kZWx0YTsKKwl1X2NoYXIgY2g7CisJc3ludGhfc3RvcF90aW1l
ciggKTsKKwl3aGlsZSAoIHN5bnRoX2J1ZmZfb3V0IDwgc3ludGhfYnVmZl9pbiApIHsKKwkJY2gg
PSAqc3ludGhfYnVmZl9vdXQ7CisJCWlmICggY2ggPT0gMHgwYSApIGNoID0gUFJPQ1NQRUVDSDsK
KwkJaWYgKCAhc3BrX3NlcmlhbF9vdXQoIGNoICkgKSB7CisJCQlzeW50aF9kZWxheSggc3ludGhf
ZnVsbF90aW1lICk7CisJCQlyZXR1cm47CisJCX0KKwkJc3ludGhfYnVmZl9vdXQrKzsKKwkJaWYg
KCBqaWZmaWVzID49IGppZmZfbWF4ICYmIGNoID09IFNQQUNFICkgeworCQkJc3BrX3NlcmlhbF9v
dXQoIFBST0NTUEVFQ0ggKTsKKwkJCXN5bnRoX2RlbGF5KCBzeW50aF9kZWxheV90aW1lICk7IAor
CQkJcmV0dXJuOyAKKwkJfQorCX0KKwlzcGtfc2VyaWFsX291dCggUFJPQ1NQRUVDSCApOworCXN5
bnRoX2RvbmUgKCApOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqc3ludGhfaW1tZWRpYXRlICgg
Y29uc3QgY2hhciAqYnVmICkKK3sKKwl1X2NoYXIgY2g7CisJd2hpbGUgKCAoIGNoID0gKmJ1ZiAp
ICkgeworCWlmICggY2ggPT0gMHgwYSApIGNoID0gUFJPQ1NQRUVDSDsKKyAgICAgICAgaWYgKCB3
YWl0X2Zvcl94bWl0ciggKSApCisJICBvdXRiKCBjaCwgc3ludGhfcG9ydF90dHMgKTsKKwllbHNl
IHJldHVybiBidWY7CisJYnVmKys7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBz
eW50aF9mbHVzaCggdm9pZCApCit7CisJc3BrX3NlcmlhbF9vdXQoIFNZTlRIX0NMRUFSICk7Cit9
CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGdldF9pbmRleCggdm9pZCApCit7CisJaW50IGMsIGxz
cjsvLywgdG1vdXQgPSBTUEtfU0VSSUFMX1RJTUVPVVQ7CisJbHNyID0gaW5iKCBzeW50aF9wb3J0
X3R0cyArIFVBUlRfTFNSICk7CisJaWYgKCAoIGxzciAmIFVBUlRfTFNSX0RSKSA9PSBVQVJUX0xT
Ul9EUiApCisJeworCQljID0gaW5iKCBzeW50aF9wb3J0X3R0cyArIFVBUlRfUlggKTsKKwkJcmV0
dXJuICggdW5zaWduZWQgY2hhciApIGM7CisJfQorCXJldHVybiAwOworfQorCisvKiBpbnRlcnJv
Z2F0ZSB0aGUgTGl0ZVRhbGsgYW5kIHByaW50IGl0cyBzZXR0aW5ncyAqLworc3RhdGljIHZvaWQg
c3ludGhfaW50ZXJyb2dhdGUoIHZvaWQgKQoreworCXVuc2lnbmVkIGNoYXIgKnQsIGk7CisJdW5z
aWduZWQgY2hhciBidWZbNTBdLCByb21fdlsyMF07CisJc3ludGhfaW1tZWRpYXRlKCAiXHgxOFx4
MDE/IiApOworCWZvciAoIGkgPSAwOyBpIDwgNTA7IGkrKyApIHsKKwkJYnVmW2ldID0gc3BrX3Nl
cmlhbF9pbiggKTsKKwkJaWYgKCBpID4gMiAmJiBidWZbaV0gPT0gMHg3ZiApIGJyZWFrOworCX0K
Kwl0ID0gYnVmKzI7CisJZm9yICggaSA9IDA7ICp0ICE9ICdccic7IHQrKyApIHsKKwkJcm9tX3Zb
aV0gPSAqdDsKKwkJaWYgKGkrKyA+IDQ4KSBicmVhazsKKwl9CisJcm9tX3ZbaV0gPSAwOworCXBy
X2luZm8oICIlczogUk9NIHZlcnNpb246ICVzXG4iLCBzeW50aC0+bG9uZ19uYW1lLCByb21fdiAp
OworfQorCitzdGF0aWMgaW50IHNlcnByb2JlKCBpbnQgaW5kZXggKQoreworCXN0cnVjdCBzZXJp
YWxfc3RhdGUgKnNlciA9IHNwa19zZXJpYWxfaW5pdCggaW5kZXggKTsKKwlpZiAoIHNlciA9PSBO
VUxMICkgcmV0dXJuIC0xOworCW91dGIoIDAsIHNlci0+cG9ydCApOworCW1kZWxheSggMSApOwor
CW91dGIoICdccicsIHNlci0+cG9ydCApOworCS8qIGlnbm9yZSBhbnkgZXJyb3IgcmVzdWx0cywg
aWYgcG9ydCB3YXMgZm9yY2VkICovCisJaWYgKCBzeW50aF9wb3J0X2ZvcmNlZCApIHJldHVybiAw
OworCS8qIGNoZWNrIGZvciBkZXZpY2UuLi4gKi8KKwlpZiAoICFzeW50aF9pbW1lZGlhdGUoICJc
eDE4IiApICkgcmV0dXJuIDA7CQorCXNwa19zZXJpYWxfcmVsZWFzZSggKTsKKwlzeW50aF9hbGl2
ZSA9IDA7IC8qIHRyeSBuZXh0IHBvcnQgKi8KKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbnQg
c3ludGhfcHJvYmUoIHZvaWQgKQoreworCWludCBpLCBmYWlsZWQ9MDsKKwlwcl9pbmZvKCAiUHJv
YmluZyBmb3IgJXMuXG4iLCBzeW50aC0+bG9uZ19uYW1lICk7CisJZm9yICggaT1TUEtfTE9fVFRZ
OyBpIDw9IFNQS19ISV9UVFk7IGkrKyApIHsKKwkgIGlmICgoIGZhaWxlZCA9IHNlcnByb2JlKCBp
ICkpID09IDAgKSBicmVhazsgLyogZm91bmQgaXQgKi8KKwl9CisJaWYgKCBmYWlsZWQgKSB7CisJ
ICBwcl9pbmZvKCAiJXM6ICBub3QgZm91bmRcbiIsIHN5bnRoLT5sb25nX25hbWUgKTsKKwkgIHJl
dHVybiAtRU5PREVWOworCX0KKwlzeW50aF9pbnRlcnJvZ2F0ZSggKTsKKwlwcl9pbmZvKCAiJXM6
IGF0ICAlMDN4LSUwM3gsIGRyaXZlciAlc1xuIiwgc3ludGgtPmxvbmdfbmFtZSwKKwkgICAgICAg
c3ludGhfcG9ydF90dHMsIHN5bnRoX3BvcnRfdHRzICsgNywgc3ludGgtPnZlcnNpb24gKTsKKwly
ZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzeW50aF9pc19hbGl2ZSggdm9pZCApCit7CisJaWYg
KCBzeW50aF9hbGl2ZSApIHJldHVybiAxOworCWlmICggIXN5bnRoX2FsaXZlICYmIHdhaXRfZm9y
X3htaXRyKCApID4gMCApIHsgLyogcmVzdGFydCAqLworCQlzeW50aF9hbGl2ZSA9IDE7CisJCXN5
bnRoX3dyaXRlX3N0cmluZyggc3ludGgtPmluaXQgKTsKKwkJcmV0dXJuIDI7CisJfSBlbHNlIHBy
X3dhcm4oICIlczogY2FuJ3QgcmVzdGFydCBzeW50aFxuIiwgc3ludGgtPmxvbmdfbmFtZSApOwor
CXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3QgY2hhciBpbml0X3N0cmluZ1tdID0gIlwwMUBc
eDAxXHgzMXlcblwwIjsKKworc3RhdGljIHN0cnVjdCBzdF9zdHJpbmdfdmFyIHN0cmluZ3ZhcnNb
XSA9IHsKKwl7IENBUFNfU1RBUlQsICJceDAxKzM1cCIgfSwKKwl7IENBUFNfU1RPUCwgIlx4MDEt
MzVwIiB9LAorCVZfTEFTVF9TVFJJTkcKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc3RfbnVtX3ZhciBu
dW12YXJzW10gPSB7CisJeyBSQVRFLCAiXHgwMSVkcyIsIDgsIDAsIDksIDAsIDAsIDAgfSwKKwl7
IFBJVENILCAiXHgwMSVkcCIsIDUwLCAwLCA5OSwgMCwgMCwgMCB9LAorCXsgVk9MLCAiXHgwMSVk
diIsIDUsIDAsIDksIDAsIDAsIDAgfSwKKwl7IFRPTkUsICJceDAxJWR4IiwgMSwgMCwgMiwgMCwg
MCwgMCB9LAorCXsgUFVOQ1QsICJceDAxJWRiIiwgNywgMCwgMTUsIDAsIDAsIDAgfSwKKwl7IFZP
SUNFLCAiXHgwMSVkbyIsIDAsIDAsIDcsIDAsIDAsIDAgfSwKKwl7IEZSRVEsICJceDAxJWRmIiwg
NSwgMCwgOSwgMCwgMCwgMCB9LAorCVZfTEFTVF9OVU0KK307CisKK3N0cnVjdCBzcGtfc3ludGgg
c3ludGhfbHRsayA9IHsgImx0bGsiLCAiMS4xIiwgIkxpdGVUYWxrIiwKKwlpbml0X3N0cmluZywg
NTAwLCA1MCwgNTAsIDUwMDAsIDAsIDAsIFNZTlRIX0NIRUNLLAorCXN0cmluZ3ZhcnMsIG51bXZh
cnMsIHN5bnRoX3Byb2JlLCBzcGtfc2VyaWFsX3JlbGVhc2UsIHN5bnRoX2ltbWVkaWF0ZSwKKwlk
b19jYXRjaF91cCwgTlVMTCwgc3ludGhfZmx1c2gsIHN5bnRoX2lzX2FsaXZlLCBOVUxMLCBOVUxM
LCBnZXRfaW5kZXgsCisJeyJceDAxJWRpIiwxLDUsMX0gfTsKKworI2lmZGVmIE1PRFVMRQorI2lu
Y2x1ZGUgIm1vZF9jb2RlLmMiCisjZW5kaWYKZGlmZiAtLWV4Y2x1ZGU9Jyoub3JpZycgLS1leGNs
dWRlPScqLnBhdGNoJyAtdXJOcCBsaW51eC0yLjYuMjAvZHJpdmVycy9jaGFyL3NwZWFrdXAvc3Bl
YWt1cG1hcC5oIGxpbnV4LTIuNi4yMC1zcGsvZHJpdmVycy9jaGFyL3NwZWFrdXAvc3BlYWt1cG1h
cC5oCi0tLSBsaW51eC0yLjYuMjAvZHJpdmVycy9jaGFyL3NwZWFrdXAvc3BlYWt1cG1hcC5oCTE5
NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKyBsaW51eC0yLjYuMjAtc3BrL2Ry
aXZlcnMvY2hhci9zcGVha3VwL3NwZWFrdXBtYXAuaAkyMDA3LTAyLTA0IDE2OjA5OjE5LjAwMDAw
MDAwMCAtMDUwMApAQCAtMCwwICsxLDY1IEBACisJMTE5LCA2MiwgNiwKKwkwLCAxNiwgMjAsIDE3
LCAzMiwgNDgsIDAsCisJMiwgMCwgNzgsIDAsIDAsIDAsIDAsCisJMywgMCwgNzksIDAsIDAsIDAs
IDAsCisJNCwgMCwgNzYsIDAsIDAsIDAsIDAsCisJNSwgMCwgNzcsIDAsIDAsIDAsIDAsCisJNiwg
MCwgNzQsIDAsIDAsIDAsIDAsCisJNywgMCwgNzUsIDAsIDAsIDAsIDAsCisJOSwgMCwgNSwgNDYs
IDAsIDAsIDAsCisJMTAsIDAsIDQsIDAsIDAsIDAsIDAsCisJMTEsIDAsIDAsIDEsIDAsIDAsIDAs
CisJMTIsIDAsIDI3LCAwLCAzMywgMCwgMCwKKwkxOSwgMCwgNDcsIDAsIDAsIDAsIDAsCisJMjEs
IDAsIDI5LCAxNywgMCwgMCwgMCwKKwkyMiwgMCwgMTUsIDAsIDAsIDAsIDAsCisJMjMsIDAsIDE0
LCAwLCAwLCAwLCAyOCwKKwkyNCwgMCwgMTYsIDAsIDAsIDAsIDAsCisJMjUsIDAsIDMwLCAxOCwg
MCwgMCwgMCwKKwkyOCwgMCwgMywgMjYsIDAsIDAsIDAsCisJMzUsIDAsIDMxLCAwLCAwLCAwLCAw
LAorCTM2LCAwLCAxMiwgMCwgMCwgMCwgMCwKKwkzNywgMCwgMTEsIDAsIDAsIDAsIDIyLAorCTM4
LCAwLCAxMywgMCwgMCwgMCwgMCwKKwkzOSwgMCwgMzIsIDcsIDAsIDAsIDAsCisJNDAsIDAsIDIz
LCAwLCAwLCAwLCAwLAorCTQ0LCAwLCA0NCwgMCwgMCwgMCwgMCwKKwk0OSwgMCwgMjQsIDAsIDAs
IDAsIDAsCisJNTAsIDAsIDksIDE5LCA2LCAwLCAwLAorCTUxLCAwLCA4LCAwLCAwLCAwLCAzNiwK
Kwk1MiwgMCwgMTAsIDIwLCAwLCAwLCAwLAorCTUzLCAwLCAyNSwgMCwgMCwgMCwgMCwKKwk1NSwg
NDYsIDEsIDAsIDAsIDAsIDAsCisJNTgsIDEyOCwgMTI4LCAwLCAwLCAwLCAwLAorCTU5LCAwLCA0
NSwgMCwgMCwgMCwgMCwKKwk2MCwgMCwgNDAsIDAsIDAsIDAsIDAsCisJNjEsIDAsIDQxLCAwLCAw
LCAwLCAwLAorCTYyLCAwLCA0MiwgMCwgMCwgMCwgMCwKKwk2MywgMCwgMzQsIDAsIDAsIDAsIDAs
CisJNjQsIDAsIDM1LCAwLCAwLCAwLCAwLAorCTY1LCAwLCAzNywgMCwgMCwgMCwgMCwKKwk2Niwg
MCwgMzgsIDAsIDAsIDAsIDAsCisJNjcsIDAsIDY2LCAwLCAzOSwgMCwgMCwKKwk2OCwgMCwgNjcs
IDAsIDAsIDAsIDAsCisJNzEsIDE1LCAxOSwgMCwgMCwgMCwgMCwKKwk3MiwgMTQsIDI5LCAwLCAw
LCAyOCwgMCwKKwk3MywgMTYsIDE3LCAwLCAwLCAwLCAwLAorCTc0LCAyNywgMzMsIDAsIDAsIDAs
IDAsCisJNzUsIDEyLCAzMSwgMCwgMCwgMCwgMCwKKwk3NiwgMTEsIDIxLCAwLCAwLCAyMiwgMCwK
Kwk3NywgMTMsIDMyLCAwLCAwLCAwLCAwLAorCTc4LCAyMywgNDMsIDAsIDAsIDAsIDAsCisJNzks
IDksIDIwLCAwLCAwLCAwLCAwLAorCTgwLCA4LCAzMCwgMCwgMCwgMzYsIDAsCisJODEsIDEwLCAx
OCwgMCwgMCwgMCwgMCwKKwk4MiwgMTI4LCAxMjgsIDAsIDAsIDAsIDAsCisJODMsIDI0LCAyNSwg
MCwgMCwgMCwgMCwKKwk4NywgMCwgNjgsIDAsIDAsIDAsIDAsCisJODgsIDAsIDY5LCAwLCAwLCAw
LCAwLAorCTk2LCAzLCAyNiwgMCwgMCwgMCwgMCwKKwk5OCwgNCwgNSwgMCwgMCwgMCwgMCwKKwk5
OSwgMiwgMCwgMCwgMCwgMCwgMCwKKwkxMDQsIDAsIDYsIDAsIDAsIDAsIDAsCisJMTA5LCAwLCA3
LCAwLCAwLCAwLCAwLAorCTEyNSwgMTI4LCAxMjgsIDAsIDAsIDAsIDAsCisJMCwgMTE5CmRpZmYg
LS1leGNsdWRlPScqLm9yaWcnIC0tZXhjbHVkZT0nKi5wYXRjaCcgLXVyTnAgbGludXgtMi42LjIw
L2RyaXZlcnMvY2hhci9zcGVha3VwL3NwZWFrdXBtYXAubWFwIGxpbnV4LTIuNi4yMC1zcGsvZHJp
dmVycy9jaGFyL3NwZWFrdXAvc3BlYWt1cG1hcC5tYXAKLS0tIGxpbnV4LTIuNi4yMC9kcml2ZXJz
L2NoYXIvc3BlYWt1cC9zcGVha3VwbWFwLm1hcAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAw
MCAtMDUwMAorKysgbGludXgtMi42LjIwLXNway9kcml2ZXJzL2NoYXIvc3BlYWt1cC9zcGVha3Vw
bWFwLm1hcAkyMDA3LTAyLTA0IDE2OjA5OjE5LjAwMDAwMDAwMCAtMDUwMApAQCAtMCwwICsxLDkz
IEBACitzcGsga2V5X2Y5ID0gcHVuY19sZXZlbF9kZWMKK3NwayBrZXlfZjEwID0gcHVuY19sZXZl
bF9pbmMKK3NwayBrZXlfZjExID0gcmVhZGluZ19wdW5jX2RlYworc3BrIGtleV9mMTIgPSByZWFk
aW5nX3B1bmNfaW5jCitzcGsga2V5XzEgPSB2b2xfZGVjCitzcGsga2V5XzIgPSAgdm9sX2luYwor
c3BrIGtleV8zID0gcGl0Y2hfZGVjCitzcGsga2V5XzQgPSBwaXRjaF9pbmMKK3NwayBrZXlfNSA9
IHJhdGVfZGVjCitzcGsga2V5XzYgPSByYXRlX2luYwora2V5X2twYXN0ZXJpc2sgPSB0b2dnbGVf
Y3Vyc29yaW5nCitjdHJsIHNwayBrZXlfOCA9IHRvZ2dsZV9jdXJzb3JpbmcKK3NwayBrZXlfa3Bh
c3RlcmlzayA9IHNwZWFrdXBfZ290bworc3BrIGtleV9mMSA9IHNwZWFrdXBfaGVscAorc3BrIGtl
eV9mMiA9IHNldF93aW4KK3NwayBrZXlfZjMgPSBjbGVhcl93aW4KK3NwayBrZXlfZjQgPSBlbmFi
bGVfd2luCitzcGsga2V5X2Y1ID0gZWRpdF9zb21lCitzcGsga2V5X2Y2ID0gZWRpdF9tb3N0Citz
cGsga2V5X2Y3ID0gZWRpdF9kZWxpbQorc3BrIGtleV9mOCA9IGVkaXRfcmVwZWF0CitzaGlmdCBz
cGsga2V5X2Y5ID0gZWRpdF9leG51bQorIGtleV9rcDcgPSBzYXlfcHJldl9saW5lCitzcGsga2V5
X2twNyA9IGxlZnRfZWRnZQorIGtleV9rcDggPSBzYXlfbGluZQorZG91YmxlICBrZXlfa3A4ID0g
c2F5X2xpbmVfaW5kZW50CitzcGsga2V5X2twOCA9IHNheV9mcm9tX3RvcAorIGtleV9rcDkgPSBz
YXlfbmV4dF9saW5lCitzcGsgIGtleV9rcDkgPSB0b3BfZWRnZQorIGtleV9rcG1pbnVzID0gc3Bl
YWt1cF9wYXJrZWQKK3NwayBrZXlfa3BtaW51cyA9IHNheV9jaGFyX251bQorIGtleV9rcDQgPSBz
YXlfcHJldl93b3JkCitzcGsga2V5X2twNCA9IHNheV9mcm9tX2xlZnQKKyBrZXlfa3A1ID0gc2F5
X3dvcmQKK2RvdWJsZSBrZXlfa3A1ID0gc3BlbGxfd29yZAorc3BrIGtleV9rcDUgPSBzcGVsbF9w
aG9uZXRpYworIGtleV9rcDYgPSBzYXlfbmV4dF93b3JkCitzcGsga2V5X2twNiA9IHNheV90b19y
aWdodAorIGtleV9rcHBsdXMgPSBzYXlfc2NyZWVuCitzcGsga2V5X2twcGx1cyA9IHNheV93aW4K
KyBrZXlfa3AxID0gc2F5X3ByZXZfY2hhciAKK3NwayBrZXlfa3AxID0gcmlnaHRfZWRnZQorIGtl
eV9rcDIgPSBzYXlfY2hhcgorc3BrIGtleV9rcDIgPSBzYXlfdG9fYm90dG9tCitkb3VibGUga2V5
X2twMiA9IHNheV9waG9uZXRpY19jaGFyCisga2V5X2twMyA9IHNheV9uZXh0X2NoYXIgIAorc3Br
ICBrZXlfa3AzID0gYm90dG9tX2VkZ2UKKyBrZXlfa3AwID0gc3BrX2tleQorIGtleV9rcGRvdCA9
IHNheV9wb3NpdGlvbgorc3BrIGtleV9rcGRvdCA9IHNheV9hdHRyaWJ1dGVzCitrZXlfa3BlbnRl
ciA9IHNwZWFrdXBfcXVpZXQKK3NwayBrZXlfa3BlbnRlciA9IHNwZWFrdXBfb2ZmCitrZXlfc3lz
cnEgPSBzcGVlY2hfa2lsbAorIGtleV9rcHNsYXNoID0gc3BlYWt1cF9jdXQKK3NwayBrZXlfa3Bz
bGFzaCA9IHNwZWFrdXBfcGFzdGUKK3NwayBrZXlfcGFnZXVwID0gc2F5X2ZpcnN0X2NoYXIKK3Nw
ayBrZXlfcGFnZWRvd24gPSBzYXlfbGFzdF9jaGFyCitrZXlfY2Fwc2xvY2sgPSBzcGtfa2V5Cisg
c3BrIGtleV96ID0gc3BrX2xvY2sKK2tleV9sZWZ0bWV0YSA9IHNwa19rZXkKK2N0cmwgc3BrIGtl
eV8wID0gc3BlYWt1cF9nb3RvCitzcGsga2V5X3UgPSBzYXlfcHJldl9saW5lCitzcGsga2V5X2kg
PSBzYXlfbGluZQorZG91YmxlIHNwayBrZXlfaSA9IHNheV9saW5lX2luZGVudAorc3BrIGtleV9v
ID0gc2F5X25leHRfbGluZQorc3BrIGtleV9taW51cyA9IHNwZWFrdXBfcGFya2VkCitzaGlmdCBz
cGsga2V5X21pbnVzID0gc2F5X2NoYXJfbnVtCitzcGsga2V5X2ogPSBzYXlfcHJldl93b3JkCitz
cGsga2V5X2sgPSBzYXlfd29yZAorZG91YmxlIHNwayBrZXlfayA9IHNwZWxsX3dvcmQKK3NwayBr
ZXlfbCA9IHNheV9uZXh0X3dvcmQKK3NwayBrZXlfbSA9IHNheV9wcmV2X2NoYXIKK3NwayBrZXlf
Y29tbWEgPSBzYXlfY2hhcgorZG91YmxlIHNwayBrZXlfY29tbWEgPSBzYXlfcGhvbmV0aWNfY2hh
cgorc3BrIGtleV9kb3QgPSBzYXlfbmV4dF9jaGFyCitzcGsga2V5X24gPSBzYXlfcG9zaXRpb24K
KyBjdHJsIHNwayBrZXlfbSA9IGxlZnRfZWRnZQorIGN0cmwgc3BrIGtleV95ID0gdG9wX2VkZ2UK
KyBjdHJsIHNwayBrZXlfZG90ID0gcmlnaHRfZWRnZQorY3RybCBzcGsga2V5X3AgPSBib3R0b21f
ZWRnZQorc3BrIGtleV9hcG9zdHJvcGhlID0gc2F5X3NjcmVlbgorc3BrIGtleV9oID0gc2F5X2Zy
b21fbGVmdAorc3BrIGtleV95ID0gc2F5X2Zyb21fdG9wCitzcGsga2V5X3NlbWljb2xvbiA9IHNh
eV90b19yaWdodAorc3BrIGtleV9wID0gc2F5X3RvX2JvdHRvbQorc3BrIGtleV9zbGFzaCA9IHNh
eV9hdHRyaWJ1dGVzCisgc3BrIGtleV9lbnRlciA9IHNwZWFrdXBfcXVpZXQKKyBjdHJsICBzcGsg
a2V5X2VudGVyID0gc3BlYWt1cF9vZmYKKyBzcGsga2V5XzkgPSBzcGVha3VwX2N1dAorc3BrIGtl
eV84ID0gc3BlYWt1cF9wYXN0ZQorc2hpZnQgc3BrIGtleV9tID0gc2F5X2ZpcnN0X2NoYXIKKyBj
dHJsIHNwayBrZXlfc2VtaWNvbG9uID0gc2F5X2xhc3RfY2hhcgorc3BrIGtleV9yID0gcmVhZF9h
bGxfZG9jCmRpZmYgLS1leGNsdWRlPScqLm9yaWcnIC0tZXhjbHVkZT0nKi5wYXRjaCcgLXVyTnAg
bGludXgtMi42LjIwL2RyaXZlcnMvY2hhci9zcGVha3VwL3NwZWFrdXBfc2Z0c3luLmMgbGludXgt
Mi42LjIwLXNway9kcml2ZXJzL2NoYXIvc3BlYWt1cC9zcGVha3VwX3NmdHN5bi5jCi0tLSBsaW51
eC0yLjYuMjAvZHJpdmVycy9jaGFyL3NwZWFrdXAvc3BlYWt1cF9zZnRzeW4uYwkxOTY5LTEyLTMx
IDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysgbGludXgtMi42LjIwLXNway9kcml2ZXJzL2No
YXIvc3BlYWt1cC9zcGVha3VwX3NmdHN5bi5jCTIwMDctMDItMDQgMTY6MDk6MjAuMDAwMDAwMDAw
IC0wNTAwCkBAIC0wLDAgKzEsMjA2IEBACisvKiBzcGVha3VwX3NmdHN5bnRoLmMgLSBzcGVha3Vw
IGRyaXZlciB0byByZWdpc3RlciBhbmQgbWFrZSBhdmFpbGFibGUKKyAqIGEgdXNlciBzcGFjZSBk
ZXZpY2UgZm9yIHNvZnR3YXJlIHN5bnRoZXNpemVycy4gIHdyaXR0ZW4gYnk6IEtpcmsKKyAqIFJl
aXNlciA8a2lya0BicmFpbGxlLnV3by5jYT4KKworCQlDb3B5cmlnaHQgKEMpIDIwMDMgIEtpcmsg
UmVpc2VyLgorCisJCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisJCWl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisJCXRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisJCShh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKwkJVGhpcyBwcm9ncmFtIGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisJCWJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisJ
CU1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUKKwkJR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKwor
CQlZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorCQlhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0
aGUgRnJlZSBTb2Z0d2FyZQorCQlGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1
aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisKKyAqIHRoaXMgY29kZSBpcyBz
cGVjaWZpY2x5IHdyaXR0ZW4gYXMgYSBkcml2ZXIgZm9yIHRoZSBzcGVha3VwIHNjcmVlbnJldmll
dworICogcGFja2FnZSBhbmQgaXMgbm90IGEgZ2VuZXJhbCBkZXZpY2UgZHJpdmVyLiAgKi8KKwor
I2luY2x1ZGUgPGxpbnV4L3VuaXN0ZC5oPgorI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KKyNp
bmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+ICAgLyogZm9yIG1pc2NfcmVnaXN0ZXIsIGFuZCBT
WU5USF9NSU5PUiAqLworI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4gIC8vIGZvciBwb2xsX3dhaXQo
KQorI2luY2x1ZGUgInNwa19wcml2LmgiCisKKyNkZWZpbmUgTVlfU1lOVEggc3ludGhfc2Z0c3lu
CisjZGVmaW5lIFNPRlRTWU5USF9NSU5PUiAyNiAgLy8gbWlnaHQgYXMgd2VsbCBnaXZlIGl0IG9u
ZSBtb3JlIHRoYW4gL2Rldi9zeW50aAorI2RlZmluZSBQUk9DU1BFRUNIIDB4MGQKKyNkZWZpbmUg
Q0xFQVJfU1lOVEggMHgxOAorCitzdGF0aWMgc3RydWN0IG1pc2NkZXZpY2Ugc3ludGhfZGV2aWNl
Oworc3RhdGljIGludCBtaXNjX3JlZ2lzdGVyZWQgPSAwOworc3RhdGljIGludCBkZXZfb3BlbmVk
ID0gMDsKK3N0YXRpYyBERUNMQVJFX01VVEVYKHNlbSk7CitERUNMQVJFX1dBSVRfUVVFVUVfSEVB
RCAoIHdhaXRfb25fb3V0cHV0ICk7CisKKworc3RhdGljIGludCBzb2Z0c3ludGhfb3BlbiAoc3Ry
dWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZwKQoreworICAgICAgICBpZiAoZGV2X29w
ZW5lZCkgcmV0dXJuIC1FQlVTWTsKKwkvL2lmICgoZnAtPmZfZmxhZ3MgJiBPX0FDQ01PREUpICE9
IE9fUkRPTkxZICkgcmV0dXJuIC1FUEVSTTsKKwlkZXZfb3BlbmVkKys7CisgICAgICAgIHJldHVy
biAwOworfQorCitzdGF0aWMgaW50IHNvZnRzeW50aF9jbG9zZSAoc3RydWN0IGlub2RlICppbm9k
ZSwgc3RydWN0IGZpbGUgKmZwKQoreworICAgICAgICBmcC0+Zl9vcCA9IE5VTEw7CisJZGV2X29w
ZW5lZCA9IDA7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNvZnRzeW50aF9yZWFk
IChzdHJ1Y3QgZmlsZSAqZnAsIGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBvcykK
K3sKKwlpbnQgY2hhcnNfc2VudD0wOworCisgICAgICAgIGlmIChkb3duX2ludGVycnVwdGlibGUo
ICZzZW0gKSkgcmV0dXJuIC1FUkVTVEFSVFNZUzsKKyAgICAgICAgd2hpbGUgKHN5bnRoX2J1ZmZf
aW4gPT0gc3ludGhfYnVmZl9vdXQpIHsKKwkgIHVwICggJnNlbSApOworCSAgaWYgKGZwLT5mX2Zs
YWdzICYgT19OT05CTE9DSykKKwkgICAgcmV0dXJuIC1FQUdBSU47CisJICBpZiAod2FpdF9ldmVu
dF9pbnRlcnJ1cHRpYmxlKCB3YWl0X29uX291dHB1dCwgKHN5bnRoX2J1ZmZfaW4gPiBzeW50aF9i
dWZmX291dCkpKQorCSAgICByZXR1cm4gLUVSRVNUQVJUU1lTOworCSAgaWYgKGRvd25faW50ZXJy
dXB0aWJsZSggJnNlbSApKSByZXR1cm4gLUVSRVNUQVJUU1lTOworCX0KKworCWNoYXJzX3NlbnQg
PSAoY291bnQgPiBzeW50aF9idWZmX2luLXN5bnRoX2J1ZmZfb3V0KSAKKwkgID8gc3ludGhfYnVm
Zl9pbi1zeW50aF9idWZmX291dCA6IGNvdW50OworCWlmIChjb3B5X3RvX3VzZXIoYnVmLCAoY2hh
ciAqKSBzeW50aF9idWZmX291dCwgY2hhcnNfc2VudCkpIHsKKwkgIHVwICggJnNlbSk7CisJICBy
ZXR1cm4gLUVGQVVMVDsKKwl9CisJc3ludGhfYnVmZl9vdXQgKz0gY2hhcnNfc2VudDsKKwkqcG9z
ICs9IGNoYXJzX3NlbnQ7CisJaWYgKHN5bnRoX2J1ZmZfb3V0ID49IHN5bnRoX2J1ZmZfaW4pIHsK
KwkgIHN5bnRoX2RvbmUoKTsKKwkgICpwb3MgPSAwOworCX0KKwl1cCAoICZzZW0gKTsKKwlyZXR1
cm4gY2hhcnNfc2VudDsKK30KKworc3RhdGljIGludCBsYXN0X2luZGV4PTA7CisKK3N0YXRpYyBz
c2l6ZV90IHNvZnRzeW50aF93cml0ZSAoc3RydWN0IGZpbGUgKmZwLCBjb25zdCBjaGFyICpidWYs
IHNpemVfdCBjb3VudCwgbG9mZl90ICpwb3MpCit7CisJaW50IGk7CisJY2hhciBpbmRidWZbNV07
CisJaWYgKGRvd25faW50ZXJydXB0aWJsZSggJnNlbSkpCisJCXJldHVybiAtRVJFU1RBUlRTWVM7
CisKKwlpZiAoY29weV9mcm9tX3VzZXIoaW5kYnVmLGJ1Zixjb3VudCkpCisJeworCQl1cCgmc2Vt
KTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCXVwKCZzZW0pOworCWxhc3RfaW5kZXg9MDsKKwlm
b3IgKGk9MDtpPHN0cmxlbihpbmRidWYpO2krKykKKwkJbGFzdF9pbmRleD1sYXN0X2luZGV4KjEw
K2luZGJ1ZltpXS00ODsKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQg
c29mdHN5bnRoX3BvbGwgKHN0cnVjdCBmaWxlICpmcCwgc3RydWN0IHBvbGxfdGFibGVfc3RydWN0
ICp3YWl0KQoreworICAgICAgICBwb2xsX3dhaXQoZnAsICZ3YWl0X29uX291dHB1dCwgd2FpdCk7
CisKKwlpZiAoc3ludGhfYnVmZl9vdXQgPCBzeW50aF9idWZmX2luKQorCSAgcmV0dXJuIChQT0xM
SU4gfCBQT0xMUkROT1JNKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgCitzb2Z0c3lu
dGhfZmx1c2goIHZvaWQgKQoreworCXN5bnRoX3dyaXRlKCAiXHgxOCIsIDEgKTsKK30KKworc3Rh
dGljIHVuc2lnbmVkIGNoYXIgZ2V0X2luZGV4KCB2b2lkICkKK3sKKwlpbnQgcnY7CisJcnY9bGFz
dF9pbmRleDsKKwlsYXN0X2luZGV4PTA7CisJcmV0dXJuIHJ2OworfQorCitzdGF0aWMgc3RydWN0
IGZpbGVfb3BlcmF0aW9ucyBzb2Z0c3ludGhfZm9wcyA9IHsKKyAgICAgICAgcG9sbDpzb2Z0c3lu
dGhfcG9sbCwKKyAgICAgICAgcmVhZDpzb2Z0c3ludGhfcmVhZCwKKwl3cml0ZTpzb2Z0c3ludGhf
d3JpdGUsCisgICAgICAgIG9wZW46c29mdHN5bnRoX29wZW4sCisgICAgICAgIHJlbGVhc2U6c29m
dHN5bnRoX2Nsb3NlLAorfTsKKyAKKworc3RhdGljIGludCAKK3NvZnRzeW50aF9wcm9iZSggdm9p
ZCApCit7CisKKyAgICAgICAgaWYgKCBtaXNjX3JlZ2lzdGVyZWQgIT0gMCApIHJldHVybiAwOwor
CW1lbXNldCggJnN5bnRoX2RldmljZSwgMCwgc2l6ZW9mKCBzeW50aF9kZXZpY2UgKSApOworICAg
ICAgICBzeW50aF9kZXZpY2UubWlub3IgPSBTT0ZUU1lOVEhfTUlOT1I7CisgICAgICAgIHN5bnRo
X2RldmljZS5uYW1lID0gInNvZnRzeW50aCI7CisgICAgICAgIHN5bnRoX2RldmljZS5mb3BzID0g
JnNvZnRzeW50aF9mb3BzOworICAgICAgICBpZiAoIG1pc2NfcmVnaXN0ZXIgKCAmc3ludGhfZGV2
aWNlICkgKSB7CisJICBwcl93YXJuKCJDb3VsZG4ndCBpbml0aWFsaXplIG1pc2NkZXZpY2UgL2Rl
di9zb2Z0c3ludGguXG4iICk7CisJICByZXR1cm4gLUVOT0RFVjsKKyAgICAgICAgfQorCisgICAg
ICAgIG1pc2NfcmVnaXN0ZXJlZCA9IDE7CisJcHJfaW5mbygiaW5pdGlhbGl6ZWQgZGV2aWNlOiAv
ZGV2L3NvZnRzeW50aCwgbm9kZSAoTUFKT1IgMTAsIE1JTk9SIDI2KVxuIiApOworCXJldHVybiAw
OworfQorCitzdGF0aWMgdm9pZCAKK3NvZnRzeW50aF9yZWxlYXNlKHZvaWQpCit7CisgICAgICAg
IG1pc2NfZGVyZWdpc3RlciggJnN5bnRoX2RldmljZSApOworCW1pc2NfcmVnaXN0ZXJlZCA9IDA7
CisJcHJfaW5mbygidW5yZWdpc3RlcmVkIC9kZXYvc29mdHN5bnRoXG4iKTsKK30KKworc3RhdGlj
IHZvaWQgCitzb2Z0c3ludGhfc3RhcnQgKCB2b2lkICkKK3sKKyAgICAgICAgd2FrZV91cF9pbnRl
cnJ1cHRpYmxlICggJndhaXRfb25fb3V0cHV0ICk7Cit9CisKK3N0YXRpYyBpbnQgCitzb2Z0c3lu
dGhfaXNfYWxpdmUoIHZvaWQgKQoreworCWlmICggc3ludGhfYWxpdmUgKSByZXR1cm4gMTsKKwly
ZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgaW5pdF9zdHJpbmdbXSA9ICJcMDFAXHgw
MVx4MzF5XG4iOworCitzdGF0aWMgc3RydWN0IHN0X3N0cmluZ192YXIgc3RyaW5ndmFyc1tdID0g
eworCXsgQ0FQU19TVEFSVCwgIlx4MDErM3AiIH0sCisJeyBDQVBTX1NUT1AsICJceDAxLTNwIiB9
LAorCVZfTEFTVF9TVFJJTkcKK307CitzdGF0aWMgc3RydWN0IHN0X251bV92YXIgbnVtdmFyc1td
ID0geworCXsgUkFURSwgIlx4MDElZHMiLCA1LCAwLCA5LCAwLCAwLCAwIH0sCisJeyBQSVRDSCwg
Ilx4MDElZHAiLCA1LCAwLCA5LCAwLCAwLCAwIH0sCisJeyBWT0wsICJceDAxJWR2IiwgNSwgMCwg
OSwgMCwgMCwgMCB9LAorCXsgVE9ORSwgIlx4MDElZHgiLCAxLCAwLCAyLCAwLCAwLCAwIH0sCisJ
eyBQVU5DVCwgIlx4MDElZGIiLCA3LCAwLCAxNSwgMCwgMCwgMCB9LAorCXsgVk9JQ0UsICJceDAx
JWRvIiwgMCwgMCwgNywgMCwgMCwgMCB9LAorCXsgRlJFUSwgIlx4MDElZGYiLCA1LCAwLCA5LCAw
LCAwLCAwIH0sCisJVl9MQVNUX05VTQorfTsKKworc3RydWN0IHNwa19zeW50aCBzeW50aF9zZnRz
eW4gPSB7ICJzZnRzeW4iLCAiMC4zIiwgInNvZnR3YXJlIHN5bnRoIiwKKwlpbml0X3N0cmluZywg
MCwgMCwgMCwgMCwgMCwgMCwgU1lOVEhfQ0hFQ0ssCisJc3RyaW5ndmFycywgbnVtdmFycywgc29m
dHN5bnRoX3Byb2JlLCBzb2Z0c3ludGhfcmVsZWFzZSwgTlVMTCwKKwlOVUxMLCBzb2Z0c3ludGhf
c3RhcnQsIHNvZnRzeW50aF9mbHVzaCwgc29mdHN5bnRoX2lzX2FsaXZlLCBOVUxMLCBOVUxMLAor
CWdldF9pbmRleCwgeyJceDAxJWRpIiwxLDUsMX0gfTsKKworI2lmZGVmIE1PRFVMRQorI2luY2x1
ZGUgIm1vZF9jb2RlLmMiCisjZW5kaWYKZGlmZiAtLWV4Y2x1ZGU9Jyoub3JpZycgLS1leGNsdWRl
PScqLnBhdGNoJyAtdXJOcCBsaW51eC0yLjYuMjAvZHJpdmVycy9jaGFyL3NwZWFrdXAvc3BlYWt1
cF9zcGtvdXQuYyBsaW51eC0yLjYuMjAtc3BrL2RyaXZlcnMvY2hhci9zcGVha3VwL3NwZWFrdXBf
c3Brb3V0LmMKLS0tIGxpbnV4LTIuNi4yMC9kcml2ZXJzL2NoYXIvc3BlYWt1cC9zcGVha3VwX3Nw
a291dC5jCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKyBsaW51eC0yLjYu
MjAtc3BrL2RyaXZlcnMvY2hhci9zcGVha3VwL3NwZWFrdXBfc3Brb3V0LmMJMjAwNy0wMi0wNCAx
NjowOToyMC4wMDAwMDAwMDAgLTA1MDAKQEAgLTAsMCArMSwyMDEgQEAKKy8qCisgKiBvcmlnaW5p
YWxseSB3cml0dGVuIGJ5OiBLaXJrIFJlaXNlciA8a2lya0BicmFpbGxlLnV3by5jYT4KKyogdGhp
cyB2ZXJzaW9uIGNvbnNpZGVyYWJseSBtb2RpZmllZCBieSBEYXZpZCBCb3Jvd3NraSwgZGF2aWQ1
NzVAcm9nZXJzLmNvbQorCisJCUNvcHlyaWdodCAoQykgMTk5OC05OSAgS2lyayBSZWlzZXIuCisJ
CUNvcHlyaWdodCAoQykgMjAwMyBEYXZpZCBCb3Jvd3NraS4KKworCQlUaGlzIHByb2dyYW0gaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorCQlp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieQorCQl0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvcgorCQkoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorCisJCVRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorCQlidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorCQlNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisJCUdOVSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKwkJWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKwkJYWxvbmcgd2l0aCB0aGlz
IHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKwkJRm91bmRhdGlv
biwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEz
MDcgIFVTQQorCisgKiB0aGlzIGNvZGUgaXMgc3BlY2lmaWNseSB3cml0dGVuIGFzIGEgZHJpdmVy
IGZvciB0aGUgc3BlYWt1cCBzY3JlZW5yZXZpZXcKKyAqIHBhY2thZ2UgYW5kIGlzIG5vdCBhIGdl
bmVyYWwgZGV2aWNlIGRyaXZlci4KKwkJKi8KKyNpbmNsdWRlICJzcGtfcHJpdi5oIgorI2luY2x1
ZGUgInNlcmlhbGlvLmgiCisKKyNkZWZpbmUgTVlfU1lOVEggc3ludGhfc3Brb3V0CisjZGVmaW5l
IFNZTlRIX0NMRUFSIDB4MTgKKyNkZWZpbmUgUFJPQ1NQRUVDSCAnXHInCisKK3N0YXRpYyBpbnQg
d2FpdF9mb3JfeG1pdHIodm9pZCkKK3sKKwlzdGF0aWMgaW50IHRpbWVvdXRzID0gMDsJLyogc2Vx
dWVudGlhbCBudW1iZXIgb2YgdGltZW91dHMgKi8KKwlpbnQgY2hlY2ssIHRtb3V0ID0gU1BLX1hN
SVRSX1RJTUVPVVQ7CisJaWYgKChzeW50aF9hbGl2ZSkgJiYgKHRpbWVvdXRzID49IE5VTV9ESVNB
QkxFX1RJTUVPVVRTKSkgeworCQlzeW50aF9hbGl2ZSA9IDA7IAorCQl0aW1lb3V0cyA9IDA7CisJ
CXJldHVybiAwOyAKKwl9CisJZG8geworCQljaGVjayA9IGluYihzeW50aF9wb3J0X3R0cyArIFVB
UlRfTFNSKTsKKwkJaWYgKC0tdG1vdXQgPT0gMCkgeworCQkJcHJfd2FybigiU3BlYWtPdXQ6ICB0
aW1lZCBvdXRcbiIpOworCQkJdGltZW91dHMrKzsKKwkJCXJldHVybiAwOworCQl9CisJfSB3aGls
ZSAoKGNoZWNrICYgQk9USF9FTVBUWSkgIT0gQk9USF9FTVBUWSk7CisJdG1vdXQgPSBTUEtfWE1J
VFJfVElNRU9VVDsKKwlkbyB7CisJCWNoZWNrID0gaW5iKHN5bnRoX3BvcnRfdHRzICsgVUFSVF9N
U1IpOworCQkJCWlmICgtLXRtb3V0ID09IDApIHsKKwkJCQkJdGltZW91dHMrKzsKKwkJCQkJcmV0
dXJuIDA7CisJCQkJfQorCX0gd2hpbGUgKChjaGVjayAmIFVBUlRfTVNSX0NUUykgIT0gVUFSVF9N
U1JfQ1RTKTsKKwl0aW1lb3V0cyA9IDA7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgc3Br
X3NlcmlhbF9vdXQoY29uc3QgY2hhciBjaCkKK3sKKwlpZiAoc3ludGhfYWxpdmUgJiYgd2FpdF9m
b3JfeG1pdHIoKSkgeworCQlvdXRiKGNoLCBzeW50aF9wb3J0X3R0cyk7CisJCXJldHVybiAxOwor
CX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVuc2lnbmVkIGNoYXIgc3BrX3NlcmlhbF9pbih2
b2lkKQoreworCWludCBjLCBsc3IsIHRtb3V0ID0gU1BLX1NFUklBTF9USU1FT1VUOworCWRvIHsK
KwkJbHNyID0gaW5iKHN5bnRoX3BvcnRfdHRzICsgVUFSVF9MU1IpOworCQlpZiAoLS10bW91dCA9
PSAwKSByZXR1cm4gMHhmZjsKKwl9IHdoaWxlICghKGxzciAmIFVBUlRfTFNSX0RSKSk7CisJYyA9
IGluYihzeW50aF9wb3J0X3R0cyArIFVBUlRfUlgpOworCXJldHVybiAodW5zaWduZWQgY2hhcikg
YzsKK30KKworc3RhdGljIHZvaWQgZG9fY2F0Y2hfdXAodW5zaWduZWQgbG9uZyBkYXRhKQorewor
CXVuc2lnbmVkIGxvbmcgamlmZl9tYXggPSBqaWZmaWVzK3N5bnRoX2ppZmZ5X2RlbHRhOworCXVf
Y2hhciBjaDsKK3N5bnRoX3N0b3BfdGltZXIoKTsKKwl3aGlsZSAoc3ludGhfYnVmZl9vdXQgPCBz
eW50aF9idWZmX2luICkgeworCQljaCA9ICpzeW50aF9idWZmX291dDsKKwkJaWYgKGNoID09IDB4
MGEpIGNoID0gUFJPQ1NQRUVDSDsKKwkJaWYgKCFzcGtfc2VyaWFsX291dChjaCApKSB7CisJCQlz
eW50aF9kZWxheShzeW50aF9mdWxsX3RpbWUpOworCQkJcmV0dXJuOworCQl9CisJCXN5bnRoX2J1
ZmZfb3V0Kys7CisJCWlmIChqaWZmaWVzID49IGppZmZfbWF4ICYmIGNoID09IFNQQUNFICkgewor
CQkJc3BrX3NlcmlhbF9vdXQoUFJPQ1NQRUVDSCk7CisJCQlzeW50aF9kZWxheShzeW50aF9kZWxh
eV90aW1lKTsgCisJCQlyZXR1cm47IAorCQl9CisJfQorc3BrX3NlcmlhbF9vdXQoUFJPQ1NQRUVD
SCk7CisJc3ludGhfZG9uZSggKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKnN5bnRoX2ltbWVk
aWF0ZSAoY29uc3QgY2hhciAqYnVmICkKK3sKKwl1X2NoYXIgY2g7CisJd2hpbGUgKCAoIGNoID0g
KmJ1ZiApICkgeworCWlmIChjaCA9PSAweDBhKSBjaCA9IFBST0NTUEVFQ0g7CisgICAgICAgIGlm
ICggd2FpdF9mb3JfeG1pdHIoICkgKQorICAgICAgICAgIG91dGIoIGNoLCBzeW50aF9wb3J0X3R0
cyApOworICAgICAgICBlbHNlIHJldHVybiBidWY7CisJYnVmKys7CisJfQorCXJldHVybiAwOwor
fQorCitzdGF0aWMgdm9pZCBzeW50aF9mbHVzaCh2b2lkKQoreworCXdoaWxlICgoaW5iKHN5bnRo
X3BvcnRfdHRzICsgVUFSVF9MU1IpICYgQk9USF9FTVBUWSkgIT0gQk9USF9FTVBUWSk7CisJb3V0
YihTWU5USF9DTEVBUiwgc3ludGhfcG9ydF90dHMpOworfQorCitzdGF0aWMgdW5zaWduZWQgY2hh
ciBnZXRfaW5kZXgodm9pZCkKK3sKKwlpbnQgYywgbHNyOy8vLCB0bW91dCA9IFNQS19TRVJJQUxf
VElNRU9VVDsKKwlsc3IgPSBpbmIoIHN5bnRoX3BvcnRfdHRzICsgVUFSVF9MU1IgKTsKKwlpZiAo
ICggbHNyICYgVUFSVF9MU1JfRFIpID09IFVBUlRfTFNSX0RSICkKKwl7CisJCWMgPSBpbmIoIHN5
bnRoX3BvcnRfdHRzICsgVUFSVF9SWCApOworCQlyZXR1cm4gKCB1bnNpZ25lZCBjaGFyICkgYzsK
Kwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2VycHJvYmUoaW50IGluZGV4KQorewor
CXN0cnVjdCBzZXJpYWxfc3RhdGUgKnNlciA9IHNwa19zZXJpYWxfaW5pdChpbmRleCk7CisJaWYg
KCBzZXIgPT0gTlVMTCApIHJldHVybiAtMTsKKwkvKiBpZ25vcmUgYW55IGVycm9yIHJlc3VsdHMs
IGlmIHBvcnQgd2FzIGZvcmNlZCAqLworCWlmIChzeW50aF9wb3J0X2ZvcmNlZCkgcmV0dXJuIDA7
CisJLyogY2hlY2sgZm9yIHNwZWFrIG91dCBub3cuLi4gKi8KKwlzeW50aF9pbW1lZGlhdGUoICJc
eDA1W1x4MGZcciIgKTsKKwltZGVsYXkoIDEwICk7IC8vZmFpbGVkIHdpdGggbm8gZGVsYXkKKwlp
ZiAoc3BrX3NlcmlhbF9pbigpID09IDB4MGYpIHJldHVybiAwOworCXN5bnRoX3JlbGVhc2VfcmVn
aW9uKHNlci0+cG9ydCw4KTsKKwkJCSAgc3ludGhfYWxpdmUgPSAwOworCQkJICByZXR1cm4gLTE7
Cit9CisKK3N0YXRpYyBpbnQgc3ludGhfcHJvYmUodm9pZCkKK3sKKwlpbnQgaT0wLCBmYWlsZWQ9
MDsKKwlwcl9pbmZvKCJQcm9iaW5nIGZvciAlcy5cbiIsIHN5bnRoLT5sb25nX25hbWUpOworCWZv
ciAoaT1TUEtfTE9fVFRZOyBpIDw9IFNQS19ISV9UVFk7IGkrKykgeworCSAgaWYgKCggZmFpbGVk
ID0gc2VycHJvYmUoIGkgKSkgPT0gMCApIGJyZWFrOyAvKiBmb3VuZCBpdCAqLworICAgICAgICB9
CisgICAgICAgIGlmICggZmFpbGVkICkgeworCQlwcl9pbmZvKCIlcyBPdXQ6ICBub3QgZm91bmRc
biIsIHN5bnRoLT5sb25nX25hbWUpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJcHJfaW5mbygi
JXMgT3V0OiAgJTAzeC0lMDN4LCBEcml2ZXIgdmVyc2lvbiAlcyxcbiIsIHN5bnRoLT5sb25nX25h
bWUsCisgICBzeW50aF9wb3J0X3R0cywgc3ludGhfcG9ydF90dHMgKyA3LCBzeW50aC0+dmVyc2lv
bik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3ludGhfaXNfYWxpdmUodm9pZCkKK3sK
KwlpZiAoc3ludGhfYWxpdmUpIHJldHVybiAxOworCWlmICh3YWl0X2Zvcl94bWl0cigpID4gMCkg
eyAvKiByZXN0YXJ0ICovCisJCXN5bnRoX2FsaXZlID0gMTsKKwkJc3ludGhfd3JpdGVfc3RyaW5n
KHN5bnRoLT5pbml0ICk7CisJCXJldHVybiAyOworCX0gZWxzZSBwcl93YXJuKCIlcyBPdXQ6IGNh
bid0IHJlc3RhcnQgc3ludGhcbiIsIHN5bnRoLT5sb25nX25hbWUpOworCXJldHVybiAwOworfQor
CitzdGF0aWMgY29uc3QgY2hhciBpbml0X3N0cmluZ1tdID0gIlwwMDVXMVwwMDVJMlwwMDVDMyI7
CisKK3N0YXRpYyBzdHJ1Y3Qgc3Rfc3RyaW5nX3ZhciBzdHJpbmd2YXJzW10gPSB7CisJeyBDQVBT
X1NUQVJULCAiXHgwNVArIiB9LAorCXsgQ0FQU19TVE9QLCAiXHgwNVAtIiB9LAorCVZfTEFTVF9T
VFJJTkcKK307CitzdGF0aWMgc3RydWN0IHN0X251bV92YXIgbnVtdmFyc1tdID0geworCXsgUkFU
RSwgIlx4MDVSJWQiLCA3LCAwLCA5LCAwLCAwLCAwIH0sCisJeyBQSVRDSCwgIlx4MDVQJWQiLCAz
LCAwLCA5LCAwLCAwLCAwIH0sCisJeyBWT0wsICJceDA1ViVkIiwgOSwgMCwgOSwgMCwgMCwgMCB9
LAorCXsgVE9ORSwgIlx4MDVUJWMiLCA4LCAwLCAyNSwgNjUsIDAsIDAgfSwKKwl7IFBVTkNULCAi
XHgwNU0lYyIsIDAsIDAsIDMsIDAsIDAsICJuc21hIiB9LAorCVZfTEFTVF9OVU0KK307CisJIAor
c3RydWN0IHNwa19zeW50aCBzeW50aF9zcGtvdXQgPSB7InNwa291dCIsICIxLjEiLCAiU3BlYWtv
dXQiLAorCSBpbml0X3N0cmluZywgNTAwLCA1MCwgNTAsIDUwMDAsIDAsIDAsIFNZTlRIX0NIRUNL
LAorCXN0cmluZ3ZhcnMsIG51bXZhcnMsIHN5bnRoX3Byb2JlLCBzcGtfc2VyaWFsX3JlbGVhc2Us
IHN5bnRoX2ltbWVkaWF0ZSwKKwlkb19jYXRjaF91cCwgTlVMTCwgc3ludGhfZmx1c2gsIHN5bnRo
X2lzX2FsaXZlLCBOVUxMLCBOVUxMLCAKKwlnZXRfaW5kZXgsIHsiXHgwNVslYyIsMSw1LDF9IH07
CisKKyNpZmRlZiBNT0RVTEUKKyNpbmNsdWRlICJtb2RfY29kZS5jIgorI2VuZGlmCmRpZmYgLS1l
eGNsdWRlPScqLm9yaWcnIC0tZXhjbHVkZT0nKi5wYXRjaCcgLXVyTnAgbGludXgtMi42LjIwL2Ry
aXZlcnMvY2hhci9zcGVha3VwL3NwZWFrdXBfdHhwcnQuYyBsaW51eC0yLjYuMjAtc3BrL2RyaXZl
cnMvY2hhci9zcGVha3VwL3NwZWFrdXBfdHhwcnQuYwotLS0gbGludXgtMi42LjIwL2RyaXZlcnMv
Y2hhci9zcGVha3VwL3NwZWFrdXBfdHhwcnQuYwkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAw
MCAtMDUwMAorKysgbGludXgtMi42LjIwLXNway9kcml2ZXJzL2NoYXIvc3BlYWt1cC9zcGVha3Vw
X3R4cHJ0LmMJMjAwNy0wMi0wNCAxNjowOToyMC4wMDAwMDAwMDAgLTA1MDAKQEAgLTAsMCArMSwx
OTYgQEAKKy8qCisgKiBvcmlnaW5pYWxseSB3cml0dGVuIGJ5OiBLaXJrIFJlaXNlciA8a2lya0Bi
cmFpbGxlLnV3by5jYT4KKyogdGhpcyB2ZXJzaW9uIGNvbnNpZGVyYWJseSBtb2RpZmllZCBieSBE
YXZpZCBCb3Jvd3NraSwgZGF2aWQ1NzVAcm9nZXJzLmNvbQorCisJCUNvcHlyaWdodCAoQykgMTk5
OC05OSAgS2lyayBSZWlzZXIuCisJCUNvcHlyaWdodCAoQykgMjAwMyBEYXZpZCBCb3Jvd3NraS4K
KworCQlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yIG1vZGlmeQorCQlpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorCQl0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorCQkoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisJCVRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorCQlidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorCQlNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisJ
CUdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKwkJWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKwkJYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUg
U29mdHdhcmUKKwkJRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAs
IEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorCisgKiB0aGlzIGNvZGUgaXMgc3BlY2lmaWNs
eSB3cml0dGVuIGFzIGEgZHJpdmVyIGZvciB0aGUgc3BlYWt1cCBzY3JlZW5yZXZpZXcKKyAqIHBh
Y2thZ2UgYW5kIGlzIG5vdCBhIGdlbmVyYWwgZGV2aWNlIGRyaXZlci4KKwkJKi8KKyNpbmNsdWRl
ICJzcGtfcHJpdi5oIgorI2luY2x1ZGUgInNlcmlhbGlvLmgiCisKKyNkZWZpbmUgTVlfU1lOVEgg
c3ludGhfdHhwcnQKKyNkZWZpbmUgRFJWX1ZFUlNJT04gIjEuMiIKKyNkZWZpbmUgU1lOVEhfQ0xF
QVIgMHgxOAorI2RlZmluZSBQUk9DU1BFRUNIICdccicgLyogcHJvY2VzcyBzcGVlY2ggY2hhciAq
LworCitzdGF0aWMgaW50IHRpbWVvdXRzID0gMDsJLyogc2VxdWVudGlhbCBudW1iZXIgb2YgdGlt
ZW91dHMgKi8KKworc3RhdGljIGludCB3YWl0X2Zvcl94bWl0ciggdm9pZCApCit7CisJaW50IGNo
ZWNrLCB0bW91dCA9IFNQS19YTUlUUl9USU1FT1VUOworCWlmICggKCBzeW50aF9hbGl2ZSApICYm
ICggdGltZW91dHMgPj0gTlVNX0RJU0FCTEVfVElNRU9VVFMgKSApIHsKKwkJc3ludGhfYWxpdmUg
PSAwOyAKKwkJdGltZW91dHMgPSAwOworCQlyZXR1cm4gMDsgCisJfQorCWRvIHsKKwkJY2hlY2sg
PSBpbmIoIHN5bnRoX3BvcnRfdHRzICsgVUFSVF9MU1IgKTsKKwkJaWYgKCAtLXRtb3V0ID09IDAg
KSB7CisJCQlwcl93YXJuKCAiVFhQUlQ6ICB0aW1lZCBvdXRcbiIgKTsKKwkJCXRpbWVvdXRzKys7
CisJCQlyZXR1cm4gMDsKKwkJfQorCX0gd2hpbGUgKCAoIGNoZWNrICYgQk9USF9FTVBUWSApICE9
IEJPVEhfRU1QVFkgKTsKKwl0bW91dCA9IFNQS19YTUlUUl9USU1FT1VUOworCWRvIHsKKwkJY2hl
Y2sgPSBpbmIoIHN5bnRoX3BvcnRfdHRzICsgVUFSVF9NU1IgKTsKKwkJCQlpZiAoIC0tdG1vdXQg
PT0gMCApIHsKKwkJCQkJdGltZW91dHMrKzsKKwkJCQkJcmV0dXJuIDA7CisJCQkJfQorCX0gd2hp
bGUgKCAoIGNoZWNrICYgVUFSVF9NU1JfQ1RTICkgIT0gVUFSVF9NU1JfQ1RTICk7CisJdGltZW91
dHMgPSAwOworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IHNwa19zZXJpYWxfb3V0KCBjb25z
dCBjaGFyIGNoICkKK3sKKwlpZiAoIHN5bnRoX2FsaXZlICYmIHdhaXRfZm9yX3htaXRyKCApICkg
eworCQlvdXRiKCBjaCwgc3ludGhfcG9ydF90dHMgKTsKKwkJcmV0dXJuIDE7CisJfQorCXJldHVy
biAwOworfQorCitzdGF0aWMgdW5zaWduZWQgY2hhciBzcGtfc2VyaWFsX2luKCB2b2lkICkKK3sK
KwlpbnQgYywgbHNyLCB0bW91dCA9IFNQS19TRVJJQUxfVElNRU9VVDsKKwlkbyB7CisJCWxzciA9
IGluYiggc3ludGhfcG9ydF90dHMgKyBVQVJUX0xTUiApOworCQlpZiAoIC0tdG1vdXQgPT0gMCAp
IHJldHVybiAweGZmOworCX0gd2hpbGUgKCAhKCBsc3IgJiBVQVJUX0xTUl9EUiApICk7CisJYyA9
IGluYiggc3ludGhfcG9ydF90dHMgKyBVQVJUX1JYICk7CisJcmV0dXJuICggdW5zaWduZWQgY2hh
ciApIGM7Cit9CisKK3N0YXRpYyB2b2lkIGRvX2NhdGNoX3VwKCB1bnNpZ25lZCBsb25nIGRhdGEg
KQoreworCXVuc2lnbmVkIGxvbmcgamlmZl9tYXggPSBqaWZmaWVzK3N5bnRoX2ppZmZ5X2RlbHRh
OworCXVfY2hhciBjaDsKKwkKKwlzeW50aF9zdG9wX3RpbWVyKCApOworCXdoaWxlICggc3ludGhf
YnVmZl9vdXQgPCBzeW50aF9idWZmX2luICkgeworCQljaCA9ICpzeW50aF9idWZmX291dDsKKwkJ
aWYgKCBjaCA9PSAnXG4nICkgY2ggPSBQUk9DU1BFRUNIOworCQlpZiAoICFzcGtfc2VyaWFsX291
dCggY2ggKSApIHsKKwkJCXN5bnRoX2RlbGF5KCBzeW50aF9mdWxsX3RpbWUgKTsKKwkJCXJldHVy
bjsKKwkJfQorCQlzeW50aF9idWZmX291dCsrOworCQlpZiAoIGppZmZpZXMgPj0gamlmZl9tYXgg
JiYgY2ggPT0gJyAnICkgeyAKKwkJCXNwa19zZXJpYWxfb3V0KCBQUk9DU1BFRUNIICk7CisJCQlz
eW50aF9kZWxheSggc3ludGhfZGVsYXlfdGltZSApOworCQkJcmV0dXJuOyAKKwkJfQorCX0KKwlz
cGtfc2VyaWFsX291dCggUFJPQ1NQRUVDSCApOworCXN5bnRoX2RvbmUoICk7Cit9CisKK3N0YXRp
YyBjb25zdCBjaGFyICpzeW50aF9pbW1lZGlhdGUgKCBjb25zdCBjaGFyICpidWYgKQoreworCXVf
Y2hhciBjaDsKKwl3aGlsZSAoICggY2ggPSAqYnVmICkgKSB7CisJaWYgKCBjaCA9PSAweDBhICkg
Y2ggPSBQUk9DU1BFRUNIOworICAgICAgICBpZiAoIHdhaXRfZm9yX3htaXRyKCApICkKKwkgIG91
dGIoIGNoLCBzeW50aF9wb3J0X3R0cyApOworCWVsc2UgcmV0dXJuIGJ1ZjsKKwlidWYrKzsKKwl9
CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHN5bnRoX2ZsdXNoICggdm9pZCApCit7CisJ
c3BrX3NlcmlhbF9vdXQgKCBTWU5USF9DTEVBUiApOworfQorCitzdGF0aWMgaW50IHNlcnByb2Jl
KCBpbnQgaW5kZXggKQoreworCXVfY2hhciB0ZXN0PTA7CisJc3RydWN0IHNlcmlhbF9zdGF0ZSAq
c2VyID0gc3BrX3NlcmlhbF9pbml0KCBpbmRleCApOworCWlmICggc2VyID09IE5VTEwgKSByZXR1
cm4gLTE7CisJaWYgKCBzeW50aF9wb3J0X2ZvcmNlZCApIHJldHVybiAwOworCS8qIGNoZWNrIGZv
ciB0eHBydCBub3cuLi4gKi8KKwlpZiAoc3ludGhfaW1tZWRpYXRlKCAiXHgwNSQiICkpCisJICBw
cl93YXJuKCJzeW50aF9pbW1lZGlhdGUgY291bGQgbm90IHVubG9hZFxuIik7CisJaWYgKHN5bnRo
X2ltbWVkaWF0ZSggIlx4MDVJayIgKSkKKwkgIHByX3dhcm4oInN5bnRoX2ltbWVkaWF0ZSBjb3Vs
ZCBub3QgdW5sb2FkIGFnYWluXG4iKTsKKwlpZiAoc3ludGhfaW1tZWRpYXRlKCAiXHgwNVFcciIg
KSkKKwkgIHByX3dhcm4oInN5bnRoX2ltbWVkaWF0ZSBjb3VsZCBub3QgdW5sb2FkIGEgdGhpcmQg
dGltZVxuIik7CisJaWYgKCAoIHRlc3QgPSBzcGtfc2VyaWFsX2luKCApICkgPT0gJ2snICkgcmV0
dXJuIDA7CisJZWxzZSBwcl93YXJuKCAic3ludGggcmV0dXJuZWQgJXggb24gcG9ydCAlMDNseFxu
IiwgdGVzdCwgc2VyLT5wb3J0ICk7CisJc3ludGhfcmVsZWFzZV9yZWdpb24oIHNlci0+cG9ydCw4
ICk7CisJdGltZW91dHMgPSBzeW50aF9hbGl2ZSA9IDA7CisJCQkgIHJldHVybiAtMTsKK30KKwor
c3RhdGljIGludCBzeW50aF9wcm9iZSggdm9pZCApCit7CisJaW50IGksIGZhaWxlZD0wOworCXBy
X2luZm8oICJQcm9iaW5nIGZvciAlcy5cbiIsIHN5bnRoLT5sb25nX25hbWUgKTsKKwlmb3IgKCBp
PVNQS19MT19UVFk7IGkgPD0gU1BLX0hJX1RUWTsgaSsrICkgeworCQlpZiAoKCBmYWlsZWQgPSBz
ZXJwcm9iZSggaSApKSA9PSAwICkgYnJlYWs7IC8qIGZvdW5kIGl0ICovCisJfQorCWlmICggZmFp
bGVkICkgeworCQlwcl9pbmZvKCAiJXM6ICBub3QgZm91bmRcbiIsIHN5bnRoLT5sb25nX25hbWUg
KTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCXByX2luZm8oICIlczogJTAzeC0lMDN4Li5cbiIs
IHN5bnRoLT5sb25nX25hbWUsIChpbnQpIHN5bnRoX3BvcnRfdHRzLCAoaW50KSBzeW50aF9wb3J0
X3R0cys3ICk7CisJcHJfaW5mbyggIiVzOiBkcml2ZXIgdmVyc2lvbiAlcy5cbiIsICBzeW50aC0+
bG9uZ19uYW1lLCBzeW50aC0+dmVyc2lvbik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQg
c3ludGhfaXNfYWxpdmUoIHZvaWQgKQoreworCWlmICggc3ludGhfYWxpdmUgKSByZXR1cm4gMTsK
KwlpZiAoIHdhaXRfZm9yX3htaXRyKCApID4gMCApIHsgLyogcmVzdGFydCAqLworCQlzeW50aF9h
bGl2ZSA9IDE7CisJCXN5bnRoX3dyaXRlX3N0cmluZyggc3ludGgtPmluaXQgKTsKKwkJcmV0dXJu
IDI7CisJfQorCXByX3dhcm4oICIlczogY2FuJ3QgcmVzdGFydCBzeW50aFxuIiwgc3ludGgtPmxv
bmdfbmFtZSApOworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3QgY2hhciBpbml0X3N0cmlu
Z1tdID0gIlx4MDVOMSI7CisKK3N0YXRpYyBzdHJ1Y3Qgc3Rfc3RyaW5nX3ZhciBzdHJpbmd2YXJz
W10gPSB7CisJeyBDQVBTX1NUQVJULCAiXHgwNVA4IiB9LAorCXsgQ0FQU19TVE9QLCAiXHgwNVA1
IiB9LAorCVZfTEFTVF9TVFJJTkcKK307CitzdGF0aWMgc3RydWN0IHN0X251bV92YXIgbnVtdmFy
c1tdID0geworCXsgUkFURSwgIlx4MDVSJWQiLCA1LCAwLCA5LCAwLCAwLCAwIH0sCisJeyBQSVRD
SCwgIlx4MDVQJWQiLCA1LCAwLCA5LCAwLCAwLCAwIH0sCisJeyBWT0wsICJceDA1ViVkIiwgNSwg
MCwgOSwgMCwgMCwgMCB9LAorCXsgVE9ORSwgIlx4MDVUJWMiLCAxMiwgMCwgMjUsIDYxLCAwLCAw
IH0sCisJVl9MQVNUX05VTQorCSB9OworCitzdHJ1Y3Qgc3BrX3N5bnRoIHN5bnRoX3R4cHJ0ID0g
eyJ0eHBydCIsIERSVl9WRVJTSU9OLCAiVHJhbnNwb3J0IiwKKwlpbml0X3N0cmluZywgNTAwLCA1
MCwgNTAsIDUwMDAsIDAsIDAsIFNZTlRIX0NIRUNLLAorCXN0cmluZ3ZhcnMsIG51bXZhcnMsIHN5
bnRoX3Byb2JlLCBzcGtfc2VyaWFsX3JlbGVhc2UsIHN5bnRoX2ltbWVkaWF0ZSwKKwlkb19jYXRj
aF91cCwgTlVMTCwgc3ludGhfZmx1c2gsIHN5bnRoX2lzX2FsaXZlLCBOVUxMLCBOVUxMLCBOVUxM
LAorCXtOVUxMLDAsMCwwfSB9OworCisjaWZkZWYgTU9EVUxFCisjaW5jbHVkZSAibW9kX2NvZGUu
YyIKKyNlbmRpZgpkaWZmIC0tZXhjbHVkZT0nKi5vcmlnJyAtLWV4Y2x1ZGU9JyoucGF0Y2gnIC11
ck5wIGxpbnV4LTIuNi4yMC9kcml2ZXJzL2NoYXIvc3BlYWt1cC9zcGtfY29uX21vZHVsZS5oIGxp
bnV4LTIuNi4yMC1zcGsvZHJpdmVycy9jaGFyL3NwZWFrdXAvc3BrX2Nvbl9tb2R1bGUuaAotLS0g
bGludXgtMi42LjIwL2RyaXZlcnMvY2hhci9zcGVha3VwL3Nwa19jb25fbW9kdWxlLmgJMTk2OS0x
Mi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrIGxpbnV4LTIuNi4yMC1zcGsvZHJpdmVy
cy9jaGFyL3NwZWFrdXAvc3BrX2Nvbl9tb2R1bGUuaAkyMDA3LTAyLTA0IDE2OjA5OjIwLjAwMDAw
MDAwMCAtMDUwMApAQCAtMCwwICsxLDQzIEBACisvKiB3cml0dGVuIGJieSBEYXZpZCBCb3Jvd3Nr
aS4KKyAgICBDb3B5cmlnaHQgKEMgKSAyMDAzICBEYXZpZCBCb3Jvd3NraS4KKworICAgIFRoaXMg
cHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3Ig
bW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlv
biApIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
CisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAg
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8g
dGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2Us
IFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisqLworCisvKiBpbmNsdWRl
ZCBieSAuLi9jb25zb2xlLmMgZm9yIHNwZWFrdXAgbW9kdWxhcml6YXRpb24gKi8KKworc3RhdGlj
IHNwa19jb25fZnVuYyBhZGRyX3Nwa19hbGxvY2F0ZSA9IE5VTEw7CitzdGF0aWMgc3BrX2Nvbl9m
dW5jIGFkZHJfc3BrX2JzID0gTlVMTDsKK3N0YXRpYyBzcGtfd3JpdGVfZnVuYyBhZGRyX3Nwa19j
b25fd3JpdGUgPSBOVUxMOworc3RhdGljIHNwa19jb25fZnVuYyBhZGRyX3Nwa19jb25fdXBkYXRl
ID0gTlVMTDsKKworI2RlZmluZSBzcGVha3VwX2FsbG9jYXRlKGMpIGlmIChhZGRyX3Nwa19hbGxv
Y2F0ZSkgKCphZGRyX3Nwa19hbGxvY2F0ZSkoYykKKyNkZWZpbmUgc3BlYWt1cF9icyhjKSBpZiAo
YWRkcl9zcGtfYnMpICgqYWRkcl9zcGtfYnMpKGMpCisjZGVmaW5lIHNwZWFrdXBfY29uX3dyaXRl
KGMscyxsKSBpZiAoYWRkcl9zcGtfY29uX3dyaXRlKSAoKmFkZHJfc3BrX2Nvbl93cml0ZSkoYyxz
LGwpCisjZGVmaW5lIHNwZWFrdXBfY29uX3VwZGF0ZShjKSBpZiAoYWRkcl9zcGtfY29uX3VwZGF0
ZSkgKCphZGRyX3Nwa19jb25fdXBkYXRlKShjKQorCitleHRlcm4gc3BrX2tleV9mdW5jIGFkZHJf
c3BrX2tleTsKKwordm9pZCBzcGVha3VwX3NldF9hZGRyZXNzZXMoIHNwa19jb25fZnVuYyBhbGxv
Y2F0ZSwgc3BrX2Nvbl9mdW5jIGJzLAorCXNwa193cml0ZV9mdW5jIGNvbl93cml0ZSwgc3BrX2Nv
bl9mdW5jIGNvbl91cGRhdGUsIHNwa19rZXlfZnVuYyBrZXkgKQoreworCWFkZHJfc3BrX2FsbG9j
YXRlID0gYWxsb2NhdGU7CisJYWRkcl9zcGtfYnMgPSBiczsKKwlhZGRyX3Nwa19jb25fd3JpdGUg
PSBjb25fd3JpdGU7CisJYWRkcl9zcGtfY29uX3VwZGF0ZSA9IGNvbl91cGRhdGU7CisJYWRkcl9z
cGtfa2V5ID0ga2V5OworfQorCitFWFBPUlRfU1lNQk9MX0dQTChzcGVha3VwX3NldF9hZGRyZXNz
ZXMpOwpkaWZmIC0tZXhjbHVkZT0nKi5vcmlnJyAtLWV4Y2x1ZGU9JyoucGF0Y2gnIC11ck5wIGxp
bnV4LTIuNi4yMC9kcml2ZXJzL2NoYXIvc3BlYWt1cC9zcGtfcHJpdi5oIGxpbnV4LTIuNi4yMC1z
cGsvZHJpdmVycy9jaGFyL3NwZWFrdXAvc3BrX3ByaXYuaAotLS0gbGludXgtMi42LjIwL2RyaXZl
cnMvY2hhci9zcGVha3VwL3Nwa19wcml2LmgJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAg
LTA1MDAKKysrIGxpbnV4LTIuNi4yMC1zcGsvZHJpdmVycy9jaGFyL3NwZWFrdXAvc3BrX3ByaXYu
aAkyMDA3LTAyLTA0IDE2OjA5OjIwLjAwMDAwMDAwMCAtMDUwMApAQCAtMCwwICsxLDI2MiBAQAor
Lyogc3BrX3ByaXYuaAorICAgcmV2aWV3IGZ1bmN0aW9ucyBmb3IgdGhlIHNwZWFrdXAgc2NyZWVu
IHJldmlldyBwYWNrYWdlLgorICAgb3JpZ2luYWxseSB3cml0dGVuIGJ5OiBLaXJrIFJlaXNlciBh
bmQgQW5keSBCZXJkYW4uCisKKyAgZXh0ZW5zaXZlbHkgbW9kaWZpZWQgYnkgRGF2aWQgQm9yb3dz
a2kuCisKKyAgICBDb3B5cmlnaHQgKEMgKSAxOTk4ICBLaXJrIFJlaXNlci4KKyAgICBDb3B5cmln
aHQgKEMgKSAyMDAzICBEYXZpZCBCb3Jvd3NraS4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbiApIGFueSBsYXRlciB2
ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAg
YWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdh
cmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9z
dG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisqLworI2lmbmRlZiBfX1NQRUFLVVBfUFJJVkFURV9I
CisjZGVmaW5lIF9fU1BFQUtVUF9QUklWQVRFX0gKKworI2RlZmluZSBLRVJORUwKKyNpbmNsdWRl
IDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxs
aW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+
CQkvKiBmb3IgaW5iX3AsIG91dGJfcCwgaW5iLCBvdXRiLCBldGMuLi4gKi8KKyNpbmNsdWRlIDxs
aW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4JCS8qIGZvciB3YWl0X3F1ZXVl
ICovCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPiAvKiBmb3IgX19pbml0ICovCisjaW5jbHVkZSA8
bGludXgvbW9kdWxlLmg+CisjaWZkZWYgQ09ORklHX1BST0NfRlMKKyNpbmNsdWRlIDxsaW51eC9w
cm9jX2ZzLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxsaW51eC9zcGVha3VwLmg+CisjaW5jbHVkZSAi
a2V5aW5mby5oIgorCisjZGVmaW5lIFNISUZUX1RCTF9TSVpFIDY0CisvKiBwcm9jIHBlcm1pc3Np
b25zICovCisjZGVmaW5lIFVTRVJfUiAoIFNfSUZSRUd8U19JUlVHTyApCisjZGVmaW5lIFVTRVJf
VyAoIFNfSUZSRUd8U19JV1VHTyApCisjZGVmaW5lIFVTRVJfUlcgKCBTX0lGUkVHfFNfSVJVR098
U19JV1VHTyApCisjZGVmaW5lIFJPT1RfVyAoIFNfSUZSRUd8U19JUlVHT3xTX0lXVVNSICkKKwor
I2RlZmluZSBWX0xBU1RfU1RSSU5HIHsgLTEsIDAgfQorI2RlZmluZSBWX0xBU1RfTlVNIHsgLTEs
IDAsIDAsIDAsIDAsIDAsIDAsIDAgfQorI2RlZmluZSBUT0dHTEVfMCAwLCAwLCAwLCAxLCAwLCAw
LCAwCisjZGVmaW5lIFRPR0dMRV8xIDAsIDEsIDAsIDEsIDAsIDAsIDAKKyNkZWZpbmUgTUFYVkFS
TEVOIDE1CisjZGVmaW5lIFRBQiAweDkKKyNkZWZpbmUgU1BBQ0UgMHgyMAorI2RlZmluZSBDQVBf
QSAnQScKKyNkZWZpbmUgQ0FQX1ogJ1onCisjZGVmaW5lIFNZTlRIX09LIDB4MDAwMQorI2RlZmlu
ZSBCX0FMUEhBIDB4MDAwMgorI2RlZmluZSBBTFBIQSAweDAwMDMKKyNkZWZpbmUgQl9DQVAgMHgw
MDA0CisjZGVmaW5lIEFfQ0FQIDB4MDAwNworI2RlZmluZSBCX05VTSAweDAwMDgKKyNkZWZpbmUg
TlVNIDB4MDAwOQorI2RlZmluZSBBTFBIQU5VTSAoIEJfQUxQSEF8Ql9OVU0gKQorI2RlZmluZSBT
T01FIDB4MDAxMAorI2RlZmluZSBNT1NUIDB4MDAyMAorI2RlZmluZSBQVU5DIDB4MDA0MAorI2Rl
ZmluZSBBX1BVTkMgMHgwMDQxCisjZGVmaW5lIEJfV0RMTSAweDAwODAKKyNkZWZpbmUgV0RMTSAw
eDAwODEKKyNkZWZpbmUgQl9FWE5VTSAweDAxMDAKKyNkZWZpbmUgQ0hfUlBUIDB4MDIwMAorI2Rl
ZmluZSBCX0NUTCAweDA0MDAKKyNkZWZpbmUgQV9DVEwgKCBCX0NUTCtTWU5USF9PSyApCisjZGVm
aW5lIEJfU1lNIDB4MDgwMAorI2RlZmluZSBCX0NBUFNZTSAoIEJfQ0FQfEJfU1lNICkKKyNkZWZp
bmUgSVNfV0RMTSggeCApICggc3BrX2NoYXJ0YWJbKCAoIHVfY2hhciApeCApXSZCX1dETE0gKQor
I2RlZmluZSBJU19DSEFSKCB4LCB0eXBlICkgKCBzcGtfY2hhcnRhYlsoICggdV9jaGFyICl4ICld
JnR5cGUgKQorI2RlZmluZSBJU19UWVBFKCB4LCB0eXBlICkgKCAoc3BrX2NoYXJ0YWJbKCAoIHVf
Y2hhciApeCApXSZ0eXBlKSA9PSB0eXBlICkKKyNkZWZpbmUgU0VUX0RFRkFVTFQgLTQKKyNkZWZp
bmUgRV9SQU5HRSAtMworI2RlZmluZSBFX1RPT0xPTkcgLTIKKyNkZWZpbmUgRV9VTkRFRiAtMQor
CitlbnVtIHsKKwlWQVJfTlVNID0gMCwKKwlWQVJfVElNRSwKKwlWQVJfU1RSSU5HLAorCVZBUl9Q
Uk9DCit9OworCitlbnVtIHsKKwlFX0RFRkFVTFQgPSAwLAorCUVfU0VULAorCUVfSU5DLAorCUVf
REVDCit9OworCit0eXBlZGVmIGludCAoKnNwZWNpYWxfZnVuYykoIHN0cnVjdCB2Y19kYXRhICp2
YywgdV9jaGFyIHR5cGUsIHVfY2hhciBjaCwgdV9zaG9ydCBrZXkgKTsKKworc3RydWN0IHN0X3Zh
cl9oZWFkZXIgeworCWNoYXIgKm5hbWU7CisJc2hvcnQgdmFyX2lkLCB2YXJfdHlwZSwgcHJvY19t
b2RlOworCXZvaWQgKnByb2NfZW50cnk7CisJdm9pZCAqcF92YWw7IC8qIHB0ciB0byBwcm9ncmFt
cyB2YXJpYWJsZSB0byBzdG9yZSB2YWx1ZSAqLworCXZvaWQgKmRhdGE7IC8qIHB0ciB0byB0aGUg
dmFycyBkYXRhICovCit9OworCitzdHJ1Y3Qgc3RfbnVtX3ZhciB7CisJc2hvcnQgdmFyX2lkOwor
CWNoYXIgKnN5bnRoX2ZtdDsKKwlzaG9ydCBkZWZhdWx0X3ZhbCwgbG93LCBoaWdoOworCXNob3J0
IG9mZnNldCwgbXVsdGlwbGllcjsgLyogZm9yIGZpZGRsaW5nIHJhdGVzIGV0Yy4gKi8KKwljaGFy
ICpvdXRfc3RyOyAvKiBpZiBzeW50aCBuZWVkcyBjaGFyIHJlcHJlc2VudGF0aW9uIG9mIG51bWJl
ciAqLworCXNob3J0IHZhbHVlOyAvKiBjdXJyZW50IHZhbHVlICovCit9OworCitzdHJ1Y3Qgc3Rf
c3RyaW5nX3ZhciB7CisJc2hvcnQgdmFyX2lkOworCWNoYXIgKmRlZmF1bHRfdmFsOworfTsKKwor
c3RydWN0IHN0X3Byb2NfdmFyIHsKKwlzaG9ydCB2YXJfaWQ7CisJaW50ICgqcmVhZF9wcm9jKShj
aGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwgaW50IGNvdW50LAorCQkJIGludCAq
ZW9mLCB2b2lkICpkYXRhKTsKKwlpbnQgKCp3cml0ZV9wcm9jKShzdHJ1Y3QgZmlsZSAqZmlsZSwg
Y29uc3QgY2hhciAqYnVmZmVyLCB1X2xvbmcgY291bnQsCisJCQkgIHZvaWQgKmRhdGEpOworCXNo
b3J0IHZhbHVlOworfTsKKworc3RydWN0IHN0X2JpdHNfZGF0YSB7IC8qIHB1bmMsIHJlcGVhdHMs
IHdvcmQgZGVsaW0gYml0cyAqLworCWNoYXIgKm5hbWU7CisJY2hhciAqdmFsdWU7CisJc2hvcnQg
bWFzazsKK307CisKK2V4dGVybiBzdHJ1Y3Qgc3RfcHJvY192YXIgc3BrX3Byb2NfdmFyc1tdOwor
Y2hhciAqc3BlYWt1cF9zMmkoIGNoYXIgKiwgc2hvcnQgKiApOworaW50IHNwZWFrdXBfcmVnaXN0
ZXJfdmFyKHN0cnVjdCBzdF9udW1fdmFyICp2YXIpOworZXh0ZXJuIHN0cnVjdCBzdF92YXJfaGVh
ZGVyICpnZXRfdmFyX2hlYWRlciggc2hvcnQgdmFyX2lkICk7CitleHRlcm4gaW50IHNldF9udW1f
dmFyKHNob3J0IHZhbCwgc3RydWN0IHN0X3Zhcl9oZWFkZXIgKnZhciwgaW50IGhvdyk7CisKKyNk
ZWZpbmUgQ09MT1JfQlVGRkVSX1NJWkUgMTYwCitzdHJ1Y3Qgc3BrX2hpZ2hsaWdodF9jb2xvcl90
cmFja3sKKwl1bnNpZ25lZCBpbnQgYmdjb3VudFs4XTsJLy8gQ291bnQgb2YgZWFjaCBiYWNrZ3Jv
dW5kIGNvbG9yCisJY2hhciBoaWdoYnVmWzhdW0NPTE9SX0JVRkZFUl9TSVpFXTsJLy8gQnVmZmVy
IGZvciBjaGFyYWN0ZXJzIGRyYXduIHdpdGggZWFjaCBiYWNrZ3JvdW5kIGNvbG9yCisJdW5zaWdu
ZWQgaW50IGhpZ2hzaXplWzhdOwkvLyBDdXJyZW50IGluZGV4IGludG8gaGlnaGJ1ZgorCXVfbG9u
ZyBycG9zWzhdLHJ4WzhdLHJ5WzhdOwkvLyBSZWFkaW5nIFBvc2l0aW9uIGZvciBlYWNoIGNvbG9y
CisJdWxvbmcgY3k7CQkJLy8gUmVhbCBDdXJzb3IgWSBQb3NpdGlvbgorfTsKKworc3RydWN0IHN0
X3Nwa190IHsKKwl1X2xvbmcgcmVhZGluZ194LCBjdXJzb3JfeDsKKwl1X2xvbmcgcmVhZGluZ195
LCBjdXJzb3JfeTsKKwl1X2xvbmcgcmVhZGluZ19wb3MsIGN1cnNvcl9wb3M7CisJdV9sb25nIGdv
X3gsIGdvX3BvczsKKwl1X2xvbmcgd190b3AsIHdfYm90dG9tLCB3X2xlZnQsIHdfcmlnaHQ7CisJ
dV9jaGFyIHdfc3RhcnQsIHdfZW5hYmxlZDsKKwl1X2NoYXIgcmVhZGluZ19hdHRyLCBvbGRfYXR0
cjsKKwljaGFyIHBhcmtlZCwgc2h1dF91cDsKKwlzdHJ1Y3Qgc3BrX2hpZ2hsaWdodF9jb2xvcl90
cmFjayBodDsKK307CisKKy8qIG5vdyBzb21lIGRlZmluZXMgdG8gbWFrZSB0aGVzZSBlYXNpZXIg
dG8gdXNlLiAqLworI2RlZmluZSBzcGtfc2h1dF91cCBzcGVha3VwX2NvbnNvbGVbdmMtPnZjX251
bV0tPnNodXRfdXAKKyNkZWZpbmUgc3BrX2tpbGxlZCAoIHNwZWFrdXBfY29uc29sZVt2Yy0+dmNf
bnVtXS0+c2h1dF91cCAmIDB4NDAgKQorI2RlZmluZSBzcGtfeCBzcGVha3VwX2NvbnNvbGVbdmMt
PnZjX251bV0tPnJlYWRpbmdfeAorI2RlZmluZSBzcGtfY3ggc3BlYWt1cF9jb25zb2xlW3ZjLT52
Y19udW1dLT5jdXJzb3JfeAorI2RlZmluZSBzcGtfeSBzcGVha3VwX2NvbnNvbGVbdmMtPnZjX251
bV0tPnJlYWRpbmdfeQorI2RlZmluZSBzcGtfY3kgc3BlYWt1cF9jb25zb2xlW3ZjLT52Y19udW1d
LT5jdXJzb3JfeQorI2RlZmluZSBzcGtfcG9zICggc3BlYWt1cF9jb25zb2xlW3ZjLT52Y19udW1d
LT5yZWFkaW5nX3BvcyApCisjZGVmaW5lIHNwa19jcCBzcGVha3VwX2NvbnNvbGVbdmMtPnZjX251
bV0tPmN1cnNvcl9wb3MKKyNkZWZpbmUgZ290b19wb3MgKCBzcGVha3VwX2NvbnNvbGVbdmMtPnZj
X251bV0tPmdvX3BvcyApCisjZGVmaW5lIGdvdG9feCAoIHNwZWFrdXBfY29uc29sZVt2Yy0+dmNf
bnVtXS0+Z29feCApCisjZGVmaW5lIHdpbl90b3AgKCBzcGVha3VwX2NvbnNvbGVbdmMtPnZjX251
bV0tPndfdG9wICkKKyNkZWZpbmUgd2luX2JvdHRvbSAoIHNwZWFrdXBfY29uc29sZVt2Yy0+dmNf
bnVtXS0+d19ib3R0b20gKQorI2RlZmluZSB3aW5fbGVmdCAoIHNwZWFrdXBfY29uc29sZVt2Yy0+
dmNfbnVtXS0+d19sZWZ0ICkKKyNkZWZpbmUgd2luX3JpZ2h0ICggc3BlYWt1cF9jb25zb2xlW3Zj
LT52Y19udW1dLT53X3JpZ2h0ICkKKyNkZWZpbmUgd2luX3N0YXJ0ICggc3BlYWt1cF9jb25zb2xl
W3ZjLT52Y19udW1dLT53X3N0YXJ0ICkKKyNkZWZpbmUgd2luX2VuYWJsZWQgKCBzcGVha3VwX2Nv
bnNvbGVbdmMtPnZjX251bV0tPndfZW5hYmxlZCApCisjZGVmaW5lIHNwa19hdHRyIHNwZWFrdXBf
Y29uc29sZVt2Yy0+dmNfbnVtXS0+cmVhZGluZ19hdHRyCisjZGVmaW5lIHNwa19vbGRfYXR0ciBz
cGVha3VwX2NvbnNvbGVbdmMtPnZjX251bV0tPm9sZF9hdHRyCisjZGVmaW5lIHNwa19wYXJrZWQg
c3BlYWt1cF9jb25zb2xlW3ZjLT52Y19udW1dLT5wYXJrZWQKKyNkZWZpbmUgU1lOVEhfQ0hFQ0sg
MjAwMzA3MTYgLyogdG9kYXkncyBkYXRlIG91Z2h0IHRvIGRvIGZvciBjaGVjayB2YWx1ZSAqLwor
Lyogc3ludGggZmxhZ3MsIGZvciBvZGQgc3ludGhzICovCisjZGVmaW5lIFNGX0RFQyAxIC8qIHRv
IGZpZGRsZSBwdW5jcyBpbiBhbHBoYSBzdHJpbmdzIHNvIGl0IGRvZXNuJ3Qgc3BlbGwgKi8KKwor
c3RydWN0IHN5bnRoX2luZGV4aW5nIHsKKwljaGFyICpjb21tYW5kOworCXVuc2lnbmVkIGNoYXIg
bG93aW5kZXg7CisJdW5zaWduZWQgY2hhciBoaWdoaW5kZXg7CisJdW5zaWduZWQgY2hhciBjdXJy
aW5kZXg7Cit9OworCitzdHJ1Y3Qgc3BrX3N5bnRoIHsKKwljb25zdCBjaGFyICpuYW1lOworCWNv
bnN0IGNoYXIgKnZlcnNpb247CisJY29uc3QgY2hhciAqbG9uZ19uYW1lOworCWNvbnN0IGNoYXIg
KmluaXQ7CisJc2hvcnQgZGVsYXksIHRyaWdnZXIsIGppZmZpZXMsIGZ1bGwsIGZsdXNoX3dhaXQs
IGZsYWdzOworCWNvbnN0IGludCBjaGVja3ZhbDsgLyogZm9yIHZhbGlkYXRpbmcgYSBwcm9wZXIg
c3ludGggbW9kdWxlICovCisJc3RydWN0IHN0X3N0cmluZ192YXIgKnN0cmluZ192YXJzOworCXN0
cnVjdCBzdF9udW1fdmFyICpudW1fdmFyczsKKwlpbnQgKCAqcHJvYmUgKSggdm9pZCApOworCXZv
aWQgKCAqcmVsZWFzZSApKCB2b2lkICk7CisJY29uc3QgY2hhciAqKCAqc3ludGhfaW1tZWRpYXRl
ICkoIGNvbnN0IGNoYXIgKmJ1ZmYgKTsKKwl2b2lkICggKmNhdGNoX3VwICkoIHVfbG9uZyBkYXRh
ICk7CisJdm9pZCAoICpzdGFydCApKCB2b2lkICk7CisJdm9pZCAoICpmbHVzaCApKCB2b2lkICk7
CisJaW50ICggKmlzX2FsaXZlICkoIHZvaWQgKTsKKwlpbnQgKCpzeW50aF9hZGp1c3QpKHN0cnVj
dCBzdF92YXJfaGVhZGVyICp2YXIpOworCXZvaWQgKCAqcmVhZF9idWZmX2FkZCApKHVfY2hhcik7
CisJdW5zaWduZWQgY2hhciAoICpnZXRfaW5kZXggKSggdm9pZCApOworCXN0cnVjdCBzeW50aF9p
bmRleGluZyBpbmRleGluZzsKK307CisKK2V4dGVybiBzdHJ1Y3Qgc3BrX3N5bnRoICpzeW50aDsK
K2ludCBzeW50aF9yZXF1ZXN0X3JlZ2lvbiggdV9sb25nLCB1X2xvbmcgKTsKK2ludCBzeW50aF9y
ZWxlYXNlX3JlZ2lvbiggdV9sb25nLCB1X2xvbmcgKTsKK3ZvaWQgc3BrX3NlcmlhbF9yZWxlYXNl
KCB2b2lkICk7CitleHRlcm4gaW50IHN5bnRoX3BvcnRfdHRzLCBzeW50aF9wb3J0X2ZvcmNlZDsK
KyNkZWZpbmUgZGVjbGFyZV90aW1lciggbmFtZSApIHN0cnVjdCB0aW1lcl9saXN0IG5hbWU7Cisj
ZGVmaW5lIHN0YXJ0X3RpbWVyKCBuYW1lICkgaWYgKCAhIG5hbWUuZW50cnkucHJldiApIGFkZF90
aW1lciAoICYgbmFtZSApCisjZGVmaW5lIHN0b3BfdGltZXIoIG5hbWUgKSBkZWxfdGltZXIgKCAm
IG5hbWUgKTsgbmFtZS5lbnRyeS5wcmV2ID0gTlVMTAorI2RlZmluZSBkZWNsYXJlX3NsZWVwZXIo
IG5hbWUgKSB3YWl0X3F1ZXVlX2hlYWRfdCBuYW1lCisjZGVmaW5lIGluaXRfc2xlZXBlciggbmFt
ZSApIAlpbml0X3dhaXRxdWV1ZV9oZWFkICggJm5hbWUgKQorZXh0ZXJuIGRlY2xhcmVfc2xlZXBl
ciggc3ludGhfc2xlZXBpbmdfbGlzdCApOworZXh0ZXJuIGNoYXIgc3RyX2NhcHNfc3RhcnRbXSwg
c3RyX2NhcHNfc3RvcFtdOworZXh0ZXJuIHNob3J0IG5vX2ludHIsIHNheV9jdHJsLCBzYXlfd29y
ZF9jdGwsIHB1bmNfbGV2ZWw7CitleHRlcm4gc2hvcnQgcmVhZGluZ19wdW5jLCBhdHRyaWJfYmxl
ZXAsIGJsZWVwczsKK2V4dGVybiBzaG9ydCBibGVlcF90aW1lLCBiZWxsX3BvczsKK2V4dGVybiBz
aG9ydCBzcGVsbF9kZWxheSwga2V5X2VjaG8sIHB1bmNfbWFzazsKK2V4dGVybiBzaG9ydCBzeW50
aF9qaWZmeV9kZWx0YSwgc3ludGhfZGVsYXlfdGltZTsKK2V4dGVybiBzaG9ydCBzeW50aF90cmln
Z2VyX3RpbWUsIHN5bnRoX2Z1bGxfdGltZTsKK2V4dGVybiBzaG9ydCBjdXJzb3JfdGltZW91dCwg
cGl0Y2hfc2hpZnQsIHN5bnRoX2ZsYWdzOworZXh0ZXJuIGludCBzeW50aF9hbGl2ZSwgcXVpZXRf
Ym9vdDsKK2V4dGVybiB1X2NoYXIgc3ludGhfYnVmZmVyW107ICAvKiBndWVzcyB3aGF0IHRoaXMg
aXMgZm9yISAqLworZXh0ZXJuIHZvbGF0aWxlIHVfY2hhciAqc3ludGhfYnVmZl9pbiwgKnN5bnRo
X2J1ZmZfb3V0OworaW50IHN5bnRoX2luaXQoIGNoYXIgKm5hbWUgKTsKK2ludCBkb19zeW50aF9p
bml0KCBzdHJ1Y3Qgc3BrX3N5bnRoICppbl9zeW50aCApOwordm9pZCBzeW50aF9yZWxlYXNlKCB2
b2lkICk7Cit2b2lkIHN5bnRoX2FkZCggc3RydWN0IHNwa19zeW50aCAqaW5fc3ludGggKTsKK3Zv
aWQgc3ludGhfcmVtb3ZlKCBzdHJ1Y3Qgc3BrX3N5bnRoICppbl9zeW50aCApOworc3RydWN0IHNl
cmlhbF9zdGF0ZSAqIHNwa19zZXJpYWxfaW5pdCggaW50IGluZGV4ICk7Cit2b2lkIHN5bnRoX2Rl
bGF5KCBpbnQgbXMgKTsKK3ZvaWQgc3ludGhfc3RvcF90aW1lciggdm9pZCApOworaW50IHN5bnRo
X2RvbmUoIHZvaWQgKTsKK3ZvaWQgZG9fZmx1c2goIHZvaWQgKTsKK3ZvaWQgc3ludGhfYnVmZmVy
X2FkZCggY2hhciBjaCApOwordm9pZCBzeW50aF93cml0ZSggY29uc3QgY2hhciAqYnVmLCBzaXpl
X3QgY291bnQgKTsKK3ZvaWQgc3ludGhfd3JpdGVfc3RyaW5nKCBjb25zdCBjaGFyICpidWYgKTsK
K3ZvaWQgc3ludGhfd3JpdGVfbXNnKCBjb25zdCBjaGFyICpidWYgKTsKK2ludCBzeW50aF9zdXBw
b3J0c19pbmRleGluZyggdm9pZCApOworCisjaWZuZGVmIHByX3dhcm4KKyNkZWZpbmUgcHJfd2Fy
bihmbXQsYXJnLi4uKSBwcmludGsoS0VSTl9XQVJOSU5HIGZtdCwjI2FyZykKKyNlbmRpZgorCisj
ZW5kaWYKZGlmZiAtLWV4Y2x1ZGU9Jyoub3JpZycgLS1leGNsdWRlPScqLnBhdGNoJyAtdXJOcCBs
aW51eC0yLjYuMjAvZHJpdmVycy9jaGFyL3NwZWFrdXAvc3ludGhsaXN0LmggbGludXgtMi42LjIw
LXNway9kcml2ZXJzL2NoYXIvc3BlYWt1cC9zeW50aGxpc3QuaAotLS0gbGludXgtMi42LjIwL2Ry
aXZlcnMvY2hhci9zcGVha3VwL3N5bnRobGlzdC5oCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAw
MDAwIC0wNTAwCisrKyBsaW51eC0yLjYuMjAtc3BrL2RyaXZlcnMvY2hhci9zcGVha3VwL3N5bnRo
bGlzdC5oCTIwMDctMDItMDQgMTY6MDk6MTkuMDAwMDAwMDAwIC0wNTAwCkBAIC0wLDAgKzEsNTEg
QEAKKy8qIHRoaXMgaXMgaW5jbHVkZWQgdHdvIHRpbWVzICovCisjaWYgZGVmaW5lZChQQVNTMikK
Ky8qIHRhYmxlIG9mIGJ1aWx0IGluIHN5bnRocyAqLworI2RlZmluZSBTWU5USF9ERUNMKHdobykg
JnN5bnRoXyMjd2hvLAorI2Vsc2UKKy8qIGRlY2xhcmUgZXh0ZXJuIGJ1aWx0IGluIHN5bnRocyAq
LworI2RlZmluZSBTWU5USF9ERUNMKHdobykgZXh0ZXJuIHN0cnVjdCBzcGtfc3ludGggc3ludGhf
IyN3aG87CisjZGVmaW5lIFBBU1MyCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19TUEVBS1VQX0FD
TlRQQworU1lOVEhfREVDTChhY250cGMpCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfU1BFQUtVUF9B
Q05UU0EKK1NZTlRIX0RFQ0woYWNudHNhKQorI2VuZGlmCisjaWZkZWYgQ09ORklHX1NQRUFLVVBf
QVBPTExPCitTWU5USF9ERUNMKGFwb2xsbykKKyNlbmRpZgorI2lmZGVmIENPTkZJR19TUEVBS1VQ
X0FVRFBUUgorU1lOVEhfREVDTChhdWRwdHIpCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfU1BFQUtV
UF9CTlMKK1NZTlRIX0RFQ0woYm5zKQorI2VuZGlmCisjaWZkZWYgQ09ORklHX1NQRUFLVVBfREVD
RVhUCitTWU5USF9ERUNMKGRlY2V4dCkKKyNlbmRpZgorI2lmZGVmIENPTkZJR19TUEVBS1VQX0RF
Q1RMSworU1lOVEhfREVDTChkZWN0bGspCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfU1BFQUtVUF9E
VExLCitTWU5USF9ERUNMKGR0bGspCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfU1BFQUtVUF9LRVlQ
QworU1lOVEhfREVDTChrZXlwYykKKyNlbmRpZgorI2lmZGVmIENPTkZJR19TUEVBS1VQX0xUTEsK
K1NZTlRIX0RFQ0wobHRsaykKKyNlbmRpZgorI2lmZGVmIENPTkZJR19TUEVBS1VQX1NGVFNZTgor
U1lOVEhfREVDTChzZnRzeW4pCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfU1BFQUtVUF9TUEtPVVQK
K1NZTlRIX0RFQ0woc3Brb3V0KQorI2VuZGlmCisjaWZkZWYgQ09ORklHX1NQRUFLVVBfVFhQUlQK
K1NZTlRIX0RFQ0wodHhwcnQpCisjZW5kaWYKKworI3VuZGVmIFNZTlRIX0RFQ0wKZGlmZiAtLWV4
Y2x1ZGU9Jyoub3JpZycgLS1leGNsdWRlPScqLnBhdGNoJyAtdXJOcCBsaW51eC0yLjYuMjAvZHJp
dmVycy9jaGFyL3Z0LmMgbGludXgtMi42LjIwLXNway9kcml2ZXJzL2NoYXIvdnQuYwotLS0gbGlu
dXgtMi42LjIwL2RyaXZlcnMvY2hhci92dC5jCTIwMDctMDItMDQgMTY6MDg6MDEuMDAwMDAwMDAw
IC0wNTAwCisrKyBsaW51eC0yLjYuMjAtc3BrL2RyaXZlcnMvY2hhci92dC5jCTIwMDctMDItMDQg
MTY6MDk6MjEuMDAwMDAwMDAwIC0wNTAwCkBAIC0xMDMsNiArMTAzLDExIEBACiAjaW5jbHVkZSA8
YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKKyNpbmNsdWRlIDxsaW51
eC9zcGVha3VwLmg+CisjaWZkZWYgQ09ORklHX1NQRUFLVVBfTU9EVUxFCisjaW5jbHVkZSAic3Bl
YWt1cC9zcGtfY29uX21vZHVsZS5oIgorI2VuZGlmCisKICNkZWZpbmUgTUFYX05SX0NPTl9EUklW
RVIgMTYKIAogI2RlZmluZSBDT05fRFJJVkVSX0ZMQUdfTU9EVUxFIDEKQEAgLTczOSw2ICs3NDQs
NyBAQCBpbnQgdmNfYWxsb2NhdGUodW5zaWduZWQgaW50IGN1cnJjb25zKQkvCiAJICAgIH0KIAkg
ICAgdmMtPnZjX2ttYWxsb2NlZCA9IDE7CiAJICAgIHZjX2luaXQodmMsIHZjLT52Y19yb3dzLCB2
Yy0+dmNfY29scywgMSk7CisgCSAgICBzcGVha3VwX2FsbG9jYXRlKHZjKTsKIAl9CiAJcmV0dXJu
IDA7CiB9CkBAIC0xMDAzLDYgKzEwMDksNyBAQCBzdGF0aWMgdm9pZCBsZihzdHJ1Y3QgdmNfZGF0
YSAqdmMpCiAJCXZjLT52Y19wb3MgKz0gdmMtPnZjX3NpemVfcm93OwogCX0KIAl2Yy0+dmNfbmVl
ZF93cmFwID0gMDsKKwlzcGVha3VwX2Nvbl93cml0ZSh2YywgIlxuIiwxKTsKIH0KIAogc3RhdGlj
IHZvaWQgcmkoc3RydWN0IHZjX2RhdGEgKnZjKQpAQCAtMTAzMSw2ICsxMDM4LDcgQEAgc3RhdGlj
IGlubGluZSB2b2lkIGJzKHN0cnVjdCB2Y19kYXRhICp2YwogCQl2Yy0+dmNfcG9zIC09IDI7CiAJ
CXZjLT52Y194LS07CiAJCXZjLT52Y19uZWVkX3dyYXAgPSAwOworCQlzcGVha3VwX2JzKHZjKTsK
IAl9CiB9CiAKQEAgLTE1NjgsNiArMTU3Niw3IEBAIHN0YXRpYyB2b2lkIGRvX2Nvbl90cm9sKHN0
cnVjdCB0dHlfc3RydWMKIAkJCQlicmVhazsKIAkJfQogCQl2Yy0+dmNfcG9zICs9ICh2Yy0+dmNf
eCA8PCAxKTsKKwkJc3BlYWt1cF9jb25fd3JpdGUodmMsICIgIiwgMSk7CiAJCXJldHVybjsKIAlj
YXNlIDEwOiBjYXNlIDExOiBjYXNlIDEyOgogCQlsZih2Yyk7CkBAIC0yMTA3LDYgKzIxMTYsNyBA
QCBkaXNwbGF5X2dseXBoOgogCQkJfQogCQkJaWYgKHZjLT52Y19kZWNpbSkKIAkJCQlpbnNlcnRf
Y2hhcih2YywgMSk7CisJCQlzcGVha3VwX2Nvbl93cml0ZSh2YywgKGNoYXIgKikgJmMsIDEpOwog
CQkJc2NyX3dyaXRldyhoaW1hc2sgPwogCQkJCSAgICAgKCh2Yy0+dmNfYXR0ciA8PCA4KSAmIH5o
aW1hc2spICsgKCh0YyAmIDB4MTAwKSA/IGhpbWFzayA6IDApICsgKHRjICYgMHhmZikgOgogCQkJ
CSAgICAgKHZjLT52Y19hdHRyIDw8IDgpICsgdGMsCkBAIC0yMTQxLDYgKzIxNTEsNyBAQCBkaXNw
bGF5X2dseXBoOgogCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKIAogb3V0OgorCXNwZWFrdXBfY29u
X3VwZGF0ZSh2Yyk7CiAJcmV0dXJuIG47CiAjdW5kZWYgRkxVU0gKIH0KQEAgLTIxNjYsNiArMjE3
Nyw3IEBAIHN0YXRpYyB2b2lkIGNvbnNvbGVfY2FsbGJhY2soc3RydWN0IHdvcmsKIAkJCS8qIHdl
IG9ubHkgY2hhbmdlZCB3aGVuIHRoZSBjb25zb2xlIGhhZCBhbHJlYWR5CiAJCQkgICBiZWVuIGFs
bG9jYXRlZCAtIGEgbmV3IGNvbnNvbGUgaXMgbm90IGNyZWF0ZWQKIAkJCSAgIGluIGFuIGludGVy
cnVwdCByb3V0aW5lICovCisJCQlzcGVha3VwX2Nvbl91cGRhdGUodmNfY29uc1t3YW50X2NvbnNv
bGVdLmQpOwogCQl9CiAJCXdhbnRfY29uc29sZSA9IC0xOwogCX0KQEAgLTIxODQsNiArMjE5Niw3
IEBAIHN0YXRpYyB2b2lkIGNvbnNvbGVfY2FsbGJhY2soc3RydWN0IHdvcmsKIAkJZG9fYmxhbmtf
c2NyZWVuKDApOwogCQlibGFua190aW1lcl9leHBpcmVkID0gMDsKIAl9CisJc3BlYWt1cF9jb25f
dXBkYXRlKHZjX2NvbnNbZmdfY29uc29sZV0uZCk7CiAKIAlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7
CiB9CkBAIC0yMjI5LDYgKzIyNDIsNyBAQCBzdGF0aWMgdm9pZCB2dF9jb25zb2xlX3ByaW50KHN0
cnVjdCBjb25zCiAJCS8qIHByaW50aygidnRfY29uc29sZV9wcmludDogdHR5ICVkIG5vdCBhbGxv
Y2F0ZWQgPz9cbiIsIGN1cnJjb25zKzEpOyAqLwogCQlnb3RvIHF1aXQ7CiAJfQorCXNwZWFrdXBf
Y29uX3VwZGF0ZSh2Y19jb25zW2ZnX2NvbnNvbGVdLmQpOwogCiAJaWYgKHZjLT52Y19tb2RlICE9
IEtEX1RFWFQpCiAJCWdvdG8gcXVpdDsKQEAgLTIyNDEsNiArMjI1NSw3IEBAIHN0YXRpYyB2b2lk
IHZ0X2NvbnNvbGVfcHJpbnQoc3RydWN0IGNvbnMKIAogCS8qIENvbnRyaXZlZCBzdHJ1Y3R1cmUg
dG8gdHJ5IHRvIGVtdWxhdGUgb3JpZ2luYWwgbmVlZF93cmFwIGJlaGF2aW91cgogCSAqIFByb2Js
ZW1zIGNhdXNlZCB3aGVuIHdlIGhhdmUgbmVlZF93cmFwIHNldCBvbiAnXG4nIGNoYXJhY3RlciAq
LworCXNwZWFrdXBfY29uX3dyaXRlKHZjLCBiLCBjb3VudCk7CiAJd2hpbGUgKGNvdW50LS0pIHsK
IAkJYyA9ICpiKys7CiAJCWlmIChjID09IDEwIHx8IGMgPT0gMTMgfHwgYyA9PSA4IHx8IHZjLT52
Y19uZWVkX3dyYXApIHsKQEAgLTIyODUsNiArMjMwMCw3IEBAIHN0YXRpYyB2b2lkIHZ0X2NvbnNv
bGVfcHJpbnQoc3RydWN0IGNvbnMKIAkJfQogCX0KIAlzZXRfY3Vyc29yKHZjKTsKKwlzcGVha3Vw
X2Nvbl91cGRhdGUodmMpOwogCiBxdWl0OgogCWNsZWFyX2JpdCgwLCAmcHJpbnRpbmcpOwpAQCAt
MjY1MCw2ICsyNjY2LDcgQEAgc3RhdGljIGludCBfX2luaXQgY29uX2luaXQodm9pZCkKIAltYXN0
ZXJfZGlzcGxheV9mZyA9IHZjID0gdmNfY29uc1tjdXJyY29uc10uZDsKIAlzZXRfb3JpZ2luKHZj
KTsKIAlzYXZlX3NjcmVlbih2Yyk7CisJc3BlYWt1cF9pbml0KHZjKTsKIAlnb3RveHkodmMsIHZj
LT52Y194LCB2Yy0+dmNfeSk7CiAJY3NpX0oodmMsIDApOwogCXVwZGF0ZV9zY3JlZW4odmMpOwpA
QCAtMzgyMCwzICszODM3LDQgQEAgRVhQT1JUX1NZTUJPTCh2Y19jb25zKTsKIEVYUE9SVF9TWU1C
T0wodGFrZV9vdmVyX2NvbnNvbGUpOwogRVhQT1JUX1NZTUJPTChnaXZlX3VwX2NvbnNvbGUpOwog
I2VuZGlmCitFWFBPUlRfU1lNQk9MX0dQTChzY3JlZW5fZ2x5cGgpOwpkaWZmIC0tZXhjbHVkZT0n
Ki5vcmlnJyAtLWV4Y2x1ZGU9JyoucGF0Y2gnIC11ck5wIGxpbnV4LTIuNi4yMC9kcml2ZXJzL0tj
b25maWcgbGludXgtMi42LjIwLXNway9kcml2ZXJzL0tjb25maWcKLS0tIGxpbnV4LTIuNi4yMC9k
cml2ZXJzL0tjb25maWcJMjAwNy0wMi0wNCAxNjowODowMS4wMDAwMDAwMDAgLTA1MDAKKysrIGxp
bnV4LTIuNi4yMC1zcGsvZHJpdmVycy9LY29uZmlnCTIwMDctMDItMDQgMTY6MDk6MjEuMDAwMDAw
MDAwIC0wNTAwCkBAIC02Miw2ICs2Miw4IEBAIHNvdXJjZSAiZHJpdmVycy9tZWRpYS9LY29uZmln
IgogCiBzb3VyY2UgImRyaXZlcnMvdmlkZW8vS2NvbmZpZyIKIAorc291cmNlICJkcml2ZXJzL2No
YXIvc3BlYWt1cC9LY29uZmlnIgorCiBzb3VyY2UgInNvdW5kL0tjb25maWciCiAKIHNvdXJjZSAi
ZHJpdmVycy9oaWQvS2NvbmZpZyIKZGlmZiAtLWV4Y2x1ZGU9Jyoub3JpZycgLS1leGNsdWRlPScq
LnBhdGNoJyAtdXJOcCBsaW51eC0yLjYuMjAvZHJpdmVycy9NYWtlZmlsZSBsaW51eC0yLjYuMjAt
c3BrL2RyaXZlcnMvTWFrZWZpbGUKLS0tIGxpbnV4LTIuNi4yMC9kcml2ZXJzL01ha2VmaWxlCTIw
MDctMDItMDQgMTY6MDg6MDEuMDAwMDAwMDAwIC0wNTAwCisrKyBsaW51eC0yLjYuMjAtc3BrL2Ry
aXZlcnMvTWFrZWZpbGUJMjAwNy0wMi0wNCAxNjowOToyMS4wMDAwMDAwMDAgLTA1MDAKQEAgLTI4
LDYgKzI4LDEwIEBAIG9iai0kKENPTkZJR19GQl9JTlRFTCkgICAgICAgICAgKz0gdmlkZW8KIG9i
ai15CQkJCSs9IHNlcmlhbC8KIG9iai0kKENPTkZJR19QQVJQT1JUKQkJKz0gcGFycG9ydC8KIG9i
ai15CQkJCSs9IGJhc2UvIGJsb2NrLyBtaXNjLyBtZmQvIG5ldC8gbWVkaWEvCitvYmotJChDT05G
SUdfU0VSSU8pCQkrPSBpbnB1dC9zZXJpby8KK29iai0kKENPTkZJR19HQU1FUE9SVCkJCSs9IGlu
cHV0L2dhbWVwb3J0LworIyBsb2FkIGtleWJvYXJkIGVhcmx5IHNvIHNwZWFrdXAgY2FuIGJlIHF1
aWV0ZWQKK29iai0kKENPTkZJR19JTlBVVCkJCSs9IGlucHV0Lwogb2JqLSQoQ09ORklHX05VQlVT
KQkJKz0gbnVidXMvCiBvYmotJChDT05GSUdfQVRNKQkJKz0gYXRtLwogb2JqLSQoQ09ORklHX1BQ
Q19QTUFDKQkJKz0gbWFjaW50b3NoLwpAQCAtNTIsOSArNTYsNiBAQCBvYmotJChDT05GSUdfVEMp
CQkrPSB0Yy8KIG9iai0kKENPTkZJR19VU0IpCQkrPSB1c2IvCiBvYmotJChDT05GSUdfUENJKQkJ
Kz0gdXNiLwogb2JqLSQoQ09ORklHX1VTQl9HQURHRVQpCSs9IHVzYi9nYWRnZXQvCi1vYmotJChD
T05GSUdfU0VSSU8pCQkrPSBpbnB1dC9zZXJpby8KLW9iai0kKENPTkZJR19HQU1FUE9SVCkJCSs9
IGlucHV0L2dhbWVwb3J0Lwotb2JqLSQoQ09ORklHX0lOUFVUKQkJKz0gaW5wdXQvCiBvYmotJChD
T05GSUdfSTJPKQkJKz0gbWVzc2FnZS8KIG9iai0kKENPTkZJR19SVENfTElCKQkJKz0gcnRjLwog
b2JqLSQoQ09ORklHX0kyQykJCSs9IGkyYy8KZGlmZiAtLWV4Y2x1ZGU9Jyoub3JpZycgLS1leGNs
dWRlPScqLnBhdGNoJyAtdXJOcCBsaW51eC0yLjYuMjAvaW5jbHVkZS9saW51eC9rZXlib2FyZC5o
IGxpbnV4LTIuNi4yMC1zcGsvaW5jbHVkZS9saW51eC9rZXlib2FyZC5oCi0tLSBsaW51eC0yLjYu
MjAvaW5jbHVkZS9saW51eC9rZXlib2FyZC5oCTIwMDYtMDktMTkgMjM6NDI6MDYuMDAwMDAwMDAw
IC0wNDAwCisrKyBsaW51eC0yLjYuMjAtc3BrL2luY2x1ZGUvbGludXgva2V5Ym9hcmQuaAkyMDA3
LTAyLTA0IDE2OjA5OjIxLjAwMDAwMDAwMCAtMDUwMApAQCAtNDUsNiArNDUsNyBAQCBleHRlcm4g
dW5zaWduZWQgc2hvcnQgcGxhaW5fbWFwW05SX0tFWVNdCiAjZGVmaW5lIEtUX0xPQ0sJCTEwCiAj
ZGVmaW5lIEtUX1NMT0NLCTEyCiAjZGVmaW5lIEtUX0JSTAkJMTQKKyNkZWZpbmUgS1RfU1BLVVAg
ICAgICAgCTE1CiAKICNkZWZpbmUgSyh0LHYpCQkoKCh0KTw8OCl8KHYpKQogI2RlZmluZSBLVFlQ
KHgpCQkoKHgpID4+IDgpCkBAIC00MjcsNiArNDI4LDcgQEAgZXh0ZXJuIHVuc2lnbmVkIHNob3J0
IHBsYWluX21hcFtOUl9LRVlTXQogI2RlZmluZSBLX0NUUkxSX1NMT0NLCUsoS1RfU0xPQ0ssS0df
Q1RSTFIpCiAKICNkZWZpbmUgTlJfTE9DSwkJOAorI2RlZmluZSBOUl9TUEtVUCAgICAgICAweDQ1
CiAKICNkZWZpbmUgS19CUkxfQkxBTksgICAgIEsoS1RfQlJMLCAwKQogI2RlZmluZSBLX0JSTF9E
T1QxICAgICAgSyhLVF9CUkwsIDEpCmRpZmYgLS1leGNsdWRlPScqLm9yaWcnIC0tZXhjbHVkZT0n
Ki5wYXRjaCcgLXVyTnAgbGludXgtMi42LjIwL2luY2x1ZGUvbGludXgvbWlzY2RldmljZS5oIGxp
bnV4LTIuNi4yMC1zcGsvaW5jbHVkZS9saW51eC9taXNjZGV2aWNlLmgKLS0tIGxpbnV4LTIuNi4y
MC9pbmNsdWRlL2xpbnV4L21pc2NkZXZpY2UuaAkyMDA3LTAyLTA0IDE2OjA4OjAzLjAwMDAwMDAw
MCAtMDUwMAorKysgbGludXgtMi42LjIwLXNway9pbmNsdWRlL2xpbnV4L21pc2NkZXZpY2UuaAky
MDA3LTAyLTA0IDE2OjA5OjIxLjAwMDAwMDAwMCAtMDUwMApAQCAtMTIsNiArMTIsNyBAQAogI2Rl
ZmluZSBBUE9MTE9fTU9VU0VfTUlOT1IgNwogI2RlZmluZSBQQzExMFBBRF9NSU5PUiA5CiAvKiNk
ZWZpbmUgQURCX01PVVNFX01JTk9SIDEwCUZJWE1FIE9CU09MRVRFICovCisjZGVmaW5lIFNZTlRI
X01JTk9SICAgMjUKICNkZWZpbmUgV0FUQ0hET0dfTUlOT1IJCTEzMAkvKiBXYXRjaGRvZyB0aW1l
ciAgICAgKi8KICNkZWZpbmUgVEVNUF9NSU5PUgkJMTMxCS8qIFRlbXBlcmF0dXJlIFNlbnNvciAq
LwogI2RlZmluZSBSVENfTUlOT1IgMTM1CmRpZmYgLS1leGNsdWRlPScqLm9yaWcnIC0tZXhjbHVk
ZT0nKi5wYXRjaCcgLXVyTnAgbGludXgtMi42LjIwL2luY2x1ZGUvbGludXgvc3BlYWt1cC5oIGxp
bnV4LTIuNi4yMC1zcGsvaW5jbHVkZS9saW51eC9zcGVha3VwLmgKLS0tIGxpbnV4LTIuNi4yMC9p
bmNsdWRlL2xpbnV4L3NwZWFrdXAuaAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUw
MAorKysgbGludXgtMi42LjIwLXNway9pbmNsdWRlL2xpbnV4L3NwZWFrdXAuaAkyMDA3LTAyLTA0
IDE2OjA5OjIxLjAwMDAwMDAwMCAtMDUwMApAQCAtMCwwICsxLDM1IEBACisjaWZuZGVmIF9fU1BF
QUtVUF9ICisjZGVmaW5lIF9fU1BFQUtVUF9ICisKKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+
CisKK3N0cnVjdCBrYmRfc3RydWN0Oworc3RydWN0IHZjX2RhdGE7CisKKy8qIGhvdyBhYm91dCBz
b21lIHByb3RvdHlwZXMhICovCisKKyNpZiBkZWZpbmVkKENPTkZJR19TUEVBS1VQKQorZXh0ZXJu
IHZvaWQgc3BlYWt1cF9pbml0KHN0cnVjdCB2Y19kYXRhICopOworZXh0ZXJuIGludCBzcGVha3Vw
X2Rldl9pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgc3BlYWt1cF9hbGxvY2F0ZShzdHJ1Y3QgdmNf
ZGF0YSAqKTsKK2V4dGVybiB2b2lkIHNwZWFrdXBfYnMoc3RydWN0IHZjX2RhdGEgKik7CitleHRl
cm4gdm9pZCBzcGVha3VwX2Nvbl93cml0ZShzdHJ1Y3QgdmNfZGF0YSAqLCBjb25zdCBjaGFyICos
IGludCk7CitleHRlcm4gdm9pZCBzcGVha3VwX2Nvbl91cGRhdGUoc3RydWN0IHZjX2RhdGEgKik7
CitleHRlcm4gaW50IHNwZWFrdXBfa2V5KHN0cnVjdCB2Y19kYXRhKiwgaW50LCBpbnQsIHVfc2hv
cnQsIGludCk7CisjZWxpZiBkZWZpbmVkKENPTkZJR19TUEVBS1VQX01PRFVMRSkKK3R5cGVkZWYg
dm9pZCAoKnNwa19jb25fZnVuYykoc3RydWN0IHZjX2RhdGEgKiApOwordHlwZWRlZiB2b2lkICgq
c3BrX3dyaXRlX2Z1bmMpKHN0cnVjdCB2Y19kYXRhICosIGNvbnN0IGNoYXIgKiwgaW50KTsKK3R5
cGVkZWYgaW50ICgqc3BrX2tleV9mdW5jKShzdHJ1Y3QgdmNfZGF0YSosIGludCwgaW50LCB1X3No
b3J0LCBpbnQpOworZXh0ZXJuIHZvaWQgc3BrX3NldF9hZGRyZXNzZXMoIHNwa19jb25fZnVuYyBh
bGxvY2F0ZSwgc3BrX2Nvbl9mdW5jIGJzLAorCXNwa193cml0ZV9mdW5jIGNvbl93cml0ZSwgc3Br
X2Nvbl9mdW5jIGNvbl91cGRhdGUsIHNwa19rZXlfZnVuYyBrZXkgKTsKKyNkZWZpbmUgc3BlYWt1
cF9pbml0KHZjKQorZXh0ZXJuIGludCBzcGVha3VwX2Rldl9pbml0KHZvaWQpOworI2Vsc2UKKyNk
ZWZpbmUgc3BlYWt1cF9hbGxvY2F0ZSh2YykKKyNkZWZpbmUgc3BlYWt1cF9icyh2YykKKyNkZWZp
bmUgc3BlYWt1cF9jb25fd3JpdGUodmMsIHN0ciwgbGVuKQorI2RlZmluZSBzcGVha3VwX2Nvbl91
cGRhdGUodmMpCisjZGVmaW5lIHNwZWFrdXBfaW5pdChjdXJyY29ucykKKyNkZWZpbmUgc3BlYWt1
cF9kZXZfaW5pdCgpCisjZW5kaWYKKyNlbmRpZgpkaWZmIC0tZXhjbHVkZT0nKi5vcmlnJyAtLWV4
Y2x1ZGU9JyoucGF0Y2gnIC11ck5wIGxpbnV4LTIuNi4yMC9NQUlOVEFJTkVSUyBsaW51eC0yLjYu
MjAtc3BrL01BSU5UQUlORVJTCi0tLSBsaW51eC0yLjYuMjAvTUFJTlRBSU5FUlMJMjAwNy0wMi0w
NCAxNjowODowMC4wMDAwMDAwMDAgLTA1MDAKKysrIGxpbnV4LTIuNi4yMC1zcGsvTUFJTlRBSU5F
UlMJMjAwNy0wMi0wNCAxNjowOToyMS4wMDAwMDAwMDAgLTA1MDAKQEAgLTMwODgsNiArMzA4OCwx
MyBAQCBNOgl3bGlAaG9sb21vcnBoeS5jb20KIEw6CXNwYXJjbGludXhAdmdlci5rZXJuZWwub3Jn
CiBTOglNYWludGFpbmVkCiAKK1NQRUFLVVAgQ29uc29sZSBzcGVlY2ggb3V0cHV0CitQOglLaXJr
IFJlaXNlcgorTToJa2lya0BicmFpbGxlLnV3by5jYQorTDoJc3BlYWt1cEBicmFpbGxlLnV3by5j
YQorVzoJaHR0cDovL3d3dy5saW51eC1zcGVha3VwLm9yZworUzoJTWFpbnRhaW5lZAorCiBTUEVD
SUFMSVggSU84KyBNVUxUSVBPUlQgU0VSSUFMIENBUkQgRFJJVkVSCiBQOglSb2dlciBXb2xmZgog
TToJUi5FLldvbGZmQEJpdFdpemFyZC5ubAo=
</data>        

          </attachment>
    </bug>

</bugzilla>