<?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>115176</bug_id>
          
          <creation_ts>2005-12-11 03:05 0000</creation_ts>
          <short_desc>rt2570 doesn&apos;t work anymore with kernel &gt;=2.6.14-gentoo-r2 becaus of unknown symbol verify_area</short_desc>
          <delta_ts>2005-12-31 08:43:00 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>Unspecified</component>
          <version>unspecified</version>
          <rep_platform>x86</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          
          <priority>P2</priority>
          <bug_severity>normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          
          <everconfirmed>1</everconfirmed>
          <reporter>erik.geiger@gmx.de</reporter>
          <assigned_to>mobile@gentoo.org</assigned_to>
          

      

      
          <long_desc isprivate="0">
            <who>erik.geiger@gmx.de</who>
            <bug_when>2005-12-11 03:05:44 0000</bug_when>
            <thetext>After installing net-wireless/rt2570-1.1.0_beta1 the module could not be loaded.
In dmesg there is an entry: rt2570: Unknown symbol verify_area
I&apos;ve seen that the function verify_area() has yet been deprecated in kernel
2.6.13 and now in 2.6.14 has been removed.
I also tried the drivers from
http://dlsvr02.asus.com/pub/ASUS/wireless/WL-167g/SourceCode-V2040.zip
with the same result.

Reproducible: Always
Steps to Reproduce:
1.emerge net-wireless/rt2570-1.1.0_beta1
2.modprobe rt2570
3.

Actual Results:  
I get the Error Message:
FATAL: Error inserting rt2570 (/lib/modules/2.6.14-gentoo-r4/net/rt2570.ko):
Unknown symbol in module, or unknown parameter (see dmesg)

Expected Results:  
The Module should be loaded

net-wireless/ndiswrapper-1.2 also only works with kernel &lt;= 2.6.13-gentoo-r5.
With newer kernel it only compiles with the new ebuild and patch from:
http://bugs.gentoo.org/show_bug.cgi?id=111029
After that patching it compiles, but it also doesn&apos;t work.


Portage 2.0.51.22-r3 (default-linux/x86/2005.0, gcc-3.4.4, glibc-2.3.5-r2,
2.6.14-gentoo-r4 i686)
=================================================================
System uname: 2.6.14-gentoo-r4 i686 AMD Athlon(tm) XP 2500+
Gentoo Base System version 1.6.13
distcc 2.18.3 i686-pc-linux-gnu (protocols 1 and 2) (default port 3632) [disabled]
dev-lang/python:     2.3.5-r2, 2.4.2
sys-apps/sandbox:    1.2.12
sys-devel/autoconf:  2.13, 2.59-r6
sys-devel/automake:  1.4_p6, 1.5, 1.6.3, 1.7.9-r1, 1.8.5-r3, 1.9.6-r1
sys-devel/binutils:  2.16.1
sys-devel/libtool:   1.5.20
virtual/os-headers:  2.6.11-r2
ACCEPT_KEYWORDS=&quot;x86&quot;
AUTOCLEAN=&quot;yes&quot;
CBUILD=&quot;i686-pc-linux-gnu&quot;
CFLAGS=&quot;-O2 -march=athlon-xp -pipe -fomit-frame-pointer&quot;
CHOST=&quot;i686-pc-linux-gnu&quot;
CONFIG_PROTECT=&quot;/etc /usr/kde/2/share/config /usr/kde/3.4/env
/usr/kde/3.4/share/config /usr/kde/3.4/shutdown /usr/kde/3/share/config
/usr/lib/X11/xkb /usr/lib/mozilla/defaults/pref /usr/share/config
/var/qmail/control&quot;
CONFIG_PROTECT_MASK=&quot;/etc/gconf /etc/terminfo /etc/env.d&quot;
CXXFLAGS=&quot;-O2 -march=athlon-xp -pipe -fomit-frame-pointer&quot;
DISTDIR=&quot;/Daten/distfiles&quot;
FEATURES=&quot;autoconfig distlocks fixpackages sandbox sfperms strict&quot;
GENTOO_MIRRORS=&quot;ftp://ftp-stud.fht-esslingen.de/pub/Mirrors/gentoo/
ftp://pandemonium.tiscali.de/pub/gentoo/
http://ftp-stud.fht-esslingen.de/pub/Mirrors/gentoo/
http://pandemonium.tiscali.de/pub/gentoo/&quot;
LANG=&quot;de_DE@euro&quot;
LC_ALL=&quot;de_DE@euro&quot;
LINGUAS=&quot;de&quot;
MAKEOPTS=&quot;-j2&quot;
PKGDIR=&quot;/usr/portage/packages&quot;
PORTAGE_TMPDIR=&quot;/var/tmp&quot;
PORTDIR=&quot;/usr/portage&quot;
SYNC=&quot;rsync://rsync.de.gentoo.org/gentoo-portage&quot;
USE=&quot;x86 3dnow 3dnowext X a52 alsa apm arts audiofile avi berkdb bitmap-fonts
bzip2 cdr crypt cups curl divx4linux dts dvd dvdr dvdread eds emboss encode exif
expat fam ffmpeg foomaticdb fortran gcj gdbm gif gimp gimpprint glut gnokii gpm
gstreamer gtk2 idn imagemagick imlib ipv6 irda java jpeg kde lcms libg++ libwww
live mad mikmod mjpeg mmx mmxext mng motif mozilla mp3 mpeg ncurses nls objc ogg
oggvorbis opengl oss pam pcre pda pdflib perl png ppds python qt readline real
scanner sdl sms spell sse ssl subject-rewrite symlink tcpd tiff truetype
truetype-fonts type1-fonts udev usb v4l v4l2 vorbis win32codecs xml2 xmms xv
xvid yv12 zlib linguas_de userland_GNU kernel_linux elibc_glibc&quot;
Unset:  ASFLAGS, CTARGET, LDFLAGS, PORTDIR_OVERLAY</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>jakub@gentoo.org</who>
            <bug_when>2005-12-11 06:27:52 0000</bug_when>
            <thetext>*** Bug 115190 has been marked as a duplicate of this bug. ***</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>genstef@gentoo.org</who>
            <bug_when>2005-12-24 16:49:00 0000</bug_when>
            <thetext>I currently do not own a rt2570 device, rather not interested in digging for patches or writing them myselves.
Can you please provide a patch for this bug?

I will close this as &quot;UPSTREAM&quot;, because I wait for upstream to provide a new version or for you to give me a patch.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>steev@gentoo.org</who>
            <bug_when>2005-12-24 17:21:21 0000</bug_when>
            <thetext>Stefan, I&apos;ll take over this if you like, I do happen to have 2 rt2570 usb wifi devices - I have a patch that does work, but I also do some patching from cvs.  Upstream has pretty much given up releases on this in favor of the new rt2x00 drivers that they are working on, which do not work for me here.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>genstef@gentoo.org</who>
            <bug_when>2005-12-25 02:34:12 0000</bug_when>
            <thetext>steev takes this over</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>steev@gentoo.org</who>
            <bug_when>2005-12-25 14:18:52 0000</bug_when>
            <thetext>Created an attachment (id=75527)
verify-write patch

Please try this patch, and let me know if it helps for you - this is for the rt2570 ebuild - just add it to an overlay, and add

epatch ${FILESDIR}/verify-write-api.patch
above the linux-mod_src_compile line - if this doesn&apos;t work properly - as in doesn&apos;t apply, let me know</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>erik.geiger@gmx.de</who>
            <bug_when>2005-12-26 04:05:22 0000</bug_when>
            <thetext>Hello Steev,

Thanks for patching. Now I can load the module without any errors.

But if I bring up my wireless interface rausb0 I get a Kernel panic. But this also happens with my laptop running kernel 2.6.13-gentoo-r5 and the original ebuild and driver.

So I think there is also another problem, may be with my hardware ASUS WL-167g, but that has nothing to do with this bug-report. So I think this bug is solved.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>steev@gentoo.org</who>
            <bug_when>2005-12-26 17:54:10 0000</bug_when>
            <thetext>Created an attachment (id=75574)
rt2570 latest cvs patch

Try this patch out, it is latest from CVS diffed to the 1.1.0_b1 release, let me know if this affects anything - I was reading the forums, and a guy said that he does have some problems with his wifi card - which is the exact same one you say you have - you could also try the rt2x00 drivers in portage, which are what upstream is actively working on, moreso than the rt2570/rt2500/rt2400 (its a unified driver for all the chipsets)

Let me know how this goes for you.  You should just need to remove the verify-api patch and replace it with this one.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>erik.geiger@gmx.de</who>
            <bug_when>2005-12-27 13:57:23 0000</bug_when>
            <thetext>Wow, that&apos;s it. Now the driver rt2570 works really fine ;-)
Thanks!</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>steev@gentoo.org</who>
            <bug_when>2005-12-31 08:43:00 0000</bug_when>
            <thetext>InCVS</thetext>
          </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75527</attachid>
            <date>2005-12-25 14:18 0000</date>
            <desc>verify-write patch</desc>
            <filename>verify-write-api-change.patch</filename>
            <type>text/plain</type>
            <data encoding="base64">ZGlmZiAtTnJ1IHJ0MjU3MC0xLjEuMCtjdnMyMDA1MDkzMC5vcmlnL01vZHVsZS9ydHVzYl9pbmZv
LmMgcnQyNTcwLTEuMS4wK2N2czIwMDUwOTMwLnBhdGNoZWQvTW9kdWxlL3J0dXNiX2luZm8uYwot
LS0gcnQyNTcwLTEuMS4wK2N2czIwMDUwOTMwLm9yaWcvTW9kdWxlL3J0dXNiX2luZm8uYwkyMDA1
LTEwLTE3IDIzOjExOjQ3LjAwMDAwMDAwMCArMTAwMAorKysgcnQyNTcwLTEuMS4wK2N2czIwMDUw
OTMwLnBhdGNoZWQvTW9kdWxlL3J0dXNiX2luZm8uYwkyMDA1LTEwLTE4IDAwOjUyOjU0LjAwMDAw
MDAwMCArMTAwMApAQCAtNDE1MCw3ICs0MTUwLDcgQEAKIAogCQljYXNlIFNJT0NHSVdQUklWOgog
CQkJaWYgKHdycS0+dS5kYXRhLnBvaW50ZXIpIHsKLQkJCQlpZiAoIHZlcmlmeV9hcmVhKFZFUklG
WV9XUklURSwgd3JxLT51LmRhdGEucG9pbnRlciwgc2l6ZW9mKHByaXZ0YWIpKSApCisJCQkJaWYg
KCBhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCB3cnEtPnUuZGF0YS5wb2ludGVyLCBzaXplb2YocHJp
dnRhYikpICkKIAkJCQkJYnJlYWs7CiAJCQkJd3JxLT51LmRhdGEubGVuZ3RoID0gc2l6ZW9mKHBy
aXZ0YWIpIC8gc2l6ZW9mKHByaXZ0YWJbMF0pOwogCQkJCWlmIChjb3B5X3RvX3VzZXIod3JxLT51
LmRhdGEucG9pbnRlciwgcHJpdnRhYiwgc2l6ZW9mKHByaXZ0YWIpKSkK
</data>        

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75574</attachid>
            <date>2005-12-26 17:54 0000</date>
            <desc>rt2570 latest cvs patch</desc>
            <filename>rt2570-cvs-update.patch</filename>
            <type>text/plain</type>
            <data encoding="base64">ZGlmZiAtcnVOIHJ0MjU3MC0xLjEuMC1iMS9DSEFOR0VMT0cgcnQyNTcwLWN2cy0yMDA1MTIyNjE2
L0NIQU5HRUxPRwotLS0gcnQyNTcwLTEuMS4wLWIxL0NIQU5HRUxPRwkyMDA1LTA3LTMwIDExOjQ0
OjQ4LjAwMDAwMDAwMCAtMDUwMAorKysgcnQyNTcwLWN2cy0yMDA1MTIyNjE2L0NIQU5HRUxPRwky
MDA1LTEyLTA2IDAyOjI0OjQ1LjAwMDAwMDAwMCAtMDYwMApAQCAtMjIsNiArMjIsMTcgQEAKICAK
ICBDaGFuZ2Vsb2cgZm9yIDgwMi4xMWcgcnQyNTcwIFVTQiBkcml2ZXIKIAorIFZlcnNpb246IENW
UworCSogQnVnZml4IHRvIGFsbG93IG11bHRpcGxlIHJ0MjU3MCBkZXZpY2VzCisJKiBGaXggZm9y
IG1vZHVsZSB1bmxvYWRpbmcgdW5kZXIgMi40IGtlcm5lbAorCSogRml4IGZvciBzaWduYWwgcXVh
bGl0eSByZXBvcnRpbmcgKDEyNDc5ODUpCisJKiBFbmhhbmNlbWVudCBmb3IgVFggZHVyaW5nIFJG
TU9OIChpLmUuIGFpcmVwbGF5IHN1cHBvcnQpCisJKiBQcmlzbSBIZWFkZXJzIGluIFJGTU9OIAor
CSogQWRkZWQgbmV3IFVTQiBkZXZpY2VzIChGNUQ3MDUwLCBMaW5rc3lzQEhvbWUpCisJKiBCdWdm
aXggOiByYWNlIGNvbmRpdGlvbiBiZXR3ZWVuIHRocmVhZCBzdG9wIGFuZCBpbmNvbWluZyBtbG1l
IGNvbW1hbmRzCisJCShNYXRoaWV1IERlc25veWVycyBtYXRoaWV1LmRlc25veWVyc0Bwb2x5bXRs
LmNhKQorCisKICBWZXJzaW9uOiAxLjEuMC1iZXRhMQogIAkqIEluaXRpYWwgYmFzZWxpbmUgY29k
ZSBmcm9tIFJhbGluayAoMi4wLjMuMCkKICAJKiBBZGRlZCBuZXcgVVNCIGRldmljZXMgKEY1RDcw
NjAsVUI4MDFSLEM1NFJVLE1TSTY4NjEsR04tV0JLRykKZGlmZiAtcnVOIHJ0MjU3MC0xLjEuMC1i
MS9Nb2R1bGUvLiNhc3NvYy5jLjEuMiBydDI1NzAtY3ZzLTIwMDUxMjI2MTYvTW9kdWxlLy4jYXNz
b2MuYy4xLjIKLS0tIHJ0MjU3MC0xLjEuMC1iMS9Nb2R1bGUvLiNhc3NvYy5jLjEuMgkyMDA1LTA3
LTMwIDExOjQ0OjMwLjAwMDAwMDAwMCAtMDUwMAorKysgcnQyNTcwLWN2cy0yMDA1MTIyNjE2L01v
ZHVsZS8uI2Fzc29jLmMuMS4yCTE5NjktMTItMzEgMTg6MDA6MDAuMDAwMDAwMDAwIC0wNjAwCkBA
IC0xLDkxOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAotICogUlQyeDAwIFNvdXJjZUZv
cmdlIFByb2plY3QgLSBodHRwOi8vcnQyeDAwLnNvdXJjZWZvcmdlLm5ldCAgICAgICAgICAgICAg
KiAKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICogCi0gKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqIAotICogICBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSAgKiAKLSAqICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICogCi0gKiAgIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIAot
ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKiAKLSAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICogCi0gKiAgIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAg
ICAgICAqIAotICogICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgKiAKLSAqICAgR05VIEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICogCi0gKiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAqIAotICogICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgKiAKLSAqICAgYWxvbmcgd2l0aCB0
aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlICAgICAgICAgICAgICAgICAgICAgICAg
ICogCi0gKiAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAqIAotICogICA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAz
MzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4gICAgICAgICAgICAgKiAKLSAqICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICogCi0gKiAgIExpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgR1BMICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIAotICogICBPcmlnaW5hbCBjb2RlIHN1
cHBsaWVkIHVuZGVyIGxpY2Vuc2UgZnJvbSBSYUxpbmsgSW5jLCAyMDA0LiAgICAgICAgICAgKiAK
LSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiovCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCi0gKglNb2R1bGUg
TmFtZToJYXNzb2MuYwotICoKLSAqCUFic3RyYWN0OgotICoKLSAqCVJldmlzaW9uIEhpc3Rvcnk6
Ci0gKglXaG8JCVdoZW4JCVdoYXQKLSAqCS0tLS0tLS0tCS0tLS0tLS0tLS0JLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQotICoJTmFtZQkJRGF0ZQkJTW9kaWZpY2F0aW9uIGxvZ3MKLSAq
CUphbiBMZWUJCTIwMDUtMDYtMDEJUmVsZWFzZQotICoqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2lu
Y2x1ZGUgInJ0X2NvbmZpZy5oIg0KLQ0KLVVDSEFSCUNpcGhlcldwYVRlbXBsYXRlW10gPSB7DQot
CQkweGRkLCAJCQkJCS8vIFdQQSBJRQ0KLQkJMHgxNiwJCQkJCS8vIExlbmd0aA0KLQkJMHgwMCwg
MHg1MCwgMHhmMiwgMHgwMSwJLy8gb3VpDQotCQkweDAxLCAweDAwLAkJCQkvLyBWZXJzaW9uDQot
CQkweDAwLCAweDUwLCAweGYyLCAweDAyLAkvLyBNdWx0aWNhc3QNCi0JCTB4MDEsIDB4MDAsCQkJ
CS8vIE51bWJlciBvZiB1bmljYXN0DQotCQkweDAwLCAweDUwLCAweGYyLCAweDAyLAkvLyB1bmlj
YXN0DQotCQkweDAxLCAweDAwLAkJCQkvLyBudW1iZXIgb2YgYXV0aGVudGljYXRpb24gbWV0aG9k
DQotCQkweDAwLCAweDUwLCAweGYyLCAweDAxCS8vIGF1dGhlbnRpY2F0aW9uDQotCQl9Ow0KLQ0K
LVVDSEFSCUNpcGhlcldwYTJUZW1wbGF0ZVtdID0gew0KLQkJMHgzMCwJCQkJCS8vIFJTTiBJRQ0K
LQkJMHgxNCwJCQkJCS8vIExlbmd0aA0KLQkJMHgwMSwgMHgwMCwJCQkJLy8gVmVyc2lvbg0KLQkJ
MHgwMCwgMHgwZiwgMHhhYywgMHgwMiwJLy8gZ3JvdXAgY2lwaGVyLCBUS0lQDQotCQkweDAxLCAw
eDAwLAkJCQkvLyBudW1iZXIgb2YgcGFpcndpc2UNCi0JCTB4MDAsIDB4MGYsIDB4YWMsIDB4MDIs
CS8vIHVuaWNhc3QNCi0JCTB4MDEsIDB4MDAsCQkJCS8vIG51bWJlciBvZiBhdXRoZW50aWNhdGlv
biBtZXRob2QNCi0JCTB4MDAsIDB4MGYsIDB4YWMsIDB4MDIsCS8vIGF1dGhlbnRpY2F0aW9uDQot
CQkweDAwLCAweDAwLAkJCQkvLyBSU04gY2FwYWJpbGl0eQ0KLQkJfTsNCi0NCi0vKiAgDQotICAg
ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09DQotICAgIERlc2NyaXB0aW9uOiANCi0gICAgICAgIGFzc29jaWF0
aW9uIHN0YXRlIG1hY2hpbmUgaW5pdCwgaW5jbHVkaW5nIHN0YXRlIHRyYW5zaXRpb24gYW5kIHRp
bWVyIGluaXQNCi0gICAgUGFyYW1ldGVyczogDQotICAgICAgICBTIC0gcG9pbnRlciB0byB0aGUg
YXNzb2NpYXRpb24gc3RhdGUgbWFjaGluZQ0KLSAgICBOb3RlOg0KLSAgICAgICAgVGhlIHN0YXRl
IG1hY2hpbmUgbG9va3MgbGlrZSB0aGUgZm9sbG93aW5nIA0KLSAgICAgICAgDQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEFTU09DX0lETEUgICAgICAgICAgICAgICBBU1NPQ19XQUlU
X1JTUCAgICAgICAgICAgICBSRUFTU09DX1dBSVRfUlNQICAgICAgICAgICAgIERJU0FTU09DX1dB
SVRfUlNQDQotICAgIE1UMl9NTE1FX0FTU09DX1JFUSAgICAgICBtbG1lX2Fzc29jX3JlcV9hY3Rp
b24gICAgaW52YWxpZF9zdGF0ZV93aGVuX2Fzc29jICAgaW52YWxpZF9zdGF0ZV93aGVuX2Fzc29j
ICAgICAgIGludmFsaWRfc3RhdGVfd2hlbl9hc3NvYw0KLSAgICBNVDJfTUxNRV9SRUFTU09DX1JF
USAgICAgbWxtZV9yZWFzc29jX3JlcV9hY3Rpb24gIGludmFsaWRfc3RhdGVfd2hlbl9yZWFzc29j
IGludmFsaWRfc3RhdGVfd2hlbl9yZWFzc29jICAgICBpbnZhbGlkX3N0YXRlX3doZW5fcmVhc3Nv
Yw0KLSAgICBNVDJfTUxNRV9ESVNBU1NPQ19SRVEgICAgbWxtZV9kaXNhc3NvY19yZXFfYWN0aW9u
IG1sbWVfZGlzYXNzb2NfcmVxX2FjdGlvbiAgIG1sbWVfZGlzYXNzb2NfcmVxX2FjdGlvbiAgICAg
ICBtbG1lX2Rpc2Fzc29jX3JlcV9hY3Rpb24NCi0gICAgTVQyX1BFRVJfRElTQVNTT0NfUkVRICAg
IHBlZXJfZGlzYXNzb2NfYWN0aW9uICAgICBwZWVyX2Rpc2Fzc29jX2FjdGlvbiAgICAgICBwZWVy
X2Rpc2Fzc29jX2FjdGlvbiAgICAgICAgICAgcGVlcl9kaXNhc3NvY19hY3Rpb24NCi0gICAgTVQy
X1BFRVJfQVNTT0NfUkVRICAgICAgIGRyb3AgICAgICAgICAgICAgICAgICAgICBkcm9wICAgICAg
ICAgICAgICAgICAgICAgICBkcm9wICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJvcA0KLSAg
ICBNVDJfUEVFUl9BU1NPQ19SU1AgICAgICAgZHJvcCAgICAgICAgICAgICAgICAgICAgIHBlZXJf
YXNzb2NfcnNwX2FjdGlvbiAgICAgIGRyb3AgICAgICAgICAgICAgICAgICAgICAgICAgICBkcm9w
DQotICAgIE1UMl9QRUVSX1JFQVNTT0NfUkVRICAgICBkcm9wICAgICAgICAgICAgICAgICAgICAg
ZHJvcCAgICAgICAgICAgICAgICAgICAgICAgZHJvcCAgICAgICAgICAgICAgICAgICAgICAgICAg
IGRyb3ANCi0gICAgTVQyX1BFRVJfUkVBU1NPQ19SU1AgICAgIGRyb3AgICAgICAgICAgICAgICAg
ICAgICBkcm9wICAgICAgICAgICAgICAgICAgICAgICBwZWVyX3JlYXNzb2NfcnNwX2FjdGlvbiAg
ICAgICAgZHJvcA0KLSAgICBNVDJfQ0xTM0VSUiAgICAgICAgICAgICAgY2xzM2Vycl9hY3Rpb24g
ICAgICAgICAgIGNsczNlcnJfYWN0aW9uICAgICAgICAgICAgIGNsczNlcnJfYWN0aW9uICAgICAg
ICAgICAgICAgICBjbHMzZXJyX2FjdGlvbg0KLSAgICBNVDJfQVNTT0NfVElNRU9VVCAgICAgICAg
dGltZXJfbm9wICAgICAgICAgICAgICAgIGFzc29jX3RpbWVvdXRfYWN0aW9uICAgICAgIHRpbWVy
X25vcCAgICAgICAgICAgICAgICAgICAgICB0aW1lcl9ub3ANCi0gICAgTVQyX1JFQVNTT0NfVElN
RU9VVCAgICAgIHRpbWVyX25vcCAgICAgICAgICAgICAgICB0aW1lcl9ub3AgICAgICAgICAgICAg
ICAgICByZWFzc29jX3RpbWVvdXRfYWN0aW9uICAgICAgICAgdGltZXJfbm9wDQotICAgIE1UMl9E
SVNBU1NPQ19USU1FT1VUICAgICB0aW1lcl9ub3AgICAgICAgICAgICAgICAgdGltZXJfbm9wICAg
ICAgICAgICAgICAgICAgdGltZXJfbm9wICAgICAgICAgICAgICAgICAgICAgIGRpc2Fzc29jX3Rp
bWVvdXRfYWN0aW9uDQotDQotCUlSUUwgPSBQQVNTSVZFX0xFVkVMDQotCQ0KLSAgICA9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQ0KLSAqLw0KLVZPSUQgQXNzb2NTdGF0ZU1hY2hpbmVJbml0KA0KLSAgICBJTglQ
UlQyNTcwQURBUFRFUglwQWQsIA0KLSAgICBJTiAgU1RBVEVfTUFDSElORSAqUywgDQotICAgIE9V
VCBTVEFURV9NQUNISU5FX0ZVTkMgVHJhbnNbXSkgDQotew0KLQlTdGF0ZU1hY2hpbmVJbml0KFMs
IFRyYW5zLCBNQVhfQVNTT0NfU1RBVEUsIE1BWF9BU1NPQ19NU0csIChTVEFURV9NQUNISU5FX0ZV
TkMpRHJvcCwgQVNTT0NfSURMRSwgQVNTT0NfTUFDSElORV9CQVNFKTsNCi0NCi0JLy8gZmlyc3Qg
Y29sdW1uDQotCVN0YXRlTWFjaGluZVNldEFjdGlvbihTLCBBU1NPQ19JRExFLCBNVDJfTUxNRV9B
U1NPQ19SRVEsIChTVEFURV9NQUNISU5FX0ZVTkMpTWxtZUFzc29jUmVxQWN0aW9uKTsNCi0JU3Rh
dGVNYWNoaW5lU2V0QWN0aW9uKFMsIEFTU09DX0lETEUsIE1UMl9NTE1FX1JFQVNTT0NfUkVRLCAo
U1RBVEVfTUFDSElORV9GVU5DKU1sbWVSZWFzc29jUmVxQWN0aW9uKTsNCi0JU3RhdGVNYWNoaW5l
U2V0QWN0aW9uKFMsIEFTU09DX0lETEUsIE1UMl9NTE1FX0RJU0FTU09DX1JFUSwgKFNUQVRFX01B
Q0hJTkVfRlVOQylNbG1lRGlzYXNzb2NSZXFBY3Rpb24pOw0KLQlTdGF0ZU1hY2hpbmVTZXRBY3Rp
b24oUywgQVNTT0NfSURMRSwgTVQyX1BFRVJfRElTQVNTT0NfUkVRLCAoU1RBVEVfTUFDSElORV9G
VU5DKVBlZXJEaXNhc3NvY0FjdGlvbik7DQotCS8vU3RhdGVNYWNoaW5lU2V0QWN0aW9uKFMsIEFT
U09DX0lETEUsIE1UMl9DTFMzRVJSLCBDbHMzZXJyQWN0aW9uKTsNCi0NCi0JLy8gc2Vjb25kIGNv
bHVtbg0KLQlTdGF0ZU1hY2hpbmVTZXRBY3Rpb24oUywgQVNTT0NfV0FJVF9SU1AsIE1UMl9NTE1F
X0FTU09DX1JFUSwgKFNUQVRFX01BQ0hJTkVfRlVOQylJbnZhbGlkU3RhdGVXaGVuQXNzb2MpOw0K
LQlTdGF0ZU1hY2hpbmVTZXRBY3Rpb24oUywgQVNTT0NfV0FJVF9SU1AsIE1UMl9NTE1FX1JFQVNT
T0NfUkVRLCAoU1RBVEVfTUFDSElORV9GVU5DKUludmFsaWRTdGF0ZVdoZW5SZWFzc29jKTsNCi0J
U3RhdGVNYWNoaW5lU2V0QWN0aW9uKFMsIEFTU09DX1dBSVRfUlNQLCBNVDJfTUxNRV9ESVNBU1NP
Q19SRVEsIChTVEFURV9NQUNISU5FX0ZVTkMpSW52YWxpZFN0YXRlV2hlbkRpc2Fzc29jaWF0ZSk7
DQotCVN0YXRlTWFjaGluZVNldEFjdGlvbihTLCBBU1NPQ19XQUlUX1JTUCwgTVQyX1BFRVJfRElT
QVNTT0NfUkVRLCAoU1RBVEVfTUFDSElORV9GVU5DKVBlZXJEaXNhc3NvY0FjdGlvbik7DQotCVN0
YXRlTWFjaGluZVNldEFjdGlvbihTLCBBU1NPQ19XQUlUX1JTUCwgTVQyX1BFRVJfQVNTT0NfUlNQ
LCAoU1RBVEVfTUFDSElORV9GVU5DKVBlZXJBc3NvY1JzcEFjdGlvbik7DQotCS8vU3RhdGVNYWNo
aW5lU2V0QWN0aW9uKFMsIEFTU09DX1dBSVRfUlNQLCBNVDJfQ0xTM0VSUiwgQ2xzM2VyckFjdGlv
bik7DQotCVN0YXRlTWFjaGluZVNldEFjdGlvbihTLCBBU1NPQ19XQUlUX1JTUCwgTVQyX0FTU09D
X1RJTUVPVVQsIChTVEFURV9NQUNISU5FX0ZVTkMpQXNzb2NUaW1lb3V0QWN0aW9uKTsNCi0NCi0J
Ly8gdGhpcmQgY29sdW1uDQotCVN0YXRlTWFjaGluZVNldEFjdGlvbihTLCBSRUFTU09DX1dBSVRf
UlNQLCBNVDJfTUxNRV9BU1NPQ19SRVEsIChTVEFURV9NQUNISU5FX0ZVTkMpSW52YWxpZFN0YXRl
V2hlbkFzc29jKTsNCi0JU3RhdGVNYWNoaW5lU2V0QWN0aW9uKFMsIFJFQVNTT0NfV0FJVF9SU1As
IE1UMl9NTE1FX1JFQVNTT0NfUkVRLCAoU1RBVEVfTUFDSElORV9GVU5DKUludmFsaWRTdGF0ZVdo
ZW5SZWFzc29jKTsNCi0JU3RhdGVNYWNoaW5lU2V0QWN0aW9uKFMsIFJFQVNTT0NfV0FJVF9SU1As
IE1UMl9NTE1FX0RJU0FTU09DX1JFUSwgKFNUQVRFX01BQ0hJTkVfRlVOQylJbnZhbGlkU3RhdGVX
aGVuRGlzYXNzb2NpYXRlKTsNCi0JU3RhdGVNYWNoaW5lU2V0QWN0aW9uKFMsIFJFQVNTT0NfV0FJ
VF9SU1AsIE1UMl9QRUVSX0RJU0FTU09DX1JFUSwgKFNUQVRFX01BQ0hJTkVfRlVOQylQZWVyRGlz
YXNzb2NBY3Rpb24pOw0KLQlTdGF0ZU1hY2hpbmVTZXRBY3Rpb24oUywgUkVBU1NPQ19XQUlUX1JT
UCwgTVQyX1BFRVJfUkVBU1NPQ19SU1AsIChTVEFURV9NQUNISU5FX0ZVTkMpUGVlclJlYXNzb2NS
c3BBY3Rpb24pOw0KLQkvLyBTdGF0ZU1hY2hpbmVTZXRBY3Rpb24oUywgUkVBU1NPQ19XQUlUX1JT
UCwgTVQyX0NMUzNFUlIsIENsczNlcnJBY3Rpb24pOw0KLQlTdGF0ZU1hY2hpbmVTZXRBY3Rpb24o
UywgUkVBU1NPQ19XQUlUX1JTUCwgTVQyX1JFQVNTT0NfVElNRU9VVCwgKFNUQVRFX01BQ0hJTkVf
RlVOQylSZWFzc29jVGltZW91dEFjdGlvbik7DQotDQotCS8vIGZvdXJ0aCBjb2x1bW4NCi0JU3Rh
dGVNYWNoaW5lU2V0QWN0aW9uKFMsIERJU0FTU09DX1dBSVRfUlNQLCBNVDJfTUxNRV9BU1NPQ19S
RVEsIChTVEFURV9NQUNISU5FX0ZVTkMpSW52YWxpZFN0YXRlV2hlbkFzc29jKTsNCi0JU3RhdGVN
YWNoaW5lU2V0QWN0aW9uKFMsIERJU0FTU09DX1dBSVRfUlNQLCBNVDJfTUxNRV9SRUFTU09DX1JF
USwgKFNUQVRFX01BQ0hJTkVfRlVOQylJbnZhbGlkU3RhdGVXaGVuUmVhc3NvYyk7DQotCVN0YXRl
TWFjaGluZVNldEFjdGlvbihTLCBESVNBU1NPQ19XQUlUX1JTUCwgTVQyX01MTUVfRElTQVNTT0Nf
UkVRLCAoU1RBVEVfTUFDSElORV9GVU5DKUludmFsaWRTdGF0ZVdoZW5EaXNhc3NvY2lhdGUpOw0K
LQlTdGF0ZU1hY2hpbmVTZXRBY3Rpb24oUywgRElTQVNTT0NfV0FJVF9SU1AsIE1UMl9QRUVSX0RJ
U0FTU09DX1JFUSwgKFNUQVRFX01BQ0hJTkVfRlVOQylQZWVyRGlzYXNzb2NBY3Rpb24pOw0KLQkv
L1N0YXRlTWFjaGluZVNldEFjdGlvbihTLCBESVNBU1NPQ19XQUlUX1JTUCwgTVQyX0NMUzNFUlIs
IENsczNlcnJBY3Rpb24pOw0KLQlTdGF0ZU1hY2hpbmVTZXRBY3Rpb24oUywgRElTQVNTT0NfV0FJ
VF9SU1AsIE1UMl9ESVNBU1NPQ19USU1FT1VULCAoU1RBVEVfTUFDSElORV9GVU5DKURpc2Fzc29j
VGltZW91dEFjdGlvbik7DQotDQotCS8vIGluaXRpYWxpemUgdGhlIHRpbWVyDQotCVJUTVBJbml0
VGltZXIocEFkLCAmcEFkLT5NbG1lLkFzc29jQXV4LkFzc29jVGltZXIsIEFzc29jVGltZW91dCk7
DQotCVJUTVBJbml0VGltZXIocEFkLCAmcEFkLT5NbG1lLkFzc29jQXV4LlJlYXNzb2NUaW1lciwg
UmVhc3NvY1RpbWVvdXQpOw0KLQlSVE1QSW5pdFRpbWVyKHBBZCwgJnBBZC0+TWxtZS5Bc3NvY0F1
eC5EaXNhc3NvY1RpbWVyLCBEaXNhc3NvY1RpbWVvdXQpOw0KLX0NCi0NCi0vKg0KLSAgICA9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQ0KLSAgICBEZXNjcmlwdGlvbjoNCi0gICAgICAgIEFzc29jaWF0aW9uIHRp
bWVvdXQgcHJvY2VkdXJlLiBBZnRlciBhc3NvY2lhdGlvbiB0aW1lb3V0LCB0aGlzIGZ1bmN0aW9u
IA0KLSAgICAgICAgd2lsbCBiZSBjYWxsZWQgYW5kIGl0IHdpbGwgcHV0IGEgbWVzc2FnZSBpbnRv
IHRoZSBNTE1FIHF1ZXVlDQotICAgIFBhcmFtZXRlcnM6DQotICAgICAgICBTdGFuZGFyZCB0aW1l
ciBwYXJhbWV0ZXJzDQotDQotCUlSUUwgPSBESVNQQVRDSF9MRVZFTA0KLQ0KLSAgICA9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQ0KLSAqLw0KLVZPSUQgIEFzc29jVGltZW91dCh1bnNpZ25lZCBsb25nIGRhdGEp
DQotew0KLQlQUlQyNTcwQURBUFRFUglwQWQgPSAoUFJUMjU3MEFEQVBURVIpZGF0YTsNCi0JREJH
UFJJTlQoUlRfREVCVUdfVFJBQ0UsICJBU1NPQyAtIGVucXVldWUgTVQyX0FTU09DX1RJTUVPVVQg
XG4iKTsNCi0JDQotCS8vIERvIG5vdGhpbmcgaWYgdGhlIGRyaXZlciBpcyBzdGFydGluZyBoYWx0
IHN0YXRlLg0KLQkvLyBUaGlzIG1pZ2h0IGhhcHBlbiB3aGVuIHRpbWVyIGFscmVhZHkgYmVlbiBm
aXJlZCBiZWZvcmUgY2FuY2VsIHRpbWVyIHdpdGggbWxtZWhhbHQNCi0JaWYgKFJUTVBfVEVTVF9G
TEFHKHBBZCwgZlJUTVBfQURBUFRFUl9IQUxUX0lOX1BST0dSRVNTKSkNCi0JCXJldHVybjsNCi0N
Ci0JTWxtZUVucXVldWUocEFkLCBBU1NPQ19TVEFURV9NQUNISU5FLCBNVDJfQVNTT0NfVElNRU9V
VCwgMCwgTlVMTCk7DQotCS8vS2VTZXRFdmVudCgmcEFkLT5NTE1FRXZlbnQsIDAsIEZBTFNFKTsJ
DQotCVJUVVNCVXAocEFkLCAoJihwQWQtPm1sbWVfc2VtYXBob3JlKSkpOw0KLX0NCi0NCi0vKg0K
LSAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQ0KLSAgICBEZXNjcmlwdGlvbjoNCi0gICAgICAgIFJlYXNz
b2NpYXRpb24gdGltZW91dCBwcm9jZWR1cmUuIEFmdGVyIHJlYXNzb2NpYXRpb24gdGltZW91dCwg
dGhpcyANCi0gICAgICAgIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGFuZCBwdXQgYSBtZXNzYWdl
IGludG8gdGhlIE1MTUUgcXVldWUNCi0gICAgUGFyYW1ldGVyczoNCi0gICAgICAgIFN0YW5kYXJk
IHRpbWVyIHBhcmFtZXRlcnMNCi0NCi0JSVJRTCA9IERJU1BBVENIX0xFVkVMDQotDQotICAgID09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09DQotICovDQotVk9JRCAgUmVhc3NvY1RpbWVvdXQodW5zaWduZWQgbG9u
ZyBkYXRhKQ0KLXsNCi0JUFJUMjU3MEFEQVBURVIJcEFkID0gKFBSVDI1NzBBREFQVEVSKWRhdGE7
DQotCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCJBU1NPQyAtIGVucXVldWUgTVQyX1JFQVNTT0Nf
VElNRU9VVCBcbiIpOw0KLQkNCi0JLy8gRG8gbm90aGluZyBpZiB0aGUgZHJpdmVyIGlzIHN0YXJ0
aW5nIGhhbHQgc3RhdGUuDQotCS8vIFRoaXMgbWlnaHQgaGFwcGVuIHdoZW4gdGltZXIgYWxyZWFk
eSBiZWVuIGZpcmVkIGJlZm9yZSBjYW5jZWwgdGltZXIgd2l0aCBtbG1laGFsdA0KLQlpZiAoUlRN
UF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0hBTFRfSU5fUFJPR1JFU1MpKQ0KLQkJcmV0
dXJuOw0KLQ0KLQlNbG1lRW5xdWV1ZShwQWQsIEFTU09DX1NUQVRFX01BQ0hJTkUsIE1UMl9SRUFT
U09DX1RJTUVPVVQsIDAsIE5VTEwpOw0KLQkvL0tlU2V0RXZlbnQoJnBBZC0+TUxNRUV2ZW50LCAw
LCBGQUxTRSk7CQ0KLQlSVFVTQlVwKHBBZCwgKCYocEFkLT5tbG1lX3NlbWFwaG9yZSkpKTsNCi19
DQotDQotLyoNCi0gICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0gICAgRGVzY3JpcHRpb246DQotICAg
ICAgICBEaXNhc3NvY2lhdGlvbiB0aW1lb3V0IHByb2NlZHVyZS4gQWZ0ZXIgZGlzYXNzb2NpYXRp
b24gdGltZW91dCwgdGhpcyANCi0gICAgICAgIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGFuZCBw
dXQgYSBtZXNzYWdlIGludG8gdGhlIE1MTUUgcXVldWUNCi0gICAgUGFyYW1ldGVyczoNCi0gICAg
ICAgIFN0YW5kYXJkIHRpbWVyIHBhcmFtZXRlcnMNCi0gICAgICAgIA0KLQlJUlFMID0gRElTUEFU
Q0hfTEVWRUwNCi0NCi0gICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0gKi8NCi1WT0lEICBEaXNhc3Nv
Y1RpbWVvdXQodW5zaWduZWQgbG9uZyBkYXRhKQ0KLXsNCi0JUFJUMjU3MEFEQVBURVIJcEFkID0g
KFBSVDI1NzBBREFQVEVSKWRhdGE7DQotCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCJBU1NPQyAt
IGVucXVldWUgTVQyX0RJU0FTU09DX1RJTUVPVVQgXG4iKTsNCi0NCi0JLy8gRG8gbm90aGluZyBp
ZiB0aGUgZHJpdmVyIGlzIHN0YXJ0aW5nIGhhbHQgc3RhdGUuDQotCS8vIFRoaXMgbWlnaHQgaGFw
cGVuIHdoZW4gdGltZXIgYWxyZWFkeSBiZWVuIGZpcmVkIGJlZm9yZSBjYW5jZWwgdGltZXIgd2l0
aCBtbG1laGFsdA0KLQlpZiAoUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0hBTFRf
SU5fUFJPR1JFU1MpKQ0KLQkJcmV0dXJuOw0KLQ0KLQlNbG1lRW5xdWV1ZShwQWQsIEFTU09DX1NU
QVRFX01BQ0hJTkUsIE1UMl9ESVNBU1NPQ19USU1FT1VULCAwLCBOVUxMKTsNCi0JLy9LZVNldEV2
ZW50KCZwQWQtPk1MTUVFdmVudCwgMCwgRkFMU0UpOwkNCi0JUlRVU0JVcChwQWQsICgmKHBBZC0+
bWxtZV9zZW1hcGhvcmUpKSk7DQotfQ0KLQ0KLS8qDQotICAgID09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQot
ICAgIERlc2NyaXB0aW9uOg0KLSAgICAgICAgbWxtZSBhc3NvYyByZXEgaGFuZGxpbmcgcHJvY2Vk
dXJlDQotICAgIFBhcmFtZXRlcnM6DQotICAgICAgICBBZGFwdGVyIC0gQWRhcHRlciBwb2ludGVy
DQotICAgICAgICBFbGVtIC0gTUxNRSBRdWV1ZSBFbGVtZW50DQotICAgIFByZToNCi0gICAgICAg
IHRoZSBzdGF0aW9uIGhhcyBiZWVuIGF1dGhlbnRpY2F0ZWQgYW5kIHRoZSBmb2xsb3dpbmcgaW5m
b3JtYXRpb24gaXMgc3RvcmVkIGluIHRoZSBjb25maWcNCi0gICAgICAgICAgICAtIyBTU0lEDQot
ICAgICAgICAgICAgLSMgc3VwcG9ydGVkIHJhdGVzIGFuZCB0aGVpciBsZW5ndGgNCi0gICAgICAg
ICAgICAtIyBsaXN0ZW4gaW50ZXJ2YWwgKEFkYXB0ZXItPlBvcnRDZmcuZGVmYXVsdF9saXN0ZW5f
Y291bnQpDQotICAgICAgICAgICAgLSMgVHJhbnNtaXQgcG93ZXIgIChBZGFwdGVyLT5Qb3J0Q2Zn
LnR4X3Bvd2VyKQ0KLSAgICBQb3N0ICA6DQotICAgICAgICAtIyBBbiBhc3NvY2lhdGlvbiByZXF1
ZXN0IGZyYW1lIGlzIGdlbmVyYXRlZCBhbmQgc2VudCB0byB0aGUgYWlyDQotICAgICAgICAtIyBB
c3NvY2lhdGlvbiB0aW1lciBzdGFydHMNCi0gICAgICAgIC0jIEFzc29jaWF0aW9uIHN0YXRlIC0+
IEFTU09DX1dBSVRfUlNQDQotICAgICAgICANCi0JSVJRTCA9IERJU1BBVENIX0xFVkVMDQotDQot
ICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09DQotICovDQotVk9JRCBNbG1lQXNzb2NSZXFBY3Rpb24oDQot
ICAgIElOIFBSVDI1NzBBREFQVEVSIHBBZCwgDQotICAgIElOIE1MTUVfUVVFVUVfRUxFTSAqRWxl
bSkgDQotew0KLQlNQUNBRERSICAgICAgICAgIEFwQWRkcjsNCi0JTUFDSERSICAgICAgICAgICBB
c3NvY0hkcjsNCi0JVUNIQVIgICAgICAgICAgICBTc2lkSWUgPSBJRV9TU0lELCBSYXRlSWUgPSBJ
RV9TVVBQX1JBVEVTLCBFeHRSYXRlSWUgPSBJRV9FWFRfU1VQUF9SQVRFUzsNCi0JVUNIQVIJCQkg
Q2lwaGVyVG1wWzY0XTsNCi0JVUNIQVIJCQkgQ2lwaGVyVG1wTGVuOw0KLQlVU0hPUlQgICAgICAg
ICAgIExpc3RlbkludHY7DQotCVVMT05HICAgICAgICAgICAgVGltZW91dDsNCi0JVVNIT1JUICAg
ICAgICAgICBDYXBhYmlsaXR5SW5mbzsNCi0JVUNIQVIgICAgICAgICAgICpPdXRCdWZmZXIgPSBO
VUxMOw0KLQlORElTX1NUQVRVUyAgICAgIE5TdGF0dXM7DQotCVVMT05HICAgICAgICAgICAgRnJh
bWVMZW4gPSAwOw0KLQlVTE9ORwkJCSB0bXAsIGlkeDsNCi0JQk9PTEVBTgkJCSBGb3VuZFBNSyA9
IEZBTFNFOw0KLQlVQ0hBUgkJCSBWYXJJZXNPZmZzZXQ7DQotDQotCS8vIEJsb2NrIGFsbCBhdXRo
ZW50aWNhdGlvbiByZXF1ZXN0IGR1cm5pbmcgV1BBIGJsb2NrIHBlcmlvZA0KLQlpZiAocEFkLT5Q
b3J0Q2ZnLmJCbG9ja0Fzc29jID09IFRSVUUpDQotCXsNCi0JCURCR1BSSU5UKFJUX0RFQlVHX1RS
QUNFLCAiQVNTT0MgLSBCbG9jayBBc3NvYyByZXF1ZXN0IGR1cm5pbmcgV1BBIGJsb2NrIHBlcmlv
ZCFcbiIpOw0KLQkJcEFkLT5NbG1lLkFzc29jTWFjaGluZS5DdXJyU3RhdGUgPSBBU1NPQ19JRExF
Ow0KLQkJTWxtZUNudGxDb25maXJtKHBBZCwgTVQyX0FTU09DX0NPTkYsIE1MTUVfU1RBVEVfTUFD
SElORV9SRUpFQ1QpOw0KLQl9CQ0KLQkvLyBjaGVjayBzYW5pdHkgZmlyc3QNCi0JZWxzZSBpZiAo
TWxtZUFzc29jUmVxU2FuaXR5KHBBZCwgRWxlbS0+TXNnLCBFbGVtLT5Nc2dMZW4sICZBcEFkZHIs
ICZDYXBhYmlsaXR5SW5mbywgJlRpbWVvdXQsICZMaXN0ZW5JbnR2KSkgDQotCXsNCi0gICAgICAg
IFJUTVBDYW5jZWxUaW1lcigmcEFkLT5NbG1lLkFzc29jQXV4LkFzc29jVGltZXIpOw0KLSAgICAg
ICAgQ09QWV9NQUNfQUREUigmcEFkLT5NbG1lLkFzc29jQXV4LkFkZHIsICZBcEFkZHIpOw0KLQkJ
Ly8gTWFzayBvdXQgdW5uZWNlc3NhcnkgY2FwYWJpbGl0eSBpbmZvcm1hdGlvbg0KLQkJQ2FwYWJp
bGl0eUluZm8gJj0gU1VQUE9SVEVEX0NBUEFCSUxJVFlfSU5GTzsgLy8gcEFkLT5Qb3J0Q2ZnLlN1
cHBvcnRlZENhcGFiaWxpdHlJbmZvOw0KLSAgICAgICAgcEFkLT5NbG1lLkFzc29jQXV4LkNhcGFi
aWxpdHlJbmZvID0gQ2FwYWJpbGl0eUluZm87DQotICAgICAgICBwQWQtPk1sbWUuQXNzb2NBdXgu
TGlzdGVuSW50diA9IExpc3RlbkludHY7DQotDQotICAgICAgICBOU3RhdHVzID0gTWxtZUFsbG9j
YXRlTWVtb3J5KHBBZCwgKFBWT0lEKSZPdXRCdWZmZXIpOyAgLy9HZXQgYW4gdW51c2VkIG5vbnBh
Z2VkIG1lbW9yeQ0KLSAgICAgICAgaWYgKE5TdGF0dXMgIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykg
DQotICAgICAgICB7DQotICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsIkFTU09D
IC0gTWxtZUFzc29jUmVxQWN0aW9uKCkgYWxsb2NhdGUgbWVtb3J5IGZhaWxlZCBcbiIpOw0KLSAg
ICAgICAgICAgIHBBZC0+TWxtZS5Bc3NvY01hY2hpbmUuQ3VyclN0YXRlID0gQVNTT0NfSURMRTsN
Ci0gICAgICAgICAgICBNbG1lQ250bENvbmZpcm0ocEFkLCBNVDJfQVNTT0NfQ09ORiwgTUxNRV9G
QUlMX05PX1JFU09VUkNFKTsNCi0gICAgICAgICAgICByZXR1cm47DQotICAgICAgICB9DQotICAg
ICAgICANCi0JCS8vIEFkZCBieSBKYW1lcyAwMy8wNi8yNw0KLQkJcEFkLT5Qb3J0Q2ZnLkFzc29j
SW5mby5MZW5ndGggPSBzaXplb2YoTkRJU184MDJfMTFfQVNTT0NJQVRJT05fSU5GT1JNQVRJT04p
Ow0KLQkJLy8gQXNzb2NpYXRpb24gZG9uJ3QgbmVlZCB0byByZXBvcnQgTUFDIGFkZHJlc3MNCi0J
CXBBZC0+UG9ydENmZy5Bc3NvY0luZm8uQXZhaWxhYmxlUmVxdWVzdEZpeGVkSUVzID0NCi0JCQlO
RElTXzgwMl8xMV9BSV9SRVFGSV9DQVBBQklMSVRJRVMgfCBORElTXzgwMl8xMV9BSV9SRVFGSV9M
SVNURU5JTlRFUlZBTDsNCi0JCXBBZC0+UG9ydENmZy5Bc3NvY0luZm8uUmVxdWVzdEZpeGVkSUVz
LkNhcGFiaWxpdGllcyA9IENhcGFiaWxpdHlJbmZvOw0KLQkJcEFkLT5Qb3J0Q2ZnLkFzc29jSW5m
by5SZXF1ZXN0Rml4ZWRJRXMuTGlzdGVuSW50ZXJ2YWwgPSBMaXN0ZW5JbnR2OwkJDQotCQkvLyBP
bmx5IHJlYXNzb2NpYXRlIG5lZWQgdGhpcw0KLQkJLy8gTmRpc01vdmVNZW1vcnkocEFkLT5Qb3J0
Q2ZnLkFzc29jSW5mby5SZXF1ZXN0Rml4ZWRJRXMuQ3VycmVudEFQQWRkcmVzcywgJkFzc29jSGRy
LCBzaXplb2YoTkRJU184MDJfMTFfTUFDX0FERFJFU1MpKTsNCi0JCXBBZC0+UG9ydENmZy5Bc3Nv
Y0luZm8uT2Zmc2V0UmVxdWVzdElFcyA9IHNpemVvZihORElTXzgwMl8xMV9BU1NPQ0lBVElPTl9J
TkZPUk1BVElPTik7CQ0KLQkJDQotCQkvLyBGaXJzdCBhZGQgU1NJRA0KLQkJVmFySWVzT2Zmc2V0
ID0gMDsNCi0JCU5kaXNNb3ZlTWVtb3J5KHBBZC0+UG9ydENmZy5SZXFWYXJJRXMgKyBWYXJJZXNP
ZmZzZXQsICZTc2lkSWUsIDEpOw0KLQkJVmFySWVzT2Zmc2V0ICs9IDE7DQotCQlOZGlzTW92ZU1l
bW9yeShwQWQtPlBvcnRDZmcuUmVxVmFySUVzICsgVmFySWVzT2Zmc2V0LCAmcEFkLT5Qb3J0Q2Zn
LlNzaWRMZW4sIDEpOw0KLQkJVmFySWVzT2Zmc2V0ICs9IDE7DQotCQlOZGlzTW92ZU1lbW9yeShw
QWQtPlBvcnRDZmcuUmVxVmFySUVzICsgVmFySWVzT2Zmc2V0LCBwQWQtPlBvcnRDZmcuU3NpZCwg
cEFkLT5Qb3J0Q2ZnLlNzaWRMZW4pOw0KLQkJVmFySWVzT2Zmc2V0ICs9IHBBZC0+UG9ydENmZy5T
c2lkTGVuOw0KLQ0KLQkJLy8gU2Vjb25kIGFkZCBTdXBwb3J0ZWQgcmF0ZXMNCi0JCU5kaXNNb3Zl
TWVtb3J5KHBBZC0+UG9ydENmZy5SZXFWYXJJRXMgKyBWYXJJZXNPZmZzZXQsICZSYXRlSWUsIDEp
Ow0KLQkJVmFySWVzT2Zmc2V0ICs9IDE7DQotCQlOZGlzTW92ZU1lbW9yeShwQWQtPlBvcnRDZmcu
UmVxVmFySUVzICsgVmFySWVzT2Zmc2V0LCAmcEFkLT5Qb3J0Q2ZnLlN1cHBvcnRlZFJhdGVzTGVu
LCAxKTsNCi0JCVZhckllc09mZnNldCArPSAxOw0KLQkJTmRpc01vdmVNZW1vcnkocEFkLT5Qb3J0
Q2ZnLlJlcVZhcklFcyArIFZhckllc09mZnNldCwgcEFkLT5Qb3J0Q2ZnLlN1cHBvcnRlZFJhdGVz
LCBwQWQtPlBvcnRDZmcuU3VwcG9ydGVkUmF0ZXNMZW4pOw0KLQkJVmFySWVzT2Zmc2V0ICs9IHBB
ZC0+UG9ydENmZy5TdXBwb3J0ZWRSYXRlc0xlbjsNCi0JCS8vIEVuZCBBZGQgYnkgSmFtZXMNCi0N
Ci0gICAgICAgIE1ndE1hY0hlYWRlckluaXQocEFkLCAmQXNzb2NIZHIsIFNVQlRZUEVfQVNTT0Nf
UkVRLCAwLCAmQXBBZGRyLCAmQXBBZGRyKTsNCi0JCQ0KLQkJLy8gQnVpbGQgYmFzaWMgZnJhbWUg
Zmlyc3QNCi0JCU1ha2VPdXRnb2luZ0ZyYW1lKA0KLQkJCU91dEJ1ZmZlciwJCQkJCSZGcmFtZUxl
biwNCi0JCQkJCQkgIHNpemVvZihNQUNIRFIpLAkJCSZBc3NvY0hkciwNCi0JCQkJCQkgIDIsCQkJ
CQkJJkNhcGFiaWxpdHlJbmZvLA0KLQkJCQkJCSAgMiwJCQkJCQkmTGlzdGVuSW50diwNCi0JCQkJ
CQkgIDEsCQkJCQkJJlNzaWRJZSwNCi0JCQkJCQkgIDEsCQkJCQkJJnBBZC0+UG9ydENmZy5Tc2lk
TGVuLCANCi0JCQkJCQkgIHBBZC0+UG9ydENmZy5Tc2lkTGVuLCAJcEFkLT5Qb3J0Q2ZnLlNzaWQs
DQotCQkJCQkJICAxLAkJCQkJCSZSYXRlSWUsDQotCQkJCQkJICAxLAkJCQkJCSZwQWQtPlBvcnRD
ZmcuU3VwUmF0ZUxlbiwNCi0JCQkJCQkgIHBBZC0+UG9ydENmZy5TdXBSYXRlTGVuLCAgcEFkLT5Q
b3J0Q2ZnLlN1cFJhdGUsDQotCQkJCQkJICBFTkRfT0ZfQVJHUyk7DQotCQlpZiAocEFkLT5Qb3J0
Q2ZnLkV4dFJhdGVMZW4gIT0gMCkNCi0JCXsNCi0JCQlNYWtlT3V0Z29pbmdGcmFtZSgNCi0JCQkJ
T3V0QnVmZmVyICsgRnJhbWVMZW4sCQkmdG1wLA0KLQkJCQkJCTEsCQkJCQkJCSZFeHRSYXRlSWUs
DQotCQkJCQkJMSwJCQkJCQkJJnBBZC0+UG9ydENmZy5FeHRSYXRlTGVuLA0KLQkJCQkJCXBBZC0+
UG9ydENmZy5FeHRSYXRlTGVuLAlwQWQtPlBvcnRDZmcuRXh0UmF0ZSwJCQkJCQkJDQotCQkJCQkJ
RU5EX09GX0FSR1MpOw0KLQkJCUZyYW1lTGVuICs9IHRtcDsNCi0JCX0NCi0JCQ0KLQkJLy8gRm9y
IFdQQSAvIFdQQS1QU0sNCi0JCWlmICgocEFkLT5Qb3J0Q2ZnLkF1dGhNb2RlID09IE5kaXM4MDJf
MTFBdXRoTW9kZVdQQSkgfHwgKHBBZC0+UG9ydENmZy5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0
aE1vZGVXUEFQU0spKQ0KLQkJew0KLQkJCS8vIENvcHkgV1BBIHRlbXBsYXRlIHRvIGJ1ZmZlcg0K
LQkJCUNpcGhlclRtcExlbiA9IHNpemVvZihDaXBoZXJXcGFUZW1wbGF0ZSk7DQotCQkJTmRpc01v
dmVNZW1vcnkoQ2lwaGVyVG1wLCBDaXBoZXJXcGFUZW1wbGF0ZSwgQ2lwaGVyVG1wTGVuKTsNCi0J
CQkvLyBNb2RpZnkgR3JvdXAgY2lwaGVyDQotCQkJQ2lwaGVyVG1wWzExXSA9ICgocEFkLT5Qb3J0
Q2ZnLkdyb3VwQ2lwaGVyID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uMkVuYWJsZWQpID8gMHgyIDog
MHg0KTsJCQkNCi0JCQkvLyBNb2RpZnkgUGFpcndpc2UgY2lwaGVyDQotCQkJQ2lwaGVyVG1wWzE3
XSA9ICgocEFkLT5Qb3J0Q2ZnLlBhaXJDaXBoZXIgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24yRW5h
YmxlZCkgPyAweDIgOiAweDQpOw0KLQkJCS8vIE1vZGlmeSBBS00NCi0JCQlDaXBoZXJUbXBbMjNd
ID0gKChwQWQtPlBvcnRDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBKSA/IDB4
MSA6IDB4Mik7DQotCQkJLy8gTWFrZSBvdXRnb2luZyBmcmFtZQ0KLQkJCU1ha2VPdXRnb2luZ0Zy
YW1lKA0KLQkJCQlPdXRCdWZmZXIgKyBGcmFtZUxlbiwJJnRtcCwNCi0JCQkJQ2lwaGVyVG1wTGVu
LAkJCSZDaXBoZXJUbXBbMF0sDQotCQkJCUVORF9PRl9BUkdTKTsNCi0JCQlGcmFtZUxlbiArPSB0
bXA7DQotCQkJDQotCQkJLy8gQXBwZW5kIFZhcmlhYmxlIElFDQotCQkJTmRpc01vdmVNZW1vcnko
cEFkLT5Qb3J0Q2ZnLlJlcVZhcklFcyArIFZhckllc09mZnNldCwgQ2lwaGVyVG1wLCBDaXBoZXJU
bXBMZW4pOw0KLQkJCVZhckllc09mZnNldCArPSBDaXBoZXJUbXBMZW47DQotCQkJDQotCQkJLy8g
U2V0IFZhcmlhYmxlIElFcyBMZW5ndGgNCi0JCQlwQWQtPlBvcnRDZmcuUmVxVmFySUVMZW4gPSBW
YXJJZXNPZmZzZXQ7DQotCQkJcEFkLT5Qb3J0Q2ZnLkFzc29jSW5mby5SZXF1ZXN0SUVMZW5ndGgg
PSBWYXJJZXNPZmZzZXQ7DQotCQkJLy8gT2Zmc2V0UmVzcG9uc2VJRXMgZm9sbG93IFJlcVZhcklF
DQotCQkJcEFkLT5Qb3J0Q2ZnLkFzc29jSW5mby5PZmZzZXRSZXNwb25zZUlFcyA9IHNpemVvZihO
RElTXzgwMl8xMV9BU1NPQ0lBVElPTl9JTkZPUk1BVElPTikgKyBwQWQtPlBvcnRDZmcuUmVxVmFy
SUVMZW47CQkJDQotCQl9DQotCQkvLyBGb3IgV1BBMiAvIFdQQTItUFNLDQotCQllbHNlIGlmICgo
cEFkLT5Qb3J0Q2ZnLkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQTIpIHx8IChwQWQt
PlBvcnRDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBMlBTSykpDQotCQl7DQot
CQkJLy8gQ29weSBXUEEyIHRlbXBsYXRlIHRvIGJ1ZmZlcg0KLQkJCUNpcGhlclRtcExlbiA9IHNp
emVvZihDaXBoZXJXcGEyVGVtcGxhdGUpOw0KLQkJCU5kaXNNb3ZlTWVtb3J5KENpcGhlclRtcCwg
Q2lwaGVyV3BhMlRlbXBsYXRlLCBDaXBoZXJUbXBMZW4pOw0KLQkJCS8vIE1vZGlmeSBHcm91cCBj
aXBoZXINCi0JCQlDaXBoZXJUbXBbN10gPSAoKHBBZC0+UG9ydENmZy5Hcm91cENpcGhlciA9PSBO
ZGlzODAyXzExRW5jcnlwdGlvbjJFbmFibGVkKSA/IDB4MiA6IDB4NCk7CQkJDQotCQkJLy8gTW9k
aWZ5IFBhaXJ3aXNlIGNpcGhlcg0KLQkJCUNpcGhlclRtcFsxM10gPSAoKHBBZC0+UG9ydENmZy5Q
YWlyQ2lwaGVyID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uMkVuYWJsZWQpID8gMHgyIDogMHg0KTsN
Ci0JCQkvLyBNb2RpZnkgQUtNDQotCQkJQ2lwaGVyVG1wWzE5XSA9ICgocEFkLT5Qb3J0Q2ZnLkF1
dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQTIpID8gMHgxIDogMHgyKTsNCi0JCQkvLyBD
aGVjayBmb3IgV1BBIFBNSyBjYWNoZSBsaXN0DQotCQkJaWYgKHBBZC0+UG9ydENmZy5BdXRoTW9k
ZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEEyKQ0KLQkJCXsNCi0JCQkJLy8gU2VhcmNoIGNoY2hl
ZCBQTUtJRCwgYXBwZW5kIGl0IGlmIGV4aXN0ZWQNCi0JCQkJZm9yIChpZHggPSAwOyBpZHggPCBQ
TUtJRF9OTzsgaWR4KyspDQotCQkJCXsNCi0JCQkJCWlmIChOZGlzRXF1YWxNZW1vcnkoJkFwQWRk
ciwgJnBBZC0+UG9ydENmZy5TYXZlZFBNS1tpZHhdLCA2KSkNCi0JCQkJCXsNCi0JCQkJCQlGb3Vu
ZFBNSyA9IFRSVUU7DQotCQkJCQkJYnJlYWs7DQotCQkJCQl9DQotCQkJCQkJDQotCQkJCX0NCi0J
CQkJaWYgKEZvdW5kUE1LKQ0KLQkJCQl7DQotCQkJCQkvLyBVcGRhdGUgbGVuZ3RoIHdpdGhpbiBS
U04gSUUNCi0JCQkJCUNpcGhlclRtcFsxXSArPSAxODsNCi0JCQkJCS8vIFNldCBQTUsgbnVtYmVy
DQotCQkJCQkqKFBVU0hPUlQpICZDaXBoZXJUbXBbQ2lwaGVyVG1wTGVuXSA9IDE7DQotCQkJCQlO
ZGlzTW92ZU1lbW9yeSgmQ2lwaGVyVG1wW0NpcGhlclRtcExlbiArIDJdLCAmcEFkLT5Qb3J0Q2Zn
LlNhdmVkUE1LW2lkeF0uUE1LSUQsIDE2KTsNCi0JCQkJCUNpcGhlclRtcExlbiArPSAxODsNCi0J
CQkJfQ0KLQkJCX0NCi0JCQkNCi0JCQkvLyBNYWtlIG91dGdvaW5nIGZyYW1lDQotCQkJTWFrZU91
dGdvaW5nRnJhbWUoDQotCQkJCU91dEJ1ZmZlciArIEZyYW1lTGVuLAkmdG1wLA0KLQkJCQlDaXBo
ZXJUbXBMZW4sCQkJJkNpcGhlclRtcFswXSwNCi0JCQkJRU5EX09GX0FSR1MpOw0KLQkJCUZyYW1l
TGVuICs9IHRtcDsNCi0NCi0JCQkvLyBBcHBlbmQgVmFyaWFibGUgSUUNCi0JCQlOZGlzTW92ZU1l
bW9yeShwQWQtPlBvcnRDZmcuUmVxVmFySUVzICsgVmFySWVzT2Zmc2V0LCBDaXBoZXJUbXAsIENp
cGhlclRtcExlbik7DQotCQkJVmFySWVzT2Zmc2V0ICs9IENpcGhlclRtcExlbjsNCi0JCQkNCi0J
CQkvLyBTZXQgVmFyaWFibGUgSUVzIExlbmd0aA0KLQkJCXBBZC0+UG9ydENmZy5SZXFWYXJJRUxl
biA9IFZhckllc09mZnNldDsNCi0JCQlwQWQtPlBvcnRDZmcuQXNzb2NJbmZvLlJlcXVlc3RJRUxl
bmd0aCA9IFZhckllc09mZnNldDsNCi0JCQkvLyBPZmZzZXRSZXNwb25zZUlFcyBmb2xsb3cgUmVx
VmFySUUNCi0JCQlwQWQtPlBvcnRDZmcuQXNzb2NJbmZvLk9mZnNldFJlc3BvbnNlSUVzID0gc2l6
ZW9mKE5ESVNfODAyXzExX0FTU09DSUFUSU9OX0lORk9STUFUSU9OKSArIHBBZC0+UG9ydENmZy5S
ZXFWYXJJRUxlbjsJCQkNCi0JCX0NCi0JCWVsc2UNCi0JCXsNCi0JCQkvLyBEbyBub3RoaW5nDQot
CQkJOw0KLQkJfQ0KLQ0KLSAgICAgICAgTWluaXBvcnRNTVJlcXVlc3QocEFkLCBPdXRCdWZmZXIs
IEZyYW1lTGVuKTsNCi0gICAgICAgICAgICANCi0gICAgICAgIFJUTVBTZXRUaW1lcihwQWQsICZw
QWQtPk1sbWUuQXNzb2NBdXguQXNzb2NUaW1lciwgVGltZW91dCk7IC8qIGluIG1TZWMgKi8NCi0g
ICAgICAgIHBBZC0+TWxtZS5Bc3NvY01hY2hpbmUuQ3VyclN0YXRlID0gQVNTT0NfV0FJVF9SU1A7
DQotICAgIH0gDQotICAgIGVsc2UgDQotICAgIHsNCi0gICAgICAgIERCR1BSSU5UKFJUX0RFQlVH
X1RSQUNFLCJBU1NPQyAtIE1sbWVBc3NvY1JlcUFjdGlvbigpIHNhbml0eSBjaGVjayBmYWlsZWQu
IEJVRyEhISEhISBcbiIpOw0KLSAgICAgICAgcEFkLT5NbG1lLkFzc29jTWFjaGluZS5DdXJyU3Rh
dGUgPSBBU1NPQ19JRExFOw0KLSAgICAgICAgTWxtZUNudGxDb25maXJtKHBBZCwgTVQyX0FTU09D
X0NPTkYsIE1MTUVfSU5WQUxJRF9GT1JNQVQpOw0KLSAgICB9DQotfQ0KLQ0KLS8qDQotICAgID09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09DQotICAgIERlc2NyaXB0aW9uOg0KLSAgICAgICAgbWxtZSByZWFzc29j
IHJlcSBoYW5kbGluZyBwcm9jZWR1cmUNCi0gICAgUGFyYW1ldGVyczoNCi0gICAgICAgIEVsZW0g
LSANCi0gICAgUHJlOg0KLSAgICAgICAgLSMgU1NJRCAgKEFkYXB0ZXItPlBvcnRDZmcuc3NpZFtd
KQ0KLSAgICAgICAgLSMgQlNTSUQgKEFQIGFkZHJlc3MsIEFkYXB0ZXItPlBvcnRDZmcuYnNzaWQp
DQotICAgICAgICAtIyBTdXBwb3J0ZWQgcmF0ZXMgKEFkYXB0ZXItPlBvcnRDZmcuc3VwcG9ydGVk
X3JhdGVzW10pDQotICAgICAgICAtIyBTdXBwb3J0ZWQgcmF0ZXMgbGVuZ3RoIChBZGFwdGVyLT5Q
b3J0Q2ZnLnN1cHBvcnRlZF9yYXRlc19sZW4pDQotICAgICAgICAtIyBUeCBwb3dlciAoQWRhcHRl
ci0+UG9ydENmZy50eF9wb3dlcikNCi0gICAgICAgIA0KLQlJUlFMID0gRElTUEFUQ0hfTEVWRUwN
Ci0NCi0gICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0gKi8NCi1WT0lEIE1sbWVSZWFzc29jUmVxQWN0
aW9uKA0KLSAgICBJTiBQUlQyNTcwQURBUFRFUiBwQWQsIA0KLSAgICBJTiBNTE1FX1FVRVVFX0VM
RU0gKkVsZW0pIA0KLXsNCi0JTUFDQUREUiAgICAgICAgICAgICAgQXBBZGRyOw0KLQlNQUNIRFIg
ICAgICAgICAgICAgICBSZWFzc29jSGRyOw0KLQlVQ0hBUiAgICAgICAgICAgICAgICBTc2lkSWUg
PSBJRV9TU0lELCBSYXRlSWUgPSBJRV9TVVBQX1JBVEVTLCBFeHRSYXRlSWUgPSBJRV9FWFRfU1VQ
UF9SQVRFUzsNCi0JVVNIT1JUICAgICAgICAgICAgICAgQ2FwYWJpbGl0eUluZm8sIExpc3Rlbklu
dHY7DQotCVVMT05HICAgICAgICAgICAgICAgIFRpbWVvdXQ7DQotCVVMT05HICAgICAgICAgICAg
ICAgIEZyYW1lTGVuID0gMDsNCi0JTkRJU19TVEFUVVMgICAgICAgICAgTlN0YXR1czsNCi0JVUxP
TkcJCQkgCSB0bXA7DQotCVVDSEFSICAgICAgICAgICAgICAgKk91dEJ1ZmZlciA9IE5VTEw7DQot
DQotCS8vIEJsb2NrIGFsbCBhdXRoZW50aWNhdGlvbiByZXF1ZXN0IGR1cm5pbmcgV1BBIGJsb2Nr
IHBlcmlvZA0KLQlpZiAocEFkLT5Qb3J0Q2ZnLmJCbG9ja0Fzc29jID09IFRSVUUpDQotCXsNCi0g
ICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAiQVNTT0MgLSBCbG9jayBSZUFzc29jIHJl
cXVlc3QgZHVybmluZyBXUEEgYmxvY2sgcGVyaW9kIVxuIik7DQotICAgICAgICBwQWQtPk1sbWUu
QXNzb2NNYWNoaW5lLkN1cnJTdGF0ZSA9IEFTU09DX0lETEU7DQotICAgICAgICBNbG1lQ250bENv
bmZpcm0ocEFkLCBNVDJfQVNTT0NfQ09ORiwgTUxNRV9TVEFURV9NQUNISU5FX1JFSkVDVCk7DQot
CX0JDQotICAgIC8vIHRoZSBwYXJhbWV0ZXJzIGFyZSB0aGUgc2FtZSBhcyB0aGUgYXNzb2NpYXRp
b24NCi0gICAgZWxzZSBpZihNbG1lQXNzb2NSZXFTYW5pdHkocEFkLCBFbGVtLT5Nc2csIEVsZW0t
Pk1zZ0xlbiwgJkFwQWRkciwgJkNhcGFiaWxpdHlJbmZvLCAmVGltZW91dCwgJkxpc3RlbkludHYp
KSANCi0gICAgew0KLSAgICAgICAgUlRNUENhbmNlbFRpbWVyKCZwQWQtPk1sbWUuQXNzb2NBdXgu
UmVhc3NvY1RpbWVyKTsNCi0NCi0gICAgICAgIE5TdGF0dXMgPSBNbG1lQWxsb2NhdGVNZW1vcnko
cEFkLCAoUFZPSUQpJk91dEJ1ZmZlcik7ICAvL0dldCBhbiB1bnVzZWQgbm9ucGFnZWQgbWVtb3J5
DQotICAgICAgICBpZihOU3RhdHVzICE9IE5ESVNfU1RBVFVTX1NVQ0NFU1MpIA0KLSAgICAgICAg
ew0KLSAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCJBU1NPQyAtIE1sbWVSZWFz
c29jUmVxQWN0aW9uKCkgYWxsb2NhdGUgbWVtb3J5IGZhaWxlZCBcbiIpOw0KLSAgICAgICAgICAg
IHBBZC0+TWxtZS5Bc3NvY01hY2hpbmUuQ3VyclN0YXRlID0gQVNTT0NfSURMRTsNCi0gICAgICAg
ICAgICBNbG1lQ250bENvbmZpcm0ocEFkLCBNVDJfUkVBU1NPQ19DT05GLCBNTE1FX0ZBSUxfTk9f
UkVTT1VSQ0UpOw0KLSAgICAgICAgICAgIHJldHVybjsNCi0gICAgICAgIH0NCi0NCi0JCS8vIE1h
c2sgb3V0IHVubmVjZXNzYXJ5IGNhcGFiaWxpdHkgaW5mb3JtYXRpb24NCi0JCUNhcGFiaWxpdHlJ
bmZvICY9IFNVUFBPUlRFRF9DQVBBQklMSVRZX0lORk87ICAvLyBwQWQtPlBvcnRDZmcuU3VwcG9y
dGVkQ2FwYWJpbGl0eUluZm87DQotICAgICAgICBwQWQtPk1sbWUuQXNzb2NBdXguQ2FwYWJpbGl0
eUluZm8gPSBDYXBhYmlsaXR5SW5mbzsNCi0gICAgICAgIENPUFlfTUFDX0FERFIoJnBBZC0+TWxt
ZS5Bc3NvY0F1eC5BZGRyLCAmQXBBZGRyKTsNCi0gICAgICAgIHBBZC0+TWxtZS5Bc3NvY0F1eC5M
aXN0ZW5JbnR2ID0gTGlzdGVuSW50djsNCi0NCi0gICAgICAgIC8vIG1ha2UgZnJhbWUsIHVzZSBi
c3NpZCBhcyB0aGUgQVAgYWRkcmVzcz8/DQotICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFD
RSwgIkFTU09DIC0gU2VuZCBSRS1BU1NPQyByZXF1ZXN0Li4uXG4iKTsNCi0gICAgICAgIE1ndE1h
Y0hlYWRlckluaXQocEFkLCAmUmVhc3NvY0hkciwgU1VCVFlQRV9SRUFTU09DX1JFUSwgMCwgJkFw
QWRkciwgJkFwQWRkcik7DQotICAgICAgICBNYWtlT3V0Z29pbmdGcmFtZShPdXRCdWZmZXIsICAg
ICAgICAgICAgJkZyYW1lTGVuLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKE1B
Q0hEUiksICAgICAgICZSZWFzc29jSGRyLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgMiwg
ICAgICAgICAgICAgICAgICAgICZDYXBhYmlsaXR5SW5mbywNCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgIDIsICAgICAgICAgICAgICAgICAgICAmTGlzdGVuSW50diwNCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgIE1BQ19BRERSX0xFTiwgICAgICAgICAmQXBBZGRyLA0KLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgMSwgICAgICAgICAgICAgICAgICAgICZTc2lkSWUsDQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAxLCAgICAgICAgICAgICAgICAgICAgJnBBZC0+UG9ydENmZy5Tc2lk
TGVuLCANCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHBBZC0+UG9ydENmZy5Tc2lkTGVuLCBw
QWQtPlBvcnRDZmcuU3NpZCwgDQotICAgICAgICAgICAgICAgICAgICAgICAgICAxLCAgICAgICAg
ICAgICAgICAgICAgJlJhdGVJZSwNCi0JCQkJCQkgIDEsCQkJCQkJJnBBZC0+UG9ydENmZy5TdXBS
YXRlTGVuLA0KLQkJCQkJCSAgcEFkLT5Qb3J0Q2ZnLlN1cFJhdGVMZW4sICBwQWQtPlBvcnRDZmcu
U3VwUmF0ZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgIEVORF9PRl9BUkdTKTsNCi0JCWlm
IChwQWQtPlBvcnRDZmcuRXh0UmF0ZUxlbiAhPSAwKQ0KLQkJew0KLQkJCU1ha2VPdXRnb2luZ0Zy
YW1lKE91dEJ1ZmZlciArIEZyYW1lTGVuLCAmdG1wLA0KLQkJCQkJCTEsCQkJCQkJCSZFeHRSYXRl
SWUsDQotCQkJCQkJMSwJCQkJCQkJJnBBZC0+UG9ydENmZy5FeHRSYXRlTGVuLA0KLQkJCQkJCXBB
ZC0+UG9ydENmZy5FeHRSYXRlTGVuLAlwQWQtPlBvcnRDZmcuRXh0UmF0ZSwJCQkJCQkJDQotCQkJ
CQkJRU5EX09GX0FSR1MpOw0KLQkJCUZyYW1lTGVuICs9IHRtcDsNCi0JCX0NCi0gICAgICAgIE1p
bmlwb3J0TU1SZXF1ZXN0KHBBZCwgT3V0QnVmZmVyLCBGcmFtZUxlbik7DQotICAgICAgICAgICAg
DQotICAgICAgICBSVE1QU2V0VGltZXIocEFkLCAmcEFkLT5NbG1lLkFzc29jQXV4LlJlYXNzb2NU
aW1lciwgVGltZW91dCk7IC8qIGluIG1TZWMgKi8NCi0gICAgICAgIHBBZC0+TWxtZS5Bc3NvY01h
Y2hpbmUuQ3VyclN0YXRlID0gUkVBU1NPQ19XQUlUX1JTUDsNCi0gICAgfSANCi0gICAgZWxzZSAN
Ci0gICAgew0KLSAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsIkFTU09DIC0gTWxtZVJl
YXNzb2NSZXFBY3Rpb24oKSBzYW5pdHkgY2hlY2sgZmFpbGVkLiBCVUchISEhIFxuIik7DQotICAg
ICAgICBwQWQtPk1sbWUuQXNzb2NNYWNoaW5lLkN1cnJTdGF0ZSA9IEFTU09DX0lETEU7DQotICAg
ICAgICBNbG1lQ250bENvbmZpcm0ocEFkLCBNVDJfUkVBU1NPQ19DT05GLCBNTE1FX0lOVkFMSURf
Rk9STUFUKTsNCi0gICAgfQ0KLX0NCi0NCi0vKg0KLSAgICA9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLSAg
ICBEZXNjcmlwdGlvbjoNCi0gICAgICAgIFVwcGVyIGxheWVyIGlzc3VlcyBkaXNhc3NvYyByZXF1
ZXN0DQotICAgIFBhcmFtZXRlcnM6DQotICAgICAgICBFbGVtIC0NCi0gICAgICAgIA0KLQlJUlFM
ID0gUEFTU0lWRV9MRVZFTA0KLQ0KLSAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLSAqLw0KLVZPSUQg
TWxtZURpc2Fzc29jUmVxQWN0aW9uKA0KLSAgICBJTiBQUlQyNTcwQURBUFRFUiBwQWQsIA0KLSAg
ICBJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pIA0KLXsNCi0gICAgTUxNRV9ESVNBU1NPQ19SRVFf
U1RSVUNUICpEaXNhc3NvY1JlcTsNCi0gICAgTUFDSERSICAgICAgICAgICAgICAgIERpc2Fzc29j
SGRyOw0KLSAgICBDSEFSICAgICAgICAgICAgICAgICAqT3V0QnVmZmVyID0gTlVMTDsNCi0gICAg
VUxPTkcgICAgICAgICAgICAgICAgIEZyYW1lTGVuID0gMDsNCi0gICAgTkRJU19TVEFUVVMgICAg
ICAgICAgIE5TdGF0dXM7DQotICAgIFVMT05HICAgICAgICAgICAgICAgICAgICAgICBUaW1lb3V0
ID0gMDsNCi0NCi0gICAgLy8gc2tpcCBzYW5pdHkgY2hlY2sNCi0gICAgRGlzYXNzb2NSZXEgPSAo
TUxNRV9ESVNBU1NPQ19SRVFfU1RSVUNUICopKEVsZW0tPk1zZyk7DQotDQotICAgIE5TdGF0dXMg
PSBNbG1lQWxsb2NhdGVNZW1vcnkocEFkLCAoUFZPSUQpJk91dEJ1ZmZlcik7ICAvL0dldCBhbiB1
bnVzZWQgbm9ucGFnZWQgbWVtb3J5DQotICAgIGlmIChOU3RhdHVzICE9IE5ESVNfU1RBVFVTX1NV
Q0NFU1MpIA0KLSAgICB7DQotICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgIkFTU09D
IC0gTWxtZURpc2Fzc29jUmVxQWN0aW9uKCkgYWxsb2NhdGUgbWVtb3J5IGZhaWxlZFxuIik7DQot
ICAgICAgICBwQWQtPk1sbWUuQXNzb2NNYWNoaW5lLkN1cnJTdGF0ZSA9IEFTU09DX0lETEU7DQot
ICAgICAgICBNbG1lQ250bENvbmZpcm0ocEFkLCBNVDJfRElTQVNTT0NfQ09ORiwgTUxNRV9GQUlM
X05PX1JFU09VUkNFKTsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICANCi0gICAgUlRN
UENhbmNlbFRpbWVyKCZwQWQtPk1sbWUuQXNzb2NBdXguRGlzYXNzb2NUaW1lcik7DQotICAgIA0K
LSAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgIkFTU09DIC0gU2VuZCBESVNBU1NPQyByZXF1
ZXN0XG4iKTsNCi0gICAgTWd0TWFjSGVhZGVySW5pdChwQWQsICZEaXNhc3NvY0hkciwgU1VCVFlQ
RV9ESVNBU1NPQywgMCwgJnBBZC0+UG9ydENmZy5Cc3NpZCwgJnBBZC0+UG9ydENmZy5Cc3NpZCk7
DQotICAgIE1ha2VPdXRnb2luZ0ZyYW1lKE91dEJ1ZmZlciwgICAgICAgICAgICAmRnJhbWVMZW4s
IA0KLSAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoTUFDSERSKSwgICAgICAgJkRpc2Fzc29j
SGRyLCANCi0gICAgICAgICAgICAgICAgICAgICAgMiwgICAgICAgICAgICAgICAgICAgICZEaXNh
c3NvY1JlcS0+UmVhc29uLCANCi0gICAgICAgICAgICAgICAgICAgICAgRU5EX09GX0FSR1MpOw0K
LSAgICBNaW5pcG9ydE1NUmVxdWVzdChwQWQsIE91dEJ1ZmZlciwgRnJhbWVMZW4pOw0KLSAgICBO
ZGlzWmVyb01lbW9yeSgmKHBBZC0+UG9ydENmZy5Cc3NpZCksIE1BQ19BRERSX0xFTik7DQotICAg
IA0KLSAgICBwQWQtPlBvcnRDZmcuRGlzYXNzb2NSZWFzb24gPSBSRUFTT05fRElTQVNTT0NfU1RB
X0xFQVZJTkc7DQotICAgIENPUFlfTUFDX0FERFIoJnBBZC0+UG9ydENmZy5EaXNhc3NvY1N0YSwg
JkRpc2Fzc29jUmVxLT5BZGRyKTsNCi0NCi0gICAgUlRNUFNldFRpbWVyKHBBZCwgJnBBZC0+TWxt
ZS5Bc3NvY0F1eC5EaXNhc3NvY1RpbWVyLCBUaW1lb3V0KTsgLyogaW4gbVNlYyAqLw0KLSAgICBw
QWQtPk1sbWUuQXNzb2NNYWNoaW5lLkN1cnJTdGF0ZSA9IERJU0FTU09DX1dBSVRfUlNQOw0KLX0N
Ci0NCi0vKg0KLSAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLSAgICBEZXNjcmlwdGlvbjoNCi0gICAg
ICAgIHBlZXIgc2VuZHMgYXNzb2MgcnNwIGJhY2sNCi0gICAgUGFyYW1ldGVyczoNCi0gICAgICAg
IEVsbWUgLSBNTE1FIG1lc3NhZ2UgY29udGFpbmluZyB0aGUgcmVjZWl2ZWQgZnJhbWUNCi0gICAg
ICAgIA0KLQlJUlFMID0gRElTUEFUQ0hfTEVWRUwNCi0NCi0gICAgPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0N
Ci0gKi8NCi1WT0lEIFBlZXJBc3NvY1JzcEFjdGlvbigNCi0gICAgSU4gUFJUMjU3MEFEQVBURVIg
cEFkLCANCi0gICAgSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKSANCi17DQotICAgIFVTSE9SVCAg
ICAgICAgQ2FwYWJpbGl0eUluZm8sIFN0YXR1cywgQWlkOw0KLSAgICBVQ0hBUiAgICAgICAgIFJh
dGVzW01BWF9MRU5fT0ZfU1VQUE9SVEVEX1JBVEVTXSwgUmF0ZXNMZW47DQotICAgIE1BQ0FERFIg
ICAgICAgQWRkcjI7DQotICAgIEJPT0xFQU4gICAgICAgRXh0ZW5kZWRSYXRlSWVFeGlzdDsNCi0N
Ci0gICAgaWYgKFBlZXJBc3NvY1JzcFNhbml0eShwQWQsIEVsZW0tPk1zZywgRWxlbS0+TXNnTGVu
LCAmQWRkcjIsICZDYXBhYmlsaXR5SW5mbywgJlN0YXR1cywgJkFpZCwgUmF0ZXMsICZSYXRlc0xl
biwgJkV4dGVuZGVkUmF0ZUllRXhpc3QpKSANCi0gICAgew0KLSAgICAgICAgLy8gVGhlIGZyYW1l
IGlzIGZvciBtZSA/DQotICAgICAgICBpZihNQUNfQUREUl9FUVVBTCgmQWRkcjIsICZwQWQtPk1s
bWUuQXNzb2NBdXguQWRkcikpIA0KLSAgICAgICAgew0KLSAgICAgICAgICAgIERCR1BSSU5UKFJU
X0RFQlVHX0lORk8sICJBU1NPQyAtIHJlY2VpdmUgQVNTT0NfUlNQIHRvIG1lIChzdGF0dXM9JWQp
XG4iLCBTdGF0dXMpOw0KLSAgICAgICAgICAgIFJUTVBDYW5jZWxUaW1lcigmcEFkLT5NbG1lLkFz
c29jQXV4LkFzc29jVGltZXIpOw0KLSAgICAgICAgICAgIGlmKFN0YXR1cyA9PSBNTE1FX1NVQ0NF
U1MpIA0KLSAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgLy8gZ28gdG8gcHJvY2VkdXJl
IGxpc3RlZCBvbiBwYWdlIDM3Ng0KLQkJCQkvLyBNYXNrIG91dCB1bm5lY2Vzc2FyeSBjYXBhYmls
aXR5IGluZm9ybWF0aW9uDQotCQkJCUNhcGFiaWxpdHlJbmZvICY9IFNVUFBPUlRFRF9DQVBBQklM
SVRZX0lORk87ICAvLyBwQWQtPlBvcnRDZmcuU3VwcG9ydGVkQ2FwYWJpbGl0eUluZm87DQotICAg
ICAgICAgICAgICAgIEFzc29jUG9zdFByb2MocEFkLCAmQWRkcjIsIENhcGFiaWxpdHlJbmZvLCBB
aWQsIFJhdGVzLCBSYXRlc0xlbiwgRXh0ZW5kZWRSYXRlSWVFeGlzdCk7DQotICAgICAgICAgICAg
fSANCi0gICAgICAgICAgICBwQWQtPk1sbWUuQXNzb2NNYWNoaW5lLkN1cnJTdGF0ZSA9IEFTU09D
X0lETEU7DQotICAgICAgICAgICAgTWxtZUNudGxDb25maXJtKHBBZCwgTVQyX0FTU09DX0NPTkYs
IFN0YXR1cyk7DQotICAgICAgICB9IA0KLSAgICB9DQotICAgIGVsc2UNCi0gICAgew0KLSAgICAg
ICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICJBU1NPQyAtIFBlZXJBc3NvY1JzcEFjdGlvbigp
IHNhbml0eSBjaGVjayBmYWlsXG4iKTsNCi0gICAgfQ0KLX0NCi0NCi0vKg0KLSAgICA9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQ0KLSAgICBEZXNjcmlwdGlvbjoNCi0gICAgICAgIHBlZXIgc2VuZHMgcmVhc3Nv
YyByc3ANCi0gICAgUGFyYW1ldHJzOg0KLSAgICAgICAgRWxlbSAtIE1MTUUgbWVzc2FnZSBjbnRh
aW5pbmcgdGhlIHJlY2VpdmVkIGZyYW1lDQotICAgICAgICANCi0JSVJRTCA9IERJU1BBVENIX0xF
VkVMDQotDQotICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotICovDQotVk9JRCBQZWVyUmVhc3NvY1Jz
cEFjdGlvbigNCi0gICAgSU4gUFJUMjU3MEFEQVBURVIgcEFkLCANCi0gICAgSU4gTUxNRV9RVUVV
RV9FTEVNICpFbGVtKSANCi17DQotICAgIFVTSE9SVCAgICAgIENhcGFiaWxpdHlJbmZvOw0KLSAg
ICBVU0hPUlQgICAgICBTdGF0dXM7DQotICAgIFVTSE9SVCAgICAgIEFpZDsNCi0gICAgVUNIQVIg
ICAgICAgUmF0ZXNbTUFYX0xFTl9PRl9TVVBQT1JURURfUkFURVNdOw0KLSAgICBVQ0hBUiAgICAg
ICBSYXRlc0xlbjsNCi0gICAgTUFDQUREUiAgICAgQWRkcjI7DQotICAgIEJPT0xFQU4gICAgIEV4
dGVuZGVkUmF0ZUllRXhpc3Q7DQotDQotICAgIGlmKFBlZXJBc3NvY1JzcFNhbml0eShwQWQsIEVs
ZW0tPk1zZywgRWxlbS0+TXNnTGVuLCAmQWRkcjIsICZDYXBhYmlsaXR5SW5mbywgJlN0YXR1cywg
JkFpZCwgUmF0ZXMsICZSYXRlc0xlbiwgJkV4dGVuZGVkUmF0ZUllRXhpc3QpKSANCi0gICAgew0K
LSAgICAgICAgaWYoTUFDX0FERFJfRVFVQUwoJkFkZHIyLCAmcEFkLT5NbG1lLkFzc29jQXV4LkFk
ZHIpKSAvLyBUaGUgZnJhbWUgaXMgZm9yIG1lID8NCi0gICAgICAgIHsNCi0gICAgICAgICAgICBE
QkdQUklOVChSVF9ERUJVR19UUkFDRSwgIkFTU09DIC0gcmVjZWl2ZSBSRUFTU09DX1JTUCB0byBt
ZSAoc3RhdHVzPSVkKVxuIiwgU3RhdHVzKTsNCi0gICAgICAgICAgICBSVE1QQ2FuY2VsVGltZXIo
JnBBZC0+TWxtZS5Bc3NvY0F1eC5SZWFzc29jVGltZXIpOw0KLSAgICAgICAgICAgIA0KLSAgICAg
ICAgICAgIGlmKFN0YXR1cyA9PSBNTE1FX1NVQ0NFU1MpIA0KLSAgICAgICAgICAgIHsNCi0JCQkJ
Ly8gTWFzayBvdXQgdW5uZWNlc3NhcnkgY2FwYWJpbGl0eSBpbmZvcm1hdGlvbg0KLQkJCQlDYXBh
YmlsaXR5SW5mbyAmPSBTVVBQT1JURURfQ0FQQUJJTElUWV9JTkZPOyAgLy8gcEFkLT5Qb3J0Q2Zn
LlN1cHBvcnRlZENhcGFiaWxpdHlJbmZvOw0KLSAgICAgICAgICAgICAgICAvLyBnbyB0byBwcm9j
ZWR1cmUgbGlzdGVkIG9uIHBhZ2UgMzc2DQotICAgICAgICAgICAgICAgIEFzc29jUG9zdFByb2Mo
cEFkLCAmQWRkcjIsIENhcGFiaWxpdHlJbmZvLCBBaWQsIFJhdGVzLCBSYXRlc0xlbiwgRXh0ZW5k
ZWRSYXRlSWVFeGlzdCk7DQotICAgICAgICAgICAgfSANCi0NCi0gICAgICAgICAgICBwQWQtPk1s
bWUuQXNzb2NNYWNoaW5lLkN1cnJTdGF0ZSA9IEFTU09DX0lETEU7DQotICAgICAgICAgICAgTWxt
ZUNudGxDb25maXJtKHBBZCwgTVQyX1JFQVNTT0NfQ09ORiwgU3RhdHVzKTsNCi0gICAgICAgIH0g
DQotICAgIH0NCi0gICAgZWxzZQ0KLSAgICB7DQotICAgICAgICBEQkdQUklOVChSVF9ERUJVR19U
UkFDRSwgIkFTU09DIC0gUGVlclJlYXNzb2NSc3BBY3Rpb24oKSBzYW5pdHkgY2hlY2sgZmFpbFxu
Iik7DQotICAgIH0NCi0NCi19DQotDQotLyoNCi0gICAgPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0gICAg
RGVzY3JpcHRpb246DQotICAgICAgICBwcm9jZWR1cmVzIG9uIElFRUUgODAyLjExLzE5OTkgcC4z
NzYgDQotICAgIFBhcmFtZXRyczoNCi0gICAgICAgIA0KLQlJUlFMID0gRElTUEFUQ0hfTEVWRUwN
Ci0NCi0gICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0gKi8NCi1WT0lEIEFzc29jUG9zdFByb2MoDQot
ICAgIElOIFBSVDI1NzBBREFQVEVSIHBBZCwgDQotICAgIElOIFBNQUNBRERSIEFkZHIyLCANCi0g
ICAgSU4gVVNIT1JUIENhcGFiaWxpdHlJbmZvLCANCi0gICAgSU4gVVNIT1JUIEFpZCwgDQotICAg
IElOIFVDSEFSIFJhdGVzW10sIA0KLSAgICBJTiBVQ0hBUiBSYXRlc0xlbiwNCi0gICAgSU4gQk9P
TEVBTiBFeHRlbmRlZFJhdGVJZUV4aXN0KSANCi17DQotCVVMT05HIElkeDsNCi0gICAgVUNIQVIg
UmF0ZUllID0gSUVfU1VQUF9SQVRFUzsNCi0JVUNIQVIgVmFySWVzT2Zmc2V0Ow0KLQ0KLSAgICAv
LyAyMDAzLzEyLzExIC0gIHNraXAgdGhlIGZvbGxvd2luZyBiZWNhdXNlIGV4cGVyaW1lbnQgc2hv
dyB0aGF0IHdlIGNhbiBub3QgDQotICAgIC8vIHRydXN0IHRoZSAicHJpdmFjeSIgYml0IGluIEFz
c29jUnNwLiBXZSBjYW4gb25seSB0cnVzdCAiUHJpdmFjeSIgYml0IHNwZWNpZmllZCBpbg0KLSAg
ICAvLyBCRUFDT04gYW5kIFByb2JlUnNwLg0KLSAgICAvLyBwQWQtPlBvcnRDZmcuUHJpdmFjeUlu
dm9rZWQgPSBDQVBfSVNfUFJJVkFDWV9PTihDYXBhYmlsaXR5SW5mbyk7DQotICAgIA0KLSAgICBw
QWQtPlBvcnRDZmcuQWlkID0gQWlkOw0KLSAgICBOZGlzTW92ZU1lbW9yeShwQWQtPlBvcnRDZmcu
U3VwcG9ydGVkUmF0ZXMsIFJhdGVzLCBSYXRlc0xlbik7DQotICAgIHBBZC0+UG9ydENmZy5TdXBw
b3J0ZWRSYXRlc0xlbiA9IFJhdGVzTGVuOw0KLSAgICBDT1BZX01BQ19BRERSKCZwQWQtPlBvcnRD
ZmcuQnNzaWQsIEFkZHIyKTsNCi0gICAgQXNpY1NldEJzc2lkKHBBZCwgJnBBZC0+UG9ydENmZy5C
c3NpZCk7DQotDQotICAgIC8vIHNldCBsaXN0ZW4gaW50ZXJ2YWwNCi0gICAgcEFkLT5Qb3J0Q2Zn
LkRlZmF1bHRMaXN0ZW5Db3VudCA9IHBBZC0+TWxtZS5Bc3NvY0F1eC5MaXN0ZW5JbnR2Ow0KLS8v
ICBwQWQtPlBvcnRDZmcuQ3Vyckxpc3RlbkNvdW50ID0gcEFkLT5NbG1lLkFzc29jQXV4Lkxpc3Rl
bkludHY7DQotDQotCS8vIFNldCBOZXcgV1BBIGluZm9ybWF0aW9uDQotCUlkeCA9IEJzc1RhYmxl
U2VhcmNoKCZwQWQtPlBvcnRDZmcuQnNzVGFiLCBBZGRyMik7DQotCWlmIChJZHggPT0gQlNTX05P
VF9GT1VORCkgDQotCXsNCi0JCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAiQVNTT0MgLSBDYW4n
dCBmaW5kIEJTUyBhZnRlciByZWNlaXZpbmcgQXNzb2MgcmVzcG9uc2VcbiIpOw0KLQl9DQotCWVs
c2UNCi0Jew0KLQkJLy8gTW9kIGJ5IEphbWVzIHRvIGZpeCBPSURfODAyXzExX0FTU09DSUFUSU9O
X0lORk9STUFUSU9ODQotCQlwQWQtPlBvcnRDZmcuQXNzb2NJbmZvLkxlbmd0aCA9IHNpemVvZihO
RElTXzgwMl8xMV9BU1NPQ0lBVElPTl9JTkZPUk1BVElPTik7IC8vKyBzaXplb2YoTkRJU184MDJf
MTFfRklYRURfSUVzKTsgCS8vIEZpbGxlZCBpbiBhc3NvYyByZXF1ZXN0DQotCQlwQWQtPlBvcnRD
ZmcuQXNzb2NJbmZvLkF2YWlsYWJsZVJlc3BvbnNlRml4ZWRJRXMgPQ0KLQkJCU5ESVNfODAyXzEx
X0FJX1JFU0ZJX0NBUEFCSUxJVElFUyB8IE5ESVNfODAyXzExX0FJX1JFU0ZJX1NUQVRVU0NPREUg
fCBORElTXzgwMl8xMV9BSV9SRVNGSV9BU1NPQ0lBVElPTklEOw0KLQkJcEFkLT5Qb3J0Q2ZnLkFz
c29jSW5mby5SZXNwb25zZUZpeGVkSUVzLkNhcGFiaWxpdGllcyAgPSBDYXBhYmlsaXR5SW5mbzsN
Ci0JCXBBZC0+UG9ydENmZy5Bc3NvY0luZm8uUmVzcG9uc2VGaXhlZElFcy5TdGF0dXNDb2RlICAg
ID0gTUxNRV9TVUNDRVNTOwkJLy8gU2hvdWxkIGJlIHN1Y2Nlc3MsIGFkZCBmYWlsZWQgbGF0ZXIN
Ci0JCXBBZC0+UG9ydENmZy5Bc3NvY0luZm8uUmVzcG9uc2VGaXhlZElFcy5Bc3NvY2lhdGlvbklk
ID0gQWlkOw0KLQ0KLQkJLy8gQ29weSBCU1MgVmFySUVzIHRvIFBvcnRDZmcgYXNzb2NpbmZvIHN0
cnVjdHVyZS4NCi0JCS8vIEZpcnN0IGFkZCBTdXBwb3J0ZWQgcmF0ZXMNCi0JCVZhckllc09mZnNl
dCA9IDA7DQotCQlOZGlzTW92ZU1lbW9yeShwQWQtPlBvcnRDZmcuUmVzVmFySUVzICsgVmFySWVz
T2Zmc2V0LCAmUmF0ZUllLCAxKTsNCi0JCVZhckllc09mZnNldCArPSAxOw0KLQkJTmRpc01vdmVN
ZW1vcnkocEFkLT5Qb3J0Q2ZnLlJlc1ZhcklFcyArIFZhckllc09mZnNldCwgJlJhdGVzTGVuLCAx
KTsNCi0JCVZhckllc09mZnNldCArPSAxOw0KLQkJTmRpc01vdmVNZW1vcnkocEFkLT5Qb3J0Q2Zn
LlJlc1ZhcklFcyArIFZhckllc09mZnNldCwgUmF0ZXMsIFJhdGVzTGVuKTsNCi0JCVZhckllc09m
ZnNldCArPSBSYXRlc0xlbjsNCi0NCi0JCS8vIFNlY29uZCBhZGQgUlNODQotCQlOZGlzTW92ZU1l
bW9yeShwQWQtPlBvcnRDZmcuUmVzVmFySUVzICsgVmFySWVzT2Zmc2V0LCBwQWQtPlBvcnRDZmcu
QnNzVGFiLkJzc0VudHJ5W0lkeF0uVmFySUVzLCBwQWQtPlBvcnRDZmcuQnNzVGFiLkJzc0VudHJ5
W0lkeF0uVmFySUVMZW4pOw0KLQkJVmFySWVzT2Zmc2V0ICs9IHBBZC0+UG9ydENmZy5Cc3NUYWIu
QnNzRW50cnlbSWR4XS5WYXJJRUxlbjsNCi0JCQ0KLQkJLy8gU2V0IFZhcmlhYmxlIElFcyBMZW5n
dGgNCi0JCXBBZC0+UG9ydENmZy5SZXNWYXJJRUxlbiA9IFZhckllc09mZnNldDsNCi0JCXBBZC0+
UG9ydENmZy5Bc3NvY0luZm8uUmVzcG9uc2VJRUxlbmd0aCA9IFZhckllc09mZnNldDsNCi0JfQ0K
LX0NCi0NCi0vKg0KLSAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLSAgICBEZXNjcmlwdGlvbjoNCi0g
ICAgICAgIGxlZnQgcGFydCBvZiBJRUVFIDgwMi4xMS8xOTk5IHAuMzc0IA0KLSAgICBQYXJhbWV0
ZXJzOg0KLSAgICAgICAgRWxlbSAtIE1MTUUgbWVzc2FnZSBjb250YWluaW5nIHRoZSByZWNlaXZl
ZCBmcmFtZQ0KLSAgICAgICAgDQotCUlSUUwgPSBESVNQQVRDSF9MRVZFTA0KLQ0KLSAgICA9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQ0KLSAqLw0KLVZPSUQgUGVlckRpc2Fzc29jQWN0aW9uKA0KLSAgICBJTiBQ
UlQyNTcwQURBUFRFUiBwQWQsIA0KLSAgICBJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pIA0KLXsN
Ci0gICAgTUFDQUREUiAgICAgICBBZGRyMjsNCi0gICAgVVNIT1JUICAgICAgICBSZWFzb247DQot
DQotICAgIGlmKFBlZXJEaXNhc3NvY1Nhbml0eShwQWQsIEVsZW0tPk1zZywgRWxlbS0+TXNnTGVu
LCAmQWRkcjIsICZSZWFzb24pKSANCi0gICAgew0KLSAgICAgICAgaWYgKElORlJBX09OKHBBZCkg
JiYgTUFDX0FERFJfRVFVQUwoJnBBZC0+UG9ydENmZy5Cc3NpZCwgJkFkZHIyKSkgDQotICAgICAg
ICB7DQotCQkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX1RSQUNFLCAiTGlua0Rvd24oUGVlckRpc2Fz
c29jQWN0aW9uKFJlYXNvbiA9ICVkKSlcbiIsIFJlYXNvbik7Ly9zdGV2ZW46Zm9yIGRlYnVnDQot
ICAgICAgICAgICAgTGlua0Rvd24ocEFkKTsNCi0gICAgICAgICAgICBwQWQtPk1sbWUuQXNzb2NN
YWNoaW5lLkN1cnJTdGF0ZSA9IEFTU09DX0lETEU7DQotDQotICAgICAgICAgICAgLy8gMjAwMi8x
MS8yMSAtDQotICAgICAgICAgICAgLy8gcGF0Y2ggUlQyNDMwL1JUMjQyMCBoYW5ndXAgaXNzdWUu
IFdlIHN1c3BlY3QgdGhpcyBBUCBESVMtQVNTT0NJQVRFIGZyYW1lDQotICAgICAgICAgICAgLy8g
aXMgY2F1c2VkIGJ5IFBIWSBoYW5ndXAsIHNvIHdlIHJlc2V0IFBIWSwgdGhlbiBhdXRvIHJlY292
ZXIgdGhlIGNvbm5lY3Rpb24uDQotICAgICAgICAgICAgLy8gaWYgdGhpcyBhdHRlbXB0IGZhaWxz
LCB0aGVuIHJlbWFpbnMgaW4gTGlua0Rvd24gYW5kIGxlYXZlcyB0aGUgcHJvYmxlbQ0KLSAgICAg
ICAgICAgIC8vIHRvIE1sbWVQZXJpb2RpY0V4ZWMoKQ0KLSAgICAgICAgICAgIC8vIE5JQ1BhdGNo
UlQyNDMwQnVnKHBBZCk7DQotICAgICAgICAgICAgcEFkLT5SYWxpbmtDb3VudGVycy5CZWVuRGlz
YXNzb2NpYXRlZENvdW50ICsrOw0KLQkJCS8vIFJlbW92ZSBhdXRvIHJlY292ZXIgZWZmb3J0IHdo
ZW4gZGlzYXNzb2NpYXRlIGJ5IEFQLCByZS1lbmFibGUgZm9yIHBhdGNoIDI0MzAgb25seQ0KLSAg
ICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAiQVNTT0MgLSBEaXNhc3NvY2lhdGVk
IGJ5IEFQLCBBdXRvIFJlY292ZXJ5IGF0dGVtcHQgIyVkXG4iLCBwQWQtPlJhbGlua0NvdW50ZXJz
LkJlZW5EaXNhc3NvY2lhdGVkQ291bnQpOw0KLSAgICAgICAgICAgIE1sbWVBdXRvUmVjb25uZWN0
TGFzdFNTSUQocEFkKTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBlbHNlDQotICAgIHsNCi0g
ICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAiQVNTT0MgLSBQZWVyRGlzYXNzb2NBY3Rp
b24oKSBzYW5pdHkgY2hlY2sgZmFpbFxuIik7DQotICAgIH0NCi19DQotDQotLyoNCi0gICAgPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0NCi0gICAgRGVzY3JpcHRpb246DQotICAgICAgICB3aGF0IHRoZSBzdGF0
ZSBtYWNoaW5lIHdpbGwgZG8gYWZ0ZXIgYXNzb2MgdGltZW91dA0KLSAgICBQYXJhbWV0ZXJzOg0K
LSAgICAgICAgRWxtZSAtDQotICAgICAgICANCi0JSVJRTCA9IERJU1BBVENIX0xFVkVMDQotDQot
ICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09DQotICovDQotVk9JRCBBc3NvY1RpbWVvdXRBY3Rpb24oDQot
ICAgIElOIFBSVDI1NzBBREFQVEVSIHBBZCwgDQotICAgIElOIE1MTUVfUVVFVUVfRUxFTSAqRWxl
bSkgDQotew0KLSAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgIkFTU09DIC0gQXNzb2NUaW1l
b3V0QWN0aW9uXG4iKTsNCi0gICAgcEFkLT5NbG1lLkFzc29jTWFjaGluZS5DdXJyU3RhdGUgPSBB
U1NPQ19JRExFOw0KLSAgICBNbG1lQ250bENvbmZpcm0ocEFkLCBNVDJfQVNTT0NfQ09ORiwgTUxN
RV9SRUpfVElNRU9VVCk7DQotfQ0KLQ0KLS8qDQotICAgID09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotICAg
IERlc2NyaXB0aW9uOg0KLSAgICAgICAgd2hhdCB0aGUgc3RhdGUgbWFjaGluZSB3aWxsIGRvIGFm
dGVyIHJlYXNzb2MgdGltZW91dA0KLSAgICAgICAgDQotCUlSUUwgPSBESVNQQVRDSF9MRVZFTA0K
LQ0KLSAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLSAqLw0KLVZPSUQgUmVhc3NvY1RpbWVvdXRBY3Rp
b24oDQotICAgIElOIFBSVDI1NzBBREFQVEVSIHBBZCwgDQotICAgIElOIE1MTUVfUVVFVUVfRUxF
TSAqRWxlbSkgDQotew0KLSAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgIkFTU09DIC0gUmVh
c3NvY1RpbWVvdXRBY3Rpb25cbiIpOw0KLSAgICBwQWQtPk1sbWUuQXNzb2NNYWNoaW5lLkN1cnJT
dGF0ZSA9IEFTU09DX0lETEU7DQotICAgIE1sbWVDbnRsQ29uZmlybShwQWQsIE1UMl9SRUFTU09D
X0NPTkYsIE1MTUVfUkVKX1RJTUVPVVQpOw0KLX0NCi0NCi0vKg0KLSAgICA9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQ0KLSAgICBEZXNjcmlwdGlvbjoNCi0gICAgICAgIHdoYXQgdGhlIHN0YXRlIG1hY2hpbmUg
d2lsbCBkbyBhZnRlciBkaXNhc3NvYyB0aW1lb3V0DQotICAgICAgICANCi0JSVJRTCA9IERJU1BB
VENIX0xFVkVMDQotDQotICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotICovDQotVk9JRCBEaXNhc3Nv
Y1RpbWVvdXRBY3Rpb24oDQotICAgIElOIFBSVDI1NzBBREFQVEVSIHBBZCwgDQotICAgIElOIE1M
TUVfUVVFVUVfRUxFTSAqRWxlbSkgDQotew0KLSAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwg
IkFTU09DIC0gRGlzYXNzb2NUaW1lb3V0QWN0aW9uXG4iKTsNCi0gICAgcEFkLT5NbG1lLkFzc29j
TWFjaGluZS5DdXJyU3RhdGUgPSBBU1NPQ19JRExFOw0KLSAgICBNbG1lQ250bENvbmZpcm0ocEFk
LCBNVDJfRElTQVNTT0NfQ09ORiwgTUxNRV9TVUNDRVNTKTsNCi19DQotDQotVk9JRCBJbnZhbGlk
U3RhdGVXaGVuQXNzb2MoDQotICAgIElOIFBSVDI1NzBBREFQVEVSIHBBZCwgDQotICAgIElOIE1M
TUVfUVVFVUVfRUxFTSAqRWxlbSkgDQotew0KLSAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwg
IkFTU09DIC0gSW52YWxpZFN0YXRlV2hlbkFzc29jKHN0YXRlPSVkKSwgcmVzZXQgQVNTT0Mgc3Rh
dGUgbWFjaGluZVxuIiwgDQotICAgICAgICBwQWQtPk1sbWUuQXNzb2NNYWNoaW5lLkN1cnJTdGF0
ZSk7DQotICAgIHBBZC0+TWxtZS5Bc3NvY01hY2hpbmUuQ3VyclN0YXRlID0gQVNTT0NfSURMRTsN
Ci0gICAgTWxtZUNudGxDb25maXJtKHBBZCwgTVQyX0FTU09DX0NPTkYsIE1MTUVfU1RBVEVfTUFD
SElORV9SRUpFQ1QpOw0KLX0NCi0NCi1WT0lEIEludmFsaWRTdGF0ZVdoZW5SZWFzc29jKA0KLSAg
ICBJTiBQUlQyNTcwQURBUFRFUiBwQWQsIA0KLSAgICBJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0p
IA0KLXsNCi0gICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICJBU1NPQyAtIEludmFsaWRTdGF0
ZVdoZW5SZWFzc29jKHN0YXRlPSVkKSwgcmVzZXQgQVNTT0Mgc3RhdGUgbWFjaGluZVxuIiwgDQot
ICAgICAgICBwQWQtPk1sbWUuQXNzb2NNYWNoaW5lLkN1cnJTdGF0ZSk7DQotICAgIHBBZC0+TWxt
ZS5Bc3NvY01hY2hpbmUuQ3VyclN0YXRlID0gQVNTT0NfSURMRTsNCi0gICAgTWxtZUNudGxDb25m
aXJtKHBBZCwgTVQyX1JFQVNTT0NfQ09ORiwgTUxNRV9TVEFURV9NQUNISU5FX1JFSkVDVCk7DQot
fQ0KLQ0KLVZPSUQgSW52YWxpZFN0YXRlV2hlbkRpc2Fzc29jaWF0ZSgNCi0gICAgSU4gUFJUMjU3
MEFEQVBURVIgcEFkLCANCi0gICAgSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKSANCi17DQotICAg
IERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAiQVNTT0MgLSBJbnZhbGlkU3RhdGVXaGVuRGlzYXNz
b2Moc3RhdGU9JWQpLCByZXNldCBBU1NPQyBzdGF0ZSBtYWNoaW5lXG4iLCANCi0gICAgICAgIHBB
ZC0+TWxtZS5Bc3NvY01hY2hpbmUuQ3VyclN0YXRlKTsNCi0gICAgcEFkLT5NbG1lLkFzc29jTWFj
aGluZS5DdXJyU3RhdGUgPSBBU1NPQ19JRExFOw0KLSAgICBNbG1lQ250bENvbmZpcm0ocEFkLCBN
VDJfRElTQVNTT0NfQ09ORiwgTUxNRV9TVEFURV9NQUNISU5FX1JFSkVDVCk7DQotfQ0KLQ0KLS8q
DQotICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09DQotICAgIERlc2NyaXB0aW9uOg0KLSAgICAgICAgcmln
aHQgcGFydCBvZiBJRUVFIDgwMi4xMS8xOTk5IHBhZ2UgMzc0DQotICAgIE5vdGU6IA0KLSAgICAg
ICAgVGhpcyBldmVudCBzaG91bGQgbmV2ZXIgY2F1c2UgQVNTT0Mgc3RhdGUgbWFjaGluZSBwZXJm
b3JtIHN0YXRlDQotICAgICAgICB0cmFuc2l0aW9uLCBhbmQgaGFzIG5vIHJlbGF0aW9uc2hpcCB3
aXRoIENOVEwgbWFjaGluZS4gU28gd2Ugc2VwYXJhdGUNCi0gICAgICAgIHRoaXMgcm91dGluZSBh
cyBhIHNlcnZpY2Ugb3V0c2lkZSBvZiBBU1NPQyBzdGF0ZSB0cmFuc2l0aW9uIHRhYmxlLg0KLSAg
ICAgICAgDQotCUlSUUwgPSBESVNQQVRDSF9MRVZFTA0KLQ0KLSAgICA9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQ0KLSAqLw0KLVZPSUQgQ2xzM2VyckFjdGlvbigNCi0gICAgSU4gUFJUMjU3MEFEQVBURVIgcEFk
LCANCi0gICAgSU4gUE1BQ0FERFIgICAgICBwQWRkcikgDQotew0KLSAgICBNQUNIRFIgICAgICAg
ICAgICAgICAgRGlzYXNzb2NIZHI7DQotICAgIENIQVIgICAgICAgICAgICAgICAgICpPdXRCdWZm
ZXIgPSBOVUxMOw0KLSAgICBVTE9ORyAgICAgICAgICAgICAgICAgRnJhbWVMZW4gPSAwOw0KLSAg
ICBORElTX1NUQVRVUyAgICAgICAgICAgTlN0YXR1czsNCi0gICAgVVNIT1JUICAgICAgICAgICAg
ICAgIFJlYXNvbiA9IFJFQVNPTl9DTFMzRVJSOw0KLQ0KLSAgICBOU3RhdHVzID0gTWxtZUFsbG9j
YXRlTWVtb3J5KHBBZCwgKFBWT0lEKSZPdXRCdWZmZXIpOyAgLy9HZXQgYW4gdW51c2VkIG5vbnBh
Z2VkIG1lbW9yeQ0KLSAgICBpZiAoTlN0YXR1cyAhPSBORElTX1NUQVRVU19TVUNDRVNTKSANCi0g
ICAgICAgIHJldHVybjsNCi0gICAgDQotICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAiQVNT
T0MgLSBDbGFzcyAzIEVycm9yLCBTZW5kIERJU0FTU09DIGZyYW1lXG4iKTsNCi0gICAgTWd0TWFj
SGVhZGVySW5pdChwQWQsICZEaXNhc3NvY0hkciwgU1VCVFlQRV9ESVNBU1NPQywgMCwgcEFkZHIs
ICZwQWQtPlBvcnRDZmcuQnNzaWQpOw0KLSAgICBNYWtlT3V0Z29pbmdGcmFtZShPdXRCdWZmZXIs
ICAgICAgICAgICAgJkZyYW1lTGVuLCANCi0gICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKE1B
Q0hEUiksICAgICAgICZEaXNhc3NvY0hkciwgDQotICAgICAgICAgICAgICAgICAgICAgIDIsICAg
ICAgICAgICAgICAgICAgICAmUmVhc29uLCANCi0gICAgICAgICAgICAgICAgICAgICAgRU5EX09G
X0FSR1MpOw0KLSAgICBNaW5pcG9ydE1NUmVxdWVzdChwQWQsIE91dEJ1ZmZlciwgRnJhbWVMZW4p
Ow0KLQ0KLSAgICBwQWQtPlBvcnRDZmcuRGlzYXNzb2NSZWFzb24gPSBSRUFTT05fQ0xTM0VSUjsN
Ci0gICAgQ09QWV9NQUNfQUREUigmcEFkLT5Qb3J0Q2ZnLkRpc2Fzc29jU3RhLCBwQWRkcik7DQot
fQ0KZGlmZiAtcnVOIHJ0MjU3MC0xLjEuMC1iMS9Nb2R1bGUvY29ubmVjdC5jIHJ0MjU3MC1jdnMt
MjAwNTEyMjYxNi9Nb2R1bGUvY29ubmVjdC5jCi0tLSBydDI1NzAtMS4xLjAtYjEvTW9kdWxlL2Nv
bm5lY3QuYwkyMDA1LTA3LTMwIDExOjQ0OjMwLjAwMDAwMDAwMCAtMDUwMAorKysgcnQyNTcwLWN2
cy0yMDA1MTIyNjE2L01vZHVsZS9jb25uZWN0LmMJMjAwNS0xMi0wMiAwNjo1NToxNS4wMDAwMDAw
MDAgLTA2MDAKQEAgLTEyODIsOCArMTI4MiwxMyBAQAogCVVMT05HCQkJQnVsa091dExlbmd0aDsK
IAlQVFhfQ09OVEVYVAkJcEJlYWNvbkNvbnRleHQgPSAmKHBBZC0+QmVhY29uQ29udGV4dFswXSk7
CiAKKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLCA1LCAwKQogCWlm
IChwQWQtPk1MTUVUaHJfcGlkIDw9IDApCiAJICAgIHJldHVybjsKKyNlbHNlCisJaWYgKCFwQWQt
Pk1MTUVUaHJfYWN0aXZlKQorCSAgICByZXR1cm47CisjZW5kaWYKICAgICAvLyAyMDAzLTEyLTEw
IDgwMi4xMWcgV0lGSSBzcGVjIGRpc2FsbG93IE9GRE0gcmF0ZXMgaW4gODAyLjExZyBBREhPQyBt
b2RlCiAgICAgLy8gbWFrZSBzdXJlIDEsMiw1LjUsMTEgYXJlIHRoZSBmaXJ0IDQgcmF0ZXMgaW4g
UG9ydENmZy5TdXBwb3J0ZWRSYXRlc1tdIGFycmF5CiAgICAgaWYgKChwQWQtPlBvcnRDZmcuUGh5
TW9kZSA9PSBQSFlfMTFCR19NSVhFRCkgJiYgKHBBZC0+UG9ydENmZy5BZGhvY01vZGUgPT0gMCkp
CmRpZmYgLXJ1TiBydDI1NzAtMS4xLjAtYjEvTW9kdWxlLy4jY29ubmVjdC5jLjEuMiBydDI1NzAt
Y3ZzLTIwMDUxMjI2MTYvTW9kdWxlLy4jY29ubmVjdC5jLjEuMgotLS0gcnQyNTcwLTEuMS4wLWIx
L01vZHVsZS8uI2Nvbm5lY3QuYy4xLjIJMjAwNS0wNy0zMCAxMTo0NDozMC4wMDAwMDAwMDAgLTA1
MDAKKysrIHJ0MjU3MC1jdnMtMjAwNTEyMjYxNi9Nb2R1bGUvLiNjb25uZWN0LmMuMS4yCTE5Njkt
MTItMzEgMTg6MDA6MDAuMDAwMDAwMDAwIC0wNjAwCkBAIC0xLDE0NDMgKzAsMCBAQAotLyoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKiAKLSAqIFJUMngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0IC0gaHR0cDovL3J0
MngwMC5zb3VyY2Vmb3JnZS5uZXQgICAgICAgICAgICAgICogCi0gKiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAq
IAotICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yIG1vZGlmeSAgKiAKLSAqICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICogCi0gKiAgIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yICAgICAqIAotICogICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAKLSAqICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogCi0g
KiAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLCAgICAgICAqIAotICogICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgKiAKLSAqICAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAg
ICAgICogCi0gKiAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
ICAgICAgICAgICAgICAgICAgICAgICAgICAqIAotICogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAKLSAqICAg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgICAgICogCi0gKiAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdy
aXRlIHRvIHRoZSAgICAgICAgICAgICAgICAgICAgICAgICAqIAotICogICBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KiAKLSAqICAgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0x
MzA3LCBVU0EuICAgICAgICAgICAgICogCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIAotICogICBMaWNl
bnNlZCB1bmRlciB0aGUgR05VIEdQTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKiAKLSAqICAgT3JpZ2luYWwgY29kZSBzdXBwbGllZCB1bmRlciBsaWNlbnNlIGZy
b20gUmFMaW5rIEluYywgMjAwNC4gICAgICAgICAgICogCi0gKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwot
Ci0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqIAotICoJTW9kdWxlIE5hbWU6CWNvbm5lY3QuYwotICoKLSAq
CUFic3RyYWN0OgotICoKLSAqCVJldmlzaW9uIEhpc3Rvcnk6Ci0gKglXaG8JCVdoZW4JCVdoYXQK
LSAqCS0tLS0tLS0tCS0tLS0tLS0tLS0JLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
ICoJTmFtZQkJRGF0ZQkJTW9kaWZpY2F0aW9uIGxvZ3MKLSAqCUphbiBMZWUJCTIwMDUtMDYtMDEJ
UmVsZWFzZQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2luY2x1ZGUgInJ0X2NvbmZpZy5oIg0K
LQ0KLVVDSEFSCUNpcGhlclN1aXRlV3BhTm9uZVRraXBbXSA9IHsNCi0JCTB4MDAsIDB4NTAsIDB4
ZjIsIDB4MDEsCS8vIG91aQ0KLQkJMHgwMSwgMHgwMCwJCQkJLy8gVmVyc2lvbg0KLQkJMHgwMCwg
MHg1MCwgMHhmMiwgMHgwMiwJLy8gTXVsdGljYXN0DQotCQkweDAxLCAweDAwLAkJCQkvLyBOdW1i
ZXIgb2YgdW5pY2FzdA0KLQkJMHgwMCwgMHg1MCwgMHhmMiwgMHgwMCwJLy8gdW5pY2FzdA0KLQkJ
MHgwMSwgMHgwMCwJCQkJLy8gbnVtYmVyIG9mIGF1dGhlbnRpY2F0aW9uIG1ldGhvZA0KLQkJMHgw
MCwgMHg1MCwgMHhmMiwgMHgwMAkvLyBhdXRoZW50aWNhdGlvbg0KLQkJfTsNCi1VQ0hBUglDaXBo
ZXJTdWl0ZVdwYU5vbmVUa2lwTGVuID0gKHNpemVvZihDaXBoZXJTdWl0ZVdwYU5vbmVUa2lwKSAv
IHNpemVvZihVQ0hBUikpOw0KLQ0KLVVDSEFSCUNpcGhlclN1aXRlV3BhTm9uZUFlc1tdID0gew0K
LQkJMHgwMCwgMHg1MCwgMHhmMiwgMHgwMSwJLy8gb3VpDQotCQkweDAxLCAweDAwLAkJCQkvLyBW
ZXJzaW9uDQotCQkweDAwLCAweDUwLCAweGYyLCAweDA0LAkvLyBNdWx0aWNhc3QNCi0JCTB4MDEs
IDB4MDAsCQkJCS8vIE51bWJlciBvZiB1bmljYXN0DQotCQkweDAwLCAweDUwLCAweGYyLCAweDAw
LAkvLyB1bmljYXN0DQotCQkweDAxLCAweDAwLAkJCQkvLyBudW1iZXIgb2YgYXV0aGVudGljYXRp
b24gbWV0aG9kDQotCQkweDAwLCAweDUwLCAweGYyLCAweDAwCS8vIGF1dGhlbnRpY2F0aW9uDQot
CQl9Ow0KLVVDSEFSCUNpcGhlclN1aXRlV3BhTm9uZUFlc0xlbiA9IChzaXplb2YoQ2lwaGVyU3Vp
dGVXcGFOb25lQWVzKSAvIHNpemVvZihVQ0hBUikpOw0KLQ0KLS8qDQotCT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09DQotCURlc2NyaXB0aW9uOg0KLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLSovDQotVk9JRCBNbG1l
Q250bEluaXQoDQotCUlOIFBSVDI1NzBBREFQVEVSIHBBZCwgDQotCUlOIFNUQVRFX01BQ0hJTkUg
KlMsIA0KLQlPVVQgU1RBVEVfTUFDSElORV9GVU5DIFRyYW5zW10pIA0KLXsNCi0JLy8gQ29udHJv
bCBzdGF0ZSBtYWNoaW5lIGRpZmZlcnMgZnJvbSBvdGhlciBzdGF0ZSBtYWNoaW5lcywgdGhlIGlu
dGVyZmFjZSANCi0JLy8gZm9sbG93cyB0aGUgc3RhbmRhcmQgaW50ZXJmYWNlDQotCXBBZC0+TWxt
ZS5DbnRsTWFjaGluZS5DdXJyU3RhdGUgPSBDTlRMX0lETEU7DQotfQ0KLQ0KLS8qDQotCT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09DQotCURlc2NyaXB0aW9uOg0KLQk9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLSovDQot
Vk9JRCBNbG1lQ250bE1hY2hpbmVQZXJmb3JtQWN0aW9uKA0KLQlJTiBQUlQyNTcwQURBUFRFUiBw
QWQsIA0KLQlJTiBTVEFURV9NQUNISU5FICpTLCANCi0JSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVt
KSANCi17DQotCXN3aXRjaChwQWQtPk1sbWUuQ250bE1hY2hpbmUuQ3VyclN0YXRlKSANCi0Jew0K
LQkJY2FzZSBDTlRMX0lETEU6DQotCQkJQ250bElkbGVQcm9jKHBBZCwgRWxlbSk7DQotCQkJYnJl
YWs7DQotCQljYXNlIENOVExfV0FJVF9ESVNBU1NPQzoNCi0JCQlDbnRsV2FpdERpc2Fzc29jUHJv
YyhwQWQsIEVsZW0pOw0KLQkJCWJyZWFrOw0KLQkJY2FzZSBDTlRMX1dBSVRfSk9JTjoNCi0JCQlD
bnRsV2FpdEpvaW5Qcm9jKHBBZCwgRWxlbSk7DQotCQkJYnJlYWs7DQotCQkJDQotCQkvLyBDTlRM
X1dBSVRfUkVBU1NPQyBpcyB0aGUgb25seSBzdGF0ZSBpbiBDTlRMIG1hY2hpbmUgdGhhdCBkb2Vz
DQotCQkvLyBub3QgdHJpZ2dlcmVkIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgYnkgIlJUTVBTZXRJ
bmZvcm1hdGlvbihPSURfeHh4KSIuIA0KLQkJLy8gVGhlcmVmb3JlIG5vdCBwcm90ZWN0ZWQgYnkg
TkRJUydzICJvbmx5IG9uZSBvdXRzdGFuZGluZyBPSUQgcmVxdWVzdCIgDQotCQkvLyBydWxlLiBX
aGljaCBtZWFucyBORElTIG1heSBTRVQgT0lEIGluIHRoZSBtaWRkbGUgb2YgUk9BTWluZyBhdHRl
bXB0cy4NCi0JCS8vIEN1cnJlbnQgYXBwcm9hY2ggaXMgdG8gYmxvY2sgbmV3IFNFVCByZXF1ZXN0
IGF0IFJUTVBTZXRJbmZvcm1hdGlvbigpDQotCQkvLyB3aGVuIENudGxNYWNoaW5lLkN1cnJTdGF0
ZSBpcyBub3QgQ05UTF9JRExFDQotCQljYXNlIENOVExfV0FJVF9SRUFTU09DOg0KLQkJCUNudGxX
YWl0UmVhc3NvY1Byb2MocEFkLCBFbGVtKTsNCi0JCQlicmVhazsNCi0JCQkNCi0JCWNhc2UgQ05U
TF9XQUlUX1NUQVJUOg0KLQkJCUNudGxXYWl0U3RhcnRQcm9jKHBBZCwgRWxlbSk7DQotCQkJYnJl
YWs7DQotCQljYXNlIENOVExfV0FJVF9BVVRIOg0KLQkJCUNudGxXYWl0QXV0aFByb2MocEFkLCBF
bGVtKTsNCi0JCQlicmVhazsNCi0JCWNhc2UgQ05UTF9XQUlUX0FVVEgyOg0KLQkJCUNudGxXYWl0
QXV0aFByb2MyKHBBZCwgRWxlbSk7DQotCQkJYnJlYWs7DQotCQljYXNlIENOVExfV0FJVF9BU1NP
QzoNCi0JCQlDbnRsV2FpdEFzc29jUHJvYyhwQWQsIEVsZW0pOw0KLQkJCWJyZWFrOw0KLQ0KLQkJ
Y2FzZSBDTlRMX1dBSVRfT0lEX0xJU1RfU0NBTjoNCi0JCQlpZihFbGVtLT5Nc2dUeXBlID09IE1U
Ml9TQ0FOX0NPTkYpIA0KLQkJCXsNCi0JCQkJLy8gUmVzdW1lIFR4UmluZyBhZnRlciBTQ0FOSU5H
IGNvbXBsZXRlLiBXZSBob3BlIHRoZSBvdXQtb2Ytc2VydmljZSB0aW1lDQotCQkJCS8vIHdvbid0
IGJlIHRvbyBsb25nIHRvIGxldCB1cHBlciBsYXllciB0aW1lLW91dCB0aGUgd2FpdGluZyBmcmFt
ZXMNCi0JCQkJUlRVU0JSZXN1bWVNc2R1VHJhbnNtaXNzaW9uKHBBZCk7DQotCQkJCWlmIChwQWQt
Pk1sbWUuQ250bEF1eC5DdXJyUmVxSXNGcm9tTmRpcykNCi0JCQkJew0KLQkJCQkJTmRpc01TZXRJ
bmZvcm1hdGlvbkNvbXBsZXRlKHBBZC0+QWRhcHRlckhhbmRsZSwgTkRJU19TVEFUVVNfU1VDQ0VT
Uyk7DQotCQkJCX0NCi0JCQkJcEFkLT5NbG1lLkNudGxNYWNoaW5lLkN1cnJTdGF0ZSA9IENOVExf
SURMRTsNCi0JCQl9DQotCQkJLy8NCi0JCQkvLyBGb2xsb3dpbmcgbGluZSB3aWxsIHBvdGVudGlh
bGx5IGNhdXNlIGluZmluaXRlIGxvb3ANCi0JCQkvLw0KLQkJCS8vaWYgKHBBZC0+TWVkaWFTdGF0
ZSA9PSBOZGlzTWVkaWFTdGF0ZURpc2Nvbm5lY3RlZCkNCi0JCQkvLwkgIE1sbWVBdXRvUmVjb25u
ZWN0TGFzdFNTSUQocEFkKTsNCi0JCQlicmVhazsNCi0JCQkNCi0JCWNhc2UgQ05UTF9XQUlUX09J
RF9ESVNBU1NPQzoNCi0JCQlpZiAoRWxlbS0+TXNnVHlwZSA9PSBNVDJfRElTQVNTT0NfQ09ORikg
DQotCQkJew0KLQkJCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfVFJBQ0UsICJMaW5rRG93bihNbG1l
Q250bE1hY2hpbmVQZXJmb3JtQWN0aW9uKVxuIik7DQotCQkJCUxpbmtEb3duKHBBZCk7DQotCQkJ
CQ0KLQkJCQlpZiAocEFkLT5NbG1lLkNudGxBdXguQ3VyclJlcUlzRnJvbU5kaXMpDQotCQkJCXsN
Ci0JCQkJCU5kaXNNU2V0SW5mb3JtYXRpb25Db21wbGV0ZShwQWQtPkFkYXB0ZXJIYW5kbGUsIE5E
SVNfU1RBVFVTX1NVQ0NFU1MpOw0KLQkJCQl9DQotCQkJCXBBZC0+TWxtZS5DbnRsTWFjaGluZS5D
dXJyU3RhdGUgPSBDTlRMX0lETEU7DQotCQkJfQ0KLQkJCWJyZWFrOw0KLQ0KLQkJZGVmYXVsdDoN
Ci0JCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgIkNOVEwgLSBJbGxlZ2FsIG1lc3NhZ2UgdHlw
ZSg9JWQpIiwgRWxlbS0+TXNnVHlwZSk7DQotCQkJYnJlYWs7DQotCX0NCi19DQotDQotLyoNCi0J
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0NCi0JRGVzY3JpcHRpb246DQotCT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQot
Ki8NCi1WT0lEIENudGxJZGxlUHJvYygNCi0JSU4gUFJUMjU3MEFEQVBURVIgcEFkLCANCi0JSU4g
TUxNRV9RVUVVRV9FTEVNICpFbGVtKSANCi17DQotCU1MTUVfRElTQVNTT0NfUkVRX1NUUlVDVCAg
IERpc2Fzc29jUmVxOw0KLQkJDQotCWlmIChSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBU
RVJfUkFESU9fT0ZGKSkNCi0Jew0KLQkJaWYgKHBBZC0+TWxtZS5DbnRsQXV4LkN1cnJSZXFJc0Zy
b21OZGlzKQ0KLQkJew0KLQkJCU5kaXNNU2V0SW5mb3JtYXRpb25Db21wbGV0ZShwQWQtPkFkYXB0
ZXJIYW5kbGUsIE5ESVNfU1RBVFVTX0ZBSUxVUkUpOw0KLQkJCXBBZC0+TWxtZS5DbnRsQXV4LkN1
cnJSZXFJc0Zyb21OZGlzID0gRkFMU0U7DQotCQl9DQotCQlyZXR1cm47DQotCX0NCi0JCQ0KLQlz
d2l0Y2goRWxlbS0+TXNnVHlwZSkgDQotCXsNCi0JCWNhc2UgT0lEXzgwMl8xMV9TU0lEOg0KLQkJ
CUNudGxPaWRTc2lkUHJvYyhwQWQsIEVsZW0pOw0KLQkJCWJyZWFrOw0KLQ0KLQkJY2FzZSBSVF9P
SURfODAyXzExX0JTU0lEOg0KLQkJCUNudGxPaWRSVEJzc2lkUHJvYyhwQWQsRWxlbSk7DQotCQkJ
YnJlYWs7DQotDQotCQljYXNlIE9JRF84MDJfMTFfQlNTSURfTElTVF9TQ0FOOg0KLQkJCUNudGxP
aWRTY2FuUHJvYyhwQWQsRWxlbSk7DQotCQkJYnJlYWs7DQotCQkNCi0JCWNhc2UgT0lEXzgwMl8x
MV9ESVNBU1NPQ0lBVEU6DQotCQkJRGlzYXNzb2NQYXJtRmlsbChwQWQsICZEaXNhc3NvY1JlcSwg
JnBBZC0+UG9ydENmZy5Cc3NpZCwgUkVBU09OX0RJU0FTU09DX1NUQV9MRUFWSU5HKTsNCi0JCQlN
bG1lRW5xdWV1ZShwQWQsIEFTU09DX1NUQVRFX01BQ0hJTkUsIE1UMl9NTE1FX0RJU0FTU09DX1JF
USwgc2l6ZW9mKE1MTUVfRElTQVNTT0NfUkVRX1NUUlVDVCksICZEaXNhc3NvY1JlcSk7DQotCQkJ
cEFkLT5NbG1lLkNudGxNYWNoaW5lLkN1cnJTdGF0ZSA9IENOVExfV0FJVF9PSURfRElTQVNTT0M7
DQotCQkJLy8gU2V0IHRoZSBjb250cm9sIGF1eCBTU0lEIHRvIHByZXZlbnQgaXQgcmVjb25uZWN0
IHRvIG9sZCBTU0lEDQotCQkJLy8gU2luY2UgY2FsbGluZyB0aGlzIGluZGljYXRlIHVzZXIgZG9u
J3Qgd2FudCB0byBjb25uZWN0IHRvIHRoYXQgU1NJRCBhbnltb3JlLg0KLQkJCXBBZC0+TWxtZS5D
bnRsQXV4LlNzaWRMZW4gPSAzMjsNCi0JCQlOZGlzWmVyb01lbW9yeShwQWQtPk1sbWUuQ250bEF1
eC5Tc2lkLCBwQWQtPk1sbWUuQ250bEF1eC5Tc2lkTGVuKTsNCi0JCQlicmVhazsNCi0NCi0JCWNh
c2UgTVQyX01MTUVfUk9BTUlOR19SRVE6DQotCQkJQ250bE1sbWVSb2FtaW5nUHJvYyhwQWQsIEVs
ZW0pOw0KLQkJCWJyZWFrOw0KLQkJCQ0KLQkJZGVmYXVsdDoNCi0JCQlEQkdQUklOVChSVF9ERUJV
R19UUkFDRSwgIkNOVEwgLSBJbGxlZ2FsIG1lc3NhZ2UgaW4gQ250bElkbGVQcm9jKE1zZ1R5cGU9
JWQpXG4iLEVsZW0tPk1zZ1R5cGUpOw0KLQkJCWJyZWFrOw0KLQl9DQotfQ0KLQ0KLVZPSUQgQ250
bE9pZFNjYW5Qcm9jKA0KLQlJTiBQUlQyNTcwQURBUFRFUiBwQWQsDQotCUlOIE1MTUVfUVVFVUVf
RUxFTSAqRWxlbSkNCi17DQotCU1MTUVfU0NBTl9SRVFfU1RSVUNUCSAgIFNjYW5SZXE7DQotCUNI
QVIJCQkJCSAgIEJyb2FkU3NpZFtNQVhfTEVOX09GX1NTSURdOw0KLQlVTE9ORwkJCQkJICAgQnNz
SWR4ID0gQlNTX05PVF9GT1VORDsNCi0JQlNTX0VOVFJZCQkJCSAgIEN1cnJCc3M7DQotCVVMT05H
CQlOb3c7DQotDQotCS8vIHJlY29yZCBjdXJyZW50IEJTUyBpZiBuZXR3b3JrIGlzIGNvbm5lY3Rl
ZC4gDQotCS8vIDIwMDMtMi0xMyBkbyBub3QgaW5jbHVkZSBjdXJyZW50IElCU1MgaWYgdGhpcyBp
cyB0aGUgb25seSBTVEEgaW4gdGhpcyBJQlNTLg0KLQlpZiAocEFkLT5NZWRpYVN0YXRlID09IE5k
aXNNZWRpYVN0YXRlQ29ubmVjdGVkKSAvLwlpZiAoSU5GUkFfT04ocEFkKSB8fCBBREhPQ19PTihw
QWQpKQ0KLQl7DQotCQlCc3NJZHggPSBCc3NUYWJsZVNlYXJjaCgmcEFkLT5Qb3J0Q2ZnLkJzc1Rh
YiwgJnBBZC0+UG9ydENmZy5Cc3NpZCk7DQotCQlpZiAoQnNzSWR4ICE9IEJTU19OT1RfRk9VTkQp
DQotCQl7DQotCQkJTmRpc01vdmVNZW1vcnkoJkN1cnJCc3MsICZwQWQtPlBvcnRDZmcuQnNzVGFi
LkJzc0VudHJ5W0Jzc0lkeF0sIHNpemVvZihCU1NfRU5UUlkpKTsNCi0NCi0JCQkvLyAyMDAzLTIt
MjAgcmVzZXQgdGhpcyBSU1NJIHRvIGEgbG93IHZhbHVlIGJ1dCBub3QgemVyby4gSW4gbm9ybWFs
IGNhc2UsIHRoZSBjb21pbmcgU0NBTg0KLQkJCS8vCSAgIHNob3VsZCByZXR1cm4gYSBjb3JyZWN0
IFJTU0kgdG8gb3ZlcndyaXRlIHRoaXMuIElmIG5vIEJFRUFDT04gcmVjZWl2ZWQgYWZ0ZXIgU0NB
TiwgDQotCQkJLy8JICAgYXQgbGVhc3Qgd2Ugc3RpbGwgcmVwb3J0IGEgImdyZWF0ZXIgdGhhbiAw
IiBSU1NJIHNpbmNlIHdlIGNsYWltIGl0J3MgQ09OTkVDVEVELg0KLQkJCUN1cnJCc3MuUnNzaSA9
IDE4OyAvLyBhYm91dCAtODIgZEINCi0JCX0NCi0JfQ0KLQkJCQ0KLQkvLyBjbGVhbiB1cCBwcmV2
aW91cyBTQ0FOIHJlc3VsdCwgYWRkIGN1cnJlbnQgQlNTIGJhY2sgdG8gdGFibGUgaWYgYW55DQot
CUJzc1RhYmxlSW5pdCgmcEFkLT5Qb3J0Q2ZnLkJzc1RhYik7IA0KLQlpZiAoQnNzSWR4ICE9IEJT
U19OT1RfRk9VTkQpDQotCXsNCi0JCS8vIERESyBOb3RlOiBJZiB0aGUgTklDIGlzIGFzc29jaWF0
ZWQgd2l0aCBhIHBhcnRpY3VsYXIgQlNTSUQgYW5kIFNTSUQgDQotCQkvLwkgIHRoYXQgYXJlIG5v
dCBjb250YWluZWQgaW4gdGhlIGxpc3Qgb2YgQlNTSURzIGdlbmVyYXRlZCBieSB0aGlzIHNjYW4s
IHRoZSANCi0JCS8vCSAgQlNTSUQgZGVzY3JpcHRpb24gb2YgdGhlIGN1cnJlbnRseSBhc3NvY2lh
dGVkIEJTU0lEIGFuZCBTU0lEIHNob3VsZCBiZSANCi0JCS8vCSAgYXBwZW5kZWQgdG8gdGhlIGxp
c3Qgb2YgQlNTSURzIGluIHRoZSBOSUMncyBkYXRhYmFzZS4NCi0JCS8vIFRvIGVuc3VyZSB0aGlz
LCB3ZSBhcHBlbmQgdGhpcyBCU1MgYXMgdGhlIGZpcnN0IGVudHJ5IGluIFNDQU4gcmVzdWx0DQot
CQlOZGlzTW92ZU1lbW9yeSgmcEFkLT5Qb3J0Q2ZnLkJzc1RhYi5Cc3NFbnRyeVswXSwgJkN1cnJC
c3MsIHNpemVvZihCU1NfRU5UUlkpKTsNCi0JCXBBZC0+UG9ydENmZy5Cc3NUYWIuQnNzTnIgPSAx
Ow0KLQl9DQotDQotCUJyb2FkU3NpZFswXSA9ICdcMCc7DQotCVNjYW5QYXJtRmlsbChwQWQsICZT
Y2FuUmVxLCBCcm9hZFNzaWQsIDAsIEJTU19BTlksIFNDQU5fUEFTU0lWRSk7DQotCU1sbWVFbnF1
ZXVlKHBBZCwgU1lOQ19TVEFURV9NQUNISU5FLCBNVDJfTUxNRV9TQ0FOX1JFUSwgDQotCQlzaXpl
b2YoTUxNRV9TQ0FOX1JFUV9TVFJVQ1QpLCAmU2NhblJlcSk7DQotCXBBZC0+TWxtZS5DbnRsTWFj
aGluZS5DdXJyU3RhdGUgPSBDTlRMX1dBSVRfT0lEX0xJU1RfU0NBTjsNCi0JTm93ID0gamlmZmll
czsNCi0JcEFkLT5Qb3J0Q2ZnLkxhc3RTY2FuVGltZSA9IE5vdzsNCi19DQotDQotLyoNCi0JPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0NCi0JRGVzY3JpcHRpb246DQotCT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotKi8N
Ci1WT0lEIENudGxPaWRTc2lkUHJvYygNCi0JSU4gUFJUMjU3MEFEQVBURVIgcEFkLCANCi0JSU4g
TUxNRV9RVUVVRV9FTEVNICogRWxlbSkgDQotew0KLQlORElTXzgwMl8xMV9TU0lECQkgICpPaWRT
c2lkID0gKE5ESVNfODAyXzExX1NTSUQgKilFbGVtLT5Nc2c7DQotCU1MTUVfRElTQVNTT0NfUkVR
X1NUUlVDVCAgIERpc2Fzc29jUmVxOw0KLQlVTE9ORwkJCQkJICAgTm93Ow0KLQ0KLQkvLyBTdGVw
IDAuIA0KLQkvLwkgIHJlY29yZCB0aGUgZGVzaXJlZCBTU0lEIGFuZCBhbGwgbWF0Y2hpbmcgQlNT
ZXMgaW50byBDbnRsQXV4LlNzaWRCc3NUYWIgZm9yIA0KLQkvLwkgIGxhdGVyLW9uIGl0ZXJhdGlv
bi4gU29ydCBieSBSU1NJIG9yZGVyDQotCWlmIChPaWRTc2lkLT5Tc2lkWzBdID09IDApDQotCXsN
Ci0JCURCR1BSSU5UX1JBVyhSVF9ERUJVR19UUkFDRSwgImVtcHR5IHN0cmluZyBTU0lEXG4iKTsN
Ci0JCXBBZC0+TWxtZS5DbnRsQXV4LlNzaWRMZW4gPSAwOw0KLQl9DQotCWVsc2UNCi0JCXBBZC0+
TWxtZS5DbnRsQXV4LlNzaWRMZW4gPSAoVUNIQVIpT2lkU3NpZC0+U3NpZExlbmd0aDsNCi0NCi0J
TmRpc01vdmVNZW1vcnkocEFkLT5NbG1lLkNudGxBdXguU3NpZCwgT2lkU3NpZC0+U3NpZCwgcEFk
LT5NbG1lLkNudGxBdXguU3NpZExlbik7DQotCUJzc1RhYmxlU3NpZFNvcnQocEFkLCAmcEFkLT5N
bG1lLkNudGxBdXguU3NpZEJzc1RhYiwgcEFkLT5NbG1lLkNudGxBdXguU3NpZCwgcEFkLT5NbG1l
LkNudGxBdXguU3NpZExlbik7DQotCXBBZC0+TWxtZS5DbnRsQXV4LkJzc0lkeCA9IDA7DQotCURC
R1BSSU5UKFJUX0RFQlVHX1RSQUNFLCJDTlRMIC0gJWQgQlNTIG1hdGNoIHRoZSBkZXNpcmUgU1NJ
RCAlc1xuIixwQWQtPk1sbWUuQ250bEF1eC5Tc2lkQnNzVGFiLkJzc05yLCBwQWQtPk1sbWUuQ250
bEF1eC5Tc2lkKTsNCi0JTm93ID0gamlmZmllczsNCi0JDQotCWlmICgocEFkLT5NZWRpYVN0YXRl
ID09IE5kaXNNZWRpYVN0YXRlQ29ubmVjdGVkKSAmJg0KLQkJTUFDX0FERFJfRVFVQUwoJnBBZC0+
UG9ydENmZy5Cc3NpZCwgJnBBZC0+TWxtZS5DbnRsQXV4LlNzaWRCc3NUYWIuQnNzRW50cnlbMF0u
QnNzaWQpKQ0KLQl7DQotCQlpZiAoKChwQWQtPlBvcnRDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8x
MUF1dGhNb2RlV1BBKSB8fCAocEFkLT5Qb3J0Q2ZnLkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRo
TW9kZVdQQVBTSykpICYmDQotCQkJKHBBZC0+UG9ydENmZy5Qb3J0U2VjdXJlZCA9PSBXUEFfODAy
XzFYX1BPUlRfTk9UX1NFQ1VSRUQpKQ0KLQkJew0KLQkJCS8vIEZvciBXUEEsIFdQQS1QU0ssIGlm
IHRoZSAxeCBwb3J0IGlzIG5vdCBzZWN1cmVkLCB3ZSBoYXZlIHRvIHJlZG8gDQotCQkJLy8gY29u
bmVjdGlvbiBwcm9jZXNzDQotCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICJDTlRMIC0gZGlz
YXNzb2NpYXRlIHdpdGggY3VycmVudCBBUC4uLlxuIik7DQotCQkJRGlzYXNzb2NQYXJtRmlsbChw
QWQsICZEaXNhc3NvY1JlcSwgJnBBZC0+UG9ydENmZy5Cc3NpZCwgUkVBU09OX0RJU0FTU09DX1NU
QV9MRUFWSU5HKTsNCi0JCQlNbG1lRW5xdWV1ZShwQWQsIEFTU09DX1NUQVRFX01BQ0hJTkUsIE1U
Ml9NTE1FX0RJU0FTU09DX1JFUSwgDQotCQkJCQkJc2l6ZW9mKE1MTUVfRElTQVNTT0NfUkVRX1NU
UlVDVCksICZEaXNhc3NvY1JlcSk7DQotCQkJcEFkLT5NbG1lLkNudGxNYWNoaW5lLkN1cnJTdGF0
ZSA9IENOVExfV0FJVF9ESVNBU1NPQzsNCi0JCX0NCi0JCWVsc2UgaWYgKHBBZC0+YkNvbmZpZ0No
YW5nZWQgPT0gVFJVRSkNCi0JCXsNCi0JCQkvLyBDb25maWcgaGFzIGNoYW5nZWQsIHdlIGhhdmUg
dG8gcmVjb25uZWN0IHRoZSBzYW1lIEFQDQotCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICJD
TlRMIC0gZGlzYXNzb2NpYXRlIHdpdGggY3VycmVudCBBUCBCZWNhdXNlIGNvbmZpZyBjaGFuZ2Vk
Li4uXG4iKTsNCi0JCQlEaXNhc3NvY1Bhcm1GaWxsKHBBZCwgJkRpc2Fzc29jUmVxLCAmcEFkLT5Q
b3J0Q2ZnLkJzc2lkLCBSRUFTT05fRElTQVNTT0NfU1RBX0xFQVZJTkcpOw0KLQkJCU1sbWVFbnF1
ZXVlKHBBZCwgQVNTT0NfU1RBVEVfTUFDSElORSwgTVQyX01MTUVfRElTQVNTT0NfUkVRLCANCi0J
CQkJCQlzaXplb2YoTUxNRV9ESVNBU1NPQ19SRVFfU1RSVUNUKSwgJkRpc2Fzc29jUmVxKTsNCi0J
CQlwQWQtPk1sbWUuQ250bE1hY2hpbmUuQ3VyclN0YXRlID0gQ05UTF9XQUlUX0RJU0FTU09DOw0K
LQkJfQ0KLQkJZWxzZQ0KLQkJew0KLQkJCS8vIFdlIG9ubHkgY2hlY2sgaWYgc2FtZSB0byB0aGUg
QlNTSUQgd2l0aCBoaWdoZXN0IFJTU0kuDQotCQkJLy8gSWYgcm9hbWluZyBvZiBzYW1lIFNTSUQg
cmVxdWlyZWQsIHdlIHN0aWxsIGRvIHRoZSByZWNvbm5lY3Rpb24uDQotCQkJLy8gc2FtZSBCU1NJ
RCwgZ28gYmFjayB0byBpZGxlIHN0YXRlIGRpcmVjdGx5DQotCQkJREJHUFJJTlQoUlRfREVCVUdf
VFJBQ0UsICJDTlRMIC0gYWxyZWFkeSB3aXRoIHRoaXMgQlNTSUQuIGlnbm9yZSB0aGlzIFNFVF9T
U0lEIHJlcXVlc3RcbiIpOw0KLQkJCWlmIChwQWQtPk1sbWUuQ250bEF1eC5DdXJyUmVxSXNGcm9t
TmRpcykNCi0JCQl7DQotCQkJCU5kaXNNU2V0SW5mb3JtYXRpb25Db21wbGV0ZShwQWQtPkFkYXB0
ZXJIYW5kbGUsIE5ESVNfU1RBVFVTX1NVQ0NFU1MpOw0KLQkJCX0NCi0JCQlwQWQtPk1sbWUuQ250
bE1hY2hpbmUuQ3VyclN0YXRlID0gQ05UTF9JRExFOw0KLQkJfSANCi0JfSANCi0JZWxzZSBpZiAo
SU5GUkFfT04ocEFkKSkgDQotCXsNCi0JCS8vIGNhc2UgMS4gYWN0aXZlIGFzc29jaWF0aW9uIGV4
aXN0ZW50DQotCQkvLwkgIHJvYW1pbmcgaXMgZG9uZSB3aXRoaW4gbWluaXBvcnQgZHJpdmVyLCBu
b3RoaW5nIHRvIGRvIHdpdGggY29uZmlndXJhdGlvbg0KLQkJLy8JICB1dGlsaXR5LiBzbyB1cG9u
IGEgbmV3IFNFVChPSURfODAyXzExX1NTSUQpIGlzIHJlY2VpdmVkLCB3ZSBqdXN0IA0KLQkJLy8J
ICBkaXNhc3NvY2lhdGUgd2l0aCB0aGUgY3VycmVudCAob3IgcHJldmlvdXMpIGFzc29jaWF0ZWQg
QVAsIGlmIGFueSwgDQotCQkvLwkgIHRoZW4gcGVyZm9ybSBhIG5ldyBhc3NvY2lhdGlvbiB3aXRo
IHRoaXMgbmV3IFNTSUQsIG5vIG1hdHRlciB0aGUgDQotCQkvLwkgIG5ldy9vbGQgU1NJRCBhcmUg
dGhlIHNhbWUgb3IgbnB0Lg0KLQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICJDTlRMIC0gZGlz
YXNzb2NpYXRlIHdpdGggY3VycmVudCBBUC4uLlxuIik7DQotCQlEaXNhc3NvY1Bhcm1GaWxsKHBB
ZCwgJkRpc2Fzc29jUmVxLCAmcEFkLT5Qb3J0Q2ZnLkJzc2lkLCBSRUFTT05fRElTQVNTT0NfU1RB
X0xFQVZJTkcpOw0KLQkJTWxtZUVucXVldWUocEFkLCBBU1NPQ19TVEFURV9NQUNISU5FLCBNVDJf
TUxNRV9ESVNBU1NPQ19SRVEsIA0KLQkJCQkJc2l6ZW9mKE1MTUVfRElTQVNTT0NfUkVRX1NUUlVD
VCksICZEaXNhc3NvY1JlcSk7DQotCQlwQWQtPk1sbWUuQ250bE1hY2hpbmUuQ3VyclN0YXRlID0g
Q05UTF9XQUlUX0RJU0FTU09DOw0KLQl9DQotCWVsc2UNCi0JewkNCi0JCWlmIChBREhPQ19PTihw
QWQpKQ0KLQkJew0KLS8vCQkJICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJDTlRMIC0gZHJv
cCBjdXJyZW50IEFESE9DXG4iKSk7DQotCQkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX1RSQUNFLCAi
TGlua0Rvd24oQ250bE9pZFNzaWRQcm9jKVxuIik7DQotCQkJTGlua0Rvd24ocEFkKTsNCi0JCQlw
QWQtPk1lZGlhU3RhdGUgPSBOZGlzTWVkaWFTdGF0ZURpc2Nvbm5lY3RlZDsNCi0JCQlOZGlzTUlu
ZGljYXRlU3RhdHVzKHBBZC0+QWRhcHRlckhhbmRsZSwgTkRJU19TVEFUVVNfTUVESUFfRElTQ09O
TkVDVCwgKFBWT0lEKU5VTEwsIDApOw0KLQkJCU5kaXNNSW5kaWNhdGVTdGF0dXNDb21wbGV0ZShw
QWQtPkFkYXB0ZXJIYW5kbGUpOw0KLQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAiTkRJU19T
VEFUVVNfTUVESUFfRElTQ09OTkVDVCBFdmVudCBDIVxuIik7DQotCQl9DQotDQotCQlpZiAoKHBB
ZC0+TWxtZS5DbnRsQXV4LlNzaWRCc3NUYWIuQnNzTnIgPT0gMCkgJiYNCi0JCQkocEFkLT5Qb3J0
Q2ZnLkF1dG9SZWNvbm5lY3QgPT0gVFJVRSkgJiYNCi0JCQkocEFkLT5Qb3J0Q2ZnLkJzc1R5cGUg
PT0gQlNTX0lORlJBKSAmJg0KLQkJCShNbG1lVmFsaWRhdGVTU0lEKHBBZCkgPT0gVFJVRSkpDQot
CQl7DQotDQotCQkgICAgTUxNRV9TQ0FOX1JFUV9TVFJVQ1QgICAgICAgU2NhblJlcTsNCi0JCQlE
QkdQUklOVChSVF9ERUJVR19UUkFDRSwgIkNOVEwgLSBObyBtYXRjaGluZyBCU1MsIHN0YXJ0IGEg
bmV3IHNjYW5cbiIpOw0KLQkJCS8vIEJyb2FkU3NpZFswXSA9ICdcMCc7DQotCQkJU2NhblBhcm1G
aWxsKHBBZCwgJlNjYW5SZXEsIHBBZC0+TWxtZS5DbnRsQXV4LlNzaWQsIHBBZC0+TWxtZS5DbnRs
QXV4LlNzaWRMZW4sIEJTU19BTlksIFNDQU5fQUNUSVZFKTsNCi0JCQlNbG1lRW5xdWV1ZShwQWQs
IFNZTkNfU1RBVEVfTUFDSElORSwgTVQyX01MTUVfU0NBTl9SRVEsIHNpemVvZihNTE1FX1NDQU5f
UkVRX1NUUlVDVCksICZTY2FuUmVxKTsNCi0JCQlwQWQtPk1sbWUuQ250bE1hY2hpbmUuQ3VyclN0
YXRlID0gQ05UTF9XQUlUX09JRF9MSVNUX1NDQU47DQotCQkJLy8gUmVzZXQgTWlzc2VkIHNjYW4g
bnVtYmVyDQotLy8JCQlwQWQtPlBvcnRDZmcuSWdub3JlZFNjYW5OdW1iZXIgPSAwOw0KLQkJCXBB
ZC0+UG9ydENmZy5MYXN0U2NhblRpbWUgPSBOb3c7DQotCQl9DQotCQllbHNlDQotCQl7DQotCQkJ
SXRlcmF0ZU9uQnNzVGFiKHBBZCk7DQotCQl9DQotCX0gDQotfQ0KLQ0KLS8qDQotCT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09DQotCURlc2NyaXB0aW9uOg0KLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLSovDQotVk9J
RCBDbnRsT2lkUlRCc3NpZFByb2MoDQotCUlOIFBSVDI1NzBBREFQVEVSIHBBZCwgDQotCUlOIE1M
TUVfUVVFVUVfRUxFTSAqIEVsZW0pIA0KLXsNCi0JVUxPTkcJCUJzc0lkeDsNCi0JTUFDQUREUiAJ
KnBPaWRCc3NpZCA9IChNQUNBRERSICopRWxlbS0+TXNnOw0KLQlNTE1FX0RJU0FTU09DX1JFUV9T
VFJVQ1QJRGlzYXNzb2NSZXE7DQotCU1MTUVfSk9JTl9SRVFfU1RSVUNUCQlKb2luUmVxOw0KLSAN
Ci0JQ09QWV9NQUNfQUREUigmcEFkLT5NbG1lLkNudGxBdXguQnNzaWQsIHBPaWRCc3NpZCk7DQot
CUJzc0lkeCA9IEJzc1RhYmxlU2VhcmNoKCZwQWQtPlBvcnRDZmcuQnNzVGFiLCBwT2lkQnNzaWQp
Ow0KLQkgICANCi0JaWYgKEJzc0lkeCA9PSBCU1NfTk9UX0ZPVU5EKSANCi0Jew0KLQkJREJHUFJJ
TlQoUlRfREVCVUdfVFJBQ0UsICJDTlRMIC0gQlNTSUQgbm90IGZvdW5kLiByZXBseSBORElTX1NU
QVRVU19OT1RfQUNDRVBURURcbiIpOw0KLQkJaWYgKHBBZC0+TWxtZS5DbnRsQXV4LkN1cnJSZXFJ
c0Zyb21OZGlzKQ0KLQkJew0KLQkJCS8vTmRpc01TZXRJbmZvcm1hdGlvbkNvbXBsZXRlKHBBZC0+
QWRhcHRlckhhbmRsZSwgTkRJU19TVEFUVVNfTk9UX0FDQ0VQVEVEKTsNCi0JCX0NCi0JCXBBZC0+
TWxtZS5DbnRsTWFjaGluZS5DdXJyU3RhdGUgPSBDTlRMX0lETEU7DQotCQlyZXR1cm47DQotCX0N
Ci0NCi0JLy8gY29weSB0aGUgbWF0Y2hlZCBCU1MgZW50cnkgZnJvbSBQb3J0Q2ZnLkJzc1RhYiB0
byBDbnRsQXV4LlNzaWRCc3NUYWINCi0JcEFkLT5NbG1lLkNudGxBdXguQnNzSWR4ID0gMDsNCi0J
cEFkLT5NbG1lLkNudGxBdXguU3NpZEJzc1RhYi5Cc3NOciA9IDE7DQotCU5kaXNNb3ZlTWVtb3J5
KCZwQWQtPk1sbWUuQ250bEF1eC5Tc2lkQnNzVGFiLkJzc0VudHJ5WzBdLCAmcEFkLT5Qb3J0Q2Zn
LkJzc1RhYi5Cc3NFbnRyeVtCc3NJZHhdLCBzaXplb2YoQlNTX0VOVFJZKSk7DQotDQotCS8vIEFk
ZCBTU0lEIGludG8gTWxtZS5DbnRsQXV4IGZvciBzaXRlIHN1cmV5IGpvaW5pbmcgaGlkZGVuIFNT
SUQNCi0JcEFkLT5NbG1lLkNudGxBdXguU3NpZExlbiA9IHBBZC0+TWxtZS5DbnRsQXV4LlNzaWRC
c3NUYWIuQnNzRW50cnlbMF0uU3NpZExlbjsNCi0JTmRpc01vdmVNZW1vcnkocEFkLT5NbG1lLkNu
dGxBdXguU3NpZCwgcEFkLT5NbG1lLkNudGxBdXguU3NpZEJzc1RhYi5Cc3NFbnRyeVswXS5Tc2lk
LCBwQWQtPk1sbWUuQ250bEF1eC5Tc2lkTGVuKTsJDQotDQotCS8vIDIwMDItMTEtMjYgc2tpcCB0
aGUgZm9sbG93aW5nIGNoZWNraW5nLiBpLmUuIGlmIHVzZXIgd2FudHMgdG8gcmUtY29ubmVjdCB0
byBzYW1lIEFQDQotCS8vIHdlIGp1c3QgZm9sbG93IG5vcm1hbCBwcm9jZWR1cmUuIFRoZSByZWFz
b24gb2YgdXNlciBkb2luZyB0aGlzIG1heSBiZWNhdXNlIGhlL3NoZSBjaGFuZ2VkDQotCS8vIEFQ
IHRvIGFub3RoZXIgY2hhbm5lbCwgYnV0IHdlIHN0aWxsIHJlY2VpdmVkIEJFQUNPTiBmcm9tIGl0
IHRodXMgZG9uJ3QgY2xhaW0gTGluayBEb3duLg0KLQkvLyBTaW5jZSB1c2VyIGtub3dzIGhlJ3Mg
Y2huZ2VkIEFQIGNoYW5uZWwsIGhlJ2xsIHJlLWNvbm5lY3QgYWdhaW4uIEJ5IHNraXBwaW5nIHRo
ZSBmb2xsb3dpbmcNCi0JLy8gY2hlY2tpbmcsIHdlJ2xsIGRpc2Fzc29jaWF0ZSB0aGVuIHJlLWRv
IG5vcm1hbCBhc3NvY2lhdGlvbiB3aXRoIHRoaXMgQVAgYXQgdGhlIG5ldyBjaGFubmVsLg0KLQkv
LyAyMDAzLTEtNiBSZS1lbmFibGUgdGhpcyBmZWF0dXJlIGJhc2VkIG9uIG1pY3Jvc29mdCByZXF1
aXJlbWVudCB3aGljaCBwcmVmZXIgbm90IHRvIHJlLWRvDQotCS8vIGNvbm5lY3Rpb24gd2hlbiBz
ZXR0aW5nIHRoZSBzYW1lIEJTU0lELg0KLQlpZiAoIChwQWQtPk1lZGlhU3RhdGUgPT0gTmRpc01l
ZGlhU3RhdGVDb25uZWN0ZWQpICYmIC8vKElORlJBX09OKHBBZCkgfHwgQURIT0NfT04ocEFkKSkg
JiYNCi0JCU1BQ19BRERSX0VRVUFMKCZwQWQtPlBvcnRDZmcuQnNzaWQsIHBPaWRCc3NpZCkpDQot
CXsNCi0JCS8vIHNhbWUgQlNTSUQsIGdvIGJhY2sgdG8gaWRsZSBzdGF0ZSBkaXJlY3RseQ0KLQkJ
REJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICJDTlRMIC0gYWxyZWFkeSBpbiB0aGlzIEJTU0lELiBp
Z25vcmUgdGhpcyBTRVRfQlNTSUQgcmVxdWVzdFxuIik7DQotCQlpZiAocEFkLT5NbG1lLkNudGxB
dXguQ3VyclJlcUlzRnJvbU5kaXMpDQotCQl7DQotCQkJTmRpc01TZXRJbmZvcm1hdGlvbkNvbXBs
ZXRlKHBBZC0+QWRhcHRlckhhbmRsZSwgTkRJU19TVEFUVVNfU1VDQ0VTUyk7DQotCQl9DQotCQlw
QWQtPk1sbWUuQ250bE1hY2hpbmUuQ3VyclN0YXRlID0gQ05UTF9JRExFOw0KLQl9IA0KLQllbHNl
IA0KLQl7DQotCQlpZiAoSU5GUkFfT04ocEFkKSkNCi0JCXsNCi0JCQkvLyBkaXNhc3NvYyBmcm9t
IGN1cnJlbnQgQVAgZmlyc3QNCi0JCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgIkNOVEwgLSBk
aXNhc3NvY2lhdGUgd2l0aCBjdXJyZW50IEFQIC4uLlxuIik7DQotCQkJRGlzYXNzb2NQYXJtRmls
bChwQWQsICZEaXNhc3NvY1JlcSwgJnBBZC0+UG9ydENmZy5Cc3NpZCwgUkVBU09OX0RJU0FTU09D
X1NUQV9MRUFWSU5HKTsNCi0JCQlNbG1lRW5xdWV1ZShwQWQsIEFTU09DX1NUQVRFX01BQ0hJTkUs
IE1UMl9NTE1FX0RJU0FTU09DX1JFUSwgDQotCQkJCQkJc2l6ZW9mKE1MTUVfRElTQVNTT0NfUkVR
X1NUUlVDVCksICZEaXNhc3NvY1JlcSk7DQotDQotCQkJcEFkLT5NbG1lLkNudGxNYWNoaW5lLkN1
cnJTdGF0ZSA9IENOVExfV0FJVF9ESVNBU1NPQzsNCi0JCX0NCi0JCWVsc2UNCi0JCXsNCi0JCQlp
ZiAoQURIT0NfT04ocEFkKSkNCi0JCQl7DQotCQkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19UUkFD
RSwgIkxpbmtEb3duKENudGxPaWRSVEJzc2lkUHJvYylcbiIpOw0KLQkJCQlMaW5rRG93bihwQWQp
Ow0KLQkJCQlwQWQtPk1lZGlhU3RhdGUgPSBOZGlzTWVkaWFTdGF0ZURpc2Nvbm5lY3RlZDsNCi0J
CQkJTmRpc01JbmRpY2F0ZVN0YXR1cyhwQWQtPkFkYXB0ZXJIYW5kbGUsIE5ESVNfU1RBVFVTX01F
RElBX0RJU0NPTk5FQ1QsIChQVk9JRClOVUxMLCAwKTsNCi0JCQkJTmRpc01JbmRpY2F0ZVN0YXR1
c0NvbXBsZXRlKHBBZC0+QWRhcHRlckhhbmRsZSk7DQotCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RS
QUNFLCAiTkRJU19TVEFUVVNfTUVESUFfRElTQ09OTkVDVCBFdmVudCBDIVxuIik7DQotCQkJfQ0K
LQkJCQ0KLQkJCS8vIE5vIGFjdGl2ZSBhc3NvY2lhdGlvbiwgam9pbiB0aGUgQlNTIGltbWVkaWF0
ZWx5DQotCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICJDTlRMIC0gam9pbmluZyAlMDJ4OiUw
Mng6JTAyeDolMDJ4OiUwMng6JTAyeCAuLi5cbiIsDQotCQkJCXBPaWRCc3NpZC0+T2N0ZXRbMF0s
cE9pZEJzc2lkLT5PY3RldFsxXSxwT2lkQnNzaWQtPk9jdGV0WzJdLA0KLQkJCQlwT2lkQnNzaWQt
Pk9jdGV0WzNdLHBPaWRCc3NpZC0+T2N0ZXRbNF0scE9pZEJzc2lkLT5PY3RldFs1XSk7DQotCQkJ
Sm9pblBhcm1GaWxsKHBBZCwgJkpvaW5SZXEsIHBBZC0+TWxtZS5DbnRsQXV4LkJzc0lkeCk7DQot
CQkJTWxtZUVucXVldWUocEFkLCBTWU5DX1NUQVRFX01BQ0hJTkUsIE1UMl9NTE1FX0pPSU5fUkVR
LCBzaXplb2YoTUxNRV9KT0lOX1JFUV9TVFJVQ1QpLCAmSm9pblJlcSk7DQotDQotCQkJcEFkLT5N
bG1lLkNudGxNYWNoaW5lLkN1cnJTdGF0ZSA9IENOVExfV0FJVF9KT0lOOw0KLQkJfQ0KLQl9IA0K
LX0NCi0NCi0vLyBSb2FtaW5nIGlzIHRoZSBvbmx5IGV4dGVybmFsIHJlcXVlc3QgdHJpZ2dlcmlu
ZyBDTlRMIHN0YXRlIG1hY2hpbmUNCi0vLyBkZXNwaXRlIG9mIG90aGVyICJTRVQgT0lEIiBvcGVy
YXRpb24uIEFsbCAiU0VUIE9JRCIgcmVsYXRlZCBvZXJhdGlvbnMgDQotLy8gaGFwcGVuIGluIHNl
cXVlbmNlLCBiZWNhdXNlIG5vIG90aGVyIFNFVCBPSUQgd2lsbCBiZSBzZW50IHRvIHRoaXMgZGV2
aWNlDQotLy8gdW50aWwgdGhlIHRoZSBwcmV2aW91cyBTRVQgb3BlcmF0aW9uIGlzIGNvbXBsZXRl
IChzdWNjZXNzZnVsIG8gZmFpbGVkKS4NCi0vLyBTbywgaG93IGRvIHdlIHF1YXJhbnRlZSB0aGlz
IFJPQU1JTkcgcmVxdWVzdCB3b24ndCBjb3JydXB0IG90aGVyICJTRVQgT0lEIj8NCi0vLyBvciBi
ZWVuIGNvcnJ1cHRlZCBieSBvdGhlciAiU0VUIE9JRCI/DQotVk9JRCBDbnRsTWxtZVJvYW1pbmdQ
cm9jKA0KLQlJTiBQUlQyNTcwQURBUFRFUiBwQWQsIA0KLQlJTiBNTE1FX1FVRVVFX0VMRU0gKkVs
ZW0pIA0KLXsNCi0JLy8gVE9ETzogDQotCS8vIEFQIGluIGRpZmZlcmVudCBjaGFubmVsIG1heSBz
aG93IGxvd2VyIFJTU0kgdGhhbiBhY3R1YWwgdmFsdWU/Pw0KLQkvLyBzaG91bGQgd2UgYWRkIGEg
d2VpZ2h0aW5nIGZhY3RvciB0byBjb21wZW5zYXRlIGl0Pw0KLQlEQkdQUklOVChSVF9ERUJVR19U
UkFDRSwiQ05UTCAtIFJvYW1pbmcgaW4gQ250bEF1eC5Sb2FtVGFiLi4uXG4iKTsNCi0JQnNzVGFi
bGVTb3J0QnlSc3NpKCZwQWQtPk1sbWUuQ250bEF1eC5Sb2FtVGFiKTsNCi0JcEFkLT5NbG1lLkNu
dGxBdXguUm9hbUlkeD0wOw0KLQlJdGVyYXRlT25Cc3NUYWIyKHBBZCk7DQotCQ0KLX0NCi0NCi0v
Kg0KLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQ0KLQlEZXNjcmlwdGlvbjoNCi0JPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0NCi0qLw0KLVZPSUQgQ250bFdhaXREaXNhc3NvY1Byb2MoDQotCUlOIFBSVDI1NzBBREFQVEVS
IHBBZCwgDQotCUlOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSkgDQotew0KLQlNTE1FX1NUQVJUX1JF
UV9TVFJVQ1QJICBTdGFydFJlcTsNCi0JDQotCWlmIChFbGVtLT5Nc2dUeXBlID09IE1UMl9ESVNB
U1NPQ19DT05GKSANCi0Jew0KLQkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX1RSQUNFLCAiTGlua0Rv
d24oQ250bFdhaXREaXNhc3NvY1Byb2MpXG4iKTsNCi0JCUxpbmtEb3duKHBBZCk7DQotCQkNCi0J
CS8vIGNhc2UgMS4gbm8gbWF0Y2hpbmcgQlNTLCBhbmQgdXNlciB3YW50cyBBREhPQywgc28gd2Ug
anVzdCBzdGFydCBhIG5ldyBvbmUJCQ0KLQkJaWYgKChwQWQtPk1sbWUuQ250bEF1eC5Tc2lkQnNz
VGFiLkJzc05yPT0wKSAmJiAocEFkLT5Qb3J0Q2ZnLkJzc1R5cGUgPT0gQlNTX0lOREVQKSkNCi0J
CXsNCi0JCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgIkNOVEwgLSBObyBtYXRjaGluZyBCU1Ms
IHN0YXJ0IGEgbmV3IEFESE9DIChTc2lkPSVzKS4uLlxuIixwQWQtPk1sbWUuQ250bEF1eC5Tc2lk
KTsNCi0JCQlTdGFydFBhcm1GaWxsKHBBZCwgJlN0YXJ0UmVxLCBwQWQtPk1sbWUuQ250bEF1eC5T
c2lkLCBwQWQtPk1sbWUuQ250bEF1eC5Tc2lkTGVuKTsNCi0JCQlNbG1lRW5xdWV1ZShwQWQsIFNZ
TkNfU1RBVEVfTUFDSElORSwgTVQyX01MTUVfU1RBUlRfUkVRLCBzaXplb2YoTUxNRV9TVEFSVF9S
RVFfU1RSVUNUKSwgJlN0YXJ0UmVxKTsNCi0JCQlwQWQtPk1sbWUuQ250bE1hY2hpbmUuQ3VyclN0
YXRlID0gQ05UTF9XQUlUX1NUQVJUOw0KLQkJfQ0KLQkJLy8gY2FzZSAyLiB0cnkgZWFjaCBtYXRj
aGVkIEJTUw0KLQkJZWxzZQ0KLQkJew0KLQkJCUl0ZXJhdGVPbkJzc1RhYihwQWQpOw0KLQkJfQ0K
LQl9DQotfQ0KLQkJCQ0KLS8qDQotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotCURlc2NyaXB0aW9uOg0K
LQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQ0KLSovDQotVk9JRCBDbnRsV2FpdEpvaW5Qcm9jKA0KLQlJTiBQ
UlQyNTcwQURBUFRFUiBwQWQsIA0KLQlJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pIA0KLXsNCi0J
VVNIT1JUCQkJCQkJUmVhc29uOw0KLQlNTE1FX0FVVEhfUkVRX1NUUlVDVAkJQXV0aFJlcTsNCi0N
Ci0JaWYgKEVsZW0tPk1zZ1R5cGUgPT0gTVQyX0pPSU5fQ09ORikgDQotCXsNCi0JCU5kaXNNb3Zl
TWVtb3J5KCZSZWFzb24sIEVsZW0tPk1zZywgc2l6ZW9mKFVTSE9SVCkpOw0KLQkJaWYgKFJlYXNv
biA9PSBNTE1FX1NVQ0NFU1MpIA0KLQkJew0KLQkJCS8vIDEuIGpvaW5lZCBhbiBJQlNTLCB3ZSBh
cmUgcHJldHR5IG11Y2ggZG9uZSBoZXJlDQotCQkJaWYgKHBBZC0+UG9ydENmZy5Cc3NUeXBlID09
IEJTU19JTkRFUCkNCi0JCQl7DQotCQkJCUxpbmtVcChwQWQsIEJTU19JTkRFUCk7DQotCQkJCWlm
IChwQWQtPk1sbWUuQ250bEF1eC5DdXJyUmVxSXNGcm9tTmRpcykNCi0JCQkJew0KLQkJCQkJTmRp
c01TZXRJbmZvcm1hdGlvbkNvbXBsZXRlKHBBZC0+QWRhcHRlckhhbmRsZSwgTkRJU19TVEFUVVNf
U1VDQ0VTUyk7DQotCQkJCX0NCi0JCQkJcEFkLT5NbG1lLkNudGxNYWNoaW5lLkN1cnJTdGF0ZSA9
IENOVExfSURMRTsNCi0NCi0JCQkJUlRNUF9DTEVBUl9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9C
U1NfSk9JTl9JTl9QUk9HUkVTUyk7Ly9zdGV2ZW46Zm9yIHRlc3QNCi0JCQl9IA0KLQkJCS8vIDIu
IGpvaW5lZCBhIG5ldyBJTkZSQSBuZXR3b3JrLCBzdGFydCBmcm9tIGF1dGhlbnRpY2F0aW9uDQot
CQkJZWxzZSANCi0JCQl7DQotLy8JCQkJUlRVU0JXcml0ZU1BQ1JlZ2lzdGVyKHBBZCwgVFhSWF9D
U1IyLCAweDY3ZSk7Ly9zdGV2ZW46Zm9yIHRlc3QNCi0JCQkJLy8gZWl0aGVyIE5kaXM4MDJfMTFB
dXRoTW9kZVNoYXJlZCBvciBOZGlzODAyXzExQXV0aE1vZGVBdXRvU3dpdGNoLCB0cnkgc2hhcmVk
IGtleSBmaXJzdA0KLQkJCQlpZiAoKHBBZC0+UG9ydENmZy5BdXRoTW9kZSA9PSBOZGlzODAyXzEx
QXV0aE1vZGVTaGFyZWQpIHx8DQotCQkJCQkocEFkLT5Qb3J0Q2ZnLkF1dGhNb2RlID09IE5kaXM4
MDJfMTFBdXRoTW9kZUF1dG9Td2l0Y2gpKQ0KLQkJCQl7DQotCQkJCQlBdXRoUGFybUZpbGwocEFk
LCAmQXV0aFJlcSwgJnBBZC0+UG9ydENmZy5Cc3NpZCwgTmRpczgwMl8xMUF1dGhNb2RlU2hhcmVk
KTsNCi0JCQkJfQ0KLQkJCQllbHNlDQotCQkJCXsNCi0JCQkJCUF1dGhQYXJtRmlsbChwQWQsICZB
dXRoUmVxLCAmcEFkLT5Qb3J0Q2ZnLkJzc2lkLCBOZGlzODAyXzExQXV0aE1vZGVPcGVuKTsNCi0J
CQkJfQ0KLQkJCQlNbG1lRW5xdWV1ZShwQWQsIEFVVEhfU1RBVEVfTUFDSElORSwgTVQyX01MTUVf
QVVUSF9SRVEsIA0KLQkJCQkJCQlzaXplb2YoTUxNRV9BVVRIX1JFUV9TVFJVQ1QpLCAmQXV0aFJl
cSk7DQotDQotCQkJCXBBZC0+TWxtZS5DbnRsTWFjaGluZS5DdXJyU3RhdGUgPSBDTlRMX1dBSVRf
QVVUSDsNCi0JCQl9DQotCQl9DQotCQllbHNlDQotCQl7DQotCQkJLy8gMy4gZmFpbGVkLCB0cnkg
bmV4dCBCU1MNCi0JCQlwQWQtPk1sbWUuQ250bEF1eC5Cc3NJZHgrKzsNCi0JCQlJdGVyYXRlT25C
c3NUYWIocEFkKTsNCi0JCX0gDQotCX0JIA0KLX0NCi0JCQkNCi0NCi0vKg0KLQk9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQ0KLQlEZXNjcmlwdGlvbjoNCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0qLw0KLVZPSUQg
Q250bFdhaXRTdGFydFByb2MoDQotCUlOIFBSVDI1NzBBREFQVEVSIHBBZCwgDQotCUlOIE1MTUVf
UVVFVUVfRUxFTSAqRWxlbSkgDQotew0KLQlVU0hPUlQJCVJlc3VsdDsNCi0NCi0JaWYgKEVsZW0t
Pk1zZ1R5cGUgPT0gTVQyX1NUQVJUX0NPTkYpIA0KLQl7DQotCQlOZGlzTW92ZU1lbW9yeSgmUmVz
dWx0LCBFbGVtLT5Nc2csIHNpemVvZihVU0hPUlQpKTsNCi0JCWlmIChSZXN1bHQgPT0gTUxNRV9T
VUNDRVNTKSANCi0JCXsNCi0JCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgIkNOVEwgLSBXZSBo
YXZlIHN0YXJ0ZWQgYSBuZXcgQURIT0MgbmV0d29ya1xuIik7DQotCQkJREJHUFJJTlQoUlRfREVC
VUdfVFJBQ0UsICJDTlRMIC0gQlNTSUQgJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnggLi4u
XG4iLCANCi0JCQkJcEFkLT5Qb3J0Q2ZnLkJzc2lkLk9jdGV0WzBdLA0KLQkJCQlwQWQtPlBvcnRD
ZmcuQnNzaWQuT2N0ZXRbMV0sDQotCQkJCXBBZC0+UG9ydENmZy5Cc3NpZC5PY3RldFsyXSwNCi0J
CQkJcEFkLT5Qb3J0Q2ZnLkJzc2lkLk9jdGV0WzNdLA0KLQkJCQlwQWQtPlBvcnRDZmcuQnNzaWQu
T2N0ZXRbNF0sDQotCQkJCXBBZC0+UG9ydENmZy5Cc3NpZC5PY3RldFs1XSk7DQotCQkJTGlua1Vw
KHBBZCwgQlNTX0lOREVQKTsNCi0JCQlpZiAocEFkLT5NbG1lLkNudGxBdXguQ3VyclJlcUlzRnJv
bU5kaXMpDQotCQkJew0KLQkJCQlOZGlzTVNldEluZm9ybWF0aW9uQ29tcGxldGUocEFkLT5BZGFw
dGVySGFuZGxlLCBORElTX1NUQVRVU19TVUNDRVNTKTsNCi0JCQl9DQotCQkJcEFkLT5NbG1lLkNu
dGxNYWNoaW5lLkN1cnJTdGF0ZSA9IENOVExfSURMRTsNCi0JCQkNCi0JCQlSVE1QX0NMRUFSX0ZM
QUcocEFkLCBmUlRNUF9BREFQVEVSX0JTU19KT0lOX0lOX1BST0dSRVNTKTsvL3N0ZXZlbjpmb3Ig
dGVzdA0KLQkJfQ0KLQkJZWxzZQ0KLQkJew0KLQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAi
Q05UTCAtIFN0YXJ0IEZBSUwuIEJVRyEhISEhXG4iKTsNCi0JCQlpZiAocEFkLT5NbG1lLkNudGxB
dXguQ3VyclJlcUlzRnJvbU5kaXMpDQotCQkJew0KLQkJCQlOZGlzTVNldEluZm9ybWF0aW9uQ29t
cGxldGUocEFkLT5BZGFwdGVySGFuZGxlLCBORElTX1NUQVRVU19GQUlMVVJFKTsNCi0JCQl9DQot
CQkJcEFkLT5NbG1lLkNudGxNYWNoaW5lLkN1cnJTdGF0ZSA9IENOVExfSURMRTsNCi0JCQkNCi0J
CQlSVE1QX0NMRUFSX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0JTU19KT0lOX0lOX1BST0dSRVNT
KTsvL3N0ZXZlbjpmb3IgdGVzdA0KLQkJfQ0KLQl9DQotfQ0KLQ0KLS8qDQotCT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09DQotCURlc2NyaXB0aW9uOg0KLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLSovDQotVk9JRCBD
bnRsV2FpdEF1dGhQcm9jKA0KLQlJTiBQUlQyNTcwQURBUFRFUiBwQWQsIA0KLQlJTiBNTE1FX1FV
RVVFX0VMRU0gKkVsZW0pIA0KLXsNCi0JVVNIT1JUCQkJCQkJIFJlYXNvbjsNCi0JTUxNRV9BU1NP
Q19SRVFfU1RSVUNUCQkgQXNzb2NSZXE7DQotCU1MTUVfQVVUSF9SRVFfU1RSVUNUCQkgQXV0aFJl
cTsNCi0NCi0JaWYgKEVsZW0tPk1zZ1R5cGUgPT0gTVQyX0FVVEhfQ09ORikgDQotCXsNCi0JCU5k
aXNNb3ZlTWVtb3J5KCZSZWFzb24sIEVsZW0tPk1zZywgc2l6ZW9mKFVTSE9SVCkpOw0KLQkJaWYg
KFJlYXNvbiA9PSBNTE1FX1NVQ0NFU1MpIA0KLQkJew0KLQkJCUFzc29jUGFybUZpbGwocEFkLCAm
QXNzb2NSZXEsICZwQWQtPlBvcnRDZmcuQnNzaWQsIHBBZC0+UG9ydENmZy5DYXBhYmlsaXR5SW5m
bywgDQotCQkJCQkJICBBU1NPQ19USU1FT1VULCBwQWQtPlBvcnRDZmcuRGVmYXVsdExpc3RlbkNv
dW50KTsNCi0JCQlNbG1lRW5xdWV1ZShwQWQsIEFTU09DX1NUQVRFX01BQ0hJTkUsIE1UMl9NTE1F
X0FTU09DX1JFUSwgDQotCQkJCQkJc2l6ZW9mKE1MTUVfQVNTT0NfUkVRX1NUUlVDVCksICZBc3Nv
Y1JlcSk7DQotDQotCQkJcEFkLT5NbG1lLkNudGxNYWNoaW5lLkN1cnJTdGF0ZSA9IENOVExfV0FJ
VF9BU1NPQzsNCi0JCX0gDQotCQllbHNlDQotCQl7DQotCQkJLy8gVGhpcyBmYWlsIG1heSBiZWNh
dXNlIG9mIHRoZSBBUCBhbHJlYWR5IGtlZXAgdXMgaW4gaXRzIE1BQyB0YWJsZSB3aXRob3V0IA0K
LQkJCS8vIGFnZWluZy1vdXQuIFRoZSBwcmV2aW91cyBhdXRoZW50aWNhdGlvbiBhdHRlbXB0IG11
c3QgaGF2ZSBsZXQgaXQgcmVtb3ZlIHVzLg0KLQkJCS8vIHNvIHRyeSBBdXRoZW50aWNhdGlvbiBh
Z2FpbiBtYXkgaGVscC4gRm9yIEQtTGluayBEV0wtOTAwQVArIGNvbXBhdGliaWxpdHkuDQotCQkJ
REJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICJDTlRMIC0gQVVUSCBGQUlMLCB0cnkgYWdhaW4uLi5c
biIpOw0KLQkJCWlmICgocEFkLT5Qb3J0Q2ZnLkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9k
ZVNoYXJlZCkgfHwNCi0JCQkJKHBBZC0+UG9ydENmZy5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0
aE1vZGVBdXRvU3dpdGNoKSkNCi0JCQl7DQotCQkJCS8vIGVpdGhlciBOZGlzODAyXzExQXV0aE1v
ZGVTaGFyZWQgb3IgTmRpczgwMl8xMUF1dGhNb2RlQXV0b1N3aXRjaCwgdHJ5IHNoYXJlZCBrZXkg
Zmlyc3QNCi0JCQkJQXV0aFBhcm1GaWxsKHBBZCwgJkF1dGhSZXEsICZwQWQtPlBvcnRDZmcuQnNz
aWQsIE5kaXM4MDJfMTFBdXRoTW9kZVNoYXJlZCk7DQotCQkJfQ0KLQkJCWVsc2UNCi0JCQl7DQot
CQkJCUF1dGhQYXJtRmlsbChwQWQsICZBdXRoUmVxLCAmcEFkLT5Qb3J0Q2ZnLkJzc2lkLCBOZGlz
ODAyXzExQXV0aE1vZGVPcGVuKTsNCi0JCQl9DQotCQkJDQotCQkJTWxtZUVucXVldWUocEFkLCBB
VVRIX1NUQVRFX01BQ0hJTkUsIE1UMl9NTE1FX0FVVEhfUkVRLCANCi0JCQkJCQlzaXplb2YoTUxN
RV9BVVRIX1JFUV9TVFJVQ1QpLCAmQXV0aFJlcSk7DQotDQotCQkJcEFkLT5NbG1lLkNudGxNYWNo
aW5lLkN1cnJTdGF0ZSA9IENOVExfV0FJVF9BVVRIMjsNCi0JCX0NCi0JfQkgDQotfQ0KLQkJCQ0K
LS8qDQotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09DQotCURlc2NyaXB0aW9uOg0KLQk9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQ0KLSovDQotVk9JRCBDbnRsV2FpdEF1dGhQcm9jMigNCi0JSU4gUFJUMjU3MEFEQVBURVIg
cEFkLCANCi0JSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKSANCi17DQotCVVTSE9SVAkJCQkJCSBS
ZWFzb247DQotCU1MTUVfQVNTT0NfUkVRX1NUUlVDVAkJIEFzc29jUmVxOw0KLQlNTE1FX0FVVEhf
UkVRX1NUUlVDVAkJIEF1dGhSZXE7DQotDQotCWlmIChFbGVtLT5Nc2dUeXBlID09IE1UMl9BVVRI
X0NPTkYpIA0KLQl7DQotCQlOZGlzTW92ZU1lbW9yeSgmUmVhc29uLCBFbGVtLT5Nc2csIHNpemVv
ZihVU0hPUlQpKTsNCi0JCWlmIChSZWFzb24gPT0gTUxNRV9TVUNDRVNTKSANCi0JCXsNCi0JCQlB
c3NvY1Bhcm1GaWxsKHBBZCwgJkFzc29jUmVxLCAmcEFkLT5Qb3J0Q2ZnLkJzc2lkLCBwQWQtPlBv
cnRDZmcuQ2FwYWJpbGl0eUluZm8sIA0KLQkJCQkJCSAgQVNTT0NfVElNRU9VVCwgcEFkLT5Qb3J0
Q2ZnLkRlZmF1bHRMaXN0ZW5Db3VudCk7DQotCQkJTWxtZUVucXVldWUocEFkLCBBU1NPQ19TVEFU
RV9NQUNISU5FLCBNVDJfTUxNRV9BU1NPQ19SRVEsIA0KLQkJCQkJCXNpemVvZihNTE1FX0FTU09D
X1JFUV9TVFJVQ1QpLCAmQXNzb2NSZXEpOw0KLQ0KLQkJCXBBZC0+TWxtZS5DbnRsTWFjaGluZS5D
dXJyU3RhdGUgPSBDTlRMX1dBSVRfQVNTT0M7DQotCQl9IA0KLQkJZWxzZQ0KLQkJew0KLQkJCWlm
ICgocEFkLT5Qb3J0Q2ZnLkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZUF1dG9Td2l0Y2gp
ICYmDQotCQkJCSAocEFkLT5NbG1lLkF1dGhBdXguQWxnID09IE5kaXM4MDJfMTFBdXRoTW9kZVNo
YXJlZCkpDQotCQkJew0KLQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgIkNOVEwgLSBBVVRI
IEZBSUwsIHRyeSBPUEVOIHN5c3RlbS4uLlxuIik7DQotCQkJCUF1dGhQYXJtRmlsbChwQWQsICZB
dXRoUmVxLCAmcEFkLT5Qb3J0Q2ZnLkJzc2lkLCBOZGlzODAyXzExQXV0aE1vZGVPcGVuKTsNCi0J
CQkJTWxtZUVucXVldWUocEFkLCBBVVRIX1NUQVRFX01BQ0hJTkUsIE1UMl9NTE1FX0FVVEhfUkVR
LCANCi0JCQkJCQkJc2l6ZW9mKE1MTUVfQVVUSF9SRVFfU1RSVUNUKSwgJkF1dGhSZXEpOw0KLQ0K
LQkJCQlwQWQtPk1sbWUuQ250bE1hY2hpbmUuQ3VyclN0YXRlID0gQ05UTF9XQUlUX0FVVEgyOw0K
LQkJCX0NCi0JCQllbHNlIA0KLQkJCXsNCi0JCQkJLy8gbm90IHN1Y2Nlc3MsIHRyeSBuZXh0IEJT
Uw0KLQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgIkNOVEwgLSBBVVRIIEZBSUwsIGdpdmUg
dXA7IHRyeSBuZXh0IEJTU1xuIik7DQotCQkJCXBBZC0+TWxtZS5DbnRsTWFjaGluZS5DdXJyU3Rh
dGUgPSBDTlRMX0lETEU7IC8vPz8/Pz8/Pw0KLQkJCQlwQWQtPk1sbWUuQ250bEF1eC5Cc3NJZHgr
KzsNCi0vLwkJCQlSVFVTQldyaXRlTUFDUmVnaXN0ZXIocEFkLCBUWFJYX0NTUjIsIDB4N2UpOy8v
c3RldmVuOmZvciB0ZXN0DQotCQkJCUl0ZXJhdGVPbkJzc1RhYihwQWQpOw0KLQkJCX0NCi0JCX0N
Ci0JfQkgDQotfQ0KLQkJCQ0KLS8qDQotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotCURlc2NyaXB0aW9u
Og0KLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQ0KLSovDQotVk9JRCBDbnRsV2FpdEFzc29jUHJvYygNCi0J
SU4gUFJUMjU3MEFEQVBURVIgcEFkLCANCi0JSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKSANCi17
DQotCVVTSE9SVAkJUmVhc29uOw0KLQ0KLQlpZiAoRWxlbS0+TXNnVHlwZSA9PSBNVDJfQVNTT0Nf
Q09ORikgDQotCXsNCi0JCU5kaXNNb3ZlTWVtb3J5KCZSZWFzb24sIEVsZW0tPk1zZywgc2l6ZW9m
KFVTSE9SVCkpOw0KLQkJaWYgKFJlYXNvbiA9PSBNTE1FX1NVQ0NFU1MpIA0KLQkJew0KLQkJCURC
R1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAiQ05UTCAtIEFzc29jaWF0aW9uIHN1Y2Nlc3NmdWwgb24g
QlNTICMlZFxuIixwQWQtPk1sbWUuQ250bEF1eC5Cc3NJZHgpOw0KLS8vCQkJUlRVU0JXcml0ZU1B
Q1JlZ2lzdGVyKHBBZCwgVFhSWF9DU1IyLCAweDdlKTsvL3N0ZXZlbjpmb3IgdGVzdA0KLQkJCUxp
bmtVcChwQWQsIEJTU19JTkZSQSk7DQotCQkJaWYgKHBBZC0+TWxtZS5DbnRsQXV4LkN1cnJSZXFJ
c0Zyb21OZGlzKQ0KLQkJCXsNCi0JCQkJTmRpc01TZXRJbmZvcm1hdGlvbkNvbXBsZXRlKHBBZC0+
QWRhcHRlckhhbmRsZSwgTkRJU19TVEFUVVNfU1VDQ0VTUyk7DQotCQkJfQ0KLQkJCXBBZC0+TWxt
ZS5DbnRsTWFjaGluZS5DdXJyU3RhdGUgPSBDTlRMX0lETEU7DQotDQotCQkJUlRNUF9DTEVBUl9G
TEFHKHBBZCwgZlJUTVBfQURBUFRFUl9CU1NfSk9JTl9JTl9QUk9HUkVTUyk7Ly9zdGV2ZW46Zm9y
IHRlc3QNCi0JCX0gDQotCQllbHNlIA0KLQkJew0KLQkJCS8vIG5vdCBzdWNjZXNzLCB0cnkgbmV4
dCBCU1MNCi0JCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgIkNOVEwgLSBBc3NvY2lhdGlvbiBm
YWlscyBvbiBCU1MgIyVkXG4iLHBBZC0+TWxtZS5DbnRsQXV4LkJzc0lkeCk7DQotLy8JCQkgIHBB
ZC0+TWxtZS5DbnRsTWFjaGluZS5DdXJyU3RhdGUgPSBDTlRMX0lETEU7Ly9zdGV2ZW46Zm9yIHRl
c3QNCi0JCQlwQWQtPk1sbWUuQ250bEF1eC5Cc3NJZHgrKzsNCi0vLwkJCVJUVVNCV3JpdGVNQUNS
ZWdpc3RlcihwQWQsIFRYUlhfQ1NSMiwgMHg3ZSk7Ly9zdGV2ZW46Zm9yIHRlc3QNCi0JCQlJdGVy
YXRlT25Cc3NUYWIocEFkKTsNCi0JCX0NCi0JfQ0KLX0NCi0NCi0vKg0KLQk9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQ0KLQlEZXNjcmlwdGlvbjoNCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0qLw0KLVZPSUQgQ250
bFdhaXRSZWFzc29jUHJvYygNCi0JSU4gUFJUMjU3MEFEQVBURVIgcEFkLCANCi0JSU4gTUxNRV9R
VUVVRV9FTEVNICpFbGVtKSANCi17DQotCVVTSE9SVAkJUmVzdWx0Ow0KLQ0KLQlpZiAoRWxlbS0+
TXNnVHlwZSA9PSBNVDJfUkVBU1NPQ19DT05GKSANCi0Jew0KLQkJTmRpc01vdmVNZW1vcnkoJlJl
c3VsdCwgRWxlbS0+TXNnLCBzaXplb2YoVVNIT1JUKSk7DQotCQlpZiAoUmVzdWx0ID09IE1MTUVf
U1VDQ0VTUykgDQotCQl7DQotCQkJQlNTX0VOVFJZICpwQnNzID0gJnBBZC0+TWxtZS5DbnRsQXV4
LlJvYW1UYWIuQnNzRW50cnlbcEFkLT5NbG1lLkNudGxBdXguUm9hbUlkeF07DQotDQotCQkJLy8g
Q09QWV9NQUNfQUREUigmcEFkLT5Qb3J0Q2ZnLkJzc2lkLCAmcEJzcy0+QnNzaWQpOw0KLQkJCS8v
IEFzaWNTZXRCc3NpZChwQWQsICZwQWQtPlBvcnRDZmcuQnNzaWQpOw0KLQkJCQ0KLQkJCS8vIFRo
ZSBmb2xsb3dpbmcgc3RlcHMgYXJlIHN1cHBvc2VkIHRvIGJlIGRvbmUgYWZ0ZXIgSk9JTiBpbiBu
b3JtYWwgcHJvY2VkdXJlDQotCQkJLy8gQnV0IHNpbmNlIHRoaXMgUkUtQVNTT0Mgc2tpcHMgdGhl
IEpPSU4gcHJvY2VkdXJlLCB3ZSBoYXZlIHRvIGRvIGl0IGFmdGVyDQotCQkJLy8gUkUtQVNTT0Mg
c3VjY2VlZHMuIElmIFJFLUFTU09DIGZhaWxzLCB0aGVuIHN0YXkgYXQgb3JpZ2luYWwgQVAgd2l0
aG91dCBhbnkgY2hhbmdlDQotCQkJcEFkLT5Qb3J0Q2ZnLkJlYWNvblBlcmlvZCA9IHBCc3MtPkJl
YWNvblBlcmlvZDsNCi0JCQlwQWQtPlBvcnRDZmcuQ2hhbm5lbCA9IHBCc3MtPkNoYW5uZWw7DQot
CQkJLy8gVGhlIHNlY3VyaXR5IHNldHRpbmcgc2hvdWxkIGFsd2F5cyBmb2xsb3cgdXBwZXIgbGF5
ZXIgZGVmaW5pdGlvbiwgbm90IGZyb20gZnJhbWUNCi0JCQkvL3BBZC0+UG9ydENmZy5Qcml2YWN5
SW52b2tlZCA9IENBUF9JU19QUklWQUNZX09OKHBCc3MtPkNhcGFiaWxpdHlJbmZvKTsNCi0JCQlw
QWQtPlBvcnRDZmcuU3VwcG9ydGVkUmF0ZXNMZW4gPSBwQnNzLT5SYXRlc0xlbjsNCi0JCQlOZGlz
TW92ZU1lbW9yeShwQWQtPlBvcnRDZmcuU3VwcG9ydGVkUmF0ZXMsIHBCc3MtPlJhdGVzLCBwQnNz
LT5SYXRlc0xlbik7DQotDQotCQkJLy8gQ2hlY2sgZm9yIDgwMi4xMWcgaW5mb3JtYXRpb24sIGlm
IDgwMi4xMSBiIC9nIG1peGVkIG1vZGUuDQotCQkJcEFkLT5Qb3J0Q2ZnLkNhcGFiaWxpdHlJbmZv
ID0gcEJzcy0+Q2FwYWJpbGl0eUluZm87DQotDQotCQkJcEFkLT5Qb3J0Q2ZnLkNmcFBlcmlvZCA9
IHBCc3MtPkNmcFBlcmlvZDsNCi0JCQlwQWQtPlBvcnRDZmcuQ2ZwTWF4RHVyYXRpb24gPSBwQnNz
LT5DZnBNYXhEdXJhdGlvbjsNCi0JCQlwQWQtPlBvcnRDZmcuQ2ZwRHVyUmVtYWluID0gcEJzcy0+
Q2ZwRHVyUmVtYWluaW5nOw0KLQkJCXBBZC0+UG9ydENmZy5DZnBDb3VudCA9IHBCc3MtPkNmcENv
dW50Ow0KLQ0KLQkJCS8vIA0KLQkJCS8vIE5ESVMgcmVxdWlyZXMgYSBuZXcgTGluayBVUCBpbmRp
Y2F0aW9uIGJ1dCBubyBMaW5rIERvd24gZm9yIFJFLUFTU09DDQotCQkJLy8NCi0JCQlEQkdQUklO
VChSVF9ERUJVR19UUkFDRSwgIkNOVEwgLSBSZS1hc3NvY2l0aW9uIHN1Y2Nlc3NmdWwgb24gQlNT
ICMlZFxuIiwgcEFkLT5NbG1lLkNudGxBdXguUm9hbUlkeCk7DQotCQkJTGlua1VwKHBBZCwgQlNT
X0lORlJBKTsNCi0JCQlwQWQtPk1sbWUuQ250bE1hY2hpbmUuQ3VyclN0YXRlID0gQ05UTF9JRExF
Ow0KLQkJCQ0KLQkJCVJUTVBfQ0xFQVJfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfUkVBU1NPQ19J
Tl9QUk9HUkVTUyk7Ly9zdGV2ZW46Zm9yIHRlc3QNCi0JCX0gDQotCQllbHNlIA0KLQkJew0KLQkJ
CS8vIHJlYXNzb2MgZmFpbGVkLCB0cnkgdG8gcGljayBuZXh0IEJTUyBpbiB0aGUgQlNTIFRhYmxl
DQotCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICJDTlRMIC0gUmUtYXNzb2NpdGlvbiBmYWls
cyBvbiBCU1MgIyVkXG4iLCBwQWQtPk1sbWUuQ250bEF1eC5Sb2FtSWR4KTsNCi0JCQlwQWQtPk1s
bWUuQ250bEF1eC5Sb2FtSWR4Kys7DQotCQkJSXRlcmF0ZU9uQnNzVGFiMihwQWQpOw0KLQkJfQ0K
LQl9DQotfQ0KLQkJCQ0KLS8qDQotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotCURlc2NyaXB0aW9uOg0K
LQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQ0KLSovDQotVk9JRCBMaW5rVXAoDQotCUlOIFBSVDI1NzBBREFQ
VEVSIHBBZCwNCi0JSU4gVUNIQVIgQnNzVHlwZSkgDQotew0KLQlVTE9ORwlOb3c7DQotCVVDSEFS
CQkJYnVmZmVyWzIyXTsNCi0JDQotCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAiQ05UTCAtICEh
ISBMSU5LIFVQICEhIVxuIik7DQotCU1sbWVVcGRhdGVUeFJhdGVzKHBBZCwgVFJVRSk7DQotCVJU
VVNCTXVsdGlSZWFkTUFDKHBBZCwgU1RBX0NTUjAsIGJ1ZmZlciwgMjIpOw0KLQlOZGlzTW92ZU1l
bW9yeSgmcEFkLT5NbG1lLlByZXZXbGFuQ291bnRlcnMsICZwQWQtPldsYW5Db3VudGVycywgc2l6
ZW9mKENPVU5URVJfODAyXzExKSk7DQotCU5kaXNaZXJvTWVtb3J5KCZwQWQtPkRyc0NvdW50ZXJz
LCBzaXplb2YoQ09VTlRFUl9EUlMpKTsNCi0NCi0JTm93ID0gamlmZmllczsNCi0JcEFkLT5Qb3J0
Q2ZnLkxhc3RCZWFjb25SeFRpbWUgPSBOb3c7ICAgLy8gbGFzdCBSWCB0aW1lc3RhbXANCi0JDQot
CWlmICgocEFkLT5Qb3J0Q2ZnLldpbmRvd3NUeFByZWFtYmxlICE9IFJ0ODAyXzExUHJlYW1ibGVM
b25nKSAmJg0KLQkJQ0FQX0lTX1NIT1JUX1BSRUFNQkxFX09OKHBBZC0+UG9ydENmZy5DYXBhYmls
aXR5SW5mbykpDQotCXsNCi0NCi0JCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAiQ05UTCAtICEh
ISBTZXQgdG8gc2hvcnQgcHJlYW1ibGUhISFcbiIpOw0KLQkJTWxtZVNldFR4UHJlYW1ibGUocEFk
LCBSdDgwMl8xMVByZWFtYmxlU2hvcnQpOw0KLQl9DQotCQ0KLQlwQWQtPlBvcnRDZmcuQnNzVHlw
ZSA9IEJzc1R5cGU7DQotCWlmIChCc3NUeXBlID09IEJTU19JTkRFUCkNCi0Jew0KLS8vCQlVU0hP
UlQgU2VudEJlYWNvbnNDb3VudCwgUmVjZWl2ZWRCZWFjb25zQ291bnQ7DQotLy8JCVJUVVNCUmVh
ZE1BQ1JlZ2lzdGVyKHBBZCwgU1RBX0NTUjUsICZTZW50QmVhY29uc0NvdW50KTsNCi0vLwkJUlRV
U0JSZWFkTUFDUmVnaXN0ZXIocEFkLCBTVEFfQ1NSMTAsICZSZWNlaXZlZEJlYWNvbnNDb3VudCk7
DQotCQlwQWQtPlBvcnRDZmcuTWlic3MgPSBUUlVFOw0KLQkJcEFkLT5Qb3J0Q2ZnLk1hc3NvYyA9
IEZBTFNFOw0KLQkJQXNpY0VuYWJsZUlic3NTeW5jKHBBZCk7DQotCQkNCi0jaWZkZWYJU0lOR0xF
X0FESE9DX0xJTktVUA0KLQkJLy8gQWx0aG91Z2ggdGhpcyBkaWQgbm90IGZvbGxvdyBtaWNyb3Nv
ZnQncyByZWNvbW1lbmRhdGlvbi4NCi0JCS8vQ2hhbmdlIGJhc2VkIG9uIGN1c3RvbWVyJ3MgcmVx
dWVzdA0KLQkJcEFkLT5NZWRpYVN0YXRlID0gTmRpc01lZGlhU3RhdGVDb25uZWN0ZWQ7DQotCQlO
ZGlzTUluZGljYXRlU3RhdHVzKHBBZC0+QWRhcHRlckhhbmRsZSwgTkRJU19TVEFUVVNfTUVESUFf
Q09OTkVDVCwgKFBWT0lEKU5VTEwsIDApOw0KLQkJTmRpc01JbmRpY2F0ZVN0YXR1c0NvbXBsZXRl
KHBBZC0+QWRhcHRlckhhbmRsZSk7DQotI2VuZGlmDQotDQotCX0NCi0JZWxzZSAvLyBCU1NfSU5G
UkENCi0Jew0KLSAgICAgICAgICAgIC8vIG5lZWQgdG8gY2hlY2sNCi0JCS8vSW50ZXJsb2NrZWRF
eGNoYW5nZSgmKHBBZC0+UG9ydENmZy5EYXRhUGFja2V0c0Zyb21BUCksIDApOw0KLQkJcEFkLT5Q
b3J0Q2ZnLk1hc3NvYyA9IFRSVUU7DQotCQlwQWQtPlBvcnRDZmcuTWlic3MgPSBGQUxTRTsNCi0N
Ci0JCS8vIE5PVEU6DQotCQkvLyB0aGUgZGVjaXNpb24gb2YgdXNpbmcgInNob3J0IHNsb3QgdGlt
ZSIgb3Igbm90IG1heSBjaGFuZ2UgZHluYW1pY2FsbHkgZHVlIHRvDQotCQkvLyBuZXcgU1RBIGFz
c29jaWF0aW9uIHRvIHRoZSBBUC4gc28gd2UgaGF2ZSB0byBkZWNpZGUgdGhhdCB1cG9uIHBhcnNp
bmcgQkVBQ09OLCBub3QgaGVyZQ0KLQ0KLQkJLy8gTk9URToNCi0JCS8vIHRoZSBkZWNpc2lvbiB0
byB1c2UgIlJUQy9DVFMiIG9yICJDVFMtdG8tc2VsZiIgcHJvdGVjdGlvbiBvciBub3QgbWF5IGNo
YW5nZSBkeW5hbWljYWxseQ0KLQkJLy8gZHVlIHRvIG5ldyBTVEEgYXNzb2NpYXRpb24gdG8gdGhl
IEFQLiBzbyB3ZSBoYXZlIHRvIGRlY2lkZSB0aGF0IHVwb24gcGFyc2luZyBCRUFDT04sIG5vdCBo
ZXJlDQotCQkNCi0JCUNvbXBvc2VQc1BvbGwocEFkKTsNCi0JCUNvbXBvc2VOdWxsRnJhbWUocEFk
KTsNCi0JCUFzaWNFbmFibGVCc3NTeW5jKHBBZCk7DQotCQlpZiAocEFkLT5Qb3J0Q2ZnLkVuYWJs
ZVR4QnVyc3QpDQotCQl7DQotCQkJLy9TZXQgQ1dtaW4vQ1dtYXggdG8gMC4NCi0JCQlSVFVTQldy
aXRlTUFDUmVnaXN0ZXIocEFkLCBNQUNfQ1NSMjIsIDB4MTAwKTsNCi0JCX0NCi0JCWVsc2UNCi0J
CXsNCi0JCQlSVFVTQldyaXRlTUFDUmVnaXN0ZXIocEFkLCBNQUNfQ1NSMjIsIDB4NTMpOw0KLQkJ
fQ0KLQkNCi0JCS8vIG9ubHkgSU5GUkFTVFJVQ1RVUkUgbW9kZSBuZWVkIHRvIGluZGljYXRlIGNv
bm5lY3Rpdml0eSBpbW1lZGlhdGVseTsgQURIT0MgbW9kZQ0KLQkJLy8gc2hvdWxkIHdhaXQgdW50
aWwgYXQgbGVhc3QgMiBhY3RpdmUgbm9kZXMgaW4gdGhpcyBCU1NJRC4NCi0JCXBBZC0+TWVkaWFT
dGF0ZSA9IE5kaXNNZWRpYVN0YXRlQ29ubmVjdGVkOw0KLQkJTmRpc01JbmRpY2F0ZVN0YXR1cyhw
QWQtPkFkYXB0ZXJIYW5kbGUsIE5ESVNfU1RBVFVTX01FRElBX0NPTk5FQ1QsIChQVk9JRClOVUxM
LCAwKTsNCi0JCU5kaXNNSW5kaWNhdGVTdGF0dXNDb21wbGV0ZShwQWQtPkFkYXB0ZXJIYW5kbGUp
Ow0KLQl9DQotDQotCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAiTkRJU19TVEFUVVNfTUVESUFf
Q09OTkVDVCBFdmVudCBCIVxuIik7DQotDQotCWlmICgocEFkLT5Qb3J0Q2ZnLkxlZE1vZGUgIT0g
TEVEX01PREVfU0lOR0xFKSYmKHBBZC0+UG9ydENmZy5MZWRNb2RlICE9IExFRF9NT0RFX1RYUlhf
QUNUSVZJVFkpKQ0KLQl7DQotCQlBU0lDX0xFRF9BQ1RfT04ocEFkKTsNCi0JfQ0KLQlpZiAocEFk
LT5Qb3J0Q2ZnLkxlZE1vZGUgPT0gTEVEX01PREVfQUxQSEEpew0KLQkJcEFkLT5Qb3J0Q2ZnLkxl
ZENudGwuZlNpdGVTdXJ2ZXkgPSBGQUxTRTsNCi0JCXBBZC0+UG9ydENmZy5MZWRDbnRsLmZMaW5r
VXAgPSBUUlVFOw0KLQl9CQ0KLQlBc2ljU2V0U2xvdFRpbWUocEFkLCBGQUxTRSk7DQotCXBBZC0+
TWxtZS5QZXJpb2RpY1JvdW5kID0gMDsNCi0JLy8gUmVzZXQgY29uZmlnIGZsYWcNCi0JcEFkLT5i
Q29uZmlnQ2hhbmdlZCA9IEZBTFNFOw0KLQkvLyBVcGRhdGUgZXh0cmEgaW5mb3JtYXRpb24gdG8g
bGluayBpcyB1cA0KLQlwQWQtPkV4dHJhSW5mbyA9IEdFTkVSQUxfTElOS19VUDsNCi0JcEFkLT5Q
b3J0Q2ZnLldwYVN0YXRlID0gU1NfU1RBUlQ7DQotDQotCVJUVVNCS2lja0J1bGtPdXQocEFkKTsN
Ci0NCi19DQotDQotLyoNCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0JRGVzY3JpcHRpb246DQotCT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09DQotKi8NCi1WT0lEIExpbmtEb3duKA0KLQlJTiBQUlQyNTcwQURBUFRF
UiBwQWQpIA0KLXsNCi0JREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICJDTlRMIC0gISEhIExJTksg
RE9XTiAhISFcbiIpOw0KLQ0KLQlpZiAoQURIT0NfT04ocEFkKSkJCS8vIEFkaG9jIG1vZGUgbGlu
ayBkb3duDQotCXsNCi0JCXBBZC0+UG9ydENmZy5NaWJzcyA9IEZBTFNFOw0KLQ0KLSNpZmRlZglT
SU5HTEVfQURIT0NfTElOS1VQDQotCQlwQWQtPk1lZGlhU3RhdGUgPSBOZGlzTWVkaWFTdGF0ZURp
c2Nvbm5lY3RlZDsNCi0JCU5kaXNNSW5kaWNhdGVTdGF0dXMocEFkLT5BZGFwdGVySGFuZGxlLCBO
RElTX1NUQVRVU19NRURJQV9ESVNDT05ORUNULCAoUFZPSUQpTlVMTCwgMCk7DQotCQlOZGlzTUlu
ZGljYXRlU3RhdHVzQ29tcGxldGUocEFkLT5BZGFwdGVySGFuZGxlKTsNCi0JCS8vIGNsZWFuIHVw
IHByZXZpb3VzIFNDQU4gcmVzdWx0LCBhZGQgY3VycmVudCBCU1MgYmFjayB0byB0YWJsZSBpZiBh
bnkNCi0JCUJzc1RhYmxlRGVsZXRlRW50cnkoJnBBZC0+UG9ydENmZy5Cc3NUYWIsICYocEFkLT5Q
b3J0Q2ZnLkJzc2lkKSk7DQotI2Vsc2UNCi0JCWlmIChSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1Q
X0FEQVBURVJfUkFESU9fT0ZGKSkNCi0JCXsNCi0JCQlwQWQtPk1lZGlhU3RhdGUgPSBOZGlzTWVk
aWFTdGF0ZURpc2Nvbm5lY3RlZDsNCi0JCQlOZGlzTUluZGljYXRlU3RhdHVzKHBBZC0+QWRhcHRl
ckhhbmRsZSwgTkRJU19TVEFUVVNfTUVESUFfRElTQ09OTkVDVCwgKFBWT0lEKU5VTEwsIDApOw0K
LQkJCU5kaXNNSW5kaWNhdGVTdGF0dXNDb21wbGV0ZShwQWQtPkFkYXB0ZXJIYW5kbGUpOw0KLQkJ
CS8vIGNsZWFuIHVwIHByZXZpb3VzIFNDQU4gcmVzdWx0LCBhZGQgY3VycmVudCBCU1MgYmFjayB0
byB0YWJsZSBpZiBhbnkNCi0JCQlCc3NUYWJsZURlbGV0ZUVudHJ5KCZwQWQtPlBvcnRDZmcuQnNz
VGFiLCAmKHBBZC0+UG9ydENmZy5Cc3NpZCkpOw0KLQkJfQ0KLSNlbmRpZg0KLQkJDQotCX0NCi0J
ZWxzZQkJCQkJLy8gSW5mcmEgc3RydWN0dXJlIG1vZGUNCi0Jew0KLQkJcEFkLT5Qb3J0Q2ZnLk1h
c3NvYyA9IEZBTFNFOw0KLQkJcEFkLT5NZWRpYVN0YXRlID0gTmRpc01lZGlhU3RhdGVEaXNjb25u
ZWN0ZWQ7DQotCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgIk5ESVNfU1RBVFVTX01FRElBX0RJ
U0NPTk5FQ1QgRXZlbnQgQSFcbiIpOw0KLQkJQnNzVGFibGVEZWxldGVFbnRyeSgmcEFkLT5Qb3J0
Q2ZnLkJzc1RhYiwgJihwQWQtPlBvcnRDZmcuQnNzaWQpKTsNCi0NCi0JCS8vIHJlc3RvcmUgYmFj
ayB0byAtIA0KLQkJLy8JCTEuIGxvbmcgc2xvdCAoMjAgdXMpIG9yIHNob3J0IHNsb3QgKDkgdXMp
IHRpbWUNCi0JCS8vCQkyLiB0dXJuIG9uL29mZiBSVFMvQ1RTIGFuZC9vciBDVFMtdG8tc2VsZiBw
cm90ZWN0aW9uDQotCQkvLwkJMy4gc2hvcnQgcHJlYW1ibGUNCi0JCWlmIChwQWQtPlBvcnRDZmcu
QkdQcm90ZWN0aW9uSW5Vc2VkID09IFRSVUUpDQotCQl7DQotCQkJcEFkLT5Qb3J0Q2ZnLkJHUHJv
dGVjdGlvbkluVXNlZCA9IEZBTFNFOw0KLQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAiTGlu
ayBkb3duIC0gdHVybiBvZmYgQi9HIHByb3RlY3Rpb25cbiIpOw0KLQkJfQ0KLQ0KLQkJaWYgKHBB
ZC0+UG9ydENmZy5Qc3MgPT0gUFdSX1NBVkUpDQotCQl7DQotCQkJUlRVU0JXcml0ZU1BQ1JlZ2lz
dGVyKHBBZCwgTUFDX0NTUjEsIDEpOw0KLQkJCVJUVVNCV3JpdGVNQUNSZWdpc3RlcihwQWQsIE1B
Q19DU1IxLCA0KTsNCi0JCQlwQWQtPlBvcnRDZmcuUHNzID0gUFdSX0FDVElWRTsNCi0JCX0NCi0J
fQ0KLQkNCi0JQXNpY1NldFNsb3RUaW1lKHBBZCwgRkFMU0UpOw0KLQlSVFVTQldyaXRlTUFDUmVn
aXN0ZXIocEFkLCBNQUNfQ1NSMjIsIDB4NTMpOw0KLQlBc2ljUmVzdG9yZUJicFNlbnNpYmlsaXR5
KHBBZCk7DQotCQ0KLQlpZiAocEFkLT5Qb3J0Q2ZnLldpbmRvd3NUeFByZWFtYmxlID09IFJ0ODAy
XzExUHJlYW1ibGVTaG9ydCkNCi0JCU1sbWVTZXRUeFByZWFtYmxlKHBBZCwgUnQ4MDJfMTFQcmVh
bWJsZVNob3J0KTsNCi0JZWxzZQ0KLQkJTWxtZVNldFR4UHJlYW1ibGUocEFkLCBSdDgwMl8xMVBy
ZWFtYmxlTG9uZyk7DQotDQotCWlmICgocEFkLT5Qb3J0Q2ZnLkxlZE1vZGUgIT0gTEVEX01PREVf
U0lOR0xFKSAmJiAocEFkLT5Qb3J0Q2ZnLkxlZE1vZGUgIT0gTEVEX01PREVfQVNVUykpDQotCXsN
Ci0JCUFTSUNfTEVEX0FDVF9PRkYocEFkKTsNCi0JfQ0KLQllbHNlIGlmICgocEFkLT5Qb3J0Q2Zn
LkxlZE1vZGUgPT0gTEVEX01PREVfQVNVUykgJiYgKHBBZC0+UG9ydENmZy5iUmFkaW8gPT0gVFJV
RSkpDQotCXsNCi0JCVJUVVNCV3JpdGVNQUNSZWdpc3RlcihwQWQsIE1BQ19DU1IyMCwgMHgwMDAy
KTsNCi0JfQ0KLQlBc2ljRGlzYWJsZVN5bmMocEFkKTsNCi0JcEFkLT5NbG1lLlBlcmlvZGljUm91
bmQgPSAwOw0KLQlwQWQtPlNjYW5BbGxvd2VkID0gVFJVRTsNCi0NCi0JLy8gUmVtb3ZlIFBvcnRD
ZmcgSW5mb3JtYXRpb24gYWZ0ZXIgbGluayBkb3duDQotCU5kaXNaZXJvTWVtb3J5KCYocEFkLT5Q
b3J0Q2ZnLkJzc2lkKSwgTUFDX0FERFJfTEVOKTsNCi0JTmRpc1plcm9NZW1vcnkocEFkLT5Qb3J0
Q2ZnLlNzaWQsIE1BWF9MRU5fT0ZfU1NJRCk7DQotCXBBZC0+UG9ydENmZy5Tc2lkTGVuID0gMDsN
Ci0JDQotCS8vIFJlc2V0IFdQQS1QU0sgc3RhdGUuIE9ubHkgcmVzZXQgd2hlbiBzdXBwbGljYW50
IGVuYWJsZWQNCi0JaWYgKHBBZC0+UG9ydENmZy5XcGFTdGF0ZSAhPSBTU19OT1RVU0UpDQotCXsN
Ci0JCXBBZC0+UG9ydENmZy5XcGFTdGF0ZSA9IFNTX1NUQVJUOw0KLQkJLy8gQ2xlYXIgUmVwbGF5
IGNvdW50ZXINCi0JCU5kaXNaZXJvTWVtb3J5KHBBZC0+UG9ydENmZy5SZXBsYXlDb3VudGVyLCA4
KTsNCi0JfQ0KLQkvLyBSZW1vdmUgYWxsIFdQQSBrZXlzIGFmdGVyIGxpbmsgZG93bg0KLQlSVE1Q
V1BBUmVtb3ZlQWxsS2V5cyhwQWQpOw0KLQkvLyA4MDIuMXggcG9ydCBjb250cm9sDQotCXBBZC0+
UG9ydENmZy5Qb3J0U2VjdXJlZCA9IFdQQV84MDJfMVhfUE9SVF9OT1RfU0VDVVJFRDsNCi0JcEFk
LT5Qb3J0Q2ZnLk1pY0VyckNudCA9IDA7DQotCWlmIChwQWQtPlBvcnRDZmcuTGVkTW9kZSA9PSBM
RURfTU9ERV9BTFBIQSkNCi0JCXBBZC0+UG9ydENmZy5MZWRDbnRsLmZMaW5rVXAgPSBGQUxTRTsN
Ci0NCi0JLy8gVXBkYXRlIGV4dHJhIGluZm9ybWF0aW9uIHRvIGxpbmsgaXMgdXANCi0JcEFkLT5F
eHRyYUluZm8gPSBHRU5FUkFMX0xJTktfRE9XTjsNCi0JLy8gU3RhcnQgU1RBIHN1cHBsaWNhbnQg
c3RhdGUgbWFjaGluZQ0KLQkvL3BBZC0+UG9ydENmZy5XcGFTdGF0ZSA9IFNTX05PVFVTRTsNCi0N
Ci19DQotDQotLyoNCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0JRGVzY3JpcHRpb246DQotCT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09DQotKi8NCi1WT0lEIE1sbWVDbnRsQ29uZmlybSgNCi0JSU4gUFJUMjU3MEFE
QVBURVIgcEFkLCANCi0JSU4gVUxPTkcgTXNnVHlwZSwgDQotCUlOIFVTSE9SVCBNc2cpIA0KLXsN
Ci0JTWxtZUVucXVldWUocEFkLCBNTE1FX0NOVExfU1RBVEVfTUFDSElORSwgTXNnVHlwZSwgc2l6
ZW9mKFVTSE9SVCksICZNc2cpOw0KLX0NCi0NCi0vKg0KLQk9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLQlE
ZXNjcmlwdGlvbjoNCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0qLw0KLVZPSUQgSXRlcmF0ZU9uQnNz
VGFiKA0KLQlJTiBQUlQyNTcwQURBUFRFUiBwQWQpIA0KLXsNCi0JTUxNRV9TVEFSVF9SRVFfU1RS
VUNUCVN0YXJ0UmVxOw0KLQlNTE1FX0pPSU5fUkVRX1NUUlVDVAlKb2luUmVxOw0KLQlVTE9ORwkJ
CQkJQnNzSWR4Ow0KLQ0KLQlCc3NJZHggPSBwQWQtPk1sbWUuQ250bEF1eC5Cc3NJZHg7DQotCWlm
IChCc3NJZHggPCBwQWQtPk1sbWUuQ250bEF1eC5Tc2lkQnNzVGFiLkJzc05yKSANCi0Jew0KLQkJ
aWYgKCFSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfQlNTX0pPSU5fSU5fUFJPR1JF
U1MpKQ0KLQkJCVJUTVBfU0VUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0JTU19KT0lOX0lOX1BS
T0dSRVNTKTsvL3N0ZXZlbjpmb3IgdGVzdA0KLQ0KLQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0Us
ICJDTlRMIC0gVHJ5aW5nIEJTU0lEICUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4IC4uLlxu
IiwgDQotCQkJcEFkLT5NbG1lLkNudGxBdXguU3NpZEJzc1RhYi5Cc3NFbnRyeVtCc3NJZHhdLkJz
c2lkLk9jdGV0WzBdLA0KLQkJCXBBZC0+TWxtZS5DbnRsQXV4LlNzaWRCc3NUYWIuQnNzRW50cnlb
QnNzSWR4XS5Cc3NpZC5PY3RldFsxXSwNCi0JCQlwQWQtPk1sbWUuQ250bEF1eC5Tc2lkQnNzVGFi
LkJzc0VudHJ5W0Jzc0lkeF0uQnNzaWQuT2N0ZXRbMl0sDQotCQkJcEFkLT5NbG1lLkNudGxBdXgu
U3NpZEJzc1RhYi5Cc3NFbnRyeVtCc3NJZHhdLkJzc2lkLk9jdGV0WzNdLA0KLQkJCXBBZC0+TWxt
ZS5DbnRsQXV4LlNzaWRCc3NUYWIuQnNzRW50cnlbQnNzSWR4XS5Cc3NpZC5PY3RldFs0XSwNCi0J
CQlwQWQtPk1sbWUuQ250bEF1eC5Tc2lkQnNzVGFiLkJzc0VudHJ5W0Jzc0lkeF0uQnNzaWQuT2N0
ZXRbNV0pOw0KLQkJSm9pblBhcm1GaWxsKHBBZCwgJkpvaW5SZXEsIEJzc0lkeCk7DQotCQlNbG1l
RW5xdWV1ZShwQWQsIFNZTkNfU1RBVEVfTUFDSElORSwgTVQyX01MTUVfSk9JTl9SRVEsIHNpemVv
ZihNTE1FX0pPSU5fUkVRX1NUUlVDVCksDQotCQkJCQkmSm9pblJlcSk7DQotCQlwQWQtPk1sbWUu
Q250bE1hY2hpbmUuQ3VyclN0YXRlID0gQ05UTF9XQUlUX0pPSU47DQotCX0NCi0JZWxzZSBpZiAo
cEFkLT5Qb3J0Q2ZnLkJzc1R5cGUgPT0gQlNTX0lOREVQKQ0KLQl7DQotCQlEQkdQUklOVChSVF9E
RUJVR19UUkFDRSwgIkNOVEwgLSBBbGwgQlNTIGZhaWw7IHN0YXJ0IGEgbmV3IEFESE9DIChTc2lk
PSVzKS4uLlxuIixwQWQtPk1sbWUuQ250bEF1eC5Tc2lkKTsNCi0JCVN0YXJ0UGFybUZpbGwocEFk
LCAmU3RhcnRSZXEsIHBBZC0+TWxtZS5DbnRsQXV4LlNzaWQsIChVQ0hBUilwQWQtPk1sbWUuQ250
bEF1eC5Tc2lkTGVuKTsNCi0JCU1sbWVFbnF1ZXVlKHBBZCwgU1lOQ19TVEFURV9NQUNISU5FLCBN
VDJfTUxNRV9TVEFSVF9SRVEsIHNpemVvZihNTE1FX1NUQVJUX1JFUV9TVFJVQ1QpLCAmU3RhcnRS
ZXEpOw0KLQkJcEFkLT5NbG1lLkNudGxNYWNoaW5lLkN1cnJTdGF0ZSA9IENOVExfV0FJVF9TVEFS
VDsNCi0JfQ0KLQllbHNlIC8vIG5vIG1vcmUgQlNTDQotCXsNCi0JCWlmIChwQWQtPk1sbWUuQ250
bEF1eC5DdXJyUmVxSXNGcm9tTmRpcykNCi0JCXsNCi0JCQlEQkdQUklOVChSVF9ERUJVR19UUkFD
RSwgIkNOVEwgLSBBbGwgQlNTIGZhaWw7IHJlcGx5IE5ESVNfU1RBVFVTX05PVF9BQ0NFUFRFRFxu
Iik7DQotCQkJTmRpc01TZXRJbmZvcm1hdGlvbkNvbXBsZXRlKHBBZC0+QWRhcHRlckhhbmRsZSwg
TkRJU19TVEFUVVNfU1VDQ0VTUyk7DQotCQl9DQotCQlwQWQtPk1sbWUuQ250bE1hY2hpbmUuQ3Vy
clN0YXRlID0gQ05UTF9JRExFOw0KLQ0KLQkJUlRNUF9DTEVBUl9GTEFHKHBBZCwgZlJUTVBfQURB
UFRFUl9CU1NfSk9JTl9JTl9QUk9HUkVTUyk7Ly9zdGV2ZW46Zm9yIHRlc3QNCi0JfSANCi19DQot
DQotLy8gZm9yIHJlLWFzc29jaWF0aW9uIG9ubHkNCi1WT0lEIEl0ZXJhdGVPbkJzc1RhYjIoDQot
CUlOIFBSVDI1NzBBREFQVEVSIHBBZCkgDQotew0KLQlNTE1FX1JFQVNTT0NfUkVRX1NUUlVDVCBS
ZWFzc29jUmVxOw0KLQlVTE9ORwkJCQkJQnNzSWR4Ow0KLQlCU1NfRU5UUlkJCQkJKnBCc3M7DQot
CQ0KLQlCc3NJZHggPSBwQWQtPk1sbWUuQ250bEF1eC5Sb2FtSWR4Ow0KLQlwQnNzID0gJnBBZC0+
TWxtZS5DbnRsQXV4LlJvYW1UYWIuQnNzRW50cnlbQnNzSWR4XTsNCi0NCi0JaWYgKEJzc0lkeCA8
IHBBZC0+TWxtZS5DbnRsQXV4LlJvYW1UYWIuQnNzTnIpDQotCXsNCi0JCWlmICghUlRNUF9URVNU
X0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX1JFQVNTT0NfSU5fUFJPR1JFU1MpKQ0KLQkJCVJUTVBf
U0VUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX1JFQVNTT0NfSU5fUFJPR1JFU1MpOy8vc3RldmVu
OmZvciB0ZXN0DQotDQotCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgIkNOVEwgLSB0cnkgQlNT
ICMlZCAlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeCAuLi5cbiIsIA0KLQkJCUJzc0lkeCwg
cEJzcy0+QnNzaWQuT2N0ZXRbMF0scEJzcy0+QnNzaWQuT2N0ZXRbMV0scEJzcy0+QnNzaWQuT2N0
ZXRbMl0sDQotCQkJcEJzcy0+QnNzaWQuT2N0ZXRbM10scEJzcy0+QnNzaWQuT2N0ZXRbNF0scEJz
cy0+QnNzaWQuT2N0ZXRbNV0pOw0KLQ0KLQkJQXNpY1N3aXRjaENoYW5uZWwocEFkLCBwQnNzLT5D
aGFubmVsKTsNCi0JCUFzaWNMb2NrQ2hhbm5lbChwQWQsIHBCc3MtPkNoYW5uZWwpOw0KLQkJDQot
CQkvLyByZWFzc29jaWF0ZSBtZXNzYWdlIGhhcyB0aGUgc2FtZSBzdHJ1Y3R1cmUgYXMgYXNzb2Np
YXRlIG1lc3NhZ2UNCi0JCUFzc29jUGFybUZpbGwocEFkLCAmUmVhc3NvY1JlcSwgJnBCc3MtPkJz
c2lkLCBwQnNzLT5DYXBhYmlsaXR5SW5mbywgDQotCQkJCQkgIEFTU09DX1RJTUVPVVQsIHBBZC0+
UG9ydENmZy5EZWZhdWx0TGlzdGVuQ291bnQpOw0KLQkJTWxtZUVucXVldWUocEFkLCBBU1NPQ19T
VEFURV9NQUNISU5FLCBNVDJfTUxNRV9SRUFTU09DX1JFUSwgDQotCQkJCQlzaXplb2YoTUxNRV9S
RUFTU09DX1JFUV9TVFJVQ1QpLCAmUmVhc3NvY1JlcSk7DQotCQkNCi0JCXBBZC0+TWxtZS5DbnRs
TWFjaGluZS5DdXJyU3RhdGUgPSBDTlRMX1dBSVRfUkVBU1NPQzsNCi0JfQ0KLQllbHNlIC8vIG5v
IG1vcmUgQlNTDQotCXsNCi0JCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAiQ05UTCAtIEFsbCBy
b2FtaW5nIGZhaWxlZCwgc3RheSB3aXRoIG9yaWdpbmFsIEFQXG4iKTsNCi0JCUFzaWNTd2l0Y2hD
aGFubmVsKHBBZCwgcEFkLT5Qb3J0Q2ZnLkNoYW5uZWwpOw0KLQkJQXNpY0xvY2tDaGFubmVsKHBB
ZCwgcEFkLT5Qb3J0Q2ZnLkNoYW5uZWwpOw0KLQkJcEFkLT5NbG1lLkNudGxNYWNoaW5lLkN1cnJT
dGF0ZSA9IENOVExfSURMRTsNCi0NCi0JCVJUTVBfQ0xFQVJfRkxBRyhwQWQsIGZSVE1QX0FEQVBU
RVJfUkVBU1NPQ19JTl9QUk9HUkVTUyk7Ly9zdGV2ZW46Zm9yIHRlc3QNCi0JfSANCi19DQotDQot
LyoNCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0NCi0JRGVzY3JpcHRpb246DQotCT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09DQotKi8NCi1WT0lEIEpvaW5QYXJtRmlsbCgNCi0JSU4gUFJUMjU3MEFEQVBURVIgcEFkLCAN
Ci0JSU4gT1VUIE1MTUVfSk9JTl9SRVFfU1RSVUNUICpKb2luUmVxLCANCi0JSU4gVUxPTkcgQnNz
SWR4KSANCi17DQotCUpvaW5SZXEtPkJzc0lkeCA9IEJzc0lkeDsNCi19DQotDQotLyoNCi0JPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0NCi0JRGVzY3JpcHRpb246DQotCT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotKi8N
Ci1WT0lEIEFzc29jUGFybUZpbGwoDQotCUlOIFBSVDI1NzBBREFQVEVSIHBBZCwgDQotCUlOIE9V
VCBNTE1FX0FTU09DX1JFUV9TVFJVQ1QgKkFzc29jUmVxLCANCi0JSU4gTUFDQUREUgkJCQkJICpB
ZGRyLCANCi0JSU4gVVNIT1JUCQkJCQkgIENhcGFiaWxpdHlJbmZvLCANCi0JSU4gVUxPTkcJCQkJ
CSAgVGltZW91dCwgDQotCUlOIFVTSE9SVAkJCQkJICBMaXN0ZW5JbnR2KSANCi17DQotCUNPUFlf
TUFDX0FERFIoJkFzc29jUmVxLT5BZGRyLCBBZGRyKTsNCi0JLy8gQWRkIG1hc2sgdG8gc3VwcG9y
dCA4MDIuMTFiIG1vZGUgb25seQ0KLQlBc3NvY1JlcS0+Q2FwYWJpbGl0eUluZm8gPSBDYXBhYmls
aXR5SW5mbyAmIDB4ZmZmMzsgLy8gbm90IGNmLXBvbGxhYmxlLCBub3QgY2YtcG9sbC1yZXF1ZXN0
DQotCUFzc29jUmVxLT5UaW1lb3V0ID0gVGltZW91dDsNCi0JQXNzb2NSZXEtPkxpc3RlbkludHYg
PSBMaXN0ZW5JbnR2Ow0KLX0NCi0NCi0vKg0KLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLQlEZXNjcmlw
dGlvbjoNCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0qLw0KLVZPSUQgU2NhblBhcm1GaWxsKA0KLQlJ
TiBQUlQyNTcwQURBUFRFUiBwQWQsIA0KLQlJTiBPVVQgTUxNRV9TQ0FOX1JFUV9TVFJVQ1QgKlNj
YW5SZXEsIA0KLQlJTiBDSEFSIFNzaWRbXSwgDQotCUlOIFVDSEFSIFNzaWRMZW4sIA0KLQlJTiBV
Q0hBUiBCc3NUeXBlLCANCi0JSU4gVUNIQVIgU2NhblR5cGUpIA0KLXsNCi0JU2NhblJlcS0+U3Np
ZExlbiA9IFNzaWRMZW47DQotCU5kaXNNb3ZlTWVtb3J5KFNjYW5SZXEtPlNzaWQsIFNzaWQsIFNz
aWRMZW4pOw0KLQlTY2FuUmVxLT5Cc3NUeXBlID0gQnNzVHlwZTsNCi0JU2NhblJlcS0+U2NhblR5
cGUgPSBTY2FuVHlwZTsNCi19DQotDQotLyoNCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0JRGVzY3Jp
cHRpb246DQotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotKi8NCi1WT0lEIERpc2Fzc29jUGFybUZpbGwo
DQotCUlOIFBSVDI1NzBBREFQVEVSIHBBZCwgDQotCUlOIE9VVCBNTE1FX0RJU0FTU09DX1JFUV9T
VFJVQ1QgKkRpc2Fzc29jUmVxLCANCi0JSU4gTUFDQUREUiAqQWRkciwgDQotCUlOIFVTSE9SVCBS
ZWFzb24pIA0KLXsNCi0JQ09QWV9NQUNfQUREUigmRGlzYXNzb2NSZXEtPkFkZHIsIEFkZHIpOw0K
LQlEaXNhc3NvY1JlcS0+UmVhc29uID0gUmVhc29uOw0KLX0NCi0NCi0vKg0KLQk9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQ0KLQlEZXNjcmlwdGlvbjoNCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0qLw0KLVZPSUQg
U3RhcnRQYXJtRmlsbCgNCi0JSU4gUFJUMjU3MEFEQVBURVIgcEFkLCANCi0JSU4gT1VUIE1MTUVf
U1RBUlRfUkVRX1NUUlVDVCAqU3RhcnRSZXEsIA0KLQlJTiBDSEFSIFNzaWRbXSwgDQotCUlOIFVD
SEFSIFNzaWRMZW4pIA0KLXsNCi0JTmRpc01vdmVNZW1vcnkoU3RhcnRSZXEtPlNzaWQsIFNzaWQs
IFNzaWRMZW4pOyANCi0JU3RhcnRSZXEtPlNzaWRMZW4gPSBTc2lkTGVuOw0KLX0NCi0NCi0vKg0K
LQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQ0KLQlEZXNjcmlwdGlvbjoNCi0JPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0N
Ci0qLw0KLVZPSUQgQXV0aFBhcm1GaWxsKA0KLQlJTiBQUlQyNTcwQURBUFRFUiBwQWQsIA0KLQlJ
TiBPVVQgTUxNRV9BVVRIX1JFUV9TVFJVQ1QgKkF1dGhSZXEsIA0KLQlJTiBNQUNBRERSICpBZGRy
LCANCi0JSU4gVVNIT1JUIEFsZykgDQotew0KLQlDT1BZX01BQ19BRERSKCZBdXRoUmVxLT5BZGRy
LCBBZGRyKTsNCi0JQXV0aFJlcS0+QWxnID0gQWxnOw0KLQlBdXRoUmVxLT5UaW1lb3V0ID0gQVVU
SF9USU1FT1VUOw0KLX0NCi0NCi0vKg0KLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLQlEZXNjcmlwdGlv
bjoNCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0NCi0gKi8NCi1WT0lEIENvbXBvc2VQc1BvbGwoDQotCUlO
IFBSVDI1NzBBREFQVEVSIHBBZCkNCi17DQotCVBTUE9MTF9GUkFNRSAqcFBzUG9sbCA9IChQU1BP
TExfRlJBTUUgKikmKHBBZC0+UHNQb2xsQ29udGV4dC5UcmFuc2ZlckJ1ZmZlci0+V2lyZWxlc3NQ
YWNrZXQpOw0KLQlOZGlzWmVyb01lbW9yeShwUHNQb2xsLCBzaXplb2YoUFNQT0xMX0ZSQU1FKSk7
DQotCXBQc1BvbGwtPlR5cGUgPSBCVFlQRV9DTlRMOw0KLQlwUHNQb2xsLT5TdWJUeXBlID0gU1VC
VFlQRV9QU19QT0xMOw0KLQlwUHNQb2xsLT5BaWQgPSBwQWQtPlBvcnRDZmcuQWlkIHwgMHhDMDAw
Ow0KLQlDT1BZX01BQ19BRERSKCYocFBzUG9sbC0+QnNzaWQpLCAmcEFkLT5Qb3J0Q2ZnLkJzc2lk
KTsNCi0JQ09QWV9NQUNfQUREUigmKHBQc1BvbGwtPlRhKSwgJihwQWQtPkN1cnJlbnRBZGRyZXNz
KSk7DQotfQ0KLQ0KLVZPSUQgQ29tcG9zZU51bGxGcmFtZSgNCi0JSU4gUFJUMjU3MEFEQVBURVIg
cEFkKQ0KLXsNCi0JUEhFQURFUl84MDJfMTEgcE51bGxGcmFtZSA9IChQSEVBREVSXzgwMl8xMSkm
KHBBZC0+TnVsbENvbnRleHQuVHJhbnNmZXJCdWZmZXItPldpcmVsZXNzUGFja2V0KTsNCi0JTWd0
TWFjSGVhZGVySW5pdChwQWQsIChQTUFDSERSKXBOdWxsRnJhbWUsIFNVQlRZUEVfTlVMTF9GVU5D
LCAxLCAmcEFkLT5Qb3J0Q2ZnLkJzc2lkLCAmcEFkLT5Qb3J0Q2ZnLkJzc2lkKTsNCi0JcE51bGxG
cmFtZS0+Q29udHJvbGhlYWQuRHVyYXRpb24gPSAwOw0KLQlwTnVsbEZyYW1lLT5Db250cm9saGVh
ZC5GcmFtZS5UeXBlID0gQlRZUEVfREFUQTsNCi19DQotDQotLyoNCi0JPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0NCi0JRGVzY3JpcHRpb246DQotCQlQcmUtYnVpbGQgYSBCRUFDT04gZnJhbWUgaW4gdGhlIHNo
YXJlZCBtZW1vcnkNCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0qLw0KLVZPSUQgTWFrZUlic3NCZWFj
b24oDQotCUlOIFBSVDI1NzBBREFQVEVSIHBBZCkgDQotew0KLQlVQ0hBUgkJCVNzaWRJZSA9IElF
X1NTSUQsIERzSWUgPSBJRV9EU19QQVJNLCBJYnNzSWUgPSBJRV9JQlNTX1BBUk0sIFN1cHBJZSA9
IElFX1NVUFBfUkFURVMsIA0KLQkJCQkJRHNMZW4gPSAxLCBJYnNzTGVuID0gMjsNCi0JVUNIQVIJ
CQlpLCBFeHRSYXRlSWUgPSBJRV9FWFRfU1VQUF9SQVRFUywgRXh0UmF0ZXNMZW47DQotCVVDSEFS
CQkJRXJwSWVbM10gPSB7SUVfRVJQLCAxLCAweDA0fTsNCi0JTUFDSERSCQkJQmNuSGRyOw0KLQlV
U0hPUlQJCQlDYXBhYmlsaXR5SW5mbzsNCi0JTEFSR0VfSU5URUdFUglGYWtlVGltZXN0YW1wOw0K
LQlVTE9ORwkJCUZyYW1lTGVuOw0KLQlVQ0hBUgkJCVN1cHBvcnRlZFJhdGVzTGVuID0gMDsNCi0J
VUNIQVIJCQlTdXBwb3J0ZWRSYXRlc1tNQVhfTEVOX09GX1NVUFBPUlRFRF9SQVRFU107DQotCUJP
T0xFQU4JCQlQcml2YWN5Ow0KLQlQVUNIQVIJCQlwQmVhY29uRnJhbWU7DQotCVBUWERfU1RSVUMJ
CXBUeEQ7DQotCVVMT05HCQkJQnVsa091dExlbmd0aDsNCi0JUFRYX0NPTlRFWFQJCXBCZWFjb25D
b250ZXh0ID0gJihwQWQtPkJlYWNvbkNvbnRleHRbMF0pOw0KLQ0KLQlpZiAocEFkLT5NTE1FVGhy
X3BpZCA8PSAwKQ0KLQkgICAgcmV0dXJuOw0KLSAgICAvLyAyMDAzLTEyLTEwIDgwMi4xMWcgV0lG
SSBzcGVjIGRpc2FsbG93IE9GRE0gcmF0ZXMgaW4gODAyLjExZyBBREhPQyBtb2RlDQotICAgIC8v
IG1ha2Ugc3VyZSAxLDIsNS41LDExIGFyZSB0aGUgZmlydCA0IHJhdGVzIGluIFBvcnRDZmcuU3Vw
cG9ydGVkUmF0ZXNbXSBhcnJheQ0KLSAgICBpZiAoKHBBZC0+UG9ydENmZy5QaHlNb2RlID09IFBI
WV8xMUJHX01JWEVEKSAmJiAocEFkLT5Qb3J0Q2ZnLkFkaG9jTW9kZSA9PSAwKSkNCi0gICAgew0K
LQkgICAgZm9yIChpID0gMDsgaSA8IHBBZC0+UG9ydENmZy5TdXBwb3J0ZWRSYXRlc0xlbjsgaSsr
KQ0KLQkgICAgew0KLQkgICAgICAgIHN3aXRjaCAocEFkLT5Qb3J0Q2ZnLlN1cHBvcnRlZFJhdGVz
W2ldICYgMHg3ZikNCi0JICAgICAgICB7DQotCSAgICAgICAgICAgIGNhc2UgMjoNCi0JICAgICAg
ICAgICAgY2FzZSA0Og0KLQkgICAgICAgICAgICBjYXNlIDExOg0KLQkgICAgICAgICAgICBjYXNl
IDIyOg0KLQkgICAgICAgICAgICAgICAgU3VwcG9ydGVkUmF0ZXNbU3VwcG9ydGVkUmF0ZXNMZW5d
ID0gcEFkLT5Qb3J0Q2ZnLlN1cHBvcnRlZFJhdGVzW2ldOw0KLQkgICAgICAgICAgICAgICAgU3Vw
cG9ydGVkUmF0ZXNMZW4gKys7DQotCSAgICAgICAgICAgICAgICBicmVhazsNCi0JICAgICAgICAg
ICAgZGVmYXVsdDoNCi0JICAgICAgICAgICAgICAgIGJyZWFrOw0KLQkgICAgICAgIH0NCi0JICAg
IH0NCi0JICAgIC8vIGVycm9yIGhhbmRsaW5nIC0gc2hvdWxkIG5ldmVyIGhhcHBlbg0KLQkgICAg
aWYgKFN1cHBvcnRlZFJhdGVzTGVuICE9IDQpDQotCSAgICB7DQotICAgICAgICAgICAgU3VwcG9y
dGVkUmF0ZXNMZW4gPSA0Ow0KLSAgICAgICAgICAgIFN1cHBvcnRlZFJhdGVzWzBdID0gMHg4MjsN
Ci0gICAgICAgICAgICBTdXBwb3J0ZWRSYXRlc1sxXSA9IDB4ODQ7DQotICAgICAgICAgICAgU3Vw
cG9ydGVkUmF0ZXNbMl0gPSAweDhiOw0KLSAgICAgICAgICAgIFN1cHBvcnRlZFJhdGVzWzNdID0g
MHg5NjsNCi0JICAgIH0NCi0gICAgfQ0KLSAgICBlbHNlDQotICAgIHsNCi0gICAgICAgIFN1cHBv
cnRlZFJhdGVzTGVuID0gcEFkLT5Qb3J0Q2ZnLlN1cHBvcnRlZFJhdGVzTGVuOw0KLSAgICAgICAg
TmRpc01vdmVNZW1vcnkoU3VwcG9ydGVkUmF0ZXMsIHBBZC0+UG9ydENmZy5TdXBwb3J0ZWRSYXRl
cywgU3VwcG9ydGVkUmF0ZXNMZW4pOw0KLSAgICB9DQotDQotCWlmIChwQmVhY29uQ29udGV4dC0+
SW5Vc2UgPT0gVFJVRSkNCi0JCXJldHVybjsNCi0JZWxzZQ0KLQkJcEJlYWNvbkNvbnRleHQtPklu
VXNlID0gVFJVRTsNCi0NCi0gICAgcEFkLT5Qb3J0Q2ZnLkF0aW1XaW4gPSAwOyAgLy8gPz8/Pz8/
DQotICAgIA0KLSAgICAvLyBjb21wb3NlIElCU1MgYmVhY29uIGZyYW1lDQotICAgIE1ndE1hY0hl
YWRlckluaXQocEFkLCAmQmNuSGRyLCBTVUJUWVBFX0JFQUNPTiwgMCwgJnBBZC0+UG9ydENmZy5C
cm9hZGNhc3QsICZwQWQtPlBvcnRDZmcuQnNzaWQpOw0KLSAgICBQcml2YWN5ID0gKHBBZC0+UG9y
dENmZy5XZXBTdGF0dXMgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24xRW5hYmxlZCkgfHwgDQotICAg
ICAgICAgICAgICAocEFkLT5Qb3J0Q2ZnLldlcFN0YXR1cyA9PSBOZGlzODAyXzExRW5jcnlwdGlv
bjJFbmFibGVkKSB8fCANCi0gICAgICAgICAgICAgIChwQWQtPlBvcnRDZmcuV2VwU3RhdHVzID09
IE5kaXM4MDJfMTFFbmNyeXB0aW9uM0VuYWJsZWQpOw0KLSAgICBDYXBhYmlsaXR5SW5mbyA9IENB
UF9HRU5FUkFURSgwLCAxLCAwLCAwLCBQcml2YWN5LCAocEFkLT5Qb3J0Q2ZnLldpbmRvd3NUeFBy
ZWFtYmxlID09IFJ0ODAyXzExUHJlYW1ibGVTaG9ydCkpOw0KLQ0KLQkvLyBQcmVwYXJlIGJlYWNv
biBmcmFtZSwgdGhpcyBzaG91bGQgZ28gdG8gYmVhY29uX3JpbmdbMV0gd2hpY2ggY29udGFpbnMg
dGhlIHJlYWwgYm9keS4NCi0JcEJlYWNvbkZyYW1lID0gKFBVQ0hBUikgcEFkLT5CZWFjb25Db250
ZXh0WzFdLlRyYW5zZmVyQnVmZmVyLT5XaXJlbGVzc1BhY2tldDsNCi0JDQotICAgIGlmIChTdXBw
b3J0ZWRSYXRlc0xlbiA8PSA4KQ0KLSAgICB7DQotICAgICAgICBNYWtlT3V0Z29pbmdGcmFtZShw
QmVhY29uRnJhbWUsICAgICAgICAgICAgICAgICZGcmFtZUxlbiwNCi0gICAgICAgICAgICAgICAg
ICAgICAgTUFDX0hEUl9MRU4sICAgICAgICAgICAgICAgICAgICAgJkJjbkhkciwgDQotICAgICAg
ICAgICAgICAgICAgICAgIFRJTUVTVEFNUF9MRU4sICAgICAgICAgICAgICAgICAgICZGYWtlVGlt
ZXN0YW1wLA0KLSAgICAgICAgICAgICAgICAgICAgICAyLCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAmcEFkLT5Qb3J0Q2ZnLkJlYWNvblBlcmlvZCwNCi0gICAgICAgICAgICAgICAgICAg
ICAgMiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkNhcGFiaWxpdHlJbmZvLA0KLSAg
ICAgICAgICAgICAgICAgICAgICAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmU3Np
ZEllLCANCi0gICAgICAgICAgICAgICAgICAgICAgMSwgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJnBBZC0+UG9ydENmZy5Tc2lkTGVuLCANCi0gICAgICAgICAgICAgICAgICAgICAgcEFk
LT5Qb3J0Q2ZnLlNzaWRMZW4sICAgICAgICAgICAgIHBBZC0+UG9ydENmZy5Tc2lkLA0KLSAgICAg
ICAgICAgICAgICAgICAgICAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmU3VwcEll
LCANCi0gICAgICAgICAgICAgICAgICAgICAgMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJlN1cHBvcnRlZFJhdGVzTGVuLA0KLSAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0ZWRS
YXRlc0xlbiwgICAgICAgICAgICAgICBTdXBwb3J0ZWRSYXRlcywgDQotICAgICAgICAgICAgICAg
ICAgICAgIDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZEc0llLCANCi0gICAgICAg
ICAgICAgICAgICAgICAgMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkRzTGVuLCAN
Ci0gICAgICAgICAgICAgICAgICAgICAgMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
JnBBZC0+UG9ydENmZy5DaGFubmVsLA0KLSAgICAgICAgICAgICAgICAgICAgICAxLCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAmSWJzc0llLCANCi0gICAgICAgICAgICAgICAgICAgICAg
MSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJklic3NMZW4sIA0KLSAgICAgICAgICAg
ICAgICAgICAgICAyLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcEFkLT5Qb3J0Q2Zn
LkF0aW1XaW4sDQotICAgICAgICAgICAgICAgICAgICAgIEVORF9PRl9BUkdTKTsNCi0gICAgfQ0K
LSAgICBlbHNlDQotICAgIHsNCi0gICAgICAgIEV4dFJhdGVzTGVuID0gU3VwcG9ydGVkUmF0ZXNM
ZW4gLSA4Ow0KLSAgICAgICAgU3VwcG9ydGVkUmF0ZXNMZW4gPSA4Ow0KLSAgICAgICAgTWFrZU91
dGdvaW5nRnJhbWUocEJlYWNvbkZyYW1lLCAgICAgICAgICAgICAgICAmRnJhbWVMZW4sDQotICAg
ICAgICAgICAgICAgICAgICAgIE1BQ19IRFJfTEVOLCAgICAgICAgICAgICAgICAgICAgICZCY25I
ZHIsIA0KLSAgICAgICAgICAgICAgICAgICAgICBUSU1FU1RBTVBfTEVOLCAgICAgICAgICAgICAg
ICAgICAmRmFrZVRpbWVzdGFtcCwNCi0gICAgICAgICAgICAgICAgICAgICAgMiwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJnBBZC0+UG9ydENmZy5CZWFjb25QZXJpb2QsDQotICAgICAg
ICAgICAgICAgICAgICAgIDIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZDYXBhYmls
aXR5SW5mbywNCi0gICAgICAgICAgICAgICAgICAgICAgMSwgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJlNzaWRJZSwgDQotICAgICAgICAgICAgICAgICAgICAgIDEsICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICZwQWQtPlBvcnRDZmcuU3NpZExlbiwgDQotICAgICAgICAgICAg
ICAgICAgICAgIHBBZC0+UG9ydENmZy5Tc2lkTGVuLCAgICAgICAgICAgICBwQWQtPlBvcnRDZmcu
U3NpZCwNCi0gICAgICAgICAgICAgICAgICAgICAgMSwgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJlN1cHBJZSwgDQotICAgICAgICAgICAgICAgICAgICAgIDEsICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICZTdXBwb3J0ZWRSYXRlc0xlbiwNCi0gICAgICAgICAgICAgICAgICAg
ICAgU3VwcG9ydGVkUmF0ZXNMZW4sICAgICAgICAgICAgICAgIFN1cHBvcnRlZFJhdGVzLCANCi0g
ICAgICAgICAgICAgICAgICAgICAgMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkRz
SWUsIA0KLSAgICAgICAgICAgICAgICAgICAgICAxLCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAmRHNMZW4sIA0KLSAgICAgICAgICAgICAgICAgICAgICAxLCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAmcEFkLT5Qb3J0Q2ZnLkNoYW5uZWwsDQotICAgICAgICAgICAgICAgICAg
ICAgIDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZJYnNzSWUsIA0KLSAgICAgICAg
ICAgICAgICAgICAgICAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmSWJzc0xlbiwg
DQotICAgICAgICAgICAgICAgICAgICAgIDIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICZwQWQtPlBvcnRDZmcuQXRpbVdpbiwNCi0gICAgICAgICAgICAgICAgICAgICAgMywgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgRXJwSWUsDQotICAgICAgICAgICAgICAgICAgICAgIDEs
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZFeHRSYXRlSWUsDQotICAgICAgICAgICAg
ICAgICAgICAgIDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZFeHRSYXRlc0xlbiwN
Ci0gICAgICAgICAgICAgICAgICAgICAgRXh0UmF0ZXNMZW4sICAgICAgICAgICAgICAgICAgICAg
JlN1cHBvcnRlZFJhdGVzW1N1cHBvcnRlZFJhdGVzTGVuXSwNCi0gICAgICAgICAgICAgICAgICAg
ICAgRU5EX09GX0FSR1MpOw0KLSAgICB9DQotICAgIA0KLQkvLyBJZiBhZGhvYyBzZWNydWl0eSBp
cyBzZXQgZm9yIFdQQS1Ob25lLCBhcHBlbmQgdGhlIGNpcGhlciBzdWl0ZSBJRQ0KLQlpZiAocEFk
LT5Qb3J0Q2ZnLkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQU5vbmUpDQotCXsNCi0J
CVVMT05HCXRtcCA9IDA7DQotCQlVQ0hBUglXcGFJZSA9IElFX1dQQTsNCi0JCQ0KLQkJaWYgKHBB
ZC0+UG9ydENmZy5XZXBTdGF0dXMgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24yRW5hYmxlZCkJCS8v
IFRraXANCi0JCXsNCi0gICAgICAgIAlNYWtlT3V0Z29pbmdGcmFtZShwQmVhY29uRnJhbWUgKyBG
cmFtZUxlbiwgICAgICAgICAgICAgICAgICAgICZ0bXAsDQotCQkJCTEsCQkJCQkJICAmV3BhSWUs
DQotCQkJCTEsCQkJCQkJICAmQ2lwaGVyU3VpdGVXcGFOb25lVGtpcExlbiwNCi0JCQkJQ2lwaGVy
U3VpdGVXcGFOb25lVGtpcExlbiwJICAmQ2lwaGVyU3VpdGVXcGFOb25lVGtpcFswXSwNCi0JCQkJ
RU5EX09GX0FSR1MpOw0KLQkJCUZyYW1lTGVuICs9IHRtcDsNCi0JCX0NCi0JCWVsc2UgaWYgKHBB
ZC0+UG9ydENmZy5XZXBTdGF0dXMgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24zRW5hYmxlZCkJLy8g
QWVzDQotCQl7DQotICAgICAgICAJTWFrZU91dGdvaW5nRnJhbWUocEJlYWNvbkZyYW1lICsgRnJh
bWVMZW4sICAgICAgICAgICAgICAgICAgICAmdG1wLA0KLQkJCQkxLAkJCQkJCSAgJldwYUllLA0K
LQkJCQkxLAkJCQkJCSAgJkNpcGhlclN1aXRlV3BhTm9uZUFlc0xlbiwNCi0JCQkJQ2lwaGVyU3Vp
dGVXcGFOb25lQWVzTGVuLAkgICZDaXBoZXJTdWl0ZVdwYU5vbmVBZXNbMF0sDQotCQkJCUVORF9P
Rl9BUkdTKTsNCi0JCQlGcmFtZUxlbiArPSB0bXA7DQotCQl9DQotCX0NCi0JDQotICAgIEJ1bGtP
dXRMZW5ndGggPSBzaXplb2YoVFhEX1NUUlVDKSArIEZyYW1lTGVuOw0KLQlpZiAoKEJ1bGtPdXRM
ZW5ndGggJSAyKSA9PSAxKQ0KLQkJQnVsa091dExlbmd0aCArKzsNCi0vLwlpZiAoQnVsa091dExl
bmd0aCAlIHBBZC0+QnVsa091dE1heFBhY2tldFNpemUgPT0gMCkNCi0vLwkJQnVsa091dExlbmd0
aCArPSAyOw0KLQ0KLSAgICBmb3IgKGkgPSAwOyBpIDwgQkVBQ09OX1JJTkdfU0laRTsgaSsrKQ0K
LQl7DQotCQlwVHhEID0gKFBUWERfU1RSVUMpICZwQWQtPkJlYWNvbkNvbnRleHRbaV0uVHJhbnNm
ZXJCdWZmZXItPlR4RGVzYzsNCi0JCU5kaXNaZXJvTWVtb3J5KHBUeEQsIHNpemVvZihUWERfU1RS
VUMpKTsNCi0JCXBCZWFjb25Db250ZXh0ID0gJihwQWQtPkJlYWNvbkNvbnRleHRbaV0pOzsNCi0N
Ci0JCS8vIEJvdGggVHhEIG5lZWQgdG8gcHV0IGluIHRoZSByaWdodCBkZXNjcmlwdG9yDQotICAg
IAlSVFVTQldyaXRlQmVhY29uRGVzY3JpcHRvcihwVHhELCBGcmFtZUxlbiwgRnJhbWVMZW4gKyA0
LCBwQWQtPlBvcnRDZmcuTWxtZVJhdGUsIDQsIHBBZC0+UG9ydENmZy5UeFByZWFtYmxlSW5Vc2Vk
KTsNCi0JCWlmIChpID09IDApDQotCQkJcEJlYWNvbkNvbnRleHQtPkJ1bGtPdXRTaXplID0gMTsN
Ci0JCWVsc2UNCi0JCQlwQmVhY29uQ29udGV4dC0+QnVsa091dFNpemUgPSBCdWxrT3V0TGVuZ3Ro
OwkJCQ0KLSAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgIiAgKHBCZWFjb25Db250ZXh0LT5C
dWxrT3V0U2l6ZT0lZClcbiIsIHBCZWFjb25Db250ZXh0LT5CdWxrT3V0U2l6ZSk7DQotCX0NCi0N
Ci0JLy8gVGhlIGZsYWdzIHdpbGwgYWx3YXlzIHN0YXJ0IGZyb20gYmVhY29uIDANCi0JUlRVU0Jf
U0VUX0JVTEtfRkxBRyhwQWQsIGZSVFVTQl9CVUxLX09VVF9CRUFDT05fMCk7DQotDQotCS8vIEtp
Y2sgYnVsayBvdXQgDQotCVJUVVNCS2lja0J1bGtPdXQocEFkKTsNCi0NCi19DQpkaWZmIC1ydU4g
cnQyNTcwLTEuMS4wLWIxL01vZHVsZS9pd3ByaXZfdXNhZ2UudHh0IHJ0MjU3MC1jdnMtMjAwNTEy
MjYxNi9Nb2R1bGUvaXdwcml2X3VzYWdlLnR4dAotLS0gcnQyNTcwLTEuMS4wLWIxL01vZHVsZS9p
d3ByaXZfdXNhZ2UudHh0CTIwMDUtMDctMzAgMTE6NDQ6MzAuMDAwMDAwMDAwIC0wNTAwCisrKyBy
dDI1NzAtY3ZzLTIwMDUxMjI2MTYvTW9kdWxlL2l3cHJpdl91c2FnZS50eHQJMjAwNS0xMS0zMCAw
Nzo0MzoyNy4wMDAwMDAwMDAgLTA2MDAKQEAgLTEsMTUxICsxLDcwIEBACi0NCi1UaGlzIGZpbGUg
cHJvdmlkZXMgc29tZSBiYXNpYyBleGFtcGxlcyBvbiB0aGUgY29uZmlndXJhdGlvbiBvZiB0aGUg
ZHJpdmVyIHVzaW5nIHN0YW5kYXJkIGxpbnV4IHdpcmVsZXNzIHRvb2xzLiBXaGVyZSBwb3NzaWJs
ZSBpd2NvbmZpZyBzaG91bGQgYmUgdXNlZCB0byBhZGp1c3Qgc2V0dGluZ3MuIFNvbWUgc2V0dGlu
Z3MgYXJlIGN1cnJlbnRseSBub3QgYXZhaWFibGUgdmlhIGl3Y29uZmlnIGFuZCB0aGVzZSBpbmNs
dWRlIFdQQSwgZm9yIHRoZXNlIGZ1bmN0aW9ucyBpdCBpcyBjdXJyZW50bHkgbmVjZXNzYXJ5IHRv
IHVzZSBpd3ByaXYuIA0KLQ0KLQ0KLUNvbmZpZ3VyYXRpb24gRXhhbXBsZXMNCi09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
DQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLUV4YW1w
bGUgSTogQ29uZmlnIFNUQSB0byBsaW5rIHdpdGggQVAgd2hpY2ggaXMgT1BFTi9OT05FKEF1dGhl
bnRpY2F0aW9uL0VuY3J5cHRpb24pDQotCTEuIGl3Y29uZmlnIHJhMCBtb2RlIG1hbmFnZWQNCi0J
Mi4gaXdjb25maWcgcmEwIGtleSBvcGVuDQotCTMuIGl3Y29uZmlnIHJhMCBrZXkgb2ZmDQotCTQu
IGl3Y29uZmlnIHJhMCBlc3NpZCAiQVAncyBTU0lEIg0KLQkNCi1FeGFtcGxlIElJOiBDb25maWcg
U1RBIHRvIGxpbmsgd2l0aCBBUCB3aGljaCBpcyBTSEFSRUQvV0VQKEF1dGhlbnRpY2F0aW9uL0Vu
Y3J5cHRpb24pDQotCTEuIGl3Y29uZmlnIHJhMCBtb2RlIG1hbmFnZWQNCi0JMi4gaXdjb25maWcg
cmEwIGtleSByZXN0cmljdGVkDQotCTMuIGl3Y29uZmlnIHJhMCBLZXkgWzFdICJzOkFQJ3Mgd2Vw
IGtleSINCi0JNC4gaXdjb25maWcgcmEwIGtleSBbMV0NCi0JNS4gaXdjb25maWcgcmEwIGVzc2lk
ICJBUCdzIFNTSUQiDQotCQ0KLUV4YW1wbGUgSUlJOiBDb25maWcgU1RBIHRvIGNyZWF0ZS9saW5r
IGFzIGFkaG9jIG1vZGUNCi0JMS4gaXdjb25maWcgcmEwIG1vZGUgYWQtaG9jDQotCTIuIGl3Y29u
ZmlnIHJhMCBrZXkgb2ZmDQotCTQuIGl3Y29uZmlnIHJhMCBlc3NpZCAiQVAncyBTU0lEIg0KLQkN
Ci1FeGFtcGxlIElWOiBDb25maWcgU1RBIHRvIGxpbmsgd2l0aCBBUCB3aGljaCBpcyBXUEFQU0sv
VEtJUChBdXRoZW50aWNhdGlvbi9FbmNyeXB0aW9uKQ0KLQkxLiBpd2NvbmZpZyByYTAgbW9kZSBt
YW5hZ2VkDQotCTIuIGl3cHJpdiByYTAgc2V0IEF1dGhNb2RlPVdQQVBTSw0KLQkzLiBpd3ByaXYg
cmEwIHNldCBFbmNyeXBUeXBlPVRLSVANCi0JNC4gaXdwcml2IHJhMCBzZXQgV1BBUFNLPSJBUCdz
IHdwYS1wcmVzaGFyZWQga2V5Ig0KLQk1LiBpd2NvbmZpZyByYTAgZXNzaWQgIkFQJ3MgU1NJRCIN
Ci0JDQotRXhhbXBsZSBWOiBDb25maWcgU1RBIHRvIGxpbmsgd2l0aCBBUCB3aGljaCBpcyBXUEFQ
U0svQUVTKEF1dGhlbnRpY2F0aW9uL0VuY3J5cHRpb24pDQotCTEuIGl3Y29uZmlnIHJhMCBtb2Rl
IG1hbmFnZWQNCi0JMi4gaXdwcml2IHJhMCBzZXQgQXV0aE1vZGU9V1BBUFNLDQotCTMuIGl3cHJp
diByYTAgc2V0IEVuY3J5cFR5cGU9QUVTDQotCTUuIGl3cHJpdiByYTAgc2V0IFdQQVBTSz0iQVAn
cyB3cGEtcHJlc2hhcmVkIGtleSINCi0JNi4gaXdjb25maWcgcmEwIGVzc2lkICJBUCdzIFNTSUQi
DQotCQ0KLQ0KLQ0KLWl3cHJpdg0KLT09PT09PT09PT09PT09PT09DQotVGhpcyBpcyBkZXRhaWxl
ZCBleHBsYW5hdGlvbiBvZiBlYWNoIHBhcmFtZXRlcnMgZm9yIGl3cHJpdi4NCi1CZWZvcmUgcmVh
ZGluZyB0aGlzIGRvY3VtZW50LCBtYWtlIHN1cmUgeW91IGFscmVhZHkgcmVhZCBSRUFETUUuDQot
DQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLVVTQUdF
Og0KLQlpd3ByaXYgcmEwIHNldCBbcGFyYW1ldGVyc109W3ZhbF0NCi0NCi13aGVyZQ0KLQ0KLVtw
YXJhbWV0ZXJzXSAgICAgICAgICBbdmFsXSByYW5nZSAgICAgICAgICAgICAgICAgICAgICAgICAg
ZXhwbGFpbmF0aW9uDQotLS0tLS0tLS0tLS0tLS0tLS0gICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LSAgICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tDQotQ291bnRyeVJlZ2lvbiAgICAgICB7MH43fSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBTZXQgY291bnRyeSByZWdpb24gDQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwOiB1c2UgMSB+IDExIENoYW5uZWwNCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDE6IHVzZSAxIH4gMTEgQ2hhbm5lbA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMjogdXNlIDEgfiAxMyBDaGFubmVsDQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzOiB1
c2UgMTAsIDExIENoYW5uZWwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDQ6IHVzZSAxMCB+IDEzIENoYW5uZWwNCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDU6IHVzZSAx
NCBDaGFubmVsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA2OiB1c2UgMSB+IDE0IENoYW5uZWwNCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDc6IHVzZSAzIH4gOSBDaGFu
bmVsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICANCi1XaXJlbGVzc01vZGUgICAgICAgIHswfjJ9CQkJCSAgIFNldCBXaXJlbGVzcyBN
b2RlIA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMDoxMWIvZyBtaXhlZCwgMToxMUIgb25seQ0KLQ0KLVR4UmF0ZSAgICAgICAgICAg
ICAgezB+MTJ9CQkJCSAgIFNldCBUeFJhdGUgDQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwOkF1dG8sIDE6MU1icHMsIDI6Mk1icHMs
IDM6NS41TWJwcywgNDoxMU1icHMsIA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA1OjZNYnBzLCA2OjlNYnBzLCA3OjEyTWJwcywgODox
OE1icHMsIDk6MjRNYnBzLCANCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDEwOjM2TWJwcywgMTE6NDhNYnBzLCAxMjo1NE1icHMNCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IA0KLUJHUHJvdGVjdGlvbiAgICAgICAgezB+Mn0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgU2V0IDExQi8xMUcgUHJvdGVjdGlvbg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMDpBdXRvLCAxOkFsd2F5cyBvbiwgMjpB
bHdheXMgb2ZmDQotDQotVHhQcmVhbWJsZSAgICAgICAgICB7MH4yfSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBTZXQgVHhQcmVhbWJsZQ0KLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMDpQcmVhbWJsZSBMb25nLCAxOlBy
ZWFtYmxlIFNob3J0LCAyOkF1dG8NCi0NCi1UeEJ1cnN0ICAgICAgICAgICAgIHswLDF9ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNldCBUeEJ1cnN0IEVuYWJsZSBvciBEaXNhYmxl
DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAwOkRpc2FibGUsIDE6RW5hYmxlDQotDQotVHVyYm9SYXRlICAgICAgICAgICB7MCwxfSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZXQgVHVyYm9SYXRlIEVuYWJsZSBvciBE
aXNhYmxlDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAwOkRpc2FibGUsIDE6RW5hYmxlDQotDQotQWRob2NPZmRtICAgICAgICAgICB7
MCwgMX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZXQgQWRob2MgbW9kZSB0eCBy
YXRlDQotCQkJCQkJCSAgIDA6IGFkaGVyZSBXSUZJIHNwZWMuLCAxOiB2aW9sYXRlIFdJRkkgc3Bl
Yy4NCi0JCQkJCQkJICAgKDgwMi4xMWcgV0lGSSBzcGVjIGRpc2FsbG93IE9GRE0gcmF0ZXMgaW4g
ODAyLjExZyBBREhPQyBtb2RlKQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQXV0aE1vZGUgICAgICAgICAgICB7T1BFTixTSEFSRUQsV1BBUFNLfSAgICAgICAgICAgICAg
ICAgICBTZXQgQXV0aGVudGljYXRpb24gbW9kZQ0KLQ0KLUVuY3J5cFR5cGUgICAgICAgICAge05P
TkUsV0VQLFRLSVAsQUVTfSAgICAgICAgICAgICAgICAgICAgU2V0IEVuY3J5cHRpb24gVHlwZQ0K
LQ0KLVdQQVBTSyAgICAgICAgICAgICAgezh+NjMgQVNDSUkgb3IgNjQgSEVYIGNoYXJhY3RlcnN9
ICAgICAgIFdQQSBQcmUtU2hhcmVkIEtleSANCi0NCi1BcENsaWVudAkgICAgezAsMX0JCQkJICAg
IFNldCBBcENsaWVudCBtb2RlDQotCQkJCQkJCSAgICAwOkRpc2FibGUsIDE6RW5hYmxlDQotCQkJ
CQkJCSAgICANCi1pd2xpc3QNCi09PT09PT09PT09PT09PT09PQ0KLVRoaXMgaXMgZGV0YWlsZWQg
ZXhwbGFuYXRpb24gb2YgZWFjaCBwYXJhbWV0ZXJzIGZvciBpd2xpc3QuDQotDQotLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLQ0KLWl3bGlzdCByYTAgc2Nh
bm5pbmcJCTsgbGlzdCB0aGUgcmVzdWx0IGFmdGVyIHNjYW5uaW5nKHNpdGUgc3VydmV5KSANCi0J
CQkJCQkJICAgIA0KLQ0KLQ0KLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0NCi0JCQkJCQkJICAgIA0K
LURlcHJlY2F0ZWQgaXdwcml2DQotPT09PT09PT09PT09PT09PT0NCi0NCi0qKiogUExFQVNFIERP
IE5PVCBVU0UgVEhFU0UgRlVOQ1RJT05TLCBUSElTIElTIEZPUiBISVNUT1JJQ0FMIFJFRkVSRU5D
RSBPTkxZICoqKg0KLUFzIHRoZSBjb25maWd1cmF0aW9uIHV0aWxpdHkgc3RpbGwgdXNlcyBzb21l
IGl3cHJpdiBjb21tYW5kcyB0aGV5IGhhdmUgbm90IGJlZW4NCi1yZW1vdmVkIGZyb20gdGhlIGRy
aXZlciB5ZXQuIFRoZXNlIGNvbW1hbmRzIGFyZSBsaWtlbHkgdG8gZGlzc2FwZWFyIGlmIHRoZSB1
dGlsaXR5IGlzDQotdXBkYXRlZC4NCi0JDQotKiogQUxMIFRIRVNFIENPTU1BTkRTIEhBVkUgQSBJ
V0NPTkZJRyBSRVBMQUNFTUVOVCwgVVNFIElUICoqKioNCi0NCi1TU0lEICAgICAgICAgICAgICAg
IHswfnosIGxlc3MgdGhhbiAzMiBjaGFyYWN0ZXJzfSAgICAgICAgIFNldCBTb2Z0QVAgU1NJRA0K
LQ0KLUNoYW5uZWwgICAgICAgICAgICAgezF+MTR9IGRlcGVuZHMgb24gY291bnRyeSByZWdpb24g
ICAgICAgU2V0IENoYW5uZWwNCi0NCi1SVFNUaHJlc2hvbGQgICAgICAgIHsxfjIzNDd9ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFNldCBSVFMgVGhyZXNob2xkICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KLUZyYWdU
aHJlc2hvbGQgICAgICAgezI1Nn4yMzQ2fSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2V0
IEZyYWdtZW50IFRocmVzaG9sZA0KLQ0KLU5ldHdvcmtUeXBlCSAgICB7SW5mcmEsQWRob2N9CQkJ
ICAgU2V0IE5ldHdvcmsgdHlwZQ0KLQ0KLURlZmF1bHRLZXlJRCAgICAgICAgezF+NH0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgU2V0IERlZmF1bHQgS2V5IElEDQotDQotS2V5MSAg
ICAgICAgICAgICAgICAgezUgYXNjaWkgY2hhcmFjdGVycyBvciAgICAgICAgICAgICAgICAgU2V0
IEtleTEgU3RyaW5nDQotICAgICAgICAgICAgICAgICAgICAgMTAgaGV4IG51bWJlciBvciANCi0g
ICAgICAgICAgICAgICAgICAgICAxMyBhc2NpaSBjaGFyYWN0ZXJzIG9yIA0KLSAgICAgICAgICAg
ICAgICAgICAgIDI2IGhleCBudW1iZXJzfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KLQ0KLUtleTIgICAgICAgICAgICAgICAg
IHs1IGFzY2lpIGNoYXJhY3RlcnMgb3IgICAgICAgICAgICAgICAgIFNldCBLZXkyIFN0cmluZw0K
LSAgICAgICAgICAgICAgICAgICAgIDEwIGhleCBudW1iZXIgb3IgDQotICAgICAgICAgICAgICAg
ICAgICAgMTMgYXNjaWkgY2hhcmFjdGVycyBvciANCi0gICAgICAgICAgICAgICAgICAgICAyNiBo
ZXggbnVtYmVyc30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICANCi0NCi1LZXkzICAgICAgICAgICAgICAgICB7NSBhc2NpaSBjaGFy
YWN0ZXJzIG9yICAgICAgICAgICAgICAgICBTZXQgS2V5MyBTdHJpbmcNCi0gICAgICAgICAgICAg
ICAgICAgICAxMCBoZXggbnVtYmVyIG9yIA0KLSAgICAgICAgICAgICAgICAgICAgIDEzIGFzY2lp
IGNoYXJhY3RlcnMgb3IgDQotICAgICAgICAgICAgICAgICAgICAgMjYgaGV4IG51bWJlcnN9ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgDQotDQotS2V5NCAgICAgICAgICAgICAgICAgezUgYXNjaWkgY2hhcmFjdGVycyBvciAgICAg
ICAgICAgICAgICAgU2V0IEtleTQgU3RyaW5nDQotICAgICAgICAgICAgICAgICAgICAgMTAgaGV4
IG51bWJlciBvciANCi0gICAgICAgICAgICAgICAgICAgICAxMyBhc2NpaSBjaGFyYWN0ZXJzIG9y
IA0KLSAgICAgICAgICAgICAgICAgICAgIDI2IGhleCBudW1iZXJzfSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KK2l3cHJpdgor
PT09PT09PT09PT09PT09PT0KK1RoaXMgaXMgZGV0YWlsZWQgZXhwbGFuYXRpb24gb2YgZWFjaCBw
YXJhbWV0ZXJzIGZvciBpd3ByaXYuCitCZWZvcmUgcmVhZGluZyB0aGlzIGRvY3VtZW50LCBtYWtl
IHN1cmUgeW91IGFscmVhZHkgcmVhZCBSRUFETUUuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1VTQUdFOgorCWl3cHJpdiByYXVzYjAgc2V0IFtwYXJh
bWV0ZXJzXT1bdmFsXQorCit3aGVyZQorCitbcGFyYW1ldGVyc10gICAgICAgICAgW3ZhbF0gcmFu
Z2UgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGxhaW5hdGlvbgorLS0tLS0tLS0tLS0tLS0t
LS0gICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCithdXRoCQkJMH4yCQkJCQkwOm9wZW4KKwkJ
CQkJCQkJMTpzaGFyZWQKKwkJCQkJCQkJMjp3cGFwc2sKKwkJCQkJCQkJMzp3cGFub25lCisJCQkJ
CQkJCQora2V5aWQJCQkxfjQJCQkJCXdlcCBrZXkgaWQKKworZW5jCQkJMX4zCQkJCQkxOm5vbmUK
KwkJCQkJCQkJMjp3ZXAKKwkJCQkJCQkJMzp0a2lwCisJCQkJCQkJCQord3BhcHNrCQkJOH42MyBj
aGFycwkJCQlXUEFQU0sgcGFzc3dvcmQKKworYWRob2Ntb2RlCQkwfjIJCQkJCTA6IFBsYWluIDEx
TWJwcworCQkJCQkJCQkgICBtb2RlIGluCisJCQkJCQkJCSAgIEFkLUhvYworCQkJCQkJCQkgICAo
SUVFRQorCQkJCQkJCQkgICA4MDIuMTFnCisJCQkJCQkJCSAgIHN0YW5kYXJkKQorCQkJCQkJCQkx
OiBBdXRvIG1vZGUKKwkJCQkJCQkJICAgaW4gQWQtSG9jCisJCQkJCQkJCSAgICh2aW9sYXRlcwor
CQkJCQkJCQkgICBJRUVFIDgwMi4xMWcKKwkJCQkJCQkJICAgc3RhbmRhcmQpCisJCQkJCQkJCTI6
IDU0TWJwcyBvbmx5LgorCitFeGFtcGxlcworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorRXhhbXBsZSBJOiBDb25maWcgU1RBIHRvIGxp
bmsgd2l0aCBBUCB3aGljaCBpcyBPUEVOL05PTkUoQXV0aGVudGljYXRpb24vRW5jcnlwdGlvbikK
KwkxLiBpd2NvbmZpZyByYXVzYjAgbW9kZSBNYW5hZ2VkCisJMi4gaXdjb25maWcgcmF1c2IwIGVu
YyBub25lCisJMy4gaXdjb25maWcgcmF1c2IwIGVzc2lkICJBUCdzIFNTSUQiCisJCitFeGFtcGxl
IElJOiBDb25maWcgU1RBIHRvIGxpbmsgd2l0aCBBUCB3aGljaCBpcyBPUEVOL1dFUChBdXRoZW50
aWNhdGlvbi9FbmNyeXB0aW9uKQorCTEuIGl3Y29uZmlnIHJhdXNiMCBlbmMgczphYmNkZQorCTIu
IGl3Y29uZmlnIHJhdXNiMCBlc3NpZCAiQVAncyBTU0lEIgorCisJCitFeGFtcGxlIElJSTogQ29u
ZmlnIFNUQSB0byBsaW5rIHdpdGggQVAgd2hpY2ggaXMgV1BBUFNLL1RLSVAoQXV0aGVudGljYXRp
b24vRW5jcnlwdGlvbikKKwkxLiBpd3ByaXYgcmF1c2IwIGVuYyAzCisJMi4gaXdjb25maWcgcmF1
c2IwIGVzc2lkICJBUCdzIFNTSUQiCisJMy4gaXdwcml2IHJhdXNiMCB3cGFwc2sgMTIzNDU2NzgK
Kwk0LiBpd2NvbmZpZyByYXVzYjAgZXNzaWQgIkFQJ3MgU1NJRCIKKwkKK3AucyBTdGVwIDIgaXMg
cGFydCBvZiBnZW5lcmF0aW5nIHdwYXBzayBwYXNzd29yZCBhbmQgaXMgbmVjZXNzYXJ5LgorCitO
T1RFOgorCitpd2xpc3QKKz09PT09PT09PT09PT09PT09CitUaGlzIGlzIGRldGFpbGVkIGV4cGxh
bmF0aW9uIG9mIGVhY2ggcGFyYW1ldGVycyBmb3IgaXdsaXN0LgorCistLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2l3bGlzdCByYXVzYjAgc2Nhbm5pbmcJ
CTsgbGlzdCB0aGUgcmVzdWx0IGFmdGVyIHNjYW5uaW5nKHNpdGUgc3VydmV5KQorCmRpZmYgLXJ1
TiBydDI1NzAtMS4xLjAtYjEvTW9kdWxlL01ha2VmaWxlIHJ0MjU3MC1jdnMtMjAwNTEyMjYxNi9N
b2R1bGUvTWFrZWZpbGUKLS0tIHJ0MjU3MC0xLjEuMC1iMS9Nb2R1bGUvTWFrZWZpbGUJMjAwNS0w
Ny0zMCAxMTo0NDozMC4wMDAwMDAwMDAgLTA1MDAKKysrIHJ0MjU3MC1jdnMtMjAwNTEyMjYxNi9N
b2R1bGUvTWFrZWZpbGUJMjAwNS0xMC0yMyAwNzoyNDoyOS4wMDAwMDAwMDAgLTA1MDAKQEAgLTcz
LDYgKzczLDEyIEBACiAgTU9EVUxFX1JPT1QgOj0gL2xpYi9tb2R1bGVzLyQoc2hlbGwgdW5hbWUg
LXIpL2V4dHJhCiBlbmRpZgogCitpZmRlZiBLRVJOT1VUCisJS0VSTkVMX09VVFBVVCA6PSBLQlVJ
TERfT1VUUFVUPSQoS0VSTk9VVCkKK2Vsc2UKKwlLRVJORUxfT1VUUFVUIDo9CitlbmRpZgorCiBz
cmMgPz0gLgogb2JqID89IC4KIApAQCAtODksNyArOTUsNyBAQAogCSQoTEQpICQoRVhUUkFfTERG
TEFHUykgLXIgLW8gJEAgJCgkKE1PRFVMRV9OQU1FKS1vYmpzKQogZW5kaWYKIAotS0JVSUxEX1BB
UkFNUyA6PSAtQyAkKEtFUk5FTF9TT1VSQ0VTKSBTVUJESVJTPSQoUFdEKQorS0JVSUxEX1BBUkFN
UyA6PSAtQyAkKEtFUk5FTF9TT1VSQ0VTKSBTVUJESVJTPSQoUFdEKSAkKEtFUk5FTF9PVVRQVVQp
CiAKIG1vZHVsZToKIAlAJChNQUtFKSAkKEtCVUlMRF9QQVJBTVMpIG1vZHVsZXM7IFwKQEAgLTk4
LDYgKzEwNCwyMCBAQAogCWV4aXQgMTsgXAogCWZpCiAKK2FybToKKwlAJChNQUtFKSAkKEtCVUlM
RF9QQVJBTVMpICdFWFRSQV9DRkxBR1M9LW1zdHJ1Y3R1cmUtc2l6ZS1ib3VuZGFyeT04IC1JJChz
cmMpJyBtb2R1bGVzOworCWlmICEgWyAtZiAkKE1PRFVMRV9PQkpFQ1QpIF07IHRoZW4gXAorCWVj
aG8gIiQoTU9EVUxFX09CSkVDVCkgZmFpbGVkIHRvIGJ1aWxkISI7IFwKKwlleGl0IDE7IFwKKwlm
aQorCithcm1kZWJ1ZzoKKwlAJChNQUtFKSAkKEtCVUlMRF9QQVJBTVMpICdFWFRSQV9DRkxBR1M9
LW1zdHJ1Y3R1cmUtc2l6ZS1ib3VuZGFyeT04IC1JJChzcmMpIC1EUlQyNTAwX0RCRycgbW9kdWxl
czsKKwlpZiAhIFsgLWYgJChNT0RVTEVfT0JKRUNUKSBdOyB0aGVuIFwKKwllY2hvICIkKE1PRFVM
RV9PQkpFQ1QpIGZhaWxlZCB0byBidWlsZCEiOyBcCisJZXhpdCAxOyBcCisJZmkKKwogZGVidWc6
CiAJQCQoTUFLRSkgJChLQlVJTERfUEFSQU1TKSAnRVhUUkFfQ0ZMQUdTPS1JJChzcmMpIC1EUlQy
NTAwX0RCRycgbW9kdWxlczsgXAogCWlmICEgWyAtZiAkKE1PRFVMRV9PQkpFQ1QpIF07IHRoZW4g
XApAQCAtMTIyLDggKzE0MiwxMCBAQAogZWxzZQogCWVjaG8gIjIuNiBtb2R1bGUgaW5zdGFsbCIK
IAltYWtlICQoS0JVSUxEX1BBUkFNUykgbW9kdWxlc19pbnN0YWxsCisJL3NiaW4vZGVwbW9kIC1h
CiBlbmRpZgogCisKIGluc3RhbGw6IG1vZHVsZXNfaW5zdGFsbAogCUBpZiAhIGdyZXAgLXEgJ3Jh
dXNiMCcgJChNT0RVTEVfQ09ORikgOyB0aGVuIFwKIAkJZWNobyAiYXBwZW5kICdhbGlhcyByYXVz
YjAgcnQyNTcwJyB0byAkKE1PRFVMRV9DT05GKSI7IFwKZGlmZiAtcnVOIHJ0MjU3MC0xLjEuMC1i
MS9Nb2R1bGUvLiNtZDUuYy4xLjIgcnQyNTcwLWN2cy0yMDA1MTIyNjE2L01vZHVsZS8uI21kNS5j
LjEuMgotLS0gcnQyNTcwLTEuMS4wLWIxL01vZHVsZS8uI21kNS5jLjEuMgkyMDA1LTA3LTMwIDEx
OjQ0OjMwLjAwMDAwMDAwMCAtMDUwMAorKysgcnQyNTcwLWN2cy0yMDA1MTIyNjE2L01vZHVsZS8u
I21kNS5jLjEuMgkxOTY5LTEyLTMxIDE4OjAwOjAwLjAwMDAwMDAwMCAtMDYwMApAQCAtMSwxMzY5
ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCi0gKiBSVDJ4MDAgU291cmNlRm9yZ2UgUHJv
amVjdCAtIGh0dHA6Ly9ydDJ4MDAuc291cmNlZm9yZ2UubmV0ICAgICAgICAgICAgICAqIAotICog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKiAKLSAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICogCi0gKiAgIGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
ICAqIAotICogICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAgICAgKiAKLSAqICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogCi0gKiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAqIAotICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgKiAKLSAqICAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICog
Ci0gKiAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgICAgICAgICAqIAotICogICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgKiAKLSAqICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICogCi0gKiAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAqIAotICogICBhbG9uZyB3aXRoIHRoaXMgcHJv
Z3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgICAgICAgICAgICAgICAgICAgICAgICAgKiAKLSAq
ICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICogCi0gKiAgIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9z
dG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLiAgICAgICAgICAgICAqIAotICogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKiAKLSAqICAgTGljZW5zZWQgdW5kZXIgdGhlIEdOVSBHUEwgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICogCi0gKiAgIE9yaWdpbmFsIGNvZGUgc3VwcGxpZWQg
dW5kZXIgbGljZW5zZSBmcm9tIFJhTGluayBJbmMsIDIwMDQuICAgICAgICAgICAqIAotICoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKLSAqCU1vZHVsZSBOYW1lOglt
ZDUuYwotICoKLSAqCUFic3RyYWN0OgotICoKLSAqCVJldmlzaW9uIEhpc3Rvcnk6Ci0gKglXaG8J
CVdoZW4JCVdoYXQKLSAqCS0tLS0tLS0tCS0tLS0tLS0tLS0JLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQotICoJTmFtZQkJRGF0ZQkJTW9kaWZpY2F0aW9uIGxvZ3MKLSAqCUphbiBMZWUJ
CTIwMDUtMDYtMDEJUmVsZWFzZQotICoJUml0YSAgICAJMTEtMjMtMDQJTW9kaWZ5IE1ENSBhbmQg
U0hBLTEKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNpbmNsdWRlICJydF9jb25maWcuaCINCi0N
Ci0vKioNCi0gKiBtZDVfbWFjOg0KLSAqIEBrZXk6IHBvaW50ZXIgdG8JdGhlCWtleQl1c2VkIGZv
ciBNQUMgZ2VuZXJhdGlvbg0KLSAqIEBrZXlfbGVuOiBsZW5ndGgJb2YgdGhlIGtleSBpbiBieXRl
cw0KLSAqIEBkYXRhOiBwb2ludGVyIHRvIHRoZSBkYXRhIGFyZWEgZm9yIHdoaWNoIHRoZSBNQUMg
aXMJZ2VuZXJhdGVkDQotICogQGRhdGFfbGVuOiBsZW5ndGggb2YJdGhlCWRhdGEgaW4JYnl0ZXMN
Ci0gKiBAbWFjOiBwb2ludGVyIHRvCXRoZQlidWZmZXIgaG9sZGluZyBzcGFjZSBmb3IgdGhlIE1B
QzsgdGhlIGJ1ZmZlciBzaG91bGQNCi0gKiBoYXZlCXNwYWNlIGZvciAxMjgtYml0ICgxNiBieXRl
cykgTUQ1IGhhc2ggdmFsdWUNCi0gKg0KLSAqIG1kNV9tYWMoKSBkZXRlcm1pbmVzCXRoZQltZXNz
YWdlCWF1dGhlbnRpY2F0aW9uIGNvZGUJYnkgdXNpbmcgc2VjdXJlCWhhc2gNCi0gKiBNRDUoa2V5
IHwgZGF0YSB8CWtleSkuDQotICovDQotdm9pZCBtZDVfbWFjKFVDSEFSICprZXksIFVMT05HIGtl
eV9sZW4sIFVDSEFSICpkYXRhLCBVTE9ORyBkYXRhX2xlbiwgVUNIQVIgKm1hYykNCi17DQotCU1E
NV9DVFgJY29udGV4dDsNCi0NCi0JTUQ1SW5pdCgmY29udGV4dCk7DQotCU1ENVVwZGF0ZSgmY29u
dGV4dCwJa2V5LCBrZXlfbGVuKTsNCi0JTUQ1VXBkYXRlKCZjb250ZXh0LAlkYXRhLCBkYXRhX2xl
bik7DQotCU1ENVVwZGF0ZSgmY29udGV4dCwJa2V5LCBrZXlfbGVuKTsNCi0JTUQ1RmluYWwobWFj
LCAmY29udGV4dCk7DQotfQ0KLQ0KLQ0KLS8qKg0KLSAqIGhtYWNfbWQ1Og0KLSAqIEBrZXk6IHBv
aW50ZXIgdG8JdGhlCWtleQl1c2VkIGZvciBNQUMgZ2VuZXJhdGlvbg0KLSAqIEBrZXlfbGVuOiBs
ZW5ndGgJb2YgdGhlIGtleSBpbiBieXRlcw0KLSAqIEBkYXRhOiBwb2ludGVyIHRvIHRoZSBkYXRh
IGFyZWEgZm9yIHdoaWNoIHRoZSBNQUMgaXMJZ2VuZXJhdGVkDQotICogQGRhdGFfbGVuOiBsZW5n
dGggb2YJdGhlCWRhdGEgaW4JYnl0ZXMNCi0gKiBAbWFjOiBwb2ludGVyIHRvCXRoZQlidWZmZXIg
aG9sZGluZyBzcGFjZSBmb3IgdGhlIE1BQzsgdGhlIGJ1ZmZlciBzaG91bGQNCi0gKiBoYXZlCXNw
YWNlIGZvciAxMjgtYml0ICgxNiBieXRlcykgTUQ1IGhhc2ggdmFsdWUNCi0gKg0KLSAqIGhtYWNf
bWQ1KCkgZGV0ZXJtaW5lcyB0aGUgbWVzc2FnZSBhdXRoZW50aWNhdGlvbgljb2RlIHVzaW5nIEhN
QUMtTUQ1Lg0KLSAqIFRoaXMJaW1wbGVtZW50YXRpb24gaXMgYmFzZWQJb24gdGhlIHNhbXBsZSBj
b2RlIHByZXNlbnRlZCBpbglSRkMJMjEwNC4NCi0gKi8NCi12b2lkIGhtYWNfbWQ1KFVDSEFSICpr
ZXksIFVMT05HIGtleV9sZW4sIFVDSEFSICpkYXRhLCBVTE9ORyBkYXRhX2xlbiwgVUNIQVIgKm1h
YykNCi17DQotCU1ENV9DVFgJY29udGV4dDsNCi0JVUNIQVIga19pcGFkWzY1XTsgLyogaW5uZXIJ
cGFkZGluZwktIGtleSBYT1JkIHdpdGgJaXBhZCAqLw0KLQlVQ0hBUiBrX29wYWRbNjVdOyAvKiBv
dXRlcglwYWRkaW5nCS0ga2V5IFhPUmQgd2l0aAlvcGFkICovDQotCVVDSEFSIHRrWzE2XTsNCi0J
aW50CWk7DQotDQotCS8vYXNzZXJ0KGtleSAhPSBOVUxMICYmIGRhdGEgIT0gTlVMTCAmJiBtYWMg
IT0gTlVMTCk7DQotDQotCS8qIGlmIGtleSBpcyBsb25nZXIJdGhhbiA2NAlieXRlcyByZXNldAlp
dCB0byBrZXkgPQlNRDUoa2V5KSAqLw0KLQlpZiAoa2V5X2xlbgk+IDY0KSB7DQotCQlNRDVfQ1RY
CXR0Y29udGV4dDsNCi0NCi0JCU1ENUluaXQoJnR0Y29udGV4dCk7DQotCQlNRDVVcGRhdGUoJnR0
Y29udGV4dCwga2V5LCBrZXlfbGVuKTsNCi0JCU1ENUZpbmFsKHRrLCAmdHRjb250ZXh0KTsNCi0J
CS8va2V5PShQVUNIQVIpdHRjb250ZXh0LmJ1ZjsNCi0JCWtleQk9IHRrOw0KLQkJa2V5X2xlbgk9
IDE2Ow0KLQl9DQotDQotCS8qIHRoZSBITUFDX01ENQl0cmFuc2Zvcm0gbG9va3MJbGlrZToNCi0J
ICoNCi0JICogTUQ1KEsgWE9SIG9wYWQsIE1ENShLIFhPUiBpcGFkLCB0ZXh0KSkNCi0JICoNCi0J
ICogd2hlcmUgSyBpcyBhbiBuIGJ5dGUJa2V5DQotCSAqIGlwYWQJaXMgdGhlIGJ5dGUJMHgzNiBy
ZXBlYXRlZCA2NCB0aW1lcw0KLQkgKiBvcGFkCWlzIHRoZSBieXRlCTB4NWMgcmVwZWF0ZWQgNjQg
dGltZXMNCi0JICogYW5kIHRleHQJaXMgdGhlIGRhdGEJYmVpbmcgcHJvdGVjdGVkCSovDQotDQot
CS8qIHN0YXJ0IG91dCBieQlzdG9yaW5nCWtleQlpbiBwYWRzCSovDQotCU5kaXNaZXJvTWVtb3J5
KGtfaXBhZCwgc2l6ZW9mKGtfaXBhZCkpOw0KLQlOZGlzWmVyb01lbW9yeShrX29wYWQsCXNpemVv
ZihrX29wYWQpKTsNCi0JLy9hc3NlcnQoa2V5X2xlbiA8IHNpemVvZihrX2lwYWQpKTsNCi0JTmRp
c01vdmVNZW1vcnkoa19pcGFkLCBrZXksCWtleV9sZW4pOw0KLQlOZGlzTW92ZU1lbW9yeShrX29w
YWQsIGtleSwJa2V5X2xlbik7DQotDQotCS8qIFhPUiBrZXkgd2l0aAlpcGFkIGFuZCBvcGFkIHZh
bHVlcyAqLw0KLQlmb3IJKGkgPSAwOwlpIDwJNjQ7CWkrKykgew0KLQkJa19pcGFkW2ldIF49IDB4
MzY7DQotCQlrX29wYWRbaV0gXj0gMHg1YzsNCi0JfQ0KLQ0KLQkvKiBwZXJmb3JtIGlubmVyIE1E
NSAqLw0KLQlNRDVJbml0KCZjb250ZXh0KTsJCQkJCSAvKglpbml0IGNvbnRleHQgZm9yIDFzdCBw
YXNzICovDQotCU1ENVVwZGF0ZSgmY29udGV4dCwJa19pcGFkLAk2NCk7CSAvKglzdGFydCB3aXRo
IGlubmVyIHBhZCAqLw0KLQlNRDVVcGRhdGUoJmNvbnRleHQsCWRhdGEsIGRhdGFfbGVuKTsgLyoJ
dGhlbiB0ZXh0IG9mIGRhdGFncmFtICovDQotCU1ENUZpbmFsKG1hYywgJmNvbnRleHQpOwkJCSAv
KglmaW5pc2ggdXAgMXN0IHBhc3MgKi8NCi0NCi0JLyogcGVyZm9ybSBvdXRlciBNRDUgKi8NCi0J
TUQ1SW5pdCgmY29udGV4dCk7CQkJCQkgLyoJaW5pdCBjb250ZXh0IGZvciAybmQgcGFzcyAqLw0K
LQlNRDVVcGRhdGUoJmNvbnRleHQsCWtfb3BhZCwJNjQpOwkgLyoJc3RhcnQgd2l0aCBvdXRlciBw
YWQgKi8NCi0JTUQ1VXBkYXRlKCZjb250ZXh0LAltYWMsIDE2KTsJCSAvKgl0aGVuIHJlc3VsdHMg
b2YJMXN0CWhhc2ggKi8NCi0JTUQ1RmluYWwobWFjLCAmY29udGV4dCk7CQkJIC8qCWZpbmlzaCB1
cCAybmQgcGFzcyAqLw0KLX0NCi0NCi0vLyNpZm5kZWYgV09SRFNfQklHRU5ESUFODQotI2lmCTEN
Ci0jZGVmaW5lCWJ5dGVSZXZlcnNlKGJ1ZiwgbGVuKQkvKiBOb3RoaW5nICovDQotI2Vsc2UNCi12
b2lkIGJ5dGVSZXZlcnNlKHVuc2lnbmVkIGNoYXIgKmJ1ZiwgdW5zaWduZWQgbG9uZ3MpOw0KLQ0K
LS8vI2lmbmRlZiBBU01fTUQ1DQotI2lmCTENCi0vKg0KLSAqIE5vdGU6IHRoaXMgY29kZSBpcyBo
YXJtbGVzcyBvbiBsaXR0bGUtZW5kaWFuCW1hY2hpbmVzLg0KLSAqLw0KLXZvaWQgYnl0ZVJldmVy
c2UodW5zaWduZWQgY2hhciAqYnVmLCB1bnNpZ25lZCBsb25ncykNCi17DQotCXUzMgl0Ow0KLQkJ
REJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiYmJqYW5iYiBieXRlCXJldmVyc2VlXG4iKSk7DQot
DQotCWRvIHsNCi0JCXQgPQkodTMyKSAoKHVuc2lnbmVkKSBidWZbM10gPDwJOCB8CWJ1ZlsyXSkJ
PDwgMTYgfAkoKHVuc2lnbmVkKQlidWZbMV0gPDwgOAl8IGJ1ZlswXSk7DQotCQkqKHUzMiAqKSBi
dWYgPSB0Ow0KLQkJYnVmCSs9IDQ7DQotCX0gd2hpbGUJKC0tbG9uZ3MpOw0KLX0NCi0jZW5kaWYN
Ci0jZW5kaWYNCi0NCi0NCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PSAgTUQ1IGltcGxl
bWVudGF0aW9uID09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLyANCi0vLyBmb3VyIGJhc2Ug
ZnVuY3Rpb25zIGZvciBNRDUgDQotI2RlZmluZSBNRDVfRjEoeCwgeSwgeikgKCgoeCkgJiAoeSkp
IHwgKCh+eCkgJiAoeikpKSANCi0jZGVmaW5lIE1ENV9GMih4LCB5LCB6KSAoKCh4KSAmICh6KSkg
fCAoKHkpICYgKH56KSkpIA0KLSNkZWZpbmUgTUQ1X0YzKHgsIHksIHopICgoeCkgXiAoeSkgXiAo
eikpDQotI2RlZmluZSBNRDVfRjQoeCwgeSwgeikgKCh5KSBeICgoeCkgfCAofnopKSkNCi0jZGVm
aW5lIENZQ0xJQ19MRUZUX1NISUZUKHcsIHMpICgoKHcpIDw8IChzKSkgfCAoKHcpID4+ICgzMi0o
cykpKSkNCi0NCi0jZGVmaW5lCU1ENVN0ZXAoZiwgdywgeCwgeSwJeiwgZGF0YSwgdCwgcykJXA0K
LQkoIHcJKz0gZih4LAl5LCB6KSArCWRhdGEgKyB0LCAgdyA9IChDWUNMSUNfTEVGVF9TSElGVCh3
LCBzKSkgJiAweGZmZmZmZmZmLCB3ICs9CXggKQ0KLQ0KLQ0KLS8qDQotICogIEZ1bmN0aW9uIERl
c2NyaXB0aW9uOg0KLSAqICAgICAgSW5pdGlhdGUgTUQ1IENvbnRleHQgc2F0aXNmaWVkIGluIFJG
QyAxMzIxDQotICoNCi0gKiAgQXJndW1lbnRzOg0KLSAqICAgICAgcEN0eCAgICAgICAgUG9pbnRl
cgl0byBNRDUgY29udGV4dA0KLSAqDQotICogIFJldHVybiBWYWx1ZToNCi0gKiAgICAgIE5vbmUJ
ICAgIA0KLSAqLw0KLVZPSUQgTUQ1SW5pdChNRDVfQ1RYICpwQ3R4KQ0KLXsNCi0gICAgcEN0eC0+
QnVmWzBdPTB4Njc0NTIzMDE7DQotICAgIHBDdHgtPkJ1ZlsxXT0weGVmY2RhYjg5Ow0KLSAgICBw
Q3R4LT5CdWZbMl09MHg5OGJhZGNmZTsNCi0gICAgcEN0eC0+QnVmWzNdPTB4MTAzMjU0NzY7DQot
DQotICAgIHBDdHgtPkxlbkluQml0Q291bnRbMF09MDsNCi0gICAgcEN0eC0+TGVuSW5CaXRDb3Vu
dFsxXT0wOw0KLX0NCi0NCi0NCi0vKg0KLSAqICBGdW5jdGlvbiBEZXNjcmlwdGlvbjoNCi0gKiAg
ICAgIFVwZGF0ZSBNRDUgQ29udGV4dCwgYWxsb3cgb2YgYW4gYXJyYXJ5IG9mIG9jdGV0cyBhcyB0
aGUgbmV4dCBwb3J0aW9uIA0KLSAqICAgICAgb2YgdGhlIG1lc3NhZ2UNCi0gKiAgICAgIA0KLSAq
ICBBcmd1bWVudHM6DQotICogICAgICBwQ3R4CQlQb2ludGVyCXRvIE1ENSBjb250ZXh0DQotICog
CSAgICBwRGF0YSAgICAgICBQb2ludGVyIHRvIGlucHV0IGRhdGENCi0gKiAgICAgIExlbkluQnl0
ZXMgIFRoZSBsZW5ndGggb2YgaW5wdXQgZGF0YSAodW5pdDogYnl0ZSkNCi0gKg0KLSAqICBSZXR1
cm4gVmFsdWU6DQotICogICAgICBOb25lDQotICoNCi0gKiAgTm90ZToNCi0gKiAgICAgIENhbGxl
ZCBhZnRlciBNRDVJbml0IG9yIE1ENVVwZGF0ZShpdHNlbGYpICAgDQotICovDQotVk9JRCBNRDVV
cGRhdGUoTUQ1X0NUWCAqcEN0eCwgVUNIQVIgKnBEYXRhLCBVTE9ORyBMZW5JbkJ5dGVzKQ0KLXsN
Ci0gICAgDQotICAgIFVMT05HIFRmVGltZXM7DQotICAgIFVMT05HIHRlbXA7DQotCXVuc2lnbmVk
IGludCBpOw0KLSAgICANCi0gICAgdGVtcCA9IHBDdHgtPkxlbkluQml0Q291bnRbMF07DQotDQot
ICAgIHBDdHgtPkxlbkluQml0Q291bnRbMF0gPSAoVUxPTkcpIChwQ3R4LT5MZW5JbkJpdENvdW50
WzBdICsgKExlbkluQnl0ZXMgPDwgMykpOw0KLSANCi0gICAgaWYgKHBDdHgtPkxlbkluQml0Q291
bnRbMF0gPCB0ZW1wKQ0KLSAgICAgICAgcEN0eC0+TGVuSW5CaXRDb3VudFsxXSsrOyAgIC8vY2Fy
cnkgaW4NCi0NCi0gICAgcEN0eC0+TGVuSW5CaXRDb3VudFsxXSArPSBMZW5JbkJ5dGVzID4+IDI5
Ow0KLQ0KLSAgICAvLyBtb2QgNjQgYnl0ZXMNCi0gICAgdGVtcCA9ICh0ZW1wID4+IDMpICYgMHgz
ZjsgIA0KLSAgICANCi0gICAgLy8gcHJvY2VzcyBsYWNrcyBvZiA2NC1ieXRlIGRhdGEgDQotICAg
IGlmICh0ZW1wKSANCi0gICAgew0KLSAgICAgICAgVUNIQVIgKnBBZHMgPSAoVUNIQVIgKikgcEN0
eC0+SW5wdXQgKyB0ZW1wOw0KLSAgICAgICAgDQotICAgICAgICBpZiAoKHRlbXArTGVuSW5CeXRl
cykgPCA2NCkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICBOZGlzTW92ZU1lbW9yeShwQWRzLCAo
VUNIQVIgKilwRGF0YSwgTGVuSW5CeXRlcyk7ICAgDQotICAgICAgICAgICAgcmV0dXJuOw0KLSAg
ICAgICAgfQ0KLSAgICAgICAgDQotICAgICAgICBOZGlzTW92ZU1lbW9yeShwQWRzLCAoVUNIQVIg
KilwRGF0YSwgNjQtdGVtcCk7ICAgICAgICAgICAgICAgDQotICAgICAgICBieXRlUmV2ZXJzZShw
Q3R4LT5JbnB1dCwgMTYpOw0KLSAgICAgICAgTUQ1VHJhbnNmb3JtKHBDdHgtPkJ1ZiwgKFVMT05H
ICopcEN0eC0+SW5wdXQpOw0KLQ0KLSAgICAgICAgcERhdGEgKz0gNjQtdGVtcDsNCi0gICAgICAg
IExlbkluQnl0ZXMgLT0gNjQtdGVtcDsgDQotICAgIH0gLy8gZW5kIG9mIGlmICh0ZW1wKQ0KLSAg
ICANCi0gICAgIA0KLSAgICBUZlRpbWVzID0gKExlbkluQnl0ZXMgPj4gNik7DQotDQotICAgIGZv
ciAoaT1UZlRpbWVzOyBpPjA7IGktLSkNCi0gICAgew0KLSAgICAgICAgTmRpc01vdmVNZW1vcnko
cEN0eC0+SW5wdXQsIChVQ0hBUiAqKXBEYXRhLCA2NCk7DQotICAgICAgICBieXRlUmV2ZXJzZShw
Q3R4LT5JbnB1dCwgMTYpOw0KLSAgICAgICAgTUQ1VHJhbnNmb3JtKHBDdHgtPkJ1ZiwgKFVMT05H
ICopcEN0eC0+SW5wdXQpOw0KLSAgICAgICAgcERhdGEgKz0gNjQ7DQotICAgICAgICBMZW5JbkJ5
dGVzIC09IDY0Ow0KLSAgICB9IC8vIGVuZCBvZiBmb3INCi0NCi0gICAgLy8gYnVmZmVyaW5nIGxh
Y2tzIG9mIDY0LWJ5dGUgZGF0YQ0KLSAgICBpZihMZW5JbkJ5dGVzKQ0KLSAgICAgICAgTmRpc01v
dmVNZW1vcnkocEN0eC0+SW5wdXQsIChVQ0hBUiAqKXBEYXRhLCBMZW5JbkJ5dGVzKTsgICANCi0g
ICANCi19DQotDQotDQotLyoNCi0gKiAgRnVuY3Rpb24gRGVzY3JpcHRpb246DQotICogICAgICBB
cHBlbmQgcGFkZGluZyBiaXRzIGFuZCBsZW5ndGggb2Ygb3JpZ2luYWwgbWVzc2FnZSBpbiB0aGUg
dGFpbCANCi0gKiAgICAgIFRoZSBtZXNzYWdlIGRpZ2VzdCBoYXMgdG8gYmUgY29tcGxldGVkIGlu
IHRoZSBlbmQgIA0KLSAqICANCi0gKiAgQXJndW1lbnRzOg0KLSAqICAgICAgRGlnZXN0CQlPdXRw
dXQgb2YgRGlnZXN0LU1lc3NhZ2UgZm9yIE1ENQ0KLSAqICAJcEN0eCAgICAgICAgUG9pbnRlcgl0
byBNRDUgY29udGV4dA0KLSAqIAkNCi0gKiAgUmV0dXJuIFZhbHVlOg0KLSAqICAgICAgTm9uZQ0K
LSAqICANCi0gKiAgTm90ZToNCi0gKiAgICAgIENhbGxlZCBhZnRlciBNRDVVcGRhdGUgIA0KLSAq
Lw0KLVZPSUQgTUQ1RmluYWwoVUNIQVIgRGlnZXN0WzE2XSwgTUQ1X0NUWCAqcEN0eCkNCi17DQot
ICAgIFVDSEFSIFJlbWFpbmRlcjsNCi0gICAgVUNIQVIgUGFkTGVuSW5CeXRlczsNCi0gICAgVUNI
QVIgKnBBcHBlbmQ9MDsNCi0gICAgdW5zaWduZWQgaW50IGk7DQotICAgIA0KLSAgICBSZW1haW5k
ZXIgPSAoVUNIQVIpKChwQ3R4LT5MZW5JbkJpdENvdW50WzBdID4+IDMpICYgMHgzZik7DQotDQot
ICAgIFBhZExlbkluQnl0ZXMgPSAoUmVtYWluZGVyIDwgNTYpID8gKDU2LVJlbWFpbmRlcikgOiAo
MTIwLVJlbWFpbmRlcik7DQotICAgIA0KLSAgICBwQXBwZW5kID0gKFVDSEFSICopcEN0eC0+SW5w
dXQgKyBSZW1haW5kZXI7DQotDQotICAgIC8vIHBhZGRpbmcgYml0cyB3aXRob3V0IGNyb3NzaW5n
IGJsb2NrKDY0LWJ5dGUgYmFzZWQpIGJvdW5kYXJ5DQotICAgIGlmIChSZW1haW5kZXIgPCA1NikN
Ci0gICAgew0KLSAgICAgICAgKnBBcHBlbmQgPSAweDgwOw0KLSAgICAgICAgUGFkTGVuSW5CeXRl
cyAtLTsNCi0gICAgICAgIA0KLSAgICAgICAgTmRpc1plcm9NZW1vcnkoKFVDSEFSICopcEN0eC0+
SW5wdXQgKyBSZW1haW5kZXIrMSwgUGFkTGVuSW5CeXRlcyk7IA0KLQkJDQotCQkvLyBhZGQgZGF0
YS1sZW5ndGggZmllbGQsIGZyb20gbG93IHRvIGhpZ2gNCi0gICAgICAgCWZvciAoaT0wOyBpPDQ7
IGkrKykNCi0gICAgICAgIHsNCi0gICAgICAgIAlwQ3R4LT5JbnB1dFs1NitpXSA9IChVQ0hBUiko
KHBDdHgtPkxlbkluQml0Q291bnRbMF0gPj4gKGkgPDwgMykpICYgMHhmZik7DQotICAgICAgICAJ
cEN0eC0+SW5wdXRbNjAraV0gPSAoVUNIQVIpKChwQ3R4LT5MZW5JbkJpdENvdW50WzFdID4+IChp
IDw8IDMpKSAmIDB4ZmYpOw0KLSAgICAgIAl9DQotICAgICAgCQ0KLSAgICAgICAgYnl0ZVJldmVy
c2UocEN0eC0+SW5wdXQsIDE2KTsNCi0gICAgICAgIE1ENVRyYW5zZm9ybShwQ3R4LT5CdWYsIChV
TE9ORyAqKXBDdHgtPklucHV0KTsNCi0gICAgfSAvLyBlbmQgb2YgaWYNCi0gICAgDQotICAgIC8v
IHBhZGRpbmcgYml0cyB3aXRoIGNyb3NzaW5nIGJsb2NrKDY0LWJ5dGUgYmFzZWQpIGJvdW5kYXJ5
DQotICAgIGVsc2UNCi0gICAgew0KLSAgICAgICAgLy8gdGhlIGZpcnN0IGJsb2NrID09PQ0KLSAg
ICAgICAgKnBBcHBlbmQgPSAweDgwOw0KLSAgICAgICAgUGFkTGVuSW5CeXRlcyAtLTsNCi0gICAg
ICAgDQotICAgICAgICBOZGlzWmVyb01lbW9yeSgoVUNIQVIgKilwQ3R4LT5JbnB1dCArIFJlbWFp
bmRlcisxLCAoNjQtUmVtYWluZGVyLTEpKTsgDQotICAgICAgICBQYWRMZW5JbkJ5dGVzIC09ICg2
NCAtIFJlbWFpbmRlciAtIDEpOw0KLSAgICAgICAgDQotICAgICAgICBieXRlUmV2ZXJzZShwQ3R4
LT5JbnB1dCwgMTYpOw0KLSAgICAgICAgTUQ1VHJhbnNmb3JtKHBDdHgtPkJ1ZiwgKFVMT05HICop
cEN0eC0+SW5wdXQpOw0KLSAgICAgICAgDQotDQotICAgICAgICAvLyB0aGUgc2Vjb25kIGJsb2Nr
ID09PQ0KLSAgICAgICAgTmRpc1plcm9NZW1vcnkoKFVDSEFSICopcEN0eC0+SW5wdXQsIFBhZExl
bkluQnl0ZXMpOyANCi0NCi0gICAgICAgIC8vIGFkZCBkYXRhLWxlbmd0aCBmaWVsZA0KLSAgICAg
ICAgZm9yIChpPTA7IGk8NDsgaSsrKQ0KLSAgICAgICAgew0KLSAgICAgICAgCXBDdHgtPklucHV0
WzU2K2ldID0gKFVDSEFSKSgocEN0eC0+TGVuSW5CaXRDb3VudFswXSA+PiAoaSA8PCAzKSkgJiAw
eGZmKTsNCi0gICAgICAgIAlwQ3R4LT5JbnB1dFs2MCtpXSA9IChVQ0hBUikoKHBDdHgtPkxlbklu
Qml0Q291bnRbMV0gPj4gKGkgPDwgMykpICYgMHhmZik7DQotICAgICAgCX0NCi0NCi0gICAgICAg
IGJ5dGVSZXZlcnNlKHBDdHgtPklucHV0LCAxNik7DQotICAgICAgICBNRDVUcmFuc2Zvcm0ocEN0
eC0+QnVmLCAoVUxPTkcgKilwQ3R4LT5JbnB1dCk7DQotICAgIH0gLy8gZW5kIG9mIGVsc2UNCi0N
Ci0NCi0gICAgTmRpc01vdmVNZW1vcnkoKFVDSEFSICopRGlnZXN0LCAoVUxPTkcgKilwQ3R4LT5C
dWYsIDE2KTsgLy8gb3V0cHV0DQotICAgIGJ5dGVSZXZlcnNlKChVQ0hBUiAqKURpZ2VzdCwgNCk7
DQotICAgIE5kaXNaZXJvTWVtb3J5KHBDdHgsIHNpemVvZihwQ3R4KSk7IC8vIG1lbW9yeSBmcmVl
IA0KLX0NCi0NCi0NCi0vKg0KLSAqICBGdW5jdGlvbiBEZXNjcmlwdGlvbjoNCi0gKiAgICAgIFRo
ZSBjZW50cmFsIGFsZ29yaXRobSBvZiBNRDUsIGNvbnNpc3RzIG9mIGZvdXIgcm91bmRzIGFuZCBz
aXh0ZWVuIA0KLSAqICAJc3RlcHMgcGVyIHJvdW5kDQotICogDQotICogIEFyZ3VtZW50czoNCi0g
KiAgICAgIEJ1ZiAgICAgQnVmZmVycyBvZiBmb3VyIHN0YXRlcyAob3V0cHV0OiAxNiBieXRlcykJ
CQ0KLSAqIAkgICAgTWVzICAgICBJbnB1dCBkYXRhIChpbnB1dDogNjQgYnl0ZXMpIA0KLSAqICAN
Ci0gKiAgUmV0dXJuIFZhbHVlOg0KLSAqICAgICAgTm9uZQ0KLSAqICAJDQotICogIE5vdGU6DQot
ICogICAgICBDYWxsZWQgYnkgTUQ1VXBkYXRlIG9yIE1ENUZpbmFsDQotICovDQotVk9JRCBNRDVU
cmFuc2Zvcm0oVUxPTkcgQnVmWzRdLCBVTE9ORyBNZXNbMTZdKQ0KLXsgIA0KLSAgICBVTE9ORyBS
ZWdbNF0sIFRlbXA7IA0KLQl1bnNpZ25lZCBpbnQgaTsNCi0gICAgDQotICAgIHN0YXRpYyBVQ0hB
UiBMU2hpZnRWYWxbMTZdID0gDQotICAgIHsgCQ0KLSAgICAgICAgNywgMTIsIDE3LCAyMiwgCQ0K
LQkJNSwgOSAsIDE0LCAyMCwgDQotCQk0LCAxMSwgMTYsIDIzLCANCi0gCQk2LCAxMCwgMTUsIDIx
LCANCi0gCX07DQotDQotCQ0KLQkvLyBbZXF1YWwgdG8gNDI5NDk2NzI5NiphYnMoc2luKGluZGV4
KSldDQotICAgIHN0YXRpYyBVTE9ORyBNRDVUYWJsZVs2NF0gPSANCi0JeyANCi0JCTB4ZDc2YWE0
NzgsCTB4ZThjN2I3NTYsCTB4MjQyMDcwZGIsCTB4YzFiZGNlZWUsCQ0KLQkJMHhmNTdjMGZhZiwJ
MHg0Nzg3YzYyYSwJMHhhODMwNDYxMywgMHhmZDQ2OTUwMSwJDQotCQkweDY5ODA5OGQ4LAkweDhi
NDRmN2FmLAkweGZmZmY1YmIxLAkweDg5NWNkN2JlLA0KLSAgICAJMHg2YjkwMTEyMiwJMHhmZDk4
NzE5MywJMHhhNjc5NDM4ZSwJMHg0OWI0MDgyMSwNCi0gICAgCQ0KLSAgICAJMHhmNjFlMjU2MiwJ
MHhjMDQwYjM0MCwJMHgyNjVlNWE1MSwJMHhlOWI2YzdhYSwNCi0gICAgCTB4ZDYyZjEwNWQsCTB4
MDI0NDE0NTMsCTB4ZDhhMWU2ODEsCTB4ZTdkM2ZiYzgsDQotICAgIAkweDIxZTFjZGU2LAkweGMz
MzcwN2Q2LAkweGY0ZDUwZDg3LAkweDQ1NWExNGVkLA0KLSAgICAJMHhhOWUzZTkwNSwJMHhmY2Vm
YTNmOCwJMHg2NzZmMDJkOSwJMHg4ZDJhNGM4YSwNCi0gICAgCSAgICAgICAgICAgDQotICAgIAkw
eGZmZmEzOTQyLAkweDg3NzFmNjgxLAkweDZkOWQ2MTIyLAkweGZkZTUzODBjLA0KLSAgICAJMHhh
NGJlZWE0NCwJMHg0YmRlY2ZhOSwJMHhmNmJiNGI2MCwJMHhiZWJmYmM3MCwNCi0gICAgCTB4Mjg5
YjdlYzYsCTB4ZWFhMTI3ZmEsCTB4ZDRlZjMwODUsCTB4MDQ4ODFkMDUsDQotICAgIAkweGQ5ZDRk
MDM5LAkweGU2ZGI5OWU1LAkweDFmYTI3Y2Y4LAkweGM0YWM1NjY1LA0KLSAgICAJICAgICAgICAg
ICANCi0gICAgCTB4ZjQyOTIyNDQsCTB4NDMyYWZmOTcsCTB4YWI5NDIzYTcsCTB4ZmM5M2EwMzks
DQotICAgCQkweDY1NWI1OWMzLAkweDhmMGNjYzkyLAkweGZmZWZmNDdkLAkweDg1ODQ1ZGQxLA0K
LSAgICAJMHg2ZmE4N2U0ZiwJMHhmZTJjZTZlMCwJMHhhMzAxNDMxNCwJMHg0ZTA4MTFhMSwNCi0g
ICAgCTB4Zjc1MzdlODIsCTB4YmQzYWYyMzUsCTB4MmFkN2QyYmIsCTB4ZWI4NmQzOTENCi0JfTsN
Ci0gDQotCQkJCQ0KLSAgICBmb3IgKGk9MDsgaTw0OyBpKyspDQotICAgICAgICBSZWdbaV09QnVm
W2ldOw0KLQkJCQ0KLQkJCQkNCi0gICAgLy8gNjQgc3RlcHMgaW4gTUQ1IGFsZ29yaXRobQ0KLSAg
ICBmb3IgKGk9MDsgaTwxNjsgaSsrKSAgICAgICAgICAgICAgICAgICAgDQotICAgIHsNCi0gICAg
ICAgIE1ENVN0ZXAoTUQ1X0YxLCBSZWdbMF0sIFJlZ1sxXSwgUmVnWzJdLCBSZWdbM10sIE1lc1tp
XSwgICAgICAgICAgICAgICANCi0gICAgICAgICAgICAgICAgTUQ1VGFibGVbaV0sIExTaGlmdFZh
bFtpICYgMHgzXSk7DQotDQotICAgICAgICAvLyBvbmUtd29yZCByaWdodCBzaGlmdA0KLSAgICAg
ICAgVGVtcCAgID0gUmVnWzNdOyANCi0gICAgICAgIFJlZ1szXSA9IFJlZ1syXTsNCi0gICAgICAg
IFJlZ1syXSA9IFJlZ1sxXTsNCi0gICAgICAgIFJlZ1sxXSA9IFJlZ1swXTsNCi0gICAgICAgIFJl
Z1swXSA9IFRlbXA7ICAgICAgICAgICAgDQotICAgIH0NCi0gICAgZm9yIChpPTE2OyBpPDMyOyBp
KyspICAgICAgICAgICAgICAgICAgICANCi0gICAgew0KLSAgICAgICAgTUQ1U3RlcChNRDVfRjIs
IFJlZ1swXSwgUmVnWzFdLCBSZWdbMl0sIFJlZ1szXSwgTWVzWyg1KihpICYgMHhmKSsxKSAmIDB4
Zl0sIA0KLSAgICAgICAgICAgICAgICBNRDVUYWJsZVtpXSwgTFNoaWZ0VmFsWygweDEgPDwgMikr
KGkgJiAweDMpXSk7ICAgIA0KLQ0KLSAgICAgICAgLy8gb25lLXdvcmQgcmlnaHQgc2hpZnQNCi0g
ICAgICAgIFRlbXAgICA9IFJlZ1szXTsgDQotICAgICAgICBSZWdbM10gPSBSZWdbMl07DQotICAg
ICAgICBSZWdbMl0gPSBSZWdbMV07DQotICAgICAgICBSZWdbMV0gPSBSZWdbMF07DQotICAgICAg
ICBSZWdbMF0gPSBUZW1wOyAgICAgICAgICAgDQotICAgIH0NCi0gICAgZm9yIChpPTMyOyBpPDQ4
OyBpKyspICAgICAgICAgICAgICAgICAgICANCi0gICAgew0KLSAgICAgICAgTUQ1U3RlcChNRDVf
RjMsIFJlZ1swXSwgUmVnWzFdLCBSZWdbMl0sIFJlZ1szXSwgTWVzWygzKihpICYgMHhmKSs1KSAm
IDB4Zl0sIA0KLSAgICAgICAgICAgICAgICBNRDVUYWJsZVtpXSwgTFNoaWZ0VmFsWygweDEgPDwg
MykrKGkgJiAweDMpXSk7ICAgICAgICANCi0NCi0gICAgICAgIC8vIG9uZS13b3JkIHJpZ2h0IHNo
aWZ0DQotICAgICAgICBUZW1wICAgPSBSZWdbM107IA0KLSAgICAgICAgUmVnWzNdID0gUmVnWzJd
Ow0KLSAgICAgICAgUmVnWzJdID0gUmVnWzFdOw0KLSAgICAgICAgUmVnWzFdID0gUmVnWzBdOw0K
LSAgICAgICAgUmVnWzBdID0gVGVtcDsgICAgICAgICAgDQotICAgIH0NCi0gICAgZm9yIChpPTQ4
OyBpPDY0OyBpKyspICAgICAgICAgICAgICAgICAgICANCi0gICAgew0KLSAgICAgICAgTUQ1U3Rl
cChNRDVfRjQsIFJlZ1swXSwgUmVnWzFdLCBSZWdbMl0sIFJlZ1szXSwgTWVzWyg3KihpICYgMHhm
KSkgJiAweGZdLCANCi0gICAgICAgICAgICAgICAgTUQ1VGFibGVbaV0sIExTaGlmdFZhbFsoMHgz
IDw8IDIpKyhpICYgMHgzKV0pOyAgIA0KLQ0KLSAgICAgICAgLy8gb25lLXdvcmQgcmlnaHQgc2hp
ZnQNCi0gICAgICAgIFRlbXAgICA9IFJlZ1szXTsgDQotICAgICAgICBSZWdbM10gPSBSZWdbMl07
DQotICAgICAgICBSZWdbMl0gPSBSZWdbMV07DQotICAgICAgICBSZWdbMV0gPSBSZWdbMF07DQot
ICAgICAgICBSZWdbMF0gPSBUZW1wOyAgICAgICAgICAgDQotICAgIH0NCi0gICAgDQotICAgICAg
DQotICAgIC8vICh0ZW1wb3Jhcnkpb3V0cHV0DQotICAgIGZvciAoaT0wOyBpPDQ7IGkrKykNCi0g
ICAgICAgIEJ1ZltpXSArPSBSZWdbaV07DQotDQotfQ0KLQ0KLQ0KLQ0KLS8qID09PT09PT09PT09
PT09PT09PT09PT09PT0gIFNIQS0xIGltcGxlbWVudGF0aW9uID09PT09PT09PT09PT09PT09PT09
PT09PT09ICovDQotLy8gZm91ciBiYXNlIGZ1bmN0aW9ucyBmb3IgU0hBLTENCi0jZGVmaW5lIFNI
QTFfRjEoYiwgYywgZCkgICAgKCgoYikgJiAoYykpIHwgKCh+YikgJiAoZCkpKSAgICAgICAgIA0K
LSNkZWZpbmUgU0hBMV9GMihiLCBjLCBkKSAgICAoKGIpIF4gKGMpIF4gKGQpKSANCi0jZGVmaW5l
IFNIQTFfRjMoYiwgYywgZCkgICAgKCgoYikgJiAoYykpIHwgKChiKSAmIChkKSkgfCAoKGMpICYg
KGQpKSkNCi0NCi0NCi0jZGVmaW5lIFNIQTFTdGVwKGYsIGEsIGIsIGMsIGQsIGUsIHcsIGspICAg
IFwNCi0gICAgKCBlCSs9ICggZihiLCBjLCBkKSArIHcgKyBrICsgQ1lDTElDX0xFRlRfU0hJRlQo
YSwgNSkpICYgMHhmZmZmZmZmZiwgXA0KLSAgICAgIGIgPSBDWUNMSUNfTEVGVF9TSElGVChiLCAz
MCkgKQ0KLQ0KLS8vSW5pdGlhdGUgU0hBLTEgQ29udGV4dCBzYXRpc2ZpZWQgaW4gUkZDIDMxNzQg
IA0KLVZPSUQgU0hBSW5pdChTSEFfQ1RYICpwQ3R4KQ0KLXsNCi0gICAgcEN0eC0+QnVmWzBdPTB4
Njc0NTIzMDE7DQotICAgIHBDdHgtPkJ1ZlsxXT0weGVmY2RhYjg5Ow0KLSAgICBwQ3R4LT5CdWZb
Ml09MHg5OGJhZGNmZTsNCi0gICAgcEN0eC0+QnVmWzNdPTB4MTAzMjU0NzY7DQotICAgIHBDdHgt
PkJ1Zls0XT0weGMzZDJlMWYwOw0KLSAgICANCi0gICAgcEN0eC0+TGVuSW5CaXRDb3VudFswXT0w
Ow0KLSAgICBwQ3R4LT5MZW5JbkJpdENvdW50WzFdPTA7DQotfQ0KLQ0KLS8qDQotICogIEZ1bmN0
aW9uIERlc2NyaXB0aW9uOg0KLSAqICAgICAgVXBkYXRlIFNIQS0xIENvbnRleHQsIGFsbG93IG9m
IGFuIGFycmFyeSBvZiBvY3RldHMgYXMgdGhlIG5leHQNCi0gKiAgICAgIHBvcnRpb24gb2YgdGhl
IG1lc3NhZ2UNCi0gKiAgICAgIA0KLSAqICBBcmd1bWVudHM6DQotICogICAgICBwQ3R4CQlQb2lu
dGVyCXRvIFNIQS0xIGNvbnRleHQNCi0gKiAJICAgIHBEYXRhICAgICAgIFBvaW50ZXIgdG8gaW5w
dXQgZGF0YQ0KLSAqICAgICAgTGVuSW5CeXRlcyAgVGhlIGxlbmd0aCBvZiBpbnB1dCBkYXRhICh1
bml0OiBieXRlKQ0KLSAqDQotICogIFJldHVybiBWYWx1ZToNCi0gKiAgICAgIGVycm9yICAgICAg
IGluZGljYXRlIG1vcmUgdGhhbiBwb3coMiw2NCkgYml0cyBvZiBkYXRhICANCi0gKg0KLSAqICBO
b3RlOg0KLSAqICAgICAgQ2FsbGVkIGFmdGVyIFNIQUluaXQgb3IgU0hBVXBkYXRlKGl0c2VsZikg
ICANCi0gKi8NCi1VQ0hBUiBTSEFVcGRhdGUoU0hBX0NUWCAqcEN0eCwgVUNIQVIgKnBEYXRhLCBV
TE9ORyBMZW5JbkJ5dGVzKQ0KLXsNCi0gICAgVUxPTkcgVGZUaW1lczsNCi0gICAgVUxPTkcgdGVt
cDEsdGVtcDI7DQotCXVuc2lnbmVkIGludCBpOw0KLQlVQ0hBUiBlcnI9MTsNCi0gICAgDQotICAg
IHRlbXAxID0gcEN0eC0+TGVuSW5CaXRDb3VudFswXTsNCi0gICAgdGVtcDIgPSBwQ3R4LT5MZW5J
bkJpdENvdW50WzFdOw0KLQ0KLSAgICBwQ3R4LT5MZW5JbkJpdENvdW50WzBdID0gKFVMT05HKSAo
cEN0eC0+TGVuSW5CaXRDb3VudFswXSArIChMZW5JbkJ5dGVzIDw8IDMpKTsNCi0gICAgaWYgKHBD
dHgtPkxlbkluQml0Q291bnRbMF0gPCB0ZW1wMSkNCi0gICAgICAgIHBDdHgtPkxlbkluQml0Q291
bnRbMV0rKzsgICAvL2NhcnJ5IGluDQotDQotDQotICAgIHBDdHgtPkxlbkluQml0Q291bnRbMV0g
PSAoVUxPTkcpIChwQ3R4LT5MZW5JbkJpdENvdW50WzFdICsoTGVuSW5CeXRlcyA+PiAyOSkpOw0K
LSAgICBpZiAocEN0eC0+TGVuSW5CaXRDb3VudFsxXSA8IHRlbXAyKQ0KLSAgICAgICAgcmV0dXJu
IChlcnIpOyAgIC8vY2hlY2sgdG90YWwgbGVuZ3RoIG9mIG9yaWdpbmFsIGRhdGENCi0gDQotDQot
ICAgIC8vIG1vZCA2NCBieXRlcw0KLSAgICB0ZW1wMSA9ICh0ZW1wMSA+PiAzKSAmIDB4M2Y7ICAN
Ci0gICAgDQotICAgIC8vIHByb2Nlc3MgbGFja3Mgb2YgNjQtYnl0ZSBkYXRhIA0KLSAgICBpZiAo
dGVtcDEpIA0KLSAgICB7DQotICAgICAgICBVQ0hBUiAqcEFkcyA9IChVQ0hBUiAqKSBwQ3R4LT5J
bnB1dCArIHRlbXAxOw0KLSAgICAgICAgDQotICAgICAgICBpZiAoKHRlbXAxK0xlbkluQnl0ZXMp
IDwgNjQpDQotICAgICAgICB7DQotICAgICAgICAgICAgTmRpc01vdmVNZW1vcnkocEFkcywgKFVD
SEFSICopcERhdGEsIExlbkluQnl0ZXMpOyAgIA0KLSAgICAgICAgICAgIHJldHVybiAoMCk7DQot
ICAgICAgICB9DQotICAgICAgICANCi0gICAgICAgIE5kaXNNb3ZlTWVtb3J5KHBBZHMsIChVQ0hB
UiAqKXBEYXRhLCA2NC10ZW1wMSk7ICAgICAgICAgICAgICANCi0gICAgICAgIA0KLSAgICAgICAg
TmRpc1plcm9NZW1vcnkoKFVDSEFSICopcEN0eC0+SW5wdXQgKyA2NCwgMTYpOw0KLSAgICAgICAg
U0hBVHJhbnNmb3JtKHBDdHgtPkJ1ZiwgKFVMT05HICopcEN0eC0+SW5wdXQpOw0KLQ0KLSAgICAg
ICAgcERhdGEgKz0gNjQtdGVtcDE7DQotICAgICAgICBMZW5JbkJ5dGVzIC09IDY0LXRlbXAxOyAN
Ci0gICAgfSAvLyBlbmQgb2YgaWYgKHRlbXAxKQ0KLSAgICANCi0gICAgIA0KLSAgICBUZlRpbWVz
ID0gKExlbkluQnl0ZXMgPj4gNik7DQotDQotICAgIGZvciAoaT1UZlRpbWVzOyBpPjA7IGktLSkN
Ci0gICAgew0KLSAgICAgICAgTmRpc01vdmVNZW1vcnkocEN0eC0+SW5wdXQsIChVQ0hBUiAqKXBE
YXRhLCA2NCk7DQotICAgICAgICANCi0gICAgICAgIE5kaXNaZXJvTWVtb3J5KChVQ0hBUiAqKXBD
dHgtPklucHV0ICsgNjQsIDE2KTsNCi0gICAgICAgIFNIQVRyYW5zZm9ybShwQ3R4LT5CdWYsIChV
TE9ORyAqKXBDdHgtPklucHV0KTsNCi0gICAgICAgIHBEYXRhICs9IDY0Ow0KLSAgICAgICAgTGVu
SW5CeXRlcyAtPSA2NDsNCi0gICAgfSAvLyBlbmQgb2YgZm9yDQotDQotICAgIC8vIGJ1ZmZlcmlu
ZyBsYWNrcyBvZiA2NC1ieXRlIGRhdGENCi0gICAgaWYoTGVuSW5CeXRlcykNCi0gICAgICAgIE5k
aXNNb3ZlTWVtb3J5KHBDdHgtPklucHV0LCAoVUNIQVIgKilwRGF0YSwgTGVuSW5CeXRlcyk7DQot
DQotCXJldHVybiAoMCk7DQotDQotfQ0KLQ0KLS8vIEFwcGVuZCBwYWRkaW5nIGJpdHMgYW5kIGxl
bmd0aCBvZiBvcmlnaW5hbCBtZXNzYWdlIGluIHRoZSB0YWlsIA0KLS8vIFRoZSBtZXNzYWdlIGRp
Z2VzdCBoYXMgdG8gYmUgY29tcGxldGVkIGluIHRoZSBlbmQgDQotVk9JRCBTSEFGaW5hbChTSEFf
Q1RYICpwQ3R4LCBVQ0hBUiBEaWdlc3RbMjBdKQ0KLXsNCi0gICAgVUNIQVIgUmVtYWluZGVyOw0K
LSAgICBVQ0hBUiBQYWRMZW5JbkJ5dGVzOw0KLSAgICBVQ0hBUiAqcEFwcGVuZD0wOw0KLSAgICB1
bnNpZ25lZCBpbnQgaTsNCi0NCi0gICAgUmVtYWluZGVyID0gKFVDSEFSKSgocEN0eC0+TGVuSW5C
aXRDb3VudFswXSA+PiAzKSAmIDB4M2YpOw0KLQ0KLSAgICBwQXBwZW5kID0gKFVDSEFSICopcEN0
eC0+SW5wdXQgKyBSZW1haW5kZXI7DQotDQotICAgIFBhZExlbkluQnl0ZXMgPSAoUmVtYWluZGVy
IDwgNTYpID8gKDU2LVJlbWFpbmRlcikgOiAoMTIwLVJlbWFpbmRlcik7DQotICAgIA0KLSAgICAv
LyBwYWRkaW5nIGJpdHMgd2l0aG91dCBjcm9zc2luZyBibG9jayg2NC1ieXRlIGJhc2VkKSBib3Vu
ZGFyeQ0KLSAgICBpZiAoUmVtYWluZGVyIDwgNTYpDQotICAgIHsgICAgICAgDQotICAgICAgICAq
cEFwcGVuZCA9IDB4ODA7DQotICAgICAgICBQYWRMZW5JbkJ5dGVzIC0tOw0KLSAgICAgICAgDQot
ICAgICAgICBOZGlzWmVyb01lbW9yeSgoVUNIQVIgKilwQ3R4LT5JbnB1dCArIFJlbWFpbmRlcisx
LCBQYWRMZW5JbkJ5dGVzKTsgDQotCQkgDQotCQkvLyBhZGQgZGF0YS1sZW5ndGggZmllbGQsIGZy
b20gaGlnaCB0byBsb3cNCi0gICAgICAgIGZvciAoaT0wOyBpPDQ7IGkrKykNCi0gICAgICAgIHsN
Ci0gICAgICAgIAlwQ3R4LT5JbnB1dFs1NitpXSA9IChVQ0hBUikoKHBDdHgtPkxlbkluQml0Q291
bnRbMV0gPj4gKCgzLWkpIDw8IDMpKSAmIDB4ZmYpOw0KLSAgICAgICAgCXBDdHgtPklucHV0WzYw
K2ldID0gKFVDSEFSKSgocEN0eC0+TGVuSW5CaXRDb3VudFswXSA+PiAoKDMtaSkgPDwgMykpICYg
MHhmZik7DQotICAgICAgCX0NCi0gICAgICAJDQotICAgICAgICBOZGlzWmVyb01lbW9yeSgoVUNI
QVIgKilwQ3R4LT5JbnB1dCArIDY0LCAxNCk7DQotICAgICAgICBTSEFUcmFuc2Zvcm0ocEN0eC0+
QnVmLCAoVUxPTkcgKilwQ3R4LT5JbnB1dCk7DQotICAgIH0gLy8gZW5kIG9mIGlmDQotICAgIA0K
LSAgICAvLyBwYWRkaW5nIGJpdHMgd2l0aCBjcm9zc2luZyBibG9jayg2NC1ieXRlIGJhc2VkKSBi
b3VuZGFyeQ0KLSAgICBlbHNlDQotICAgIHsNCi0gICAgICAgIC8vIHRoZSBmaXJzdCBibG9jayA9
PT0NCi0gICAgICAgICpwQXBwZW5kID0gMHg4MDsNCi0gICAgICAgIFBhZExlbkluQnl0ZXMgLS07
DQotICAgICAgICANCi0gICAgICAgIE5kaXNaZXJvTWVtb3J5KChVQ0hBUiAqKXBDdHgtPklucHV0
ICsgUmVtYWluZGVyKzEsICg2NC1SZW1haW5kZXItMSkpOyANCi0gICAgICAgIFBhZExlbkluQnl0
ZXMgLT0gKDY0IC0gUmVtYWluZGVyIC0gMSk7DQotICAgICAgICANCi0gICAgICAgIE5kaXNaZXJv
TWVtb3J5KChVQ0hBUiAqKXBDdHgtPklucHV0ICsgNjQsIDE2KTsNCi0gICAgICAgIFNIQVRyYW5z
Zm9ybShwQ3R4LT5CdWYsIChVTE9ORyAqKXBDdHgtPklucHV0KTsNCi0NCi0NCi0gICAgICAgIC8v
IHRoZSBzZWNvbmQgYmxvY2sgPT09DQotICAgICAgICBOZGlzWmVyb01lbW9yeSgoVUNIQVIgKilw
Q3R4LT5JbnB1dCwgUGFkTGVuSW5CeXRlcyk7IA0KLQkJCQ0KLQkJLy8gYWRkIGRhdGEtbGVuZ3Ro
IGZpZWxkDQotCQlmb3IgKGk9MDsgaTw0OyBpKyspDQotICAgICAgICB7DQotICAgICAgICAJcEN0
eC0+SW5wdXRbNTYraV0gPSAoVUNIQVIpKChwQ3R4LT5MZW5JbkJpdENvdW50WzFdID4+ICgoMy1p
KSA8PCAzKSkgJiAweGZmKTsNCi0gICAgICAgIAlwQ3R4LT5JbnB1dFs2MCtpXSA9IChVQ0hBUiko
KHBDdHgtPkxlbkluQml0Q291bnRbMF0gPj4gKCgzLWkpIDw8IDMpKSAmIDB4ZmYpOw0KLSAgICAg
IAl9DQotICAgICAgCQ0KLSAgICAgICAgTmRpc1plcm9NZW1vcnkoKFVDSEFSICopcEN0eC0+SW5w
dXQgKyA2NCwgMTYpOyANCi0gICAgICAgIFNIQVRyYW5zZm9ybShwQ3R4LT5CdWYsIChVTE9ORyAq
KXBDdHgtPklucHV0KTsNCi0gICAgfSAvLyBlbmQgb2YgZWxzZQ0KLQkNCi0JCQ0KLSAgICAvL091
dHB1dCwgYnl0ZXJldmVyc2UNCi0gICAgZm9yIChpPTA7IGk8MjA7IGkrKykNCi0gICAgew0KLSAg
ICAgICAgRGlnZXN0IFtpXSA9IChVQ0hBUikocEN0eC0+QnVmW2k+PjJdID4+IDgqKDMtKGkgJiAw
eDMpKSk7DQotICAgIH0NCi0gICAgDQotICAgIE5kaXNaZXJvTWVtb3J5KHBDdHgsIHNpemVvZihw
Q3R4KSk7IC8vIG1lbW9yeSBmcmVlIA0KLX0NCi0NCi0NCi0vLyBUaGUgY2VudHJhbCBhbGdvcml0
aG0gb2YgU0hBLTEsIGNvbnNpc3RzIG9mIGZvdXIgcm91bmRzIGFuZCANCi0vLyB0d2VudHkgc3Rl
cHMgcGVyIHJvdW5kDQotVk9JRCBTSEFUcmFuc2Zvcm0oVUxPTkcgQnVmWzVdLCBVTE9ORyBNZXNb
MjBdKQ0KLXsNCi0gICAgVUxPTkcgUmVnWzVdLFRlbXA7IA0KLQl1bnNpZ25lZCBpbnQgaTsNCi0g
ICAgVUxPTkcgV1s4MF07IA0KLSAgIA0KLSAgICBzdGF0aWMgVUxPTkcgU0hBMVRhYmxlWzRdID0g
eyAweDVhODI3OTk5LCAweDZlZDllYmExLCANCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMHg4ZjFiYmNkYywgMHhjYTYyYzFkNiB9Ow0KLSANCi0gICAgUmVnWzBdPUJ1ZlswXTsN
Ci0JUmVnWzFdPUJ1ZlsxXTsNCi0JUmVnWzJdPUJ1ZlsyXTsNCi0JUmVnWzNdPUJ1ZlszXTsNCi0J
UmVnWzRdPUJ1Zls0XTsNCi0NCi0gICAgLy90aGUgZmlyc3Qgb2N0ZXQgb2YgYSB3b3JkIGlzIHN0
b3JlZCBpbiB0aGUgMHRoIGVsZW1lbnQsIGJ5dGVyZXZlcnNlDQotCWZvcihpID0gMDsgaSA8IDE2
OyBpKyspDQotICAgIHsgDQotICAgIAlXW2ldICA9IChNZXNbaV0gPj4gMjQpICYgMHhmZjsNCi0g
ICAgICAgIFdbaV0gfD0gKE1lc1tpXSA+PiA4ICkgJiAweGZmMDA7DQotICAgICAgICBXW2ldIHw9
IChNZXNbaV0gPDwgOCApICYgMHhmZjAwMDA7DQotICAgICAgICBXW2ldIHw9IChNZXNbaV0gPDwg
MjQpICYgMHhmZjAwMDAwMDsNCi0gICAgfQ0KLSAgICANCi0JCSANCi0gICAgZm9yCShpID0gMDsg
aSA8IDY0OyBpKyspDQotCSAgICBXWzE2K2ldID0gQ1lDTElDX0xFRlRfU0hJRlQoV1tpXSBeIFdb
MitpXSBeIFdbOCtpXSBeIFdbMTMraV0sIDEpOw0KLQkgICAgDQotICAgIA0KLSAgICAvLyA4MCBz
dGVwcyBpbiBTSEEtMSBhbGdvcml0aG0NCi0gICAgZm9yIChpPTA7IGk8ODA7IGkrKykgICAgICAg
ICAgICAgICAgICAgIA0KLSAgICB7DQotICAgICAgICBpZiAoaTwyMCkNCi0gICAgICAgICAgICBT
SEExU3RlcChTSEExX0YxLCBSZWdbMF0sIFJlZ1sxXSwgUmVnWzJdLCBSZWdbM10sIFJlZ1s0XSwg
DQotICAgICAgICAgICAgICAgICAgICAgV1tpXSwgU0hBMVRhYmxlWzBdKTsNCi0gICAgICAgIA0K
LSAgICAgICAgZWxzZSBpZiAoaT49MjAgJiYgaTw0MCkNCi0gICAgICAgICAgICBTSEExU3RlcChT
SEExX0YyLCBSZWdbMF0sIFJlZ1sxXSwgUmVnWzJdLCBSZWdbM10sIFJlZ1s0XSwgDQotICAgICAg
ICAgICAgICAgICAgICAgV1tpXSwgU0hBMVRhYmxlWzFdKTsNCi0JCQkNCi0JCWVsc2UgaWYgKGk+
PTQwICYmIGk8NjApDQotICAgICAgICAgICAgU0hBMVN0ZXAoU0hBMV9GMywgUmVnWzBdLCBSZWdb
MV0sIFJlZ1syXSwgUmVnWzNdLCBSZWdbNF0sIA0KLSAgICAgICAgICAgICAgICAgICAgICBXW2ld
LCBTSEExVGFibGVbMl0pOw0KLQkJCQ0KLSAgICAgICAgZWxzZQ0KLSAgICAgICAgICAgIFNIQTFT
dGVwKFNIQTFfRjIsIFJlZ1swXSwgUmVnWzFdLCBSZWdbMl0sIFJlZ1szXSwgUmVnWzRdLCANCi0g
ICAgICAgICAgICAgICAgICAgICBXW2ldLCBTSEExVGFibGVbM10pOw0KLQkJCQ0KLQ0KLSAgICAg
ICAvLyBvbmUtd29yZCByaWdodCBzaGlmdA0KLQkJVGVtcCAgID0gUmVnWzRdOw0KLSAgICAgICAg
UmVnWzRdID0gUmVnWzNdOw0KLSAgICAgICAgUmVnWzNdID0gUmVnWzJdOw0KLSAgICAgICAgUmVn
WzJdID0gUmVnWzFdOw0KLSAgICAgICAgUmVnWzFdID0gUmVnWzBdOw0KLSAgICAgICAgUmVnWzBd
ID0gVGVtcDsgICAgICAgDQotICANCi0gICAgfSAvLyBlbmQgb2YgZm9yLWxvb3ANCi0NCi0NCi0g
ICAgLy8gKHRlbXBvcmFyeSlvdXRwdXQNCi0gICAgZm9yIChpPTA7IGk8NTsgaSsrKQ0KLSAgICAg
ICAgQnVmW2ldICs9IFJlZ1tpXTsNCi0gICAgDQotfQ0KLQ0KLQ0KLS8qID09PT09PT09PT09PT09
PT09PT09PT09PT0gIEFFUyBFbi9EZWNyeXB0aW9uID09PT09PT09PT09PT09PT09PT09PT09PT09
ICovDQotDQotLyogZm9yd2FyZCBTLWJveCAqLw0KLXN0YXRpYyB1aW50MzIgRlNiWzI1Nl0gPQ0K
LXsNCi0JMHg2MywgMHg3QywJMHg3NywgMHg3QiwJMHhGMiwgMHg2QiwJMHg2RiwgMHhDNSwNCi0J
MHgzMCwgMHgwMSwJMHg2NywgMHgyQiwJMHhGRSwgMHhENywJMHhBQiwgMHg3NiwNCi0JMHhDQSwg
MHg4MiwJMHhDOSwgMHg3RCwJMHhGQSwgMHg1OSwJMHg0NywgMHhGMCwNCi0JMHhBRCwgMHhENCwJ
MHhBMiwgMHhBRiwJMHg5QywgMHhBNCwJMHg3MiwgMHhDMCwNCi0JMHhCNywgMHhGRCwJMHg5Mywg
MHgyNiwJMHgzNiwgMHgzRiwJMHhGNywgMHhDQywNCi0JMHgzNCwgMHhBNSwJMHhFNSwgMHhGMSwJ
MHg3MSwgMHhEOCwJMHgzMSwgMHgxNSwNCi0JMHgwNCwgMHhDNywJMHgyMywgMHhDMywJMHgxOCwg
MHg5NiwJMHgwNSwgMHg5QSwNCi0JMHgwNywgMHgxMiwJMHg4MCwgMHhFMiwJMHhFQiwgMHgyNywJ
MHhCMiwgMHg3NSwNCi0JMHgwOSwgMHg4MywJMHgyQywgMHgxQSwJMHgxQiwgMHg2RSwJMHg1QSwg
MHhBMCwNCi0JMHg1MiwgMHgzQiwJMHhENiwgMHhCMywJMHgyOSwgMHhFMywJMHgyRiwgMHg4NCwN
Ci0JMHg1MywgMHhEMSwJMHgwMCwgMHhFRCwJMHgyMCwgMHhGQywJMHhCMSwgMHg1QiwNCi0JMHg2
QSwgMHhDQiwJMHhCRSwgMHgzOSwJMHg0QSwgMHg0QywJMHg1OCwgMHhDRiwNCi0JMHhEMCwgMHhF
RiwJMHhBQSwgMHhGQiwJMHg0MywgMHg0RCwJMHgzMywgMHg4NSwNCi0JMHg0NSwgMHhGOSwJMHgw
MiwgMHg3RiwJMHg1MCwgMHgzQywJMHg5RiwgMHhBOCwNCi0JMHg1MSwgMHhBMywJMHg0MCwgMHg4
RiwJMHg5MiwgMHg5RCwJMHgzOCwgMHhGNSwNCi0JMHhCQywgMHhCNiwJMHhEQSwgMHgyMSwJMHgx
MCwgMHhGRiwJMHhGMywgMHhEMiwNCi0JMHhDRCwgMHgwQywJMHgxMywgMHhFQywJMHg1RiwgMHg5
NywJMHg0NCwgMHgxNywNCi0JMHhDNCwgMHhBNywJMHg3RSwgMHgzRCwJMHg2NCwgMHg1RCwJMHgx
OSwgMHg3MywNCi0JMHg2MCwgMHg4MSwJMHg0RiwgMHhEQywJMHgyMiwgMHgyQSwJMHg5MCwgMHg4
OCwNCi0JMHg0NiwgMHhFRSwJMHhCOCwgMHgxNCwJMHhERSwgMHg1RSwJMHgwQiwgMHhEQiwNCi0J
MHhFMCwgMHgzMiwJMHgzQSwgMHgwQSwJMHg0OSwgMHgwNiwJMHgyNCwgMHg1QywNCi0JMHhDMiwg
MHhEMywJMHhBQywgMHg2MiwJMHg5MSwgMHg5NSwJMHhFNCwgMHg3OSwNCi0JMHhFNywgMHhDOCwJ
MHgzNywgMHg2RCwJMHg4RCwgMHhENSwJMHg0RSwgMHhBOSwNCi0JMHg2QywgMHg1NiwJMHhGNCwg
MHhFQSwJMHg2NSwgMHg3QSwJMHhBRSwgMHgwOCwNCi0JMHhCQSwgMHg3OCwJMHgyNSwgMHgyRSwJ
MHgxQywgMHhBNiwJMHhCNCwgMHhDNiwNCi0JMHhFOCwgMHhERCwJMHg3NCwgMHgxRiwJMHg0Qiwg
MHhCRCwJMHg4QiwgMHg4QSwNCi0JMHg3MCwgMHgzRSwJMHhCNSwgMHg2NiwJMHg0OCwgMHgwMywJ
MHhGNiwgMHgwRSwNCi0JMHg2MSwgMHgzNSwJMHg1NywgMHhCOSwJMHg4NiwgMHhDMSwJMHgxRCwg
MHg5RSwNCi0JMHhFMSwgMHhGOCwJMHg5OCwgMHgxMSwJMHg2OSwgMHhEOSwJMHg4RSwgMHg5NCwN
Ci0JMHg5QiwgMHgxRSwJMHg4NywgMHhFOSwJMHhDRSwgMHg1NSwJMHgyOCwgMHhERiwNCi0JMHg4
QywgMHhBMSwJMHg4OSwgMHgwRCwJMHhCRiwgMHhFNiwJMHg0MiwgMHg2OCwNCi0JMHg0MSwgMHg5
OSwJMHgyRCwgMHgwRiwJMHhCMCwgMHg1NCwJMHhCQiwgMHgxNg0KLX07DQotDQotLyogZm9yd2Fy
ZCB0YWJsZSAqLw0KLSNkZWZpbmUJRlQgXA0KLVwNCi0JVihDNiw2Myw2MyxBNSksCVYoRjgsN0Ms
N0MsODQpLAlWKEVFLDc3LDc3LDk5KSwJVihGNiw3Qiw3Qiw4RCksCVwNCi0JVihGRixGMixGMiww
RCksCVYoRDYsNkIsNkIsQkQpLAlWKERFLDZGLDZGLEIxKSwJVig5MSxDNSxDNSw1NCksCVwNCi0J
Vig2MCwzMCwzMCw1MCksCVYoMDIsMDEsMDEsMDMpLAlWKENFLDY3LDY3LEE5KSwJVig1NiwyQiwy
Qiw3RCksCVwNCi0JVihFNyxGRSxGRSwxOSksCVYoQjUsRDcsRDcsNjIpLAlWKDRELEFCLEFCLEU2
KSwJVihFQyw3Niw3Niw5QSksCVwNCi0JVig4RixDQSxDQSw0NSksCVYoMUYsODIsODIsOUQpLAlW
KDg5LEM5LEM5LDQwKSwJVihGQSw3RCw3RCw4NyksCVwNCi0JVihFRixGQSxGQSwxNSksCVYoQjIs
NTksNTksRUIpLAlWKDhFLDQ3LDQ3LEM5KSwJVihGQixGMCxGMCwwQiksCVwNCi0JVig0MSxBRCxB
RCxFQyksCVYoQjMsRDQsRDQsNjcpLAlWKDVGLEEyLEEyLEZEKSwJVig0NSxBRixBRixFQSksCVwN
Ci0JVigyMyw5Qyw5QyxCRiksCVYoNTMsQTQsQTQsRjcpLAlWKEU0LDcyLDcyLDk2KSwJVig5QixD
MCxDMCw1QiksCVwNCi0JVig3NSxCNyxCNyxDMiksCVYoRTEsRkQsRkQsMUMpLAlWKDNELDkzLDkz
LEFFKSwJVig0QywyNiwyNiw2QSksCVwNCi0JVig2QywzNiwzNiw1QSksCVYoN0UsM0YsM0YsNDEp
LAlWKEY1LEY3LEY3LDAyKSwJVig4MyxDQyxDQyw0RiksCVwNCi0JVig2OCwzNCwzNCw1QyksCVYo
NTEsQTUsQTUsRjQpLAlWKEQxLEU1LEU1LDM0KSwJVihGOSxGMSxGMSwwOCksCVwNCi0JVihFMiw3
MSw3MSw5MyksCVYoQUIsRDgsRDgsNzMpLAlWKDYyLDMxLDMxLDUzKSwJVigyQSwxNSwxNSwzRiks
CVwNCi0JVigwOCwwNCwwNCwwQyksCVYoOTUsQzcsQzcsNTIpLAlWKDQ2LDIzLDIzLDY1KSwJVig5
RCxDMyxDMyw1RSksCVwNCi0JVigzMCwxOCwxOCwyOCksCVYoMzcsOTYsOTYsQTEpLAlWKDBBLDA1
LDA1LDBGKSwJVigyRiw5QSw5QSxCNSksCVwNCi0JVigwRSwwNywwNywwOSksCVYoMjQsMTIsMTIs
MzYpLAlWKDFCLDgwLDgwLDlCKSwJVihERixFMixFMiwzRCksCVwNCi0JVihDRCxFQixFQiwyNiks
CVYoNEUsMjcsMjcsNjkpLAlWKDdGLEIyLEIyLENEKSwJVihFQSw3NSw3NSw5RiksCVwNCi0JVigx
MiwwOSwwOSwxQiksCVYoMUQsODMsODMsOUUpLAlWKDU4LDJDLDJDLDc0KSwJVigzNCwxQSwxQSwy
RSksCVwNCi0JVigzNiwxQiwxQiwyRCksCVYoREMsNkUsNkUsQjIpLAlWKEI0LDVBLDVBLEVFKSwJ
Vig1QixBMCxBMCxGQiksCVwNCi0JVihBNCw1Miw1MixGNiksCVYoNzYsM0IsM0IsNEQpLAlWKEI3
LEQ2LEQ2LDYxKSwJVig3RCxCMyxCMyxDRSksCVwNCi0JVig1MiwyOSwyOSw3QiksCVYoREQsRTMs
RTMsM0UpLAlWKDVFLDJGLDJGLDcxKSwJVigxMyw4NCw4NCw5NyksCVwNCi0JVihBNiw1Myw1MyxG
NSksCVYoQjksRDEsRDEsNjgpLAlWKDAwLDAwLDAwLDAwKSwJVihDMSxFRCxFRCwyQyksCVwNCi0J
Vig0MCwyMCwyMCw2MCksCVYoRTMsRkMsRkMsMUYpLAlWKDc5LEIxLEIxLEM4KSwJVihCNiw1Qiw1
QixFRCksCVwNCi0JVihENCw2QSw2QSxCRSksCVYoOEQsQ0IsQ0IsNDYpLAlWKDY3LEJFLEJFLEQ5
KSwJVig3MiwzOSwzOSw0QiksCVwNCi0JVig5NCw0QSw0QSxERSksCVYoOTgsNEMsNEMsRDQpLAlW
KEIwLDU4LDU4LEU4KSwJVig4NSxDRixDRiw0QSksCVwNCi0JVihCQixEMCxEMCw2QiksCVYoQzUs
RUYsRUYsMkEpLAlWKDRGLEFBLEFBLEU1KSwJVihFRCxGQixGQiwxNiksCVwNCi0JVig4Niw0Myw0
MyxDNSksCVYoOUEsNEQsNEQsRDcpLAlWKDY2LDMzLDMzLDU1KSwJVigxMSw4NSw4NSw5NCksCVwN
Ci0JVig4QSw0NSw0NSxDRiksCVYoRTksRjksRjksMTApLAlWKDA0LDAyLDAyLDA2KSwJVihGRSw3
Riw3Riw4MSksCVwNCi0JVihBMCw1MCw1MCxGMCksCVYoNzgsM0MsM0MsNDQpLAlWKDI1LDlGLDlG
LEJBKSwJVig0QixBOCxBOCxFMyksCVwNCi0JVihBMiw1MSw1MSxGMyksCVYoNUQsQTMsQTMsRkUp
LAlWKDgwLDQwLDQwLEMwKSwJVigwNSw4Riw4Riw4QSksCVwNCi0JVigzRiw5Miw5MixBRCksCVYo
MjEsOUQsOUQsQkMpLAlWKDcwLDM4LDM4LDQ4KSwJVihGMSxGNSxGNSwwNCksCVwNCi0JVig2MyxC
QyxCQyxERiksCVYoNzcsQjYsQjYsQzEpLAlWKEFGLERBLERBLDc1KSwJVig0MiwyMSwyMSw2Myks
CVwNCi0JVigyMCwxMCwxMCwzMCksCVYoRTUsRkYsRkYsMUEpLAlWKEZELEYzLEYzLDBFKSwJVihC
RixEMixEMiw2RCksCVwNCi0JVig4MSxDRCxDRCw0QyksCVYoMTgsMEMsMEMsMTQpLAlWKDI2LDEz
LDEzLDM1KSwJVihDMyxFQyxFQywyRiksCVwNCi0JVihCRSw1Riw1RixFMSksCVYoMzUsOTcsOTcs
QTIpLAlWKDg4LDQ0LDQ0LENDKSwJVigyRSwxNywxNywzOSksCVwNCi0JVig5MyxDNCxDNCw1Nyks
CVYoNTUsQTcsQTcsRjIpLAlWKEZDLDdFLDdFLDgyKSwJVig3QSwzRCwzRCw0NyksCVwNCi0JVihD
OCw2NCw2NCxBQyksCVYoQkEsNUQsNUQsRTcpLAlWKDMyLDE5LDE5LDJCKSwJVihFNiw3Myw3Myw5
NSksCVwNCi0JVihDMCw2MCw2MCxBMCksCVYoMTksODEsODEsOTgpLAlWKDlFLDRGLDRGLEQxKSwJ
VihBMyxEQyxEQyw3RiksCVwNCi0JVig0NCwyMiwyMiw2NiksCVYoNTQsMkEsMkEsN0UpLAlWKDNC
LDkwLDkwLEFCKSwJVigwQiw4OCw4OCw4MyksCVwNCi0JVig4Qyw0Niw0NixDQSksCVYoQzcsRUUs
RUUsMjkpLAlWKDZCLEI4LEI4LEQzKSwJVigyOCwxNCwxNCwzQyksCVwNCi0JVihBNyxERSxERSw3
OSksCVYoQkMsNUUsNUUsRTIpLAlWKDE2LDBCLDBCLDFEKSwJVihBRCxEQixEQiw3NiksCVwNCi0J
VihEQixFMCxFMCwzQiksCVYoNjQsMzIsMzIsNTYpLAlWKDc0LDNBLDNBLDRFKSwJVigxNCwwQSww
QSwxRSksCVwNCi0JVig5Miw0OSw0OSxEQiksCVYoMEMsMDYsMDYsMEEpLAlWKDQ4LDI0LDI0LDZD
KSwJVihCOCw1Qyw1QyxFNCksCVwNCi0JVig5RixDMixDMiw1RCksCVYoQkQsRDMsRDMsNkUpLAlW
KDQzLEFDLEFDLEVGKSwJVihDNCw2Miw2MixBNiksCVwNCi0JVigzOSw5MSw5MSxBOCksCVYoMzEs
OTUsOTUsQTQpLAlWKEQzLEU0LEU0LDM3KSwJVihGMiw3OSw3OSw4QiksCVwNCi0JVihENSxFNyxF
NywzMiksCVYoOEIsQzgsQzgsNDMpLAlWKDZFLDM3LDM3LDU5KSwJVihEQSw2RCw2RCxCNyksCVwN
Ci0JVigwMSw4RCw4RCw4QyksCVYoQjEsRDUsRDUsNjQpLAlWKDlDLDRFLDRFLEQyKSwJVig0OSxB
OSxBOSxFMCksCVwNCi0JVihEOCw2Qyw2QyxCNCksCVYoQUMsNTYsNTYsRkEpLAlWKEYzLEY0LEY0
LDA3KSwJVihDRixFQSxFQSwyNSksCVwNCi0JVihDQSw2NSw2NSxBRiksCVYoRjQsN0EsN0EsOEUp
LAlWKDQ3LEFFLEFFLEU5KSwJVigxMCwwOCwwOCwxOCksCVwNCi0JVig2RixCQSxCQSxENSksCVYo
RjAsNzgsNzgsODgpLAlWKDRBLDI1LDI1LDZGKSwJVig1QywyRSwyRSw3MiksCVwNCi0JVigzOCwx
QywxQywyNCksCVYoNTcsQTYsQTYsRjEpLAlWKDczLEI0LEI0LEM3KSwJVig5NyxDNixDNiw1MSks
CVwNCi0JVihDQixFOCxFOCwyMyksCVYoQTEsREQsREQsN0MpLAlWKEU4LDc0LDc0LDlDKSwJVigz
RSwxRiwxRiwyMSksCVwNCi0JVig5Niw0Qiw0QixERCksCVYoNjEsQkQsQkQsREMpLAlWKDBELDhC
LDhCLDg2KSwJVigwRiw4QSw4QSw4NSksCVwNCi0JVihFMCw3MCw3MCw5MCksCVYoN0MsM0UsM0Us
NDIpLAlWKDcxLEI1LEI1LEM0KSwJVihDQyw2Niw2NixBQSksCVwNCi0JVig5MCw0OCw0OCxEOCks
CVYoMDYsMDMsMDMsMDUpLAlWKEY3LEY2LEY2LDAxKSwJVigxQywwRSwwRSwxMiksCVwNCi0JVihD
Miw2MSw2MSxBMyksCVYoNkEsMzUsMzUsNUYpLAlWKEFFLDU3LDU3LEY5KSwJVig2OSxCOSxCOSxE
MCksCVwNCi0JVigxNyw4Niw4Niw5MSksCVYoOTksQzEsQzEsNTgpLAlWKDNBLDFELDFELDI3KSwJ
VigyNyw5RSw5RSxCOSksCVwNCi0JVihEOSxFMSxFMSwzOCksCVYoRUIsRjgsRjgsMTMpLAlWKDJC
LDk4LDk4LEIzKSwJVigyMiwxMSwxMSwzMyksCVwNCi0JVihEMiw2OSw2OSxCQiksCVYoQTksRDks
RDksNzApLAlWKDA3LDhFLDhFLDg5KSwJVigzMyw5NCw5NCxBNyksCVwNCi0JVigyRCw5Qiw5QixC
NiksCVYoM0MsMUUsMUUsMjIpLAlWKDE1LDg3LDg3LDkyKSwJVihDOSxFOSxFOSwyMCksCVwNCi0J
Vig4NyxDRSxDRSw0OSksCVYoQUEsNTUsNTUsRkYpLAlWKDUwLDI4LDI4LDc4KSwJVihBNSxERixE
Riw3QSksCVwNCi0JVigwMyw4Qyw4Qyw4RiksCVYoNTksQTEsQTEsRjgpLAlWKDA5LDg5LDg5LDgw
KSwJVigxQSwwRCwwRCwxNyksCVwNCi0JVig2NSxCRixCRixEQSksCVYoRDcsRTYsRTYsMzEpLAlW
KDg0LDQyLDQyLEM2KSwJVihEMCw2OCw2OCxCOCksCVwNCi0JVig4Miw0MSw0MSxDMyksCVYoMjks
OTksOTksQjApLAlWKDVBLDJELDJELDc3KSwJVigxRSwwRiwwRiwxMSksCVwNCi0JVig3QixCMCxC
MCxDQiksCVYoQTgsNTQsNTQsRkMpLAlWKDZELEJCLEJCLEQ2KSwJVigyQywxNiwxNiwzQSkNCi0N
Ci0jZGVmaW5lCVYoYSxiLGMsZCkgMHgjI2EjI2IjI2MjI2QNCi1zdGF0aWMgdWludDMyIEZUMFsy
NTZdID0geyBGVCB9Ow0KLSN1bmRlZiBWDQotDQotI2RlZmluZQlWKGEsYixjLGQpIDB4IyNkIyNh
IyNiIyNjDQotc3RhdGljIHVpbnQzMiBGVDFbMjU2XSA9IHsgRlQgfTsNCi0jdW5kZWYgVg0KLQ0K
LSNkZWZpbmUJVihhLGIsYyxkKSAweCMjYyMjZCMjYSMjYg0KLXN0YXRpYyB1aW50MzIgRlQyWzI1
Nl0gPSB7IEZUIH07DQotI3VuZGVmIFYNCi0NCi0jZGVmaW5lCVYoYSxiLGMsZCkgMHgjI2IjI2Mj
I2QjI2ENCi1zdGF0aWMgdWludDMyIEZUM1syNTZdID0geyBGVCB9Ow0KLSN1bmRlZiBWDQotDQot
I3VuZGVmIEZUDQotDQotLyogcmV2ZXJzZSBTLWJveCAqLw0KLQ0KLXN0YXRpYyB1aW50MzIgUlNi
WzI1Nl0gPQ0KLXsNCi0JMHg1MiwgMHgwOSwJMHg2QSwgMHhENSwJMHgzMCwgMHgzNiwJMHhBNSwg
MHgzOCwNCi0JMHhCRiwgMHg0MCwJMHhBMywgMHg5RSwJMHg4MSwgMHhGMywJMHhENywgMHhGQiwN
Ci0JMHg3QywgMHhFMywJMHgzOSwgMHg4MiwJMHg5QiwgMHgyRiwJMHhGRiwgMHg4NywNCi0JMHgz
NCwgMHg4RSwJMHg0MywgMHg0NCwJMHhDNCwgMHhERSwJMHhFOSwgMHhDQiwNCi0JMHg1NCwgMHg3
QiwJMHg5NCwgMHgzMiwJMHhBNiwgMHhDMiwJMHgyMywgMHgzRCwNCi0JMHhFRSwgMHg0QywJMHg5
NSwgMHgwQiwJMHg0MiwgMHhGQSwJMHhDMywgMHg0RSwNCi0JMHgwOCwgMHgyRSwJMHhBMSwgMHg2
NiwJMHgyOCwgMHhEOSwJMHgyNCwgMHhCMiwNCi0JMHg3NiwgMHg1QiwJMHhBMiwgMHg0OSwJMHg2
RCwgMHg4QiwJMHhEMSwgMHgyNSwNCi0JMHg3MiwgMHhGOCwJMHhGNiwgMHg2NCwJMHg4NiwgMHg2
OCwJMHg5OCwgMHgxNiwNCi0JMHhENCwgMHhBNCwJMHg1QywgMHhDQywJMHg1RCwgMHg2NSwJMHhC
NiwgMHg5MiwNCi0JMHg2QywgMHg3MCwJMHg0OCwgMHg1MCwJMHhGRCwgMHhFRCwJMHhCOSwgMHhE
QSwNCi0JMHg1RSwgMHgxNSwJMHg0NiwgMHg1NywJMHhBNywgMHg4RCwJMHg5RCwgMHg4NCwNCi0J
MHg5MCwgMHhEOCwJMHhBQiwgMHgwMCwJMHg4QywgMHhCQywJMHhEMywgMHgwQSwNCi0JMHhGNywg
MHhFNCwJMHg1OCwgMHgwNSwJMHhCOCwgMHhCMywJMHg0NSwgMHgwNiwNCi0JMHhEMCwgMHgyQywJ
MHgxRSwgMHg4RiwJMHhDQSwgMHgzRiwJMHgwRiwgMHgwMiwNCi0JMHhDMSwgMHhBRiwJMHhCRCwg
MHgwMywJMHgwMSwgMHgxMywJMHg4QSwgMHg2QiwNCi0JMHgzQSwgMHg5MSwJMHgxMSwgMHg0MSwJ
MHg0RiwgMHg2NywJMHhEQywgMHhFQSwNCi0JMHg5NywgMHhGMiwJMHhDRiwgMHhDRSwJMHhGMCwg
MHhCNCwJMHhFNiwgMHg3MywNCi0JMHg5NiwgMHhBQywJMHg3NCwgMHgyMiwJMHhFNywgMHhBRCwJ
MHgzNSwgMHg4NSwNCi0JMHhFMiwgMHhGOSwJMHgzNywgMHhFOCwJMHgxQywgMHg3NSwJMHhERiwg
MHg2RSwNCi0JMHg0NywgMHhGMSwJMHgxQSwgMHg3MSwJMHgxRCwgMHgyOSwJMHhDNSwgMHg4OSwN
Ci0JMHg2RiwgMHhCNywJMHg2MiwgMHgwRSwJMHhBQSwgMHgxOCwJMHhCRSwgMHgxQiwNCi0JMHhG
QywgMHg1NiwJMHgzRSwgMHg0QiwJMHhDNiwgMHhEMiwJMHg3OSwgMHgyMCwNCi0JMHg5QSwgMHhE
QiwJMHhDMCwgMHhGRSwJMHg3OCwgMHhDRCwJMHg1QSwgMHhGNCwNCi0JMHgxRiwgMHhERCwJMHhB
OCwgMHgzMywJMHg4OCwgMHgwNywJMHhDNywgMHgzMSwNCi0JMHhCMSwgMHgxMiwJMHgxMCwgMHg1
OSwJMHgyNywgMHg4MCwJMHhFQywgMHg1RiwNCi0JMHg2MCwgMHg1MSwJMHg3RiwgMHhBOSwJMHgx
OSwgMHhCNSwJMHg0QSwgMHgwRCwNCi0JMHgyRCwgMHhFNSwJMHg3QSwgMHg5RiwJMHg5MywgMHhD
OSwJMHg5QywgMHhFRiwNCi0JMHhBMCwgMHhFMCwJMHgzQiwgMHg0RCwJMHhBRSwgMHgyQSwJMHhG
NSwgMHhCMCwNCi0JMHhDOCwgMHhFQiwJMHhCQiwgMHgzQywJMHg4MywgMHg1MywJMHg5OSwgMHg2
MSwNCi0JMHgxNywgMHgyQiwJMHgwNCwgMHg3RSwJMHhCQSwgMHg3NywJMHhENiwgMHgyNiwNCi0J
MHhFMSwgMHg2OSwJMHgxNCwgMHg2MywJMHg1NSwgMHgyMSwJMHgwQywgMHg3RA0KLX07DQotDQot
LyogcmV2ZXJzZSB0YWJsZSAqLw0KLQ0KLSNkZWZpbmUJUlQgXA0KLVwNCi0JVig1MSxGNCxBNyw1
MCksCVYoN0UsNDEsNjUsNTMpLAlWKDFBLDE3LEE0LEMzKSwJVigzQSwyNyw1RSw5NiksCVwNCi0J
VigzQixBQiw2QixDQiksCVYoMUYsOUQsNDUsRjEpLAlWKEFDLEZBLDU4LEFCKSwJVig0QixFMyww
Myw5MyksCVwNCi0JVigyMCwzMCxGQSw1NSksCVYoQUQsNzYsNkQsRjYpLAlWKDg4LENDLDc2LDkx
KSwJVihGNSwwMiw0QywyNSksCVwNCi0JVig0RixFNSxENyxGQyksCVYoQzUsMkEsQ0IsRDcpLAlW
KDI2LDM1LDQ0LDgwKSwJVihCNSw2MixBMyw4RiksCVwNCi0JVihERSxCMSw1QSw0OSksCVYoMjUs
QkEsMUIsNjcpLAlWKDQ1LEVBLDBFLDk4KSwJVig1RCxGRSxDMCxFMSksCVwNCi0JVihDMywyRiw3
NSwwMiksCVYoODEsNEMsRjAsMTIpLAlWKDhELDQ2LDk3LEEzKSwJVig2QixEMyxGOSxDNiksCVwN
Ci0JVigwMyw4Riw1RixFNyksCVYoMTUsOTIsOUMsOTUpLAlWKEJGLDZELDdBLEVCKSwJVig5NSw1
Miw1OSxEQSksCVwNCi0JVihENCxCRSw4MywyRCksCVYoNTgsNzQsMjEsRDMpLAlWKDQ5LEUwLDY5
LDI5KSwJVig4RSxDOSxDOCw0NCksCVwNCi0JVig3NSxDMiw4OSw2QSksCVYoRjQsOEUsNzksNzgp
LAlWKDk5LDU4LDNFLDZCKSwJVigyNyxCOSw3MSxERCksCVwNCi0JVihCRSxFMSw0RixCNiksCVYo
RjAsODgsQUQsMTcpLAlWKEM5LDIwLEFDLDY2KSwJVig3RCxDRSwzQSxCNCksCVwNCi0JVig2MyxE
Riw0QSwxOCksCVYoRTUsMUEsMzEsODIpLAlWKDk3LDUxLDMzLDYwKSwJVig2Miw1Myw3Riw0NSks
CVwNCi0JVihCMSw2NCw3NyxFMCksCVYoQkIsNkIsQUUsODQpLAlWKEZFLDgxLEEwLDFDKSwJVihG
OSwwOCwyQiw5NCksCVwNCi0JVig3MCw0OCw2OCw1OCksCVYoOEYsNDUsRkQsMTkpLAlWKDk0LERF
LDZDLDg3KSwJVig1Miw3QixGOCxCNyksCVwNCi0JVihBQiw3MyxEMywyMyksCVYoNzIsNEIsMDIs
RTIpLAlWKEUzLDFGLDhGLDU3KSwJVig2Niw1NSxBQiwyQSksCVwNCi0JVihCMixFQiwyOCwwNyks
CVYoMkYsQjUsQzIsMDMpLAlWKDg2LEM1LDdCLDlBKSwJVihEMywzNywwOCxBNSksCVwNCi0JVigz
MCwyOCw4NyxGMiksCVYoMjMsQkYsQTUsQjIpLAlWKDAyLDAzLDZBLEJBKSwJVihFRCwxNiw4Miw1
QyksCVwNCi0JVig4QSxDRiwxQywyQiksCVYoQTcsNzksQjQsOTIpLAlWKEYzLDA3LEYyLEYwKSwJ
Vig0RSw2OSxFMixBMSksCVwNCi0JVig2NSxEQSxGNCxDRCksCVYoMDYsMDUsQkUsRDUpLAlWKEQx
LDM0LDYyLDFGKSwJVihDNCxBNixGRSw4QSksCVwNCi0JVigzNCwyRSw1Myw5RCksCVYoQTIsRjMs
NTUsQTApLAlWKDA1LDhBLEUxLDMyKSwJVihBNCxGNixFQiw3NSksCVwNCi0JVigwQiw4MyxFQywz
OSksCVYoNDAsNjAsRUYsQUEpLAlWKDVFLDcxLDlGLDA2KSwJVihCRCw2RSwxMCw1MSksCVwNCi0J
VigzRSwyMSw4QSxGOSksCVYoOTYsREQsMDYsM0QpLAlWKERELDNFLDA1LEFFKSwJVig0RCxFNixC
RCw0NiksCVwNCi0JVig5MSw1NCw4RCxCNSksCVYoNzEsQzQsNUQsMDUpLAlWKDA0LDA2LEQ0LDZG
KSwJVig2MCw1MCwxNSxGRiksCVwNCi0JVigxOSw5OCxGQiwyNCksCVYoRDYsQkQsRTksOTcpLAlW
KDg5LDQwLDQzLENDKSwJVig2NyxEOSw5RSw3NyksCVwNCi0JVihCMCxFOCw0MixCRCksCVYoMDcs
ODksOEIsODgpLAlWKEU3LDE5LDVCLDM4KSwJVig3OSxDOCxFRSxEQiksCVwNCi0JVihBMSw3Qyww
QSw0NyksCVYoN0MsNDIsMEYsRTkpLAlWKEY4LDg0LDFFLEM5KSwJVigwMCwwMCwwMCwwMCksCVwN
Ci0JVigwOSw4MCw4Niw4MyksCVYoMzIsMkIsRUQsNDgpLAlWKDFFLDExLDcwLEFDKSwJVig2Qyw1
QSw3Miw0RSksCVwNCi0JVihGRCwwRSxGRixGQiksCVYoMEYsODUsMzgsNTYpLAlWKDNELEFFLEQ1
LDFFKSwJVigzNiwyRCwzOSwyNyksCVwNCi0JVigwQSwwRixEOSw2NCksCVYoNjgsNUMsQTYsMjEp
LAlWKDlCLDVCLDU0LEQxKSwJVigyNCwzNiwyRSwzQSksCVwNCi0JVigwQywwQSw2NyxCMSksCVYo
OTMsNTcsRTcsMEYpLAlWKEI0LEVFLDk2LEQyKSwJVigxQiw5Qiw5MSw5RSksCVwNCi0JVig4MCxD
MCxDNSw0RiksCVYoNjEsREMsMjAsQTIpLAlWKDVBLDc3LDRCLDY5KSwJVigxQywxMiwxQSwxNiks
CVwNCi0JVihFMiw5MyxCQSwwQSksCVYoQzAsQTAsMkEsRTUpLAlWKDNDLDIyLEUwLDQzKSwJVigx
MiwxQiwxNywxRCksCVwNCi0JVigwRSwwOSwwRCwwQiksCVYoRjIsOEIsQzcsQUQpLAlWKDJELEI2
LEE4LEI5KSwJVigxNCwxRSxBOSxDOCksCVwNCi0JVig1NyxGMSwxOSw4NSksCVYoQUYsNzUsMDcs
NEMpLAlWKEVFLDk5LERELEJCKSwJVihBMyw3Riw2MCxGRCksCVwNCi0JVihGNywwMSwyNiw5Riks
CVYoNUMsNzIsRjUsQkMpLAlWKDQ0LDY2LDNCLEM1KSwJVig1QixGQiw3RSwzNCksCVwNCi0JVig4
Qiw0MywyOSw3NiksCVYoQ0IsMjMsQzYsREMpLAlWKEI2LEVELEZDLDY4KSwJVihCOCxFNCxGMSw2
MyksCVwNCi0JVihENywzMSxEQyxDQSksCVYoNDIsNjMsODUsMTApLAlWKDEzLDk3LDIyLDQwKSwJ
Vig4NCxDNiwxMSwyMCksCVwNCi0JVig4NSw0QSwyNCw3RCksCVYoRDIsQkIsM0QsRjgpLAlWKEFF
LEY5LDMyLDExKSwJVihDNywyOSxBMSw2RCksCVwNCi0JVigxRCw5RSwyRiw0QiksCVYoREMsQjIs
MzAsRjMpLAlWKDBELDg2LDUyLEVDKSwJVig3NyxDMSxFMyxEMCksCVwNCi0JVigyQixCMywxNiw2
QyksCVYoQTksNzAsQjksOTkpLAlWKDExLDk0LDQ4LEZBKSwJVig0NyxFOSw2NCwyMiksCVwNCi0J
VihBOCxGQyw4QyxDNCksCVYoQTAsRjAsM0YsMUEpLAlWKDU2LDdELDJDLEQ4KSwJVigyMiwzMyw5
MCxFRiksCVwNCi0JVig4Nyw0OSw0RSxDNyksCVYoRDksMzgsRDEsQzEpLAlWKDhDLENBLEEyLEZF
KSwJVig5OCxENCwwQiwzNiksCVwNCi0JVihBNixGNSw4MSxDRiksCVYoQTUsN0EsREUsMjgpLAlW
KERBLEI3LDhFLDI2KSwJVigzRixBRCxCRixBNCksCVwNCi0JVigyQywzQSw5RCxFNCksCVYoNTAs
NzgsOTIsMEQpLAlWKDZBLDVGLENDLDlCKSwJVig1NCw3RSw0Niw2MiksCVwNCi0JVihGNiw4RCwx
MyxDMiksCVYoOTAsRDgsQjgsRTgpLAlWKDJFLDM5LEY3LDVFKSwJVig4MixDMyxBRixGNSksCVwN
Ci0JVig5Riw1RCw4MCxCRSksCVYoNjksRDAsOTMsN0MpLAlWKDZGLEQ1LDJELEE5KSwJVihDRiwy
NSwxMixCMyksCVwNCi0JVihDOCxBQyw5OSwzQiksCVYoMTAsMTgsN0QsQTcpLAlWKEU4LDlDLDYz
LDZFKSwJVihEQiwzQixCQiw3QiksCVwNCi0JVihDRCwyNiw3OCwwOSksCVYoNkUsNTksMTgsRjQp
LAlWKEVDLDlBLEI3LDAxKSwJVig4Myw0Riw5QSxBOCksCVwNCi0JVihFNiw5NSw2RSw2NSksCVYo
QUEsRkYsRTYsN0UpLAlWKDIxLEJDLENGLDA4KSwJVihFRiwxNSxFOCxFNiksCVwNCi0JVihCQSxF
Nyw5QixEOSksCVYoNEEsNkYsMzYsQ0UpLAlWKEVBLDlGLDA5LEQ0KSwJVigyOSxCMCw3QyxENiks
CVwNCi0JVigzMSxBNCxCMixBRiksCVYoMkEsM0YsMjMsMzEpLAlWKEM2LEE1LDk0LDMwKSwJVigz
NSxBMiw2NixDMCksCVwNCi0JVig3NCw0RSxCQywzNyksCVYoRkMsODIsQ0EsQTYpLAlWKEUwLDkw
LEQwLEIwKSwJVigzMyxBNyxEOCwxNSksCVwNCi0JVihGMSwwNCw5OCw0QSksCVYoNDEsRUMsREEs
RjcpLAlWKDdGLENELDUwLDBFKSwJVigxNyw5MSxGNiwyRiksCVwNCi0JVig3Niw0RCxENiw4RCks
CVYoNDMsRUYsQjAsNEQpLAlWKENDLEFBLDRELDU0KSwJVihFNCw5NiwwNCxERiksCVwNCi0JVig5
RSxEMSxCNSxFMyksCVYoNEMsNkEsODgsMUIpLAlWKEMxLDJDLDFGLEI4KSwJVig0Niw2NSw1MSw3
RiksCVwNCi0JVig5RCw1RSxFQSwwNCksCVYoMDEsOEMsMzUsNUQpLAlWKEZBLDg3LDc0LDczKSwJ
VihGQiwwQiw0MSwyRSksCVwNCi0JVihCMyw2NywxRCw1QSksCVYoOTIsREIsRDIsNTIpLAlWKEU5
LDEwLDU2LDMzKSwJVig2RCxENiw0NywxMyksCVwNCi0JVig5QSxENyw2MSw4QyksCVYoMzcsQTEs
MEMsN0EpLAlWKDU5LEY4LDE0LDhFKSwJVihFQiwxMywzQyw4OSksCVwNCi0JVihDRSxBOSwyNyxF
RSksCVYoQjcsNjEsQzksMzUpLAlWKEUxLDFDLEU1LEVEKSwJVig3QSw0NyxCMSwzQyksCVwNCi0J
Vig5QyxEMixERiw1OSksCVYoNTUsRjIsNzMsM0YpLAlWKDE4LDE0LENFLDc5KSwJVig3MyxDNywz
NyxCRiksCVwNCi0JVig1MyxGNyxDRCxFQSksCVYoNUYsRkQsQUEsNUIpLAlWKERGLDNELDZGLDE0
KSwJVig3OCw0NCxEQiw4NiksCVwNCi0JVihDQSxBRixGMyw4MSksCVYoQjksNjgsQzQsM0UpLAlW
KDM4LDI0LDM0LDJDKSwJVihDMixBMyw0MCw1RiksCVwNCi0JVigxNiwxRCxDMyw3MiksCVYoQkMs
RTIsMjUsMEMpLAlWKDI4LDNDLDQ5LDhCKSwJVihGRiwwRCw5NSw0MSksCVwNCi0JVigzOSxBOCww
MSw3MSksCVYoMDgsMEMsQjMsREUpLAlWKEQ4LEI0LEU0LDlDKSwJVig2NCw1NixDMSw5MCksCVwN
Ci0JVig3QixDQiw4NCw2MSksCVYoRDUsMzIsQjYsNzApLAlWKDQ4LDZDLDVDLDc0KSwJVihEMCxC
OCw1Nyw0MikNCi0NCi0jZGVmaW5lCVYoYSxiLGMsZCkgMHgjI2EjI2IjI2MjI2QNCi1zdGF0aWMg
dWludDMyIFJUMFsyNTZdID0geyBSVCB9Ow0KLSN1bmRlZiBWDQotDQotI2RlZmluZQlWKGEsYixj
LGQpIDB4IyNkIyNhIyNiIyNjDQotc3RhdGljIHVpbnQzMiBSVDFbMjU2XSA9IHsgUlQgfTsNCi0j
dW5kZWYgVg0KLQ0KLSNkZWZpbmUJVihhLGIsYyxkKSAweCMjYyMjZCMjYSMjYg0KLXN0YXRpYyB1
aW50MzIgUlQyWzI1Nl0gPSB7IFJUIH07DQotI3VuZGVmIFYNCi0NCi0jZGVmaW5lCVYoYSxiLGMs
ZCkgMHgjI2IjI2MjI2QjI2ENCi1zdGF0aWMgdWludDMyIFJUM1syNTZdID0geyBSVCB9Ow0KLSN1
bmRlZiBWDQotDQotI3VuZGVmIFJUDQotDQotLyogcm91bmQgY29uc3RhbnRzICovDQotDQotc3Rh
dGljIHVpbnQzMiBSQ09OWzEwXSA9DQotew0KLQkweDAxMDAwMDAwLAkweDAyMDAwMDAwLAkweDA0
MDAwMDAwLAkweDA4MDAwMDAwLA0KLQkweDEwMDAwMDAwLAkweDIwMDAwMDAwLAkweDQwMDAwMDAw
LAkweDgwMDAwMDAwLA0KLQkweDFCMDAwMDAwLAkweDM2MDAwMDAwDQotfTsNCi0NCi0vKiBrZXkg
c2NoZWR1bGUJdGFibGVzICovDQotDQotc3RhdGljIGludCBLVF9pbml0ID0gMTsNCi0NCi1zdGF0
aWMgdWludDMyIEtUMFsyNTZdOw0KLXN0YXRpYyB1aW50MzIgS1QxWzI1Nl07DQotc3RhdGljIHVp
bnQzMiBLVDJbMjU2XTsNCi1zdGF0aWMgdWludDMyIEtUM1syNTZdOw0KLQ0KLS8qIHBsYXRmb3Jt
LWluZGVwZW5kYW50CTMyLWJpdCBpbnRlZ2VyIG1hbmlwdWxhdGlvbgltYWNyb3MgKi8NCi0NCi0j
ZGVmaW5lCUdFVF9VSU5UMzIobixiLGkpCQkJCQkJXA0KLXsJCQkJCQkJCQkJCQlcDQotCShuKQk9
ICgJKHVpbnQzMikgKGIpWyhpKQldIDw8IDI0CSkJCVwNCi0JCXwgKAkodWludDMyKSAoYilbKGkp
ICsgMV0gPDwgMTYJKQkJXA0KLQkJfCAoCSh1aW50MzIpIChiKVsoaSkgKyAyXSA8PCAgOAkpCQlc
DQotCQl8ICgJKHVpbnQzMikgKGIpWyhpKSArIDNdCQkpOwkJXA0KLX0NCi0NCi0jZGVmaW5lCVBV
VF9VSU5UMzIobixiLGkpCQkJCQkJXA0KLXsJCQkJCQkJCQkJCQlcDQotCShiKVsoaSkJICAgXSA9
ICh1aW50OCkgKCAobikgPj4JMjQgKTsJCVwNCi0JKGIpWyhpKQkrIDFdID0gKHVpbnQ4KSAoIChu
KSA+PgkxNiApOwkJXA0KLQkoYilbKGkpCSsgMl0gPSAodWludDgpICggKG4pID4+CSA4ICk7CQlc
DQotCShiKVsoaSkJKyAzXSA9ICh1aW50OCkgKCAobikJICAgKTsJCVwNCi19DQotDQotLyogQUVT
IGtleSBzY2hlZHVsaW5nIHJvdXRpbmUgKi8NCi0NCi1pbnQJYWVzX3NldF9rZXkoIGFlc19jb250
ZXh0ICpjdHgsIHVpbnQ4ICprZXksIGludCBuYml0cyApDQotew0KLQlpbnQJaTsNCi0JdWludDMy
ICpSSywJKlNLOw0KLQ0KLQlzd2l0Y2goCW5iaXRzICkNCi0Jew0KLQkJY2FzZSAxMjg6IGN0eC0+
bnIgPQkxMDsJYnJlYWs7DQotCQljYXNlIDE5MjogY3R4LT5uciA9CTEyOwlicmVhazsNCi0JCWNh
c2UgMjU2OiBjdHgtPm5yID0JMTQ7CWJyZWFrOw0KLQkJZGVmYXVsdAk6IHJldHVybiggMQkpOw0K
LQl9DQotDQotCVJLID0gY3R4LT5lcms7DQotDQotCWZvciggaSA9IDA7CWkgPAkobmJpdHMgPj4g
NSk7IGkrKyApDQotCXsNCi0JCUdFVF9VSU5UMzIoCVJLW2ldLCBrZXksCWkgKgk0ICk7DQotCX0N
Ci0NCi0JLyogc2V0dXAgZW5jcnlwdGlvbglyb3VuZCBrZXlzICovDQotDQotCXN3aXRjaCgJbmJp
dHMgKQ0KLQl7DQotCWNhc2UgMTI4Og0KLQ0KLQkJZm9yKCBpID0gMDsJaSA8CTEwOwlpKyssIFJL
CSs9IDQgKQ0KLQkJew0KLQkJCVJLWzRdICA9IFJLWzBdIF4gUkNPTltpXSBeDQotCQkJCQkJKCBG
U2JbICh1aW50OCkgKCBSS1szXSA+PiAxNiApIF0gPDwJMjQgKSBeDQotCQkJCQkJKCBGU2JbICh1
aW50OCkgKCBSS1szXSA+PiAgOCApIF0gPDwJMTYgKSBeDQotCQkJCQkJKCBGU2JbICh1aW50OCkg
KCBSS1szXQkJICkgXSA8PAkgOCApIF4NCi0JCQkJCQkoIEZTYlsgKHVpbnQ4KSAoIFJLWzNdID4+
IDI0ICkgXQkgICApOw0KLQ0KLQkJCVJLWzVdICA9IFJLWzFdIF4gUktbNF07DQotCQkJUktbNl0g
ID0gUktbMl0gXiBSS1s1XTsNCi0JCQlSS1s3XSAgPSBSS1szXSBeIFJLWzZdOw0KLQkJfQ0KLQkJ
YnJlYWs7DQotDQotCWNhc2UgMTkyOg0KLQ0KLQkJZm9yKCBpID0gMDsJaSA8CTg7IGkrKywJUksg
Kz0gNgkpDQotCQl7DQotCQkJUktbNl0gID0gUktbMF0gXiBSQ09OW2ldIF4NCi0JCQkJCQkoIEZT
YlsgKHVpbnQ4KSAoIFJLWzVdID4+IDE2ICkgXSA8PAkyNCApIF4NCi0JCQkJCQkoIEZTYlsgKHVp
bnQ4KSAoIFJLWzVdID4+ICA4ICkgXSA8PAkxNiApIF4NCi0JCQkJCQkoIEZTYlsgKHVpbnQ4KSAo
IFJLWzVdCQkgKSBdIDw8CSA4ICkgXg0KLQkJCQkJCSggRlNiWyAodWludDgpICggUktbNV0gPj4g
MjQgKSBdCSAgICk7DQotDQotCQkJUktbN10gID0gUktbMV0gXiBSS1s2XTsNCi0JCQlSS1s4XSAg
PSBSS1syXSBeIFJLWzddOw0KLQkJCVJLWzldICA9IFJLWzNdIF4gUktbOF07DQotCQkJUktbMTBd
ID0gUktbNF0gXiBSS1s5XTsNCi0JCQlSS1sxMV0gPSBSS1s1XSBeIFJLWzEwXTsNCi0JCX0NCi0J
CWJyZWFrOw0KLQ0KLQljYXNlIDI1NjoNCi0NCi0JCWZvciggaSA9IDA7CWkgPAk3OyBpKyssCVJL
ICs9IDgJKQ0KLQkJew0KLQkJCVJLWzhdICA9IFJLWzBdIF4gUkNPTltpXSBeDQotCQkJCQkJKCBG
U2JbICh1aW50OCkgKCBSS1s3XSA+PiAxNiApIF0gPDwJMjQgKSBeDQotCQkJCQkJKCBGU2JbICh1
aW50OCkgKCBSS1s3XSA+PiAgOCApIF0gPDwJMTYgKSBeDQotCQkJCQkJKCBGU2JbICh1aW50OCkg
KCBSS1s3XQkJICkgXSA8PAkgOCApIF4NCi0JCQkJCQkoIEZTYlsgKHVpbnQ4KSAoIFJLWzddID4+
IDI0ICkgXQkgICApOw0KLQ0KLQkJCVJLWzldICA9IFJLWzFdIF4gUktbOF07DQotCQkJUktbMTBd
ID0gUktbMl0gXiBSS1s5XTsNCi0JCQlSS1sxMV0gPSBSS1szXSBeIFJLWzEwXTsNCi0NCi0JCQlS
S1sxMl0gPSBSS1s0XSBeDQotCQkJCQkJKCBGU2JbICh1aW50OCkgKCBSS1sxMV0JPj4gMjQgKQld
IDw8IDI0CSkgXg0KLQkJCQkJCSggRlNiWyAodWludDgpICggUktbMTFdCT4+IDE2ICkJXSA8PCAx
NgkpIF4NCi0JCQkJCQkoIEZTYlsgKHVpbnQ4KSAoIFJLWzExXQk+Pgk4ICkJXSA8PCAgOAkpIF4N
Ci0JCQkJCQkoIEZTYlsgKHVpbnQ4KSAoIFJLWzExXQkJICApCV0JCSk7DQotDQotCQkJUktbMTNd
ID0gUktbNV0gXiBSS1sxMl07DQotCQkJUktbMTRdID0gUktbNl0gXiBSS1sxM107DQotCQkJUktb
MTVdID0gUktbN10gXiBSS1sxNF07DQotCQl9DQotCQlicmVhazsNCi0JfQ0KLQ0KLQkvKiBzZXR1
cCBkZWNyeXB0aW9uCXJvdW5kIGtleXMgKi8NCi0NCi0JaWYoCUtUX2luaXQJKQ0KLQl7DQotCQlm
b3IoIGkgPSAwOwlpIDwJMjU2OyBpKysgKQ0KLQkJew0KLQkJCUtUMFtpXSA9IFJUMFsgRlNiW2ld
IF07DQotCQkJS1QxW2ldID0gUlQxWyBGU2JbaV0gXTsNCi0JCQlLVDJbaV0gPSBSVDJbIEZTYltp
XSBdOw0KLQkJCUtUM1tpXSA9IFJUM1sgRlNiW2ldIF07DQotCQl9DQotDQotCQlLVF9pbml0CT0g
MDsNCi0JfQ0KLQ0KLQlTSyA9IGN0eC0+ZHJrOw0KLQ0KLQkqU0srKyA9CSpSSysrOw0KLQkqU0sr
KyA9CSpSSysrOw0KLQkqU0srKyA9CSpSSysrOw0KLQkqU0srKyA9CSpSSysrOw0KLQ0KLQlmb3Io
IGkgPSAxOwlpIDwJY3R4LT5ucjsgaSsrICkNCi0Jew0KLQkJUksgLT0gODsNCi0NCi0JCSpTSysr
ID0JS1QwWyAodWludDgpICggKlJLID4+IDI0ICkgXSBeDQotCQkJCUtUMVsgKHVpbnQ4KSAoICpS
SyA+PiAxNiApIF0gXg0KLQkJCQlLVDJbICh1aW50OCkgKCAqUksgPj4gIDggKSBdIF4NCi0JCQkJ
S1QzWyAodWludDgpICggKlJLCQkgKSBdOyBSSysrOw0KLQ0KLQkJKlNLKysgPQlLVDBbICh1aW50
OCkgKCAqUksgPj4gMjQgKSBdIF4NCi0JCQkJS1QxWyAodWludDgpICggKlJLID4+IDE2ICkgXSBe
DQotCQkJCUtUMlsgKHVpbnQ4KSAoICpSSyA+PiAgOCApIF0gXg0KLQkJCQlLVDNbICh1aW50OCkg
KCAqUksJCSApIF07IFJLKys7DQotDQotCQkqU0srKyA9CUtUMFsgKHVpbnQ4KSAoICpSSyA+PiAy
NCApIF0gXg0KLQkJCQlLVDFbICh1aW50OCkgKCAqUksgPj4gMTYgKSBdIF4NCi0JCQkJS1QyWyAo
dWludDgpICggKlJLID4+ICA4ICkgXSBeDQotCQkJCUtUM1sgKHVpbnQ4KSAoICpSSwkJICkgXTsg
UksrKzsNCi0NCi0JCSpTSysrID0JS1QwWyAodWludDgpICggKlJLID4+IDI0ICkgXSBeDQotCQkJ
CUtUMVsgKHVpbnQ4KSAoICpSSyA+PiAxNiApIF0gXg0KLQkJCQlLVDJbICh1aW50OCkgKCAqUksg
Pj4gIDggKSBdIF4NCi0JCQkJS1QzWyAodWludDgpICggKlJLCQkgKSBdOyBSSysrOw0KLQl9DQot
DQotCVJLIC09IDg7DQotDQotCSpTSysrID0JKlJLKys7DQotCSpTSysrID0JKlJLKys7DQotCSpT
SysrID0JKlJLKys7DQotCSpTSysrID0JKlJLKys7DQotDQotCXJldHVybigJMCApOw0KLX0NCi0N
Ci0vKiBBRVMgMTI4LWJpdCBibG9jayBlbmNyeXB0aW9uCXJvdXRpbmUJKi8NCi0NCi12b2lkIGFl
c19lbmNyeXB0KGFlc19jb250ZXh0ICpjdHgsIHVpbnQ4IGlucHV0WzE2XSwJdWludDggb3V0cHV0
WzE2XSApDQotew0KLQl1aW50MzIgKlJLLAlYMCwJWDEsCVgyLAlYMywJWTAsCVkxLAlZMiwJWTM7
DQotDQotCVJLID0gY3R4LT5lcms7DQotCUdFVF9VSU5UMzIoCVgwLAlpbnB1dCwJMCApOyBYMAle
PSBSS1swXTsNCi0JR0VUX1VJTlQzMigJWDEsCWlucHV0LAk0ICk7IFgxCV49IFJLWzFdOw0KLQlH
RVRfVUlOVDMyKAlYMiwJaW5wdXQsCTggKTsgWDIJXj0gUktbMl07DQotCUdFVF9VSU5UMzIoCVgz
LAlpbnB1dCwgMTIgKTsgWDMJXj0gUktbM107DQotDQotI2RlZmluZQlBRVNfRlJPVU5EKFgwLFgx
LFgyLFgzLFkwLFkxLFkyLFkzKQkJXA0KLXsJCQkJCQkJCQkJCQlcDQotCVJLICs9IDQ7CQkJCQkJ
CQkJXA0KLQkJCQkJCQkJCQkJCVwNCi0JWDAgPSBSS1swXSBeIEZUMFsgKHVpbnQ4KSAoCVkwID4+
IDI0ICkgXSBeCVwNCi0JCQkJIEZUMVsgKHVpbnQ4KSAoCVkxID4+IDE2ICkgXSBeCVwNCi0JCQkJ
IEZUMlsgKHVpbnQ4KSAoCVkyID4+ICA4ICkgXSBeCVwNCi0JCQkJIEZUM1sgKHVpbnQ4KSAoCVkz
CQkgKSBdOwlcDQotCQkJCQkJCQkJCQkJXA0KLQlYMSA9IFJLWzFdIF4gRlQwWyAodWludDgpICgJ
WTEgPj4gMjQgKSBdIF4JXA0KLQkJCQkgRlQxWyAodWludDgpICgJWTIgPj4gMTYgKSBdIF4JXA0K
LQkJCQkgRlQyWyAodWludDgpICgJWTMgPj4gIDggKSBdIF4JXA0KLQkJCQkgRlQzWyAodWludDgp
ICgJWTAJCSApIF07CVwNCi0JCQkJCQkJCQkJCQlcDQotCVgyID0gUktbMl0gXiBGVDBbICh1aW50
OCkgKAlZMiA+PiAyNCApIF0gXglcDQotCQkJCSBGVDFbICh1aW50OCkgKAlZMyA+PiAxNiApIF0g
XglcDQotCQkJCSBGVDJbICh1aW50OCkgKAlZMCA+PiAgOCApIF0gXglcDQotCQkJCSBGVDNbICh1
aW50OCkgKAlZMQkJICkgXTsJXA0KLQkJCQkJCQkJCQkJCVwNCi0JWDMgPSBSS1szXSBeIEZUMFsg
KHVpbnQ4KSAoCVkzID4+IDI0ICkgXSBeCVwNCi0JCQkJIEZUMVsgKHVpbnQ4KSAoCVkwID4+IDE2
ICkgXSBeCVwNCi0JCQkJIEZUMlsgKHVpbnQ4KSAoCVkxID4+ICA4ICkgXSBeCVwNCi0JCQkJIEZU
M1sgKHVpbnQ4KSAoCVkyCQkgKSBdOwlcDQotfQ0KLQ0KLQlBRVNfRlJPVU5EKAlZMCwJWTEsCVky
LAlZMywJWDAsCVgxLAlYMiwJWDMgKTsJCS8qIHJvdW5kIDEgKi8NCi0JQUVTX0ZST1VORCgJWDAs
CVgxLAlYMiwJWDMsCVkwLAlZMSwJWTIsCVkzICk7CQkvKiByb3VuZCAyICovDQotCUFFU19GUk9V
TkQoCVkwLAlZMSwJWTIsCVkzLAlYMCwJWDEsCVgyLAlYMyApOwkJLyogcm91bmQgMyAqLw0KLQlB
RVNfRlJPVU5EKAlYMCwJWDEsCVgyLAlYMywJWTAsCVkxLAlZMiwJWTMgKTsJCS8qIHJvdW5kIDQg
Ki8NCi0JQUVTX0ZST1VORCgJWTAsCVkxLAlZMiwJWTMsCVgwLAlYMSwJWDIsCVgzICk7CQkvKiBy
b3VuZCA1ICovDQotCUFFU19GUk9VTkQoCVgwLAlYMSwJWDIsCVgzLAlZMCwJWTEsCVkyLAlZMyAp
OwkJLyogcm91bmQgNiAqLw0KLQlBRVNfRlJPVU5EKAlZMCwJWTEsCVkyLAlZMywJWDAsCVgxLAlY
MiwJWDMgKTsJCS8qIHJvdW5kIDcgKi8NCi0JQUVTX0ZST1VORCgJWDAsCVgxLAlYMiwJWDMsCVkw
LAlZMSwJWTIsCVkzICk7CQkvKiByb3VuZCA4ICovDQotCUFFU19GUk9VTkQoCVkwLAlZMSwJWTIs
CVkzLAlYMCwJWDEsCVgyLAlYMyApOwkJLyogcm91bmQgOSAqLw0KLQ0KLQlpZigJY3R4LT5ucgk+
IDEwICkNCi0Jew0KLQkJQUVTX0ZST1VORCgJWDAsCVgxLAlYMiwJWDMsCVkwLAlZMSwJWTIsCVkz
ICk7CS8qIHJvdW5kIDEwCSovDQotCQlBRVNfRlJPVU5EKAlZMCwJWTEsCVkyLAlZMywJWDAsCVgx
LAlYMiwJWDMgKTsJLyogcm91bmQgMTEJKi8NCi0JfQ0KLQ0KLQlpZigJY3R4LT5ucgk+IDEyICkN
Ci0Jew0KLQkJQUVTX0ZST1VORCgJWDAsCVgxLAlYMiwJWDMsCVkwLAlZMSwJWTIsCVkzICk7CS8q
IHJvdW5kIDEyCSovDQotCQlBRVNfRlJPVU5EKAlZMCwJWTEsCVkyLAlZMywJWDAsCVgxLAlYMiwJ
WDMgKTsJLyogcm91bmQgMTMJKi8NCi0JfQ0KLQ0KLQkvKiBsYXN0CXJvdW5kICovDQotDQotCVJL
ICs9IDQ7DQotDQotCVgwID0gUktbMF0gXiAoIEZTYlsJKHVpbnQ4KQkoIFkwID4+CTI0ICkgXSA8
PCAyNCApIF4NCi0JCQkJICggRlNiWwkodWludDgpCSggWTEgPj4JMTYgKSBdIDw8IDE2ICkgXg0K
LQkJCQkgKCBGU2JbCSh1aW50OCkJKCBZMiA+PgkgOCApIF0gPDwgIDggKSBeDQotCQkJCSAoIEZT
YlsJKHVpbnQ4KQkoIFkzCSAgICkgXQkJICk7DQotDQotCVgxID0gUktbMV0gXiAoIEZTYlsJKHVp
bnQ4KQkoIFkxID4+CTI0ICkgXSA8PCAyNCApIF4NCi0JCQkJICggRlNiWwkodWludDgpCSggWTIg
Pj4JMTYgKSBdIDw8IDE2ICkgXg0KLQkJCQkgKCBGU2JbCSh1aW50OCkJKCBZMyA+PgkgOCApIF0g
PDwgIDggKSBeDQotCQkJCSAoIEZTYlsJKHVpbnQ4KQkoIFkwCSAgICkgXQkJICk7DQotDQotCVgy
ID0gUktbMl0gXiAoIEZTYlsJKHVpbnQ4KQkoIFkyID4+CTI0ICkgXSA8PCAyNCApIF4NCi0JCQkJ
ICggRlNiWwkodWludDgpCSggWTMgPj4JMTYgKSBdIDw8IDE2ICkgXg0KLQkJCQkgKCBGU2JbCSh1
aW50OCkJKCBZMCA+PgkgOCApIF0gPDwgIDggKSBeDQotCQkJCSAoIEZTYlsJKHVpbnQ4KQkoIFkx
CSAgICkgXQkJICk7DQotDQotCVgzID0gUktbM10gXiAoIEZTYlsJKHVpbnQ4KQkoIFkzID4+CTI0
ICkgXSA8PCAyNCApIF4NCi0JCQkJICggRlNiWwkodWludDgpCSggWTAgPj4JMTYgKSBdIDw8IDE2
ICkgXg0KLQkJCQkgKCBGU2JbCSh1aW50OCkJKCBZMSA+PgkgOCApIF0gPDwgIDggKSBeDQotCQkJ
CSAoIEZTYlsJKHVpbnQ4KQkoIFkyCSAgICkgXQkJICk7DQotDQotCVBVVF9VSU5UMzIoCVgwLAlv
dXRwdXQsCSAwICk7DQotCVBVVF9VSU5UMzIoCVgxLAlvdXRwdXQsCSA0ICk7DQotCVBVVF9VSU5U
MzIoCVgyLAlvdXRwdXQsCSA4ICk7DQotCVBVVF9VSU5UMzIoCVgzLAlvdXRwdXQsCTEyICk7DQot
fQ0KLQ0KLS8qIEFFUyAxMjgtYml0IGJsb2NrIGRlY3J5cHRpb24Jcm91dGluZQkqLw0KLQ0KLXZv
aWQgYWVzX2RlY3J5cHQoIGFlc19jb250ZXh0ICpjdHgsCXVpbnQ4IGlucHV0WzE2XSwgdWludDgg
b3V0cHV0WzE2XSApDQotew0KLQl1aW50MzIgKlJLLAlYMCwJWDEsCVgyLAlYMywJWTAsCVkxLAlZ
MiwJWTM7DQotDQotCVJLID0gY3R4LT5kcms7DQotDQotCUdFVF9VSU5UMzIoCVgwLAlpbnB1dCwJ
MCApOyBYMAlePSBSS1swXTsNCi0JR0VUX1VJTlQzMigJWDEsCWlucHV0LAk0ICk7IFgxCV49IFJL
WzFdOw0KLQlHRVRfVUlOVDMyKAlYMiwJaW5wdXQsCTggKTsgWDIJXj0gUktbMl07DQotCUdFVF9V
SU5UMzIoCVgzLAlpbnB1dCwgMTIgKTsgWDMJXj0gUktbM107DQotDQotI2RlZmluZQlBRVNfUlJP
VU5EKFgwLFgxLFgyLFgzLFkwLFkxLFkyLFkzKQkJXA0KLXsJCQkJCQkJCQkJCQlcDQotCVJLICs9
IDQ7CQkJCQkJCQkJXA0KLQkJCQkJCQkJCQkJCVwNCi0JWDAgPSBSS1swXSBeIFJUMFsgKHVpbnQ4
KSAoCVkwID4+IDI0ICkgXSBeCVwNCi0JCQkJIFJUMVsgKHVpbnQ4KSAoCVkzID4+IDE2ICkgXSBe
CVwNCi0JCQkJIFJUMlsgKHVpbnQ4KSAoCVkyID4+ICA4ICkgXSBeCVwNCi0JCQkJIFJUM1sgKHVp
bnQ4KSAoCVkxCQkgKSBdOwlcDQotCQkJCQkJCQkJCQkJXA0KLQlYMSA9IFJLWzFdIF4gUlQwWyAo
dWludDgpICgJWTEgPj4gMjQgKSBdIF4JXA0KLQkJCQkgUlQxWyAodWludDgpICgJWTAgPj4gMTYg
KSBdIF4JXA0KLQkJCQkgUlQyWyAodWludDgpICgJWTMgPj4gIDggKSBdIF4JXA0KLQkJCQkgUlQz
WyAodWludDgpICgJWTIJCSApIF07CVwNCi0JCQkJCQkJCQkJCQlcDQotCVgyID0gUktbMl0gXiBS
VDBbICh1aW50OCkgKAlZMiA+PiAyNCApIF0gXglcDQotCQkJCSBSVDFbICh1aW50OCkgKAlZMSA+
PiAxNiApIF0gXglcDQotCQkJCSBSVDJbICh1aW50OCkgKAlZMCA+PiAgOCApIF0gXglcDQotCQkJ
CSBSVDNbICh1aW50OCkgKAlZMwkJICkgXTsJXA0KLQkJCQkJCQkJCQkJCVwNCi0JWDMgPSBSS1sz
XSBeIFJUMFsgKHVpbnQ4KSAoCVkzID4+IDI0ICkgXSBeCVwNCi0JCQkJIFJUMVsgKHVpbnQ4KSAo
CVkyID4+IDE2ICkgXSBeCVwNCi0JCQkJIFJUMlsgKHVpbnQ4KSAoCVkxID4+ICA4ICkgXSBeCVwN
Ci0JCQkJIFJUM1sgKHVpbnQ4KSAoCVkwCQkgKSBdOwlcDQotfQ0KLQ0KLQlBRVNfUlJPVU5EKAlZ
MCwJWTEsCVkyLAlZMywJWDAsCVgxLAlYMiwJWDMgKTsJCS8qIHJvdW5kIDEgKi8NCi0JQUVTX1JS
T1VORCgJWDAsCVgxLAlYMiwJWDMsCVkwLAlZMSwJWTIsCVkzICk7CQkvKiByb3VuZCAyICovDQot
CUFFU19SUk9VTkQoCVkwLAlZMSwJWTIsCVkzLAlYMCwJWDEsCVgyLAlYMyApOwkJLyogcm91bmQg
MyAqLw0KLQlBRVNfUlJPVU5EKAlYMCwJWDEsCVgyLAlYMywJWTAsCVkxLAlZMiwJWTMgKTsJCS8q
IHJvdW5kIDQgKi8NCi0JQUVTX1JST1VORCgJWTAsCVkxLAlZMiwJWTMsCVgwLAlYMSwJWDIsCVgz
ICk7CQkvKiByb3VuZCA1ICovDQotCUFFU19SUk9VTkQoCVgwLAlYMSwJWDIsCVgzLAlZMCwJWTEs
CVkyLAlZMyApOwkJLyogcm91bmQgNiAqLw0KLQlBRVNfUlJPVU5EKAlZMCwJWTEsCVkyLAlZMywJ
WDAsCVgxLAlYMiwJWDMgKTsJCS8qIHJvdW5kIDcgKi8NCi0JQUVTX1JST1VORCgJWDAsCVgxLAlY
MiwJWDMsCVkwLAlZMSwJWTIsCVkzICk7CQkvKiByb3VuZCA4ICovDQotCUFFU19SUk9VTkQoCVkw
LAlZMSwJWTIsCVkzLAlYMCwJWDEsCVgyLAlYMyApOwkJLyogcm91bmQgOSAqLw0KLQ0KLQlpZigJ
Y3R4LT5ucgk+IDEwICkNCi0Jew0KLQkJQUVTX1JST1VORCgJWDAsCVgxLAlYMiwJWDMsCVkwLAlZ
MSwJWTIsCVkzICk7CS8qIHJvdW5kIDEwCSovDQotCQlBRVNfUlJPVU5EKAlZMCwJWTEsCVkyLAlZ
MywJWDAsCVgxLAlYMiwJWDMgKTsJLyogcm91bmQgMTEJKi8NCi0JfQ0KLQ0KLQlpZigJY3R4LT5u
cgk+IDEyICkNCi0Jew0KLQkJQUVTX1JST1VORCgJWDAsCVgxLAlYMiwJWDMsCVkwLAlZMSwJWTIs
CVkzICk7CS8qIHJvdW5kIDEyCSovDQotCQlBRVNfUlJPVU5EKAlZMCwJWTEsCVkyLAlZMywJWDAs
CVgxLAlYMiwJWDMgKTsJLyogcm91bmQgMTMJKi8NCi0JfQ0KLQ0KLQkvKiBsYXN0CXJvdW5kICov
DQotDQotCVJLICs9IDQ7DQotDQotCVgwID0gUktbMF0gXiAoIFJTYlsJKHVpbnQ4KQkoIFkwID4+
CTI0ICkgXSA8PCAyNCApIF4NCi0JCQkJICggUlNiWwkodWludDgpCSggWTMgPj4JMTYgKSBdIDw8
IDE2ICkgXg0KLQkJCQkgKCBSU2JbCSh1aW50OCkJKCBZMiA+PgkgOCApIF0gPDwgIDggKSBeDQot
CQkJCSAoIFJTYlsJKHVpbnQ4KQkoIFkxCSAgICkgXQkJICk7DQotDQotCVgxID0gUktbMV0gXiAo
IFJTYlsJKHVpbnQ4KQkoIFkxID4+CTI0ICkgXSA8PCAyNCApIF4NCi0JCQkJICggUlNiWwkodWlu
dDgpCSggWTAgPj4JMTYgKSBdIDw8IDE2ICkgXg0KLQkJCQkgKCBSU2JbCSh1aW50OCkJKCBZMyA+
PgkgOCApIF0gPDwgIDggKSBeDQotCQkJCSAoIFJTYlsJKHVpbnQ4KQkoIFkyCSAgICkgXQkJICk7
DQotDQotCVgyID0gUktbMl0gXiAoIFJTYlsJKHVpbnQ4KQkoIFkyID4+CTI0ICkgXSA8PCAyNCAp
IF4NCi0JCQkJICggUlNiWwkodWludDgpCSggWTEgPj4JMTYgKSBdIDw8IDE2ICkgXg0KLQkJCQkg
KCBSU2JbCSh1aW50OCkJKCBZMCA+PgkgOCApIF0gPDwgIDggKSBeDQotCQkJCSAoIFJTYlsJKHVp
bnQ4KQkoIFkzCSAgICkgXQkJICk7DQotDQotCVgzID0gUktbM10gXiAoIFJTYlsJKHVpbnQ4KQko
IFkzID4+CTI0ICkgXSA8PCAyNCApIF4NCi0JCQkJICggUlNiWwkodWludDgpCSggWTIgPj4JMTYg
KSBdIDw8IDE2ICkgXg0KLQkJCQkgKCBSU2JbCSh1aW50OCkJKCBZMSA+PgkgOCApIF0gPDwgIDgg
KSBeDQotCQkJCSAoIFJTYlsJKHVpbnQ4KQkoIFkwCSAgICkgXQkJICk7DQotDQotCVBVVF9VSU5U
MzIoCVgwLAlvdXRwdXQsCSAwICk7DQotCVBVVF9VSU5UMzIoCVgxLAlvdXRwdXQsCSA0ICk7DQot
CVBVVF9VSU5UMzIoCVgyLAlvdXRwdXQsCSA4ICk7DQotCVBVVF9VSU5UMzIoCVgzLAlvdXRwdXQs
CTEyICk7DQotfQ0KLQ0KLS8qDQotKiBGKFAsIFMsIGMsIGkpID0gVTEgeG9yIFUyIHhvciAuLi4g
VWMgDQotKiBVMSA9IFBSRihQLCBTIHx8IEludChpKSkgDQotKiBVMiA9IFBSRihQLCBVMSkgDQot
KiBVYyA9IFBSRihQLCBVYy0xKSANCi0qLyANCi0NCi12b2lkIEYoY2hhciAqcGFzc3dvcmQsIHVu
c2lnbmVkIGNoYXIgKnNzaWQsIGludCBzc2lkbGVuZ3RoLCBpbnQgaXRlcmF0aW9ucywgaW50IGNv
dW50LCB1bnNpZ25lZCBjaGFyICpvdXRwdXQpIA0KLXsgDQotICAgIHVuc2lnbmVkIGNoYXIgZGln
ZXN0WzM2XSwgZGlnZXN0MVtTSEFfRElHRVNUX0xFTl07IA0KLSAgICBpbnQgaSwgajsgDQotDQot
ICAgIC8qIFUxID0gUFJGKFAsIFMgfHwgaW50KGkpKSAqLyANCi0gICAgbWVtY3B5KGRpZ2VzdCwg
c3NpZCwgc3NpZGxlbmd0aCk7IA0KLSAgICBkaWdlc3Rbc3NpZGxlbmd0aF0gPSAodW5zaWduZWQg
Y2hhcikoKGNvdW50Pj4yNCkgJiAweGZmKTsgDQotICAgIGRpZ2VzdFtzc2lkbGVuZ3RoKzFdID0g
KHVuc2lnbmVkIGNoYXIpKChjb3VudD4+MTYpICYgMHhmZik7IA0KLSAgICBkaWdlc3Rbc3NpZGxl
bmd0aCsyXSA9ICh1bnNpZ25lZCBjaGFyKSgoY291bnQ+PjgpICYgMHhmZik7IA0KLSAgICBkaWdl
c3Rbc3NpZGxlbmd0aCszXSA9ICh1bnNpZ25lZCBjaGFyKShjb3VudCAmIDB4ZmYpOyANCi0gICAg
SE1BQ19TSEExKGRpZ2VzdCwgc3NpZGxlbmd0aCs0LCAodW5zaWduZWQgY2hhciopIHBhc3N3b3Jk
LCAoaW50KSBzdHJsZW4ocGFzc3dvcmQpLCBkaWdlc3QxKTsgLy8gZm9yIFdQQSB1cGRhdGUNCi0N
Ci0gICAgLyogb3V0cHV0ID0gVTEgKi8gDQotICAgIG1lbWNweShvdXRwdXQsIGRpZ2VzdDEsIFNI
QV9ESUdFU1RfTEVOKTsgDQotDQotICAgIGZvciAoaSA9IDE7IGkgPCBpdGVyYXRpb25zOyBpKysp
IA0KLSAgICB7IA0KLSAgICAgICAgLyogVW4gPSBQUkYoUCwgVW4tMSkgKi8gDQotICAgICAgICBI
TUFDX1NIQTEoZGlnZXN0MSwgU0hBX0RJR0VTVF9MRU4sICh1bnNpZ25lZCBjaGFyKikgcGFzc3dv
cmQsIChpbnQpIHN0cmxlbihwYXNzd29yZCksIGRpZ2VzdCk7IC8vIGZvciBXUEEgdXBkYXRlDQot
ICAgICAgICBtZW1jcHkoZGlnZXN0MSwgZGlnZXN0LCBTSEFfRElHRVNUX0xFTik7IA0KLQ0KLSAg
ICAgICAgLyogb3V0cHV0ID0gb3V0cHV0IHhvciBVbiAqLyANCi0gICAgICAgIGZvciAoaiA9IDA7
IGogPCBTSEFfRElHRVNUX0xFTjsgaisrKSANCi0gICAgICAgIHsgDQotICAgICAgICAgICAgb3V0
cHV0W2pdIF49IGRpZ2VzdFtqXTsgDQotICAgICAgICB9IA0KLSAgICB9IA0KLX0vKiANCi0qIHBh
c3N3b3JkIC0gYXNjaWkgc3RyaW5nIHVwIHRvIDYzIGNoYXJhY3RlcnMgaW4gbGVuZ3RoIA0KLSog
c3NpZCAtIG9jdGV0IHN0cmluZyB1cCB0byAzMiBvY3RldHMgDQotKiBzc2lkbGVuZ3RoIC0gbGVu
Z3RoIG9mIHNzaWQgaW4gb2N0ZXRzIA0KLSogb3V0cHV0IG11c3QgYmUgNDAgb2N0ZXRzIGluIGxl
bmd0aCBhbmQgb3V0cHV0cyAyNTYgYml0cyBvZiBrZXkgDQotKi8gDQotaW50IFBhc3N3b3JkSGFz
aChjaGFyICpwYXNzd29yZCwgdW5zaWduZWQgY2hhciAqc3NpZCwgaW50IHNzaWRsZW5ndGgsIHVu
c2lnbmVkIGNoYXIgKm91dHB1dCkgDQoteyANCi0gICAgaWYgKChzdHJsZW4ocGFzc3dvcmQpID4g
NjMpIHx8IChzc2lkbGVuZ3RoID4gMzIpKSANCi0gICAgICAgIHJldHVybiAwOyANCi0NCi0gICAg
RihwYXNzd29yZCwgc3NpZCwgc3NpZGxlbmd0aCwgNDA5NiwgMSwgb3V0cHV0KTsgDQotICAgIEYo
cGFzc3dvcmQsIHNzaWQsIHNzaWRsZW5ndGgsIDQwOTYsIDIsICZvdXRwdXRbU0hBX0RJR0VTVF9M
RU5dKTsgDQotICAgIHJldHVybiAxOyANCi19DQotDQotDQpkaWZmIC1ydU4gcnQyNTcwLTEuMS4w
LWIxL01vZHVsZS9tbG1lLmMgcnQyNTcwLWN2cy0yMDA1MTIyNjE2L01vZHVsZS9tbG1lLmMKLS0t
IHJ0MjU3MC0xLjEuMC1iMS9Nb2R1bGUvbWxtZS5jCTIwMDUtMDctMzAgMTE6NDQ6MzAuMDAwMDAw
MDAwIC0wNTAwCisrKyBydDI1NzAtY3ZzLTIwMDUxMjI2MTYvTW9kdWxlL21sbWUuYwkyMDA1LTEy
LTAyIDA2OjU1OjE1LjAwMDAwMDAwMCAtMDYwMApAQCAtMzEsNiArMzEsNyBAQAogICoJTmFtZQkJ
RGF0ZQkJTW9kaWZpY2F0aW9uIGxvZ3MKICAqCUphbiBMZWUJCTIwMDUtMDYtMDEJUmVsZWFzZQog
ICoJTWF0aGlhc0sJMDktMDctMjAwNQlrbWFsbG9jIEFUT01JQyBmaXhlcworICoJUm9iaW5DCQkz
MS0wOC0yMDA1CUJsb2NrIG1sbWUgaW4gTU9OSVRPUiBtb2RlIHRvIGtlZXAgZnJvbSBzZW5kaW5n
IHByb2JlIHJlcXVlc3RzCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAjaW5jbHVkZSAicnRfY29u
ZmlnLmgiCkBAIC0zNjgsNyArMzY5LDcgQEAKIAkJCWJyZWFrOwogCQl9CiAJCS8vRnJvbSBtZXNz
YWdlIHR5cGUsIGRldGVybWluZSB3aGljaCBzdGF0ZSBtYWNoaW5lIEkgc2hvdWxkIGRyaXZlCi0J
CWlmIChNbG1lRGVxdWV1ZSgmcEFkLT5NbG1lLlF1ZXVlLCAmRWxlbSkpIAorCQlpZiAoTWxtZURl
cXVldWUoJnBBZC0+TWxtZS5RdWV1ZSwgJkVsZW0pICYmIHBBZC0+UG9ydENmZy5Cc3NUeXBlIT1C
U1NfTU9OSVRPUikgCiAJCXsKIAkJCS8vIGlmIGRlcXVldWUgc3VjY2VzcwogCQkJc3dpdGNoIChF
bGVtLT5NYWNoaW5lKSAKQEAgLTEwODMsNyArMTA4NCw3IEBACiAJCQkJCUNzcjE4LmZpZWxkLk9m
ZnNldCA9ICh0ZW1wICYgMHgwMDBGKTsKIAkJCQkJQ3NyMTguZmllbGQuSW50ZXJ2YWwgPSAodGVt
cCA+PiA2KTsKIAkJCQkJUlRVU0JXcml0ZU1BQ1JlZ2lzdGVyKHBBZCwgVFhSWF9DU1IxOCwgQ3Ny
MTgudmFsdWUpOwotCQkJCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfSU5GTywgIlRYUlhfQ1NSMTgg
PSAweCV4XG4iLCBDc3IxOC52YWx1ZSk7CisJCQkJCURCR1BSSU5UKFJUX0RFQlVHX0lORk8sICJU
WFJYX0NTUjE4ID0gMHgleFxuIiwgQ3NyMTgudmFsdWUpOwogCQkJCQkKIAkJCQkJcEFkLT5CZWFj
b25JbnRlcnZhbENoYW5nZUFsbG93ZWQgPSBGQUxTRTsKIAkJCQl9CkBAIC0xMDkzLDcgKzEwOTQs
NyBAQAogCQkJCQlDc3IxOC5maWVsZC5PZmZzZXQgPSAodGVtcCAmIDB4MDAwRik7CiAJCQkJCUNz
cjE4LmZpZWxkLkludGVydmFsID0gKHRlbXAgPj4gNik7CiAJCQkJCVJUVVNCV3JpdGVNQUNSZWdp
c3RlcihwQWQsIFRYUlhfQ1NSMTgsIENzcjE4LnZhbHVlKTsKLQkJCQkJREJHUFJJTlRfUkFXKFJU
X0RFQlVHX0lORk8sICJUWFJYX0NTUjE4ID0gMHgleFxuIiwgQ3NyMTgudmFsdWUpOworCQkJCQlE
QkdQUklOVChSVF9ERUJVR19JTkZPLCAiVFhSWF9DU1IxOCA9IDB4JXhcbiIsIENzcjE4LnZhbHVl
KTsKIAkJCQkJCiAJCQkJCXBBZC0+QmVhY29uSW50ZXJ2YWxDaGFuZ2VBbGxvd2VkID0gRkFMU0U7
CiAJCQkJfQpAQCAtMTEwMyw3ICsxMTA0LDcgQEAKIAkJCQkJQ3NyMTguZmllbGQuT2Zmc2V0ID0g
KHRlbXAgJiAweDAwMEYpOwogCQkJCQlDc3IxOC5maWVsZC5JbnRlcnZhbCA9ICh0ZW1wID4+IDYp
OwogCQkJCQlSVFVTQldyaXRlTUFDUmVnaXN0ZXIocEFkLCBUWFJYX0NTUjE4LCBDc3IxOC52YWx1
ZSk7Ci0JCQkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19JTkZPLCAiVFhSWF9DU1IxOCA9IDB4JXhc
biIsIENzcjE4LnZhbHVlKTsKKwkJCQkJREJHUFJJTlQoUlRfREVCVUdfSU5GTywgIlRYUlhfQ1NS
MTggPSAweCV4XG4iLCBDc3IxOC52YWx1ZSk7CiAJCQkJCQogCQkJCQlwQWQtPkJlYWNvbkludGVy
dmFsQ2hhbmdlQWxsb3dlZCA9IEZBTFNFOwogCQkJCX0KQEAgLTExMTQsNyArMTExNSw3IEBACiAJ
CQkJCUNzcjE4LmZpZWxkLk9mZnNldCA9ICh0ZW1wICYgMHgwMDBGKTsKIAkJCQkJQ3NyMTguZmll
bGQuSW50ZXJ2YWwgPSAodGVtcCA+PiA2KTsKIAkJCQkJUlRVU0JXcml0ZU1BQ1JlZ2lzdGVyKHBB
ZCwgVFhSWF9DU1IxOCwgQ3NyMTgudmFsdWUpOwotCQkJCQlEQkdQUklOVF9SQVcoUlRfREVCVUdf
VFJBQ0UsICgiVFhSWF9DU1IxOCA9IDB4JXhcbiIsIENzcjE4LnZhbHVlKSk7CisJCQkJCURCR1BS
SU5UKFJUX0RFQlVHX1RSQUNFLCAoIlRYUlhfQ1NSMTggPSAweCV4XG4iLCBDc3IxOC52YWx1ZSkp
OwogCQkJCQkKIAkJCQkJcEFkLT5CZWFjb25JbnRlcnZhbENoYW5nZUFsbG93ZWQgPSBGQUxTRTsK
IAkJCQl9CkBAIC0xMTIzLDcgKzExMjQsNyBAQAogI2lmIDAKIAkJCWVsc2UgaWYgKHBBZC0+UmVj
ZWl2ZWRCZWFjb25zQ291bnQgPiA5ICogcEFkLT5TZW50QmVhY29uc0NvdW50KQogCQkJewotCQkJ
CURCR1BSSU5UX1JBVyhSVF9ERUJVR19UUkFDRSwgKCJEbyBOb3RoaW5nXG4iKSk7CisJCQkJREJH
UFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiRG8gTm90aGluZ1xuIikpOwogCQkJfQogI2VuZGlmCiAJ
CQllbHNlCkBAIC0xMTMyLDcgKzExMzMsNyBAQAogCQkJCUNzcjE4LmZpZWxkLk9mZnNldCA9ICh0
ZW1wICYgMHgwMDBGKTsKIAkJCQlDc3IxOC5maWVsZC5JbnRlcnZhbCA9ICh0ZW1wID4+IDYpOwog
CQkJCVJUVVNCV3JpdGVNQUNSZWdpc3RlcihwQWQsIFRYUlhfQ1NSMTgsIENzcjE4LnZhbHVlKTsK
LQkJCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfSU5GTywgIlRYUlhfQ1NSMTggPSAweCV4XG4iLCBD
c3IxOC52YWx1ZSk7CisJCQkJREJHUFJJTlQoUlRfREVCVUdfSU5GTywgIlRYUlhfQ1NSMTggPSAw
eCV4XG4iLCBDc3IxOC52YWx1ZSk7CiAJCQkJCiAJCQkJcEFkLT5CZWFjb25JbnRlcnZhbENoYW5n
ZUFsbG93ZWQgPSBUUlVFOwogCQkJfQpAQCAtMTMwOSwxMSArMTMxMCwxMSBAQAogCiAgICAgICAg
IGlmIChwQWQtPkRyc0NvdW50ZXJzLmZOb2lzeUVudmlyb25tZW50KQogICAgICAgICB7Ci0gICAg
ICAgICAgICBEQkdQUklOVF9SQVcoUlRfREVCVUdfVFJBQ0UsIkRSUyhub2lzeSk6Iik7IAorICAg
ICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsIkRSUyhub2lzeSk6ICIpOwogICAgICAg
ICB9CiAgICAgICAgIGVsc2UKICAgICAgICAgewotICAgICAgICAgICAgREJHUFJJTlRfUkFXKFJU
X0RFQlVHX1RSQUNFLCJEUlM6Iik7IAorICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJB
Q0UsIkRSUzogIik7CiAgICAgICAgIH0KICAgICAgICAgREJHUFJJTlRfUkFXKFJUX0RFQlVHX1RS
QUNFLCJRdHlbJWRdPSVkIFBFUj0lZCUlICVkLXNlYywgUXR5WyVkXT0lZCwgUHR5PSVkXG4iLCAK
ICAgICAgICAgICAgIFJhdGVJZFRvTWJwc1tDdXJyUmF0ZV0sIHBBZC0+RHJzQ291bnRlcnMuVHhR
dWFsaXR5W0N1cnJSYXRlXSwKQEAgLTE0MDEsNyArMTQwMiw3IEBACiAgICAgLy8gaWYgcmF0ZS11
cCBoYXBwZW4sIGNsZWFyIGFsbCBiYWQgaGlzdG9yeSBvZiBhbGwgVFggcmF0ZXMKICAgICBpZiAo
cEFkLT5Qb3J0Q2ZnLlR4UmF0ZSA+IEN1cnJSYXRlKQogICAgIHsKLSAgICAgICAJREJHUFJJTlRf
UkFXKFJUX0RFQlVHX1RSQUNFLCJEUlM6ICsrVFggcmF0ZSBmcm9tICVkIHRvICVkIE1icHNcbiIs
IFJhdGVJZFRvTWJwc1tDdXJyUmF0ZV0sUmF0ZUlkVG9NYnBzW3BBZC0+UG9ydENmZy5UeFJhdGVd
KTsKKyAgICAgICAJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsIkRSUzogKytUWCByYXRlIGZyb20g
JWQgdG8gJWQgTWJwc1xuIiwgUmF0ZUlkVG9NYnBzW0N1cnJSYXRlXSxSYXRlSWRUb01icHNbcEFk
LT5Qb3J0Q2ZnLlR4UmF0ZV0pOwogICAgICAgICBwQWQtPkRyc0NvdW50ZXJzLkN1cnJUeFJhdGVT
dGFibGVUaW1lID0gMDsKICAgICAgICAgcEFkLT5EcnNDb3VudGVycy5UeFJhdGVVcFBlbmFsdHkg
PSAwOwogICAgICAgICBwQWQtPkRyc0NvdW50ZXJzLkxhc3RTZWNUeFJhdGVDaGFuZ2VBY3Rpb24g
PSAxOyAvLyByYXRlIFVQCkBAIC0xNDExLDcgKzE0MTIsNyBAQAogICAgIC8vIGlmIHJhdGUtZG93
biBoYXBwZW4sIG9ubHkgY2xlYXIgRG93blJhdGUncyBiYWQgaGlzdG9yeQogICAgIGVsc2UgaWYg
KHBBZC0+UG9ydENmZy5UeFJhdGUgPCBDdXJyUmF0ZSkKICAgICB7Ci0gICAgICAgCURCR1BSSU5U
X1JBVyhSVF9ERUJVR19UUkFDRSwiRFJTOiAtLVRYIHJhdGUgZnJvbSAlZCB0byAlZCBNYnBzXG4i
LCBSYXRlSWRUb01icHNbQ3VyclJhdGVdLFJhdGVJZFRvTWJwc1twQWQtPlBvcnRDZmcuVHhSYXRl
XSk7CisgICAgICAgCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCJEUlM6IC0tVFggcmF0ZSBmcm9t
ICVkIHRvICVkIE1icHNcbiIsIFJhdGVJZFRvTWJwc1tDdXJyUmF0ZV0sUmF0ZUlkVG9NYnBzW3BB
ZC0+UG9ydENmZy5UeFJhdGVdKTsKIAkgICAgLy8gc2hvcnRlciBzdGFibGUgdGltZSByZXF1aXJl
IG1vcmUgcGVuYWx0eSBpbiBuZXh0IHJhdGUgVVAgY3JpdGVyaWEKICAgICAgICAJaWYgKHBBZC0+
RHJzQ291bnRlcnMuQ3VyclR4UmF0ZVN0YWJsZVRpbWUgPCA0KSAgICAgIC8vIGxlc3MgdGhlbiA0
IHNlYwogICAgICAgIAkgICAgcEFkLT5EcnNDb3VudGVycy5UeFJhdGVVcFBlbmFsdHkgPSBEUlNf
UEVOQUxUWTsgLy8gYWRkIDggc2VjIHBlbmFsdHkKQEAgLTE3NzUsMTEgKzE3NzYsMTEgQEAKIAkJ
UlRNUF9TRVRfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfUkFESU9fT0ZGKTsKICAgICAgICAgCURC
R1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAiNFNldCBmUlRNUF9BREFQVEVSX1JBRElPX09GRiAiKTsK
IAl9CQotCURCR1BSSU5UX1JBVyhSVF9ERUJVR19URU1QLCIgIE1sbWVSYWRpb09mZiBcbiIgKTsK
KwlEQkdQUklOVF9SQVcoUlRfREVCVUdfVEVNUCwiTWxtZVJhZGlvT2ZmIFxuIik7CiAJUlRVU0JS
ZWplY3RQZW5kaW5nUGFja2V0cyhwQWQpOy8vcmVqZWN0IGFsbCBORElTIHBhY2tldHMgd2FpdGlu
ZyBpbiBUWCBxdWV1ZQogCVJUVVNCQ2xlYW5VcERhdGFCdWxrT3V0UXVldWUocEFkKTsKIAlNbG1l
U3VzcGVuZChwQWQpOwotCURCR1BSSU5UX1JBVyhSVF9ERUJVR19URU1QLCIgIDJNbG1lUmFkaW9P
ZmYgXG4iICk7CisJREJHUFJJTlRfUkFXKFJUX0RFQlVHX1RFTVAsIjJNbG1lUmFkaW9PZmYgXG4i
KTsKIAkvLyBBYm9ydCBUeAogCS8vIERpc2FibGUgUngKIAlSVFVTQldyaXRlTUFDUmVnaXN0ZXIo
cEFkLCBUWFJYX0NTUjIsIDEpOwpAQCAtMTc4OCw3ICsxNzg5LDcgQEAKIAl7CiAJCWlmIChhdG9t
aWNfcmVhZCgmcEFkLT5QZW5kaW5nUngpID4gMCkKIAkJewotCQkJREJHUFJJTlRfUkFXKFJUX0RF
QlVHX1RSQUNFLCAiQnVsa0luIElSUCBQZW5kaW5nISEhXG4iKTsKKwkJCURCR1BSSU5UKFJUX0RF
QlVHX1RSQUNFLCAiQnVsa0luIElSUCBQZW5kaW5nISEhXG4iKTsKIAkJCVJUVVNCX1ZlbmRvclJl
cXVlc3QocEFkLAogCQkJCTAsCiAJCQkJREVWSUNFX1ZFTkRPUl9SRVFVRVNUX09VVCwKQEAgLTE4
MDEsNyArMTgwMiw3IEBACiAJCQogCQlpZiAocEFkLT5CdWxrT3V0UGVuZGluZyA9PSBUUlVFKQog
CQl7Ci0JCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfVFJBQ0UsICJCdWxrT3V0IElSUCBQZW5kaW5n
ISEhXG4iKTsKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAiQnVsa091dCBJUlAgUGVuZGlu
ZyEhIVxuIik7CiAJCQlpZiAoaSA9PSAwKQogCQkJewogCQkJCVJUVVNCQ2FuY2VsUGVuZGluZ0J1
bGtPdXRJUlAocEFkKTsKQEAgLTE4MjQsNyArMTgyNSw3IEBACiAJCiAJLy8gQ2xlYW4gdXAgb2xk
IGJzcyB0YWJsZQogCUJzc1RhYmxlSW5pdCgmcEFkLT5Qb3J0Q2ZnLkJzc1RhYik7Ci0JREJHUFJJ
TlRfUkFXKFJUX0RFQlVHX1RFTVAsIiAgPD09TWxtZVJhZGlvT2ZmIFxuIiApOworCURCR1BSSU5U
KFJUX0RFQlVHX1RFTVAsIjw9PU1sbWVSYWRpb09mZiBcbiIgKTsKICNlbmRpZgogfQogCkBAIC0y
NzI3LDcgKzI3MjgsMTEgQEAKIAlJTlQgVGFpbDsKIAlNTE1FX1FVRVVFCSpRdWV1ZSA9IChNTE1F
X1FVRVVFICopJnBBZC0+TWxtZS5RdWV1ZTsKIAorI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtF
Uk5FTF9WRVJTSU9OKDIsIDUsIDApCiAJaWYgKHBBZC0+TUxNRVRocl9waWQgPiAwKQorI2Vsc2UK
KwlpZiAocEFkLT5NTE1FVGhyX2FjdGl2ZSkKKyNlbmRpZgogCXsKIAogCQlpZiAoTWxtZVF1ZXVl
RnVsbChRdWV1ZSkpIApAQCAtMjc4Myw4ICsyNzg4LDEzIEBACiAgICAgVUxPTkcgICAgICAgIE1z
Z1R5cGU7CiAKIAkvL0RCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCJNbG1lRW5xdWV1ZUZvclJlY3Yg
Iik7CisjaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiwgNSwgMCkKIAlp
ZigocEFkLT5NTE1FVGhyX3BpZCA8PSAwKSkKIAkJcmV0dXJuIEZBTFNFOworI2Vsc2UKKwlpZigh
cEFkLT5NTE1FVGhyX2FjdGl2ZSkKKwkJcmV0dXJuIEZBTFNFOworI2VuZGlmCiAJLy8gRmlyc3Qg
Y2hlY2sgdGhlIHNpemUsIGl0IE1VU1Qgbm90IGV4Y2VlZCB0aGUgbWxtZSBxdWV1ZSBzaXplCiAJ
aWYgKE1zZ0xlbiA+IE1BWF9MRU5fT0ZfTUxNRV9CVUZGRVIpCiAJewpkaWZmIC1ydU4gcnQyNTcw
LTEuMS4wLWIxL01vZHVsZS8uI21sbWUuYy4xLjQgcnQyNTcwLWN2cy0yMDA1MTIyNjE2L01vZHVs
ZS8uI21sbWUuYy4xLjQKLS0tIHJ0MjU3MC0xLjEuMC1iMS9Nb2R1bGUvLiNtbG1lLmMuMS40CTIw
MDUtMDctMzAgMTE6NDQ6MzAuMDAwMDAwMDAwIC0wNTAwCisrKyBydDI1NzAtY3ZzLTIwMDUxMjI2
MTYvTW9kdWxlLy4jbWxtZS5jLjEuNAkxOTY5LTEyLTMxIDE4OjAwOjAwLjAwMDAwMDAwMCAtMDYw
MApAQCAtMSw0NDk3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCi0gKiBSVDJ4MDAgU291
cmNlRm9yZ2UgUHJvamVjdCAtIGh0dHA6Ly9ydDJ4MDAuc291cmNlZm9yZ2UubmV0ICAgICAgICAg
ICAgICAqIAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAKLSAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICogCi0gKiAg
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5ICAqIAotICogICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgKiAKLSAqICAgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICogCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAqIAotICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgKiAKLSAqICAgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YgICAgICAgICogCi0gKiAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAqIAotICogICBHTlUgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgKiAK
LSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICogCi0gKiAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAqIAotICogICBhbG9uZyB3
aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgICAgICAgICAgICAgICAgICAg
ICAgICAgKiAKLSAqICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICogCi0gKiAgIDU5IFRlbXBsZSBQbGFjZSAtIFN1
aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLiAgICAgICAgICAgICAqIAotICog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKiAKLSAqICAgTGljZW5zZWQgdW5kZXIgdGhlIEdOVSBHUEwgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogCi0gKiAgIE9yaWdpbmFsIGNv
ZGUgc3VwcGxpZWQgdW5kZXIgbGljZW5zZSBmcm9tIFJhTGluayBJbmMsIDIwMDQuICAgICAgICAg
ICAqIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKLSAqCU1v
ZHVsZSBOYW1lOgltbG1lLmMKLSAqCi0gKglBYnN0cmFjdDoKLSAqCi0gKglSZXZpc2lvbiBIaXN0
b3J5OgotICoJV2hvCQlXaGVuCQlXaGF0Ci0gKgktLS0tLS0tLQktLS0tLS0tLS0tCS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqCU5hbWUJCURhdGUJCU1vZGlmaWNhdGlvbiBsb2dz
Ci0gKglKYW4gTGVlCQkyMDA1LTA2LTAxCVJlbGVhc2UKLSAqCU1hdGhpYXNLCTA5LTA3LTIwMDUJ
a21hbGxvYyBBVE9NSUMgZml4ZXMKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNpbmNsdWRlICJy
dF9jb25maWcuaCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgMSAgMiAg
IDUuNSAgIDExICAgNiAgICA5ICAgIDEyICAgMTggICAyNCAgIDM2ICAgNDggICA1NCAgIDcyICAx
MDAKLUNIQVIgUnNzaVNhZmVMZXZlbEZvclR4UmF0ZVtdID17ICAtOTIsIC05MSwgLTkwLCAtODcs
IC04OCwgLTg2LCAtODUsIC04MywgLTgxLCAtNzgsIC03MiwgLTcxLCAtNDAsIC00MCB9OwotCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gIDEgICAgICAyICAgICAgIDUuNSAg
ICAgIDExICAKLVVDSEFSIFBoeTExQk5leHRSYXRlRG93bndhcmRbXSA9IHtSQVRFXzEsIFJBVEVf
MSwgICBSQVRFXzIsICBSQVRFXzVfNX07Ci1VQ0hBUiBQaHkxMUJOZXh0UmF0ZVVwd2FyZFtdICAg
PSB7UkFURV8yLCBSQVRFXzVfNSwgUkFURV8xMSwgUkFURV8xMX07Ci0KLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyAgMSAgICAgIDIgICAgICAgNS41ICAgICAgMTEgICAgICAg
IDYgICAgICAgIDkgICAgICAgIDEyICAgICAgMTggICAgICAgMjQgICAgICAgMzYgICAgICAgNDgg
ICAgICAgNTQKLVVDSEFSIFBoeTExQkdOZXh0UmF0ZURvd253YXJkW109IHtSQVRFXzEsIFJBVEVf
MSwgICBSQVRFXzIsICBSQVRFXzVfNSxSQVRFXzExLCAgUkFURV82LCAgUkFURV8xMSwgUkFURV8x
MiwgUkFURV8xOCwgUkFURV8yNCwgUkFURV8zNiwgUkFURV80OH07Ci1VQ0hBUiBQaHkxMUJHTmV4
dFJhdGVVcHdhcmRbXSAgPSB7UkFURV8yLCBSQVRFXzVfNSwgUkFURV8xMSwgUkFURV8xMiwgUkFU
RV85LCAgIFJBVEVfMTIsIFJBVEVfMTgsIFJBVEVfMjQsIFJBVEVfMzYsIFJBVEVfNDgsIFJBVEVf
NTQsIFJBVEVfNTR9OwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gIDEg
ICAgICAyICAgICAgIDUuNSAgICAgIDExICAgICAgICA2ICAgICAgICA5ICAgICAgICAxMiAgICAg
IDE4ICAgICAgIDI0ICAgICAgIDM2ICAgICAgIDQ4ICAgICAgIDU0Ci1VQ0hBUiBQaHkxMUFOZXh0
UmF0ZURvd253YXJkW10gPSB7UkFURV82LCBSQVRFXzYsICAgUkFURV82LCAgUkFURV82LCAgUkFU
RV82LCAgIFJBVEVfNiwgIFJBVEVfOSwgIFJBVEVfMTIsIFJBVEVfMTgsIFJBVEVfMjQsIFJBVEVf
MzYsIFJBVEVfNDh9OwotVUNIQVIgUGh5MTFBTmV4dFJhdGVVcHdhcmRbXSAgID0ge1JBVEVfOSwg
UkFURV85LCAgIFJBVEVfOSwgIFJBVEVfOSwgIFJBVEVfOSwgICBSQVRFXzEyLCBSQVRFXzE4LCBS
QVRFXzI0LCBSQVRFXzM2LCBSQVRFXzQ4LCBSQVRFXzU0LCBSQVRFXzU0fTsKLQotLy8gMjU2MEQg
YW5kIGFmdGVyIGhhcyBpbXBsZW1lbnRlZCBBU0lDLWJhc2VkIE9GRE0gcmF0ZSBzd2l0Y2hpbmcs
IGJ1dCBub3QKLS8vIDI1NjBDIGFuZCBiZWZvcmUuIHRodXMgc29mdHdhcmUgdXNlIGRpZmZlcmVu
dCBQRVIgZm9yIHJhdGUgc3dpdGNoaW5nCi0vLyAgICAgICAgICAgICAgICAgICAgICAgICAgUkFU
RV8xLCAgMiwgNS41LCAxMSwgIDYsICA5LCAxMiwgMTgsIDI0LCAzNiwgNDgsIDU0Ci1VU0hPUlQg
TmV3UmF0ZVVwUEVSW10gICA9IHsgICAgNDAsICA0MCwgIDM1LCAyMCwgMjAsIDIwLCAyMCwgMTYs
IDEwLCAxNiwgMTAsICA2IH07IC8vIGluIHBlcmNlbnRhZ2UKLVVTSE9SVCBOZXdSYXRlRG93blBF
UltdID0geyAgICA1MCwgIDUwLCAgNDUsIDQ1LCAzNSwgMzUsIDM1LCAzNSwgMjUsIDI1LCAyNSwg
MTMgfTsgLy8gaW4gcGVyY2VudGFnZQotCi1VU0hPUlQgT2xkUmF0ZVVwUEVSW10gICA9IHsgICAg
NDAsICA0MCwgIDQwLCA0MCwgMzAsIDMwLCAzMCwgMzAsIDIwLCAyMCwgMTAsIDEwIH07IC8vIGlu
IHBlcmNlbnRhZ2UKLVVTSE9SVCBPbGRSYXRlRG93blBFUltdID0geyAgICA0NSwgIDQ1LCAgNDUs
IDQ1LCAzNSwgMzUsIDM1LCAzNSwgMjUsIDI1LCAyNSwgMTIgfTsgLy8gaW4gcGVyY2VudGFnZQot
ICAgIAotVUNIQVIgUmF0ZUlkVG9NYnBzW10gPSB7IDEsIDIsIDUsIDExLCA2LCA5LCAxMiwgMTgs
IDI0LCAzNiwgNDgsIDU0LCA3MiwgMTAwfTsKLVVTSE9SVCBSYXRlSWRUbzUwMEticHNbXSA9IHsg
MiwgNCwgMTEsIDIyLCAxMiwgMTgsIDI0LCAzNiwgNDgsIDcyLCA5NiwgMTA4LCAxNDQsIDIwMH07
Ci0gICAgCi1SVE1QX1JGX1JFR1MgUkYyNTIyUmVnVGFibGVbXSA9IHsKLS8vICAgICAgY2ggICBS
MSAgICAgICAgICBSMiAgICAgICAgICBSMyhUWDB+ND0wKSBSNAotICAgICAgICB7MSwgIDB4OTQw
MDIwNTAsIDB4OTQwYzFmZGEsIDB4OTQwMDAxMDEsIDB9LAotICAgICAgICB7MiwgIDB4OTQwMDIw
NTAsIDB4OTQwYzFmZWUsIDB4OTQwMDAxMDEsIDB9LAotICAgICAgICB7MywgIDB4OTQwMDIwNTAs
IDB4OTQwYzIwMDIsIDB4OTQwMDAxMDEsIDB9LAotICAgICAgICB7NCwgIDB4OTQwMDIwNTAsIDB4
OTQwYzIwMTYsIDB4OTQwMDAxMDEsIDB9LAotICAgICAgICB7NSwgIDB4OTQwMDIwNTAsIDB4OTQw
YzIwMmEsIDB4OTQwMDAxMDEsIDB9LAotICAgICAgICB7NiwgIDB4OTQwMDIwNTAsIDB4OTQwYzIw
M2UsIDB4OTQwMDAxMDEsIDB9LAotICAgICAgICB7NywgIDB4OTQwMDIwNTAsIDB4OTQwYzIwNTIs
IDB4OTQwMDAxMDEsIDB9LAotICAgICAgICB7OCwgIDB4OTQwMDIwNTAsIDB4OTQwYzIwNjYsIDB4
OTQwMDAxMDEsIDB9LAotICAgICAgICB7OSwgIDB4OTQwMDIwNTAsIDB4OTQwYzIwN2EsIDB4OTQw
MDAxMDEsIDB9LAotICAgICAgICB7MTAsIDB4OTQwMDIwNTAsIDB4OTQwYzIwOGUsIDB4OTQwMDAx
MDEsIDB9LAotICAgICAgICB7MTEsIDB4OTQwMDIwNTAsIDB4OTQwYzIwYTIsIDB4OTQwMDAxMDEs
IDB9LAotICAgICAgICB7MTIsIDB4OTQwMDIwNTAsIDB4OTQwYzIwYjYsIDB4OTQwMDAxMDEsIDB9
LAotICAgICAgICB7MTMsIDB4OTQwMDIwNTAsIDB4OTQwYzIwY2EsIDB4OTQwMDAxMDEsIDB9LAot
ICAgICAgICB7MTQsIDB4OTQwMDIwNTAsIDB4OTQwYzIwZmEsIDB4OTQwMDAxMDEsIDB9Ci19Owot
I2RlZmluZQlOVU1fT0ZfMjUyMl9DSE5MCShzaXplb2YoUkYyNTIyUmVnVGFibGUpIC8gc2l6ZW9m
KFJUTVBfUkZfUkVHUykpCi0KLVJUTVBfUkZfUkVHUyBSRjI1MjNSZWdUYWJsZVtdID0gewotLy8g
ICAgICBjaCAgIFIxICAgICAgICAgIFIyICAgICAgICAgIFIzKFRYMH40PTApIFI0Ci0gICAgICAg
IHsxLCAgMHg5NDAyMjAxMCwgMHg5NDAwMGM5ZSwgMHg5NDBlMDExMSwgMHg5NDAwMGExYn0sCi0g
ICAgICAgIHsyLCAgMHg5NDAyMjAxMCwgMHg5NDAwMGNhMiwgMHg5NDBlMDExMSwgMHg5NDAwMGEx
Yn0sCi0gICAgICAgIHszLCAgMHg5NDAyMjAxMCwgMHg5NDAwMGNhNiwgMHg5NDBlMDExMSwgMHg5
NDAwMGExYn0sCi0gICAgICAgIHs0LCAgMHg5NDAyMjAxMCwgMHg5NDAwMGNhYSwgMHg5NDBlMDEx
MSwgMHg5NDAwMGExYn0sCi0gICAgICAgIHs1LCAgMHg5NDAyMjAxMCwgMHg5NDAwMGNhZSwgMHg5
NDBlMDExMSwgMHg5NDAwMGExYn0sCi0gICAgICAgIHs2LCAgMHg5NDAyMjAxMCwgMHg5NDAwMGNi
MiwgMHg5NDBlMDExMSwgMHg5NDAwMGExYn0sCi0gICAgICAgIHs3LCAgMHg5NDAyMjAxMCwgMHg5
NDAwMGNiNiwgMHg5NDBlMDExMSwgMHg5NDAwMGExYn0sCi0gICAgICAgIHs4LCAgMHg5NDAyMjAx
MCwgMHg5NDAwMGNiYSwgMHg5NDBlMDExMSwgMHg5NDAwMGExYn0sCi0gICAgICAgIHs5LCAgMHg5
NDAyMjAxMCwgMHg5NDAwMGNiZSwgMHg5NDBlMDExMSwgMHg5NDAwMGExYn0sCi0gICAgICAgIHsx
MCwgMHg5NDAyMjAxMCwgMHg5NDAwMGQwMiwgMHg5NDBlMDExMSwgMHg5NDAwMGExYn0sCi0gICAg
ICAgIHsxMSwgMHg5NDAyMjAxMCwgMHg5NDAwMGQwNiwgMHg5NDBlMDExMSwgMHg5NDAwMGExYn0s
Ci0gICAgICAgIHsxMiwgMHg5NDAyMjAxMCwgMHg5NDAwMGQwYSwgMHg5NDBlMDExMSwgMHg5NDAw
MGExYn0sCi0gICAgICAgIHsxMywgMHg5NDAyMjAxMCwgMHg5NDAwMGQwZSwgMHg5NDBlMDExMSwg
MHg5NDAwMGExYn0sCi0gICAgICAgIHsxNCwgMHg5NDAyMjAxMCwgMHg5NDAwMGQxYSwgMHg5NDBl
MDExMSwgMHg5NDAwMGEwM30KLX07Ci0jZGVmaW5lCU5VTV9PRl8yNTIzX0NITkwJKHNpemVvZihS
RjI1MjNSZWdUYWJsZSkgLyBzaXplb2YoUlRNUF9SRl9SRUdTKSkKLQotUlRNUF9SRl9SRUdTIFJG
MjUyNFJlZ1RhYmxlW10gPSB7Ci0vLyAgICAgIGNoICAgUjEgICAgICAgICAgUjIgICAgICAgICAg
UjMoVFgwfjQ9MCkgUjQKLSAgICAgICAgezEsICAweDk0MDMyMDIwLCAweDk0MDAwYzllLCAweDk0
MDAwMTAxLCAweDk0MDAwYTFifSwKLSAgICAgICAgezIsICAweDk0MDMyMDIwLCAweDk0MDAwY2Ey
LCAweDk0MDAwMTAxLCAweDk0MDAwYTFifSwKLSAgICAgICAgezMsICAweDk0MDMyMDIwLCAweDk0
MDAwY2E2LCAweDk0MDAwMTAxLCAweDk0MDAwYTFifSwKLSAgICAgICAgezQsICAweDk0MDMyMDIw
LCAweDk0MDAwY2FhLCAweDk0MDAwMTAxLCAweDk0MDAwYTFifSwKLSAgICAgICAgezUsICAweDk0
MDMyMDIwLCAweDk0MDAwY2FlLCAweDk0MDAwMTAxLCAweDk0MDAwYTFifSwKLSAgICAgICAgezYs
ICAweDk0MDMyMDIwLCAweDk0MDAwY2IyLCAweDk0MDAwMTAxLCAweDk0MDAwYTFifSwKLSAgICAg
ICAgezcsICAweDk0MDMyMDIwLCAweDk0MDAwY2I2LCAweDk0MDAwMTAxLCAweDk0MDAwYTFifSwK
LSAgICAgICAgezgsICAweDk0MDMyMDIwLCAweDk0MDAwY2JhLCAweDk0MDAwMTAxLCAweDk0MDAw
YTFifSwKLSAgICAgICAgezksICAweDk0MDMyMDIwLCAweDk0MDAwY2JlLCAweDk0MDAwMTAxLCAw
eDk0MDAwYTFifSwKLSAgICAgICAgezEwLCAweDk0MDMyMDIwLCAweDk0MDAwZDAyLCAweDk0MDAw
MTAxLCAweDk0MDAwYTFifSwKLSAgICAgICAgezExLCAweDk0MDMyMDIwLCAweDk0MDAwZDA2LCAw
eDk0MDAwMTAxLCAweDk0MDAwYTFifSwKLSAgICAgICAgezEyLCAweDk0MDMyMDIwLCAweDk0MDAw
ZDBhLCAweDk0MDAwMTAxLCAweDk0MDAwYTFifSwKLSAgICAgICAgezEzLCAweDk0MDMyMDIwLCAw
eDk0MDAwZDBlLCAweDk0MDAwMTAxLCAweDk0MDAwYTFifSwKLSAgICAgICAgezE0LCAweDk0MDMy
MDIwLCAweDk0MDAwZDFhLCAweDk0MDAwMTAxLCAweDk0MDAwYTAzfQotfTsKLSNkZWZpbmUJTlVN
X09GXzI1MjRfQ0hOTAkoc2l6ZW9mKFJGMjUyNFJlZ1RhYmxlKSAvIHNpemVvZihSVE1QX1JGX1JF
R1MpKQotICAgICAgICAgICAgCi1SVE1QX1JGX1JFR1NfMSBSRjI1MjVSZWdUYWJsZVtdID0gewot
Ly8gICAgICBjaCAgIFRlbXBSMgkJIFIxICAgICAgICAgIFIyICAgICAgICAgIFIzKFRYMH40PTAp
IFI0Ci0gICAgICAgIHsxLCAgMHg5NDA4MGNiZSwgMHg5NDAyMjAyMCwgMHg5NDA4MGM5ZSwgMHg5
NDA2MDExMSwgMHg5NDAwMGExYn0sIC8vIHsxLCAgMHg5NDAyMjAxMCwgMHg5NDA4MDYyZSwgMHg5
NDA2MDExMSwgMHg5NDAwMGEyM30sIAotICAgICAgICB7MiwgIDB4OTQwODBkMDIsIDB4OTQwMjIw
MjAsIDB4OTQwODBjYTIsIDB4OTQwNjAxMTEsIDB4OTQwMDBhMWJ9LAotICAgICAgICB7MywgIDB4
OTQwODBkMDYsIDB4OTQwMjIwMjAsIDB4OTQwODBjYTYsIDB4OTQwNjAxMTEsIDB4OTQwMDBhMWJ9
LAotICAgICAgICB7NCwgIDB4OTQwODBkMGEsIDB4OTQwMjIwMjAsIDB4OTQwODBjYWEsIDB4OTQw
NjAxMTEsIDB4OTQwMDBhMWJ9LAotICAgICAgICB7NSwgIDB4OTQwODBkMGUsIDB4OTQwMjIwMjAs
IDB4OTQwODBjYWUsIDB4OTQwNjAxMTEsIDB4OTQwMDBhMWJ9LAotICAgICAgICB7NiwgIDB4OTQw
ODBkMTIsIDB4OTQwMjIwMjAsIDB4OTQwODBjYjIsIDB4OTQwNjAxMTEsIDB4OTQwMDBhMWJ9LAot
ICAgICAgICB7NywgIDB4OTQwODBkMTYsIDB4OTQwMjIwMjAsIDB4OTQwODBjYjYsIDB4OTQwNjAx
MTEsIDB4OTQwMDBhMWJ9LAotICAgICAgICB7OCwgIDB4OTQwODBkMWEsIDB4OTQwMjIwMjAsIDB4
OTQwODBjYmEsIDB4OTQwNjAxMTEsIDB4OTQwMDBhMWJ9LAotICAgICAgICB7OSwgIDB4OTQwODBk
MWUsIDB4OTQwMjIwMjAsIDB4OTQwODBjYmUsIDB4OTQwNjAxMTEsIDB4OTQwMDBhMWJ9LAotICAg
ICAgICB7MTAsIDB4OTQwODBkMjIsIDB4OTQwMjIwMjAsIDB4OTQwODBkMDIsIDB4OTQwNjAxMTEs
IDB4OTQwMDBhMWJ9LAotICAgICAgICB7MTEsIDB4OTQwODBkMjYsIDB4OTQwMjIwMjAsIDB4OTQw
ODBkMDYsIDB4OTQwNjAxMTEsIDB4OTQwMDBhMWJ9LCAvLyB7MTEsIDB4OTQwMjIwMTAsIDB4OTQw
ODA2ODIsIDB4OTQwNjAxMTEsIDB4OTQwMDBhMjN9LCAKLSAgICAgICAgezEyLCAweDk0MDgwZDJh
LCAweDk0MDIyMDIwLCAweDk0MDgwZDBhLCAweDk0MDYwMTExLCAweDk0MDAwYTFifSwKLSAgICAg
ICAgezEzLCAweDk0MDgwZDJlLCAweDk0MDIyMDIwLCAweDk0MDgwZDBlLCAweDk0MDYwMTExLCAw
eDk0MDAwYTFifSwgLy8gezEzLCAweDk0MDIyMDEwLCAweDk0MDgwNjg2LCAweDk0MDYwMTExLCAw
eDk0MDAwYTIzfSwgCi0gICAgICAgIHsxNCwgMHg5NDA4MGQzYSwgMHg5NDAyMjAyMCwgMHg5NDA4
MGQxYSwgMHg5NDA2MDExMSwgMHg5NDAwMGEwM30KLX07Ci0jZGVmaW5lCU5VTV9PRl8yNTI1X0NI
TkwJKHNpemVvZihSRjI1MjVSZWdUYWJsZSkgLyBzaXplb2YoUlRNUF9SRl9SRUdTXzEpKQotCi1S
VE1QX1JGX1JFR1NfMSBSRjI1MjVlUmVnVGFibGVbXSA9IHsKLS8vIHVzaW5nIDEwIE1oeiByZWZl
cmVuY2UgY2xvY2sKLS8vICAgICAgY2ggICBUZW1wUjIJCSBSMSAgICAgICAgICBSMiAgICAgICAg
ICBSMyhUWDB+ND0wKSBSNAotICAgICAgICB7MSwgIDB4OTQwMDA4YWEsIDB4OTQwMjIwMTAsIDB4
OTQwMDA4OWEsIDB4OTQwNjAxMTEsIDB4OTQwMDBlMWJ9LAotICAgICAgICB7MiwgIDB4OTQwMDA4
YWUsIDB4OTQwMjIwMTAsIDB4OTQwMDA4OWUsIDB4OTQwNjAxMTEsIDB4OTQwMDBlMDd9LAotICAg
ICAgICB7MywgIDB4OTQwMDA4YWUsIDB4OTQwMjIwMTAsIDB4OTQwMDA4OWUsIDB4OTQwNjAxMTEs
IDB4OTQwMDBlMWJ9LAotICAgICAgICB7NCwgIDB4OTQwMDA4YjIsIDB4OTQwMjIwMTAsIDB4OTQw
MDA4YTIsIDB4OTQwNjAxMTEsIDB4OTQwMDBlMDd9LAotICAgICAgICB7NSwgIDB4OTQwMDA4YjIs
IDB4OTQwMjIwMTAsIDB4OTQwMDA4YTIsIDB4OTQwNjAxMTEsIDB4OTQwMDBlMWJ9LAotICAgICAg
ICB7NiwgIDB4OTQwMDA4YjYsIDB4OTQwMjIwMTAsIDB4OTQwMDA4YTYsIDB4OTQwNjAxMTEsIDB4
OTQwMDBlMDd9LAotICAgICAgICB7NywgIDB4OTQwMDA4YjYsIDB4OTQwMjIwMTAsIDB4OTQwMDA4
YTYsIDB4OTQwNjAxMTEsIDB4OTQwMDBlMWJ9LAotICAgICAgICB7OCwgIDB4OTQwMDA4YmEsIDB4
OTQwMjIwMTAsIDB4OTQwMDA4YWEsIDB4OTQwNjAxMTEsIDB4OTQwMDBlMDd9LAotICAgICAgICB7
OSwgIDB4OTQwMDA4YmEsIDB4OTQwMjIwMTAsIDB4OTQwMDA4YWEsIDB4OTQwNjAxMTEsIDB4OTQw
MDBlMWJ9LAotICAgICAgICB7MTAsIDB4OTQwMDA4YmUsIDB4OTQwMjIwMTAsIDB4OTQwMDA4YWUs
IDB4OTQwNjAxMTEsIDB4OTQwMDBlMDd9LAotICAgICAgICB7MTEsIDB4OTQwMDA4YjcsIDB4OTQw
MjIwMTAsIDB4OTQwMDA4YWUsIDB4OTQwNjAxMTEsIDB4OTQwMDBlMWJ9LCAKLSAgICAgICAgezEy
LCAweDk0MDAwOTAyLCAweDk0MDIyMDEwLCAweDk0MDAwOGIyLCAweDk0MDYwMTExLCAweDk0MDAw
ZTA3fSwKLSAgICAgICAgezEzLCAweDk0MDAwOTAyLCAweDk0MDIyMDEwLCAweDk0MDAwOGIyLCAw
eDk0MDYwMTExLCAweDk0MDAwZTFifSwKLSAgICAgICAgezE0LCAweDk0MDAwOTA2LCAweDk0MDIy
MDEwLCAweDk0MDAwOGI2LCAweDk0MDYwMTExLCAweDk0MDAwZTIzfQotfTsKLSNkZWZpbmUJTlVN
X09GXzI1MjVFX0NITkwJKHNpemVvZihSRjI1MjVlUmVnVGFibGUpIC8gc2l6ZW9mKFJUTVBfUkZf
UkVHU18xKSkKLQotUlRNUF9SRl9SRUdTIFJGNTIyMlJlZ1RhYmxlW10gPSB7Ci0vLyAgICAgIGNo
ICAgUjEgICAgICAgICAgUjIgICAgICAgICAgUjMoVFgwfjQ9MCkgUjQKLSAgICAgICAgezEsICAw
eDk0MDIyMDIwLCAweDk0MDAxMTM2LCAweDk0MDAwMTAxLCAweDk0MDAwYTBifSwKLSAgICAgICAg
ezIsICAweDk0MDIyMDIwLCAweDk0MDAxMTNhLCAweDk0MDAwMTAxLCAweDk0MDAwYTBifSwKLSAg
ICAgICAgezMsICAweDk0MDIyMDIwLCAweDk0MDAxMTNlLCAweDk0MDAwMTAxLCAweDk0MDAwYTBi
fSwKLSAgICAgICAgezQsICAweDk0MDIyMDIwLCAweDk0MDAxMTgyLCAweDk0MDAwMTAxLCAweDk0
MDAwYTBifSwKLSAgICAgICAgezUsICAweDk0MDIyMDIwLCAweDk0MDAxMTg2LCAweDk0MDAwMTAx
LCAweDk0MDAwYTBifSwKLSAgICAgICAgezYsICAweDk0MDIyMDIwLCAweDk0MDAxMThhLCAweDk0
MDAwMTAxLCAweDk0MDAwYTBifSwKLSAgICAgICAgezcsICAweDk0MDIyMDIwLCAweDk0MDAxMThl
LCAweDk0MDAwMTAxLCAweDk0MDAwYTBifSwKLSAgICAgICAgezgsICAweDk0MDIyMDIwLCAweDk0
MDAxMTkyLCAweDk0MDAwMTAxLCAweDk0MDAwYTBifSwKLSAgICAgICAgezksICAweDk0MDIyMDIw
LCAweDk0MDAxMTk2LCAweDk0MDAwMTAxLCAweDk0MDAwYTBifSwKLSAgICAgICAgezEwLCAweDk0
MDIyMDIwLCAweDk0MDAxMTlhLCAweDk0MDAwMTAxLCAweDk0MDAwYTBifSwKLSAgICAgICAgezEx
LCAweDk0MDIyMDIwLCAweDk0MDAxMTllLCAweDk0MDAwMTAxLCAweDk0MDAwYTBifSwKLSAgICAg
ICAgezEyLCAweDk0MDIyMDIwLCAweDk0MDAxMWEyLCAweDk0MDAwMTAxLCAweDk0MDAwYTBifSwK
LSAgICAgICAgezEzLCAweDk0MDIyMDIwLCAweDk0MDAxMWE2LCAweDk0MDAwMTAxLCAweDk0MDAw
YTBifSwKLSAgICAgICAgezE0LCAweDk0MDIyMDIwLCAweDk0MDAxMWFlLCAweDk0MDAwMTAxLCAw
eDk0MDAwYTFifSwKLQotICAgICAgICAvLyBzdGlsbCBsYWNrIG9mIE1NQUMoSmFwYW4pIGNoIDM0
LDM4LDQyLDQ2Ci0gICAgICAgIAotICAgICAgICB7MzYsIDB4OTQwMjIwMTAsIDB4OTQwMTg4OTYs
IDB4OTQwMDAxMDEsIDB4OTQwMDBhMWZ9LAotICAgICAgICB7NDAsIDB4OTQwMjIwMTAsIDB4OTQw
MTg4OWEsIDB4OTQwMDAxMDEsIDB4OTQwMDBhMWZ9LAotICAgICAgICB7NDQsIDB4OTQwMjIwMTAs
IDB4OTQwMTg4OWUsIDB4OTQwMDAxMDEsIDB4OTQwMDBhMWZ9LAotICAgICAgICB7NDgsIDB4OTQw
MjIwMTAsIDB4OTQwMTg4YTIsIDB4OTQwMDAxMDEsIDB4OTQwMDBhMWZ9LAotICAgICAgICB7NTIs
IDB4OTQwMjIwMTAsIDB4OTQwMTg4YTYsIDB4OTQwMDAxMDEsIDB4OTQwMDBhMWZ9LAotICAgICAg
ICB7NjYsIDB4OTQwMjIwMTAsIDB4OTQwMTg4YWEsIDB4OTQwMDAxMDEsIDB4OTQwMDBhMWZ9LAot
ICAgICAgICB7NjAsIDB4OTQwMjIwMTAsIDB4OTQwMTg4YWUsIDB4OTQwMDAxMDEsIDB4OTQwMDBh
MWZ9LAotICAgICAgICB7NjQsIDB4OTQwMjIwMTAsIDB4OTQwMTg4YjIsIDB4OTQwMDAxMDEsIDB4
OTQwMDBhMWZ9LAotICAgICAgICAKLSAgICAgICAgezEwMCwgMHg5NDAyMjAxMCwgMHg5NDAwODgw
MiwgMHg5NDAwMDEwMSwgMHg5NDAwMGEwZn0sCi0gICAgICAgIHsxMDQsIDB4OTQwMjIwMTAsIDB4
OTQwMDg4MDYsIDB4OTQwMDAxMDEsIDB4OTQwMDBhMGZ9LAotICAgICAgICB7MTA4LCAweDk0MDIy
MDEwLCAweDk0MDA4ODBhLCAweDk0MDAwMTAxLCAweDk0MDAwYTBmfSwKLSAgICAgICAgezExMiwg
MHg5NDAyMjAxMCwgMHg5NDAwODgwZSwgMHg5NDAwMDEwMSwgMHg5NDAwMGEwZn0sCi0gICAgICAg
IHsxMTYsIDB4OTQwMjIwMTAsIDB4OTQwMDg4MTIsIDB4OTQwMDAxMDEsIDB4OTQwMDBhMGZ9LAot
ICAgICAgICB7MTIwLCAweDk0MDIyMDEwLCAweDk0MDA4ODE2LCAweDk0MDAwMTAxLCAweDk0MDAw
YTBmfSwKLSAgICAgICAgezEyNCwgMHg5NDAyMjAxMCwgMHg5NDAwODgxYSwgMHg5NDAwMDEwMSwg
MHg5NDAwMGEwZn0sCi0gICAgICAgIHsxMjgsIDB4OTQwMjIwMTAsIDB4OTQwMDg4MWUsIDB4OTQw
MDAxMDEsIDB4OTQwMDBhMGZ9LAotICAgICAgICB7MTMyLCAweDk0MDIyMDEwLCAweDk0MDA4ODIy
LCAweDk0MDAwMTAxLCAweDk0MDAwYTBmfSwKLSAgICAgICAgezEzNiwgMHg5NDAyMjAxMCwgMHg5
NDAwODgyNiwgMHg5NDAwMDEwMSwgMHg5NDAwMGEwZn0sCi0gICAgICAgIHsxNDAsIDB4OTQwMjIw
MTAsIDB4OTQwMDg4MmEsIDB4OTQwMDAxMDEsIDB4OTQwMDBhMGZ9LAotICAgICAgICAKLSAgICAg
ICAgezE0OSwgMHg5NDAyMjAyMCwgMHg5NDAwOTBhNiwgMHg5NDAwMDEwMSwgMHg5NDAwMGEwN30s
Ci0gICAgICAgIHsxNTMsIDB4OTQwMjIwMjAsIDB4OTQwMDkwYWUsIDB4OTQwMDAxMDEsIDB4OTQw
MDBhMDd9LAotICAgICAgICB7MTU3LCAweDk0MDIyMDIwLCAweDk0MDA5MGI2LCAweDk0MDAwMTAx
LCAweDk0MDAwYTA3fSwKLSAgICAgICAgezE2MSwgMHg5NDAyMjAyMCwgMHg5NDAwOTBiZSwgMHg5
NDAwMDEwMSwgMHg5NDAwMGEwN30KLX07Ci0jZGVmaW5lCU5VTV9PRl81MjIyX0NITkwJKHNpemVv
ZihSRjUyMjJSZWdUYWJsZSkgLyBzaXplb2YoUlRNUF9SRl9SRUdTKSkKLQotCi0vKgotCT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0JRGVzY3JpcHRpb246Ci0JCWluaXRpYWxpemUgdGhlIE1MTUUgdGFzayBh
bmQgaXRzIGRhdGEgc3RydWN0dXJlIChxdWV1ZSwgc3BpbmxvY2ssIAotCQl0aW1lciwgc3RhdGUg
bWFjaGluZXMpLgotCVJldHVybjoKLQkJYWx3YXlzIHJldHVybiBORElTX1NUQVRVU19TVUNDRVNT
Ci0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLSovCi1ORElTX1NUQVRVUyBNbG1lSW5pdCgKLQlJTiBQUlQy
NTcwQURBUFRFUiBwQWQpIAotewotCU5ESVNfU1RBVFVTIFN0YXR1cyA9IE5ESVNfU1RBVFVTX1NV
Q0NFU1M7Ci0KLQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwiLS0+IE1MTUUgSW5pdGlhbGl6ZVxu
Iik7Ci0JCi0JZG8gCi0JewotCQlTdGF0dXMgPSBNbG1lUXVldWVJbml0KCZwQWQtPk1sbWUuUXVl
dWUpOwotCQlpZihTdGF0dXMgIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykgCi0JCXsKLQkJCWJyZWFr
OwotCQl9Ci0KLQkJLy8gSW5pdGlhbGl6ZSBNbG1lIE1lbW9yeSBIYW5kbGVyCi0JCS8vIEFsbG9j
YXRlIDIwIG5vbnBhZ2VkIG1lbW9yeSBwb29sIHdoaWNoIHNpemUgYXJlIE1BWF9MRU5fT0ZfTUxN
RV9CVUZGRVIgZm9yIHVzZQotCQlTdGF0dXMgPSBNbG1lSW5pdE1lbW9yeUhhbmRsZXIocEFkLCAy
MCwgTUFYX0xFTl9PRl9NTE1FX0JVRkZFUik7Ci0KLQkJaWYoU3RhdHVzICE9IE5ESVNfU1RBVFVT
X1NVQ0NFU1MpIAotCQl7Ci0JCQlicmVhazsKLQkJfQotCi0JCXBBZC0+TWxtZS5SdW5uaW5nID0g
RkFMU0U7Ci0JCU5kaXNBbGxvY2F0ZVNwaW5Mb2NrKCZwQWQtPk1sbWUuVGFza0xvY2spOwotCi0J
CS8vIGluaXRpYWxpemUgdGhlIHR3byB0YWJsZXMKLQkJLy8gTWFjVGFibGVJbml0KHBBZCk7Ci0J
CUJzc1RhYmxlSW5pdCgmcEFkLT5Qb3J0Q2ZnLkJzc1RhYik7Ci0JCS8vIGluaXQgc3RhdGUgbWFj
aGluZXMKLQkJQVNTRVJUKEFTU09DX0ZVTkNfU0laRSA9PSBNQVhfQVNTT0NfTVNHICogTUFYX0FT
U09DX1NUQVRFKTsKLQkJQXNzb2NTdGF0ZU1hY2hpbmVJbml0KHBBZCwgJnBBZC0+TWxtZS5Bc3Nv
Y01hY2hpbmUsIHBBZC0+TWxtZS5Bc3NvY0Z1bmMpOwotCQkKLQkJQVNTRVJUKEFVVEhfRlVOQ19T
SVpFID09IE1BWF9BVVRIX01TRyAqIE1BWF9BVVRIX1NUQVRFKTsKLQkJQXV0aFN0YXRlTWFjaGlu
ZUluaXQocEFkLCAmcEFkLT5NbG1lLkF1dGhNYWNoaW5lLCBwQWQtPk1sbWUuQXV0aEZ1bmMpOwot
CQkKLQkJQVNTRVJUKEFVVEhfUlNQX0ZVTkNfU0laRSA9PSBNQVhfQVVUSF9SU1BfTVNHICogTUFY
X0FVVEhfUlNQX1NUQVRFKTsKLQkJQXV0aFJzcFN0YXRlTWFjaGluZUluaXQocEFkLCAmcEFkLT5N
bG1lLkF1dGhSc3BNYWNoaW5lLCBwQWQtPk1sbWUuQXV0aFJzcEZ1bmMpOwotCi0JCUFTU0VSVChX
UEFfUFNLX0ZVTkNfU0laRSA9PSBNQVhfV1BBX1BTS19NU0cgKiBNQVhfV1BBX1BTS19TVEFURSk7
Ci0JCVdwYVBza1N0YXRlTWFjaGluZUluaXQocEFkLCZwQWQtPk1sbWUuV3BhUHNrTWFjaGluZSxw
QWQtPk1sbWUuV3BhUHNrRnVuYyk7Ci0KLQkJQVNTRVJUKFNZTkNfRlVOQ19TSVpFID09IE1BWF9T
WU5DX01TRyAqIE1BWF9TWU5DX1NUQVRFKTsKLQkJU3luY1N0YXRlTWFjaGluZUluaXQocEFkLCAm
cEFkLT5NbG1lLlN5bmNNYWNoaW5lLCBwQWQtPk1sbWUuU3luY0Z1bmMpOwotCi0JCS8vIFNpbmNl
IHdlIGFyZSB1c2luZyBzd2l0Y2gvY2FzZSB0byBpbXBsZW1lbnQgaXQsIHRoZSBpbml0IGlzIGRp
ZmZlcmVudCBmcm9tIHRoZSBhYm92ZSAKLQkJLy8gc3RhdGUgbWFjaGluZSBpbml0Ci0JCU1sbWVD
bnRsSW5pdChwQWQsICZwQWQtPk1sbWUuQ250bE1hY2hpbmUsIE5VTEwpOwotCi0JCVJUTVBJbml0
VGltZXIocEFkLCAmcEFkLT5NbG1lLlBlcmlvZGljVGltZXIsICZNbG1lUGVyaW9kaWNFeGVjKTsK
LQkJLy9wQWQtPk1sbWUuUGVyaW9kaWNUaW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpcEFkOwot
CQkvL3BBZC0+TWxtZS5QZXJpb2RpY1RpbWVyLmZ1bmN0aW9uID0gJk1sbWVQZXJpb2RpY0V4ZWM7
Ci0JCXBBZC0+TWxtZS5QZXJpb2RpY1RpbWVyLlRpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgTUxN
RV9UQVNLX0VYRUNfSU5UVjsKLQkJLy8gZGVsYXkgZmlyc3QgbWxtZSB0aW1lcgotCQlSVE1QU2V0
VGltZXIocEFkLCAmcEFkLT5NbG1lLlBlcmlvZGljVGltZXIsIDIqTUxNRV9UQVNLX0VYRUNfSU5U
Vik7Ci0KLQkJaWYgKHBBZC0+UG9ydENmZy5MZWRNb2RlID09IExFRF9NT0RFX1RYUlhfQUNUSVZJ
VFkpCi0JCXsKLQkJCVJUTVBJbml0VGltZXIocEFkLCAmcEFkLT5Qb3J0Q2ZnLkxlZENudGwuQmxp
bmtUaW1lciwgJkFzaWNMZWRQZXJpb2RpY0V4ZWMpOwotCQkJLy9wQWQtPlBvcnRDZmcuTGVkQ250
bC5CbGlua1RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZylwQWQ7Ci0JCQkvL3BBZC0+UG9ydENm
Zy5MZWRDbnRsLkJsaW5rVGltZXIuZnVuY3Rpb24gPSAmQXNpY0xlZFBlcmlvZGljRXhlYzsKLQkJ
CXBBZC0+UG9ydENmZy5MZWRDbnRsLkJsaW5rVGltZXIuVGltZXIuZXhwaXJlcyA9IGppZmZpZXMg
KyAoNzAgKiBIWikvMTAwMDsKLQkJCVJUTVBTZXRUaW1lcihwQWQsICZwQWQtPlBvcnRDZmcuTGVk
Q250bC5CbGlua1RpbWVyLCA3MCk7Ci0JCX0KLQkKLQl9IHdoaWxlIChGQUxTRSk7Ci0KLQlEQkdQ
UklOVChSVF9ERUJVR19UUkFDRSwiPC0tIE1MTUUgSW5pdGlhbGl6ZVxuIik7Ci0KLQlyZXR1cm4g
U3RhdHVzOwotfQotCi0KLS8qCi0gICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICBEZXNjcmlwdGlv
bjoKLSAgICAgICAgRGVzdHJ1Y3RvciBvZiBNTE1FIChEZXN0cm95IHF1ZXVlLCBzdGF0ZSBtYWNo
aW5lLCBzcGluIGxvY2sgYW5kIHRpbWVyKQotICAgIFBhcmFtZXRlcnM6Ci0gICAgICAgIEFkYXB0
ZXIgLSBOSUMgQWRhcHRlciBwb2ludGVyCi0gICAgUG9zdDoKLSAgICAgICAgVGhlIE1MTUUgdGFz
ayB3aWxsIG5vIGxvbmdlciB3b3JrIHByb3Blcmx5Ci0gICAgICAgIAotCUlSUUwgPSBQQVNTSVZF
X0xFVkVMCi0KLSAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICovCi1WT0lEIE1sbWVIYWx0KAotICAg
IElOIFBSVDI1NzBBREFQVEVSIHBBZCkgCi17Ci0KLSAgICBEQkdQUklOVChSVF9ERUJVR19UUkFD
RSwgIj09PiBNbG1lSGFsdFxuIik7Ci0KLQkvLyBDYW5jZWwgcGVuZGluZyB0aW1lcnMKLQlSVE1Q
Q2FuY2VsVGltZXIoJnBBZC0+TWxtZS5Bc3NvY0F1eC5Bc3NvY1RpbWVyKTsKLQlSVE1QQ2FuY2Vs
VGltZXIoJnBBZC0+TWxtZS5Bc3NvY0F1eC5SZWFzc29jVGltZXIpOwotCVJUTVBDYW5jZWxUaW1l
cigmcEFkLT5NbG1lLkFzc29jQXV4LkRpc2Fzc29jVGltZXIpOwotCVJUTVBDYW5jZWxUaW1lcigm
cEFkLT5NbG1lLkF1dGhBdXguQXV0aFRpbWVyKTsKLQlSVE1QQ2FuY2VsVGltZXIoJnBBZC0+TWxt
ZS5TeW5jQXV4LkJlYWNvblRpbWVyKTsKLQlSVE1QQ2FuY2VsVGltZXIoJnBBZC0+TWxtZS5TeW5j
QXV4LlNjYW5UaW1lcik7Ci0JUlRNUENhbmNlbFRpbWVyKCZwQWQtPk1sbWUuUGVyaW9kaWNUaW1l
cik7Ci0JaWYgKChwQWQtPlBvcnRDZmcuTGVkTW9kZSA9PSBMRURfTU9ERV9UWFJYX0FDVElWSVRZ
KXx8KHBBZC0+UG9ydENmZy5MZWRNb2RlID09IExFRF9NT0RFX0FMUEhBKSkKLQkJUlRNUENhbmNl
bFRpbWVyKCZwQWQtPlBvcnRDZmcuTGVkQ250bC5CbGlua1RpbWVyKTsKLQlpZiAoIVJUTVBfVEVT
VF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9SRU1PVkVfSU5fUFJPR1JFU1MpKQotCXsKLQkJQVNJ
Q19MRURfQUNUX09GRihwQWQpOwotCX0KLQotCS8vIGZvciB0aW1lciBjYWxsYmFjayByb3V0aW5l
IHRvIGZpbmlzaC4KLQlOZGlzTVNsZWVwKDEwMDApOwotCi0JTWxtZVF1ZXVlRGVzdHJveSgmcEFk
LT5NbG1lLlF1ZXVlKTsKLQlTdGF0ZU1hY2hpbmVEZXN0cm95KCZwQWQtPk1sbWUuQXNzb2NNYWNo
aW5lKTsKLQlTdGF0ZU1hY2hpbmVEZXN0cm95KCZwQWQtPk1sbWUuQXV0aE1hY2hpbmUpOwotCVN0
YXRlTWFjaGluZURlc3Ryb3koJnBBZC0+TWxtZS5BdXRoUnNwTWFjaGluZSk7Ci0JU3RhdGVNYWNo
aW5lRGVzdHJveSgmcEFkLT5NbG1lLlN5bmNNYWNoaW5lKTsKLQlTdGF0ZU1hY2hpbmVEZXN0cm95
KCZwQWQtPk1sbWUuV3BhUHNrTWFjaGluZSk7Ci0JLy8gICAgU3RhdGVNYWNoaW5lRGVzdHJveSgm
cEFkLT5NbG1lLkNudGxNYWNoaW5lKTsKLQkvLyBubyBuZWVkIGZyZWUgc3BpbmxvY2sgb2YgcEFk
LT5NbG1lLlRhc2tMb2NrCi0KLQlNbG1lRnJlZU1lbW9yeUhhbmRsZXIocEFkKTsgLy9GcmVlIE1M
TUUgbWVtb3J5IGhhbmRsZXIKLQotCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAiPD09IE1sbWVI
YWx0XG4iKTsKLX0KLQotVk9JRCBNbG1lSGFuZGxlcigKLSAgICBJTiBQUlQyNTcwQURBUFRFUiBw
QWQpIAotewotCU1MTUVfUVVFVUVfRUxFTSAgICAgICAgKkVsZW0gPSBOVUxMOwotCS8vIE9ubHkg
YWNjZXB0IE1MTUUgYW5kIEZyYW1lIGZyb20gcGVlciBzaWRlLCBubyBvdGhlciAoY29udHJvbC9k
YXRhKSBmcmFtZSBzaG91bGQKLQkvLyBnZXQgaW50byB0aGlzIHN0YXRlIG1hY2hpbmUKLQotCU5k
aXNBY3F1aXJlU3BpbkxvY2soJnBBZC0+TWxtZS5UYXNrTG9jayk7Ci0JaWYocEFkLT5NbG1lLlJ1
bm5pbmcpIAotCXsKLQkgICAgTmRpc1JlbGVhc2VTcGluTG9jaygmcEFkLT5NbG1lLlRhc2tMb2Nr
KTsKLQkgICAgcmV0dXJuOwotCX0gCi0JZWxzZSAKLQl7Ci0JICAgIHBBZC0+TWxtZS5SdW5uaW5n
ID0gVFJVRTsKLQl9Ci0JTmRpc1JlbGVhc2VTcGluTG9jaygmcEFkLT5NbG1lLlRhc2tMb2NrKTsK
LQotCXdoaWxlICghTWxtZVF1ZXVlRW1wdHkoJnBBZC0+TWxtZS5RdWV1ZSkpIAotCXsKLQkJaWYg
KFJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9NTE1FX1JFU0VUX0lOX1BST0dSRVNT
KSB8fAotCQkJUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0hBTFRfSU5fUFJPR1JF
U1MpIHx8Ci0JCQlSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfUkVNT1ZFX0lOX1BS
T0dSRVNTKSkKLQkJewotCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICJEZXZpY2UgSGFsdGVk
IG9yIFJlbW92ZWQgb3IgTWxtZVJlc3QsIGV4aXQgTWxtZUhhbmRsZXIhIChxdWV1ZSBudW0gPSAl
ZClcbiIsIHBBZC0+TWxtZS5RdWV1ZS5OdW0pOwotCQkJYnJlYWs7Ci0JCX0KLQkJLy9Gcm9tIG1l
c3NhZ2UgdHlwZSwgZGV0ZXJtaW5lIHdoaWNoIHN0YXRlIG1hY2hpbmUgSSBzaG91bGQgZHJpdmUK
LQkJaWYgKE1sbWVEZXF1ZXVlKCZwQWQtPk1sbWUuUXVldWUsICZFbGVtKSkgCi0JCXsKLQkJCS8v
IGlmIGRlcXVldWUgc3VjY2VzcwotCQkJc3dpdGNoIChFbGVtLT5NYWNoaW5lKSAKLQkJCXsKLQkJ
CQljYXNlIEFTU09DX1NUQVRFX01BQ0hJTkU6Ci0JCQkJICAgIFN0YXRlTWFjaGluZVBlcmZvcm1B
Y3Rpb24ocEFkLCAmcEFkLT5NbG1lLkFzc29jTWFjaGluZSwgRWxlbSk7Ci0JCQkJICAgIGJyZWFr
OwotCQkJCWNhc2UgQVVUSF9TVEFURV9NQUNISU5FOgotCQkJCSAgICBTdGF0ZU1hY2hpbmVQZXJm
b3JtQWN0aW9uKHBBZCwgJnBBZC0+TWxtZS5BdXRoTWFjaGluZSwgRWxlbSk7Ci0JCQkJICAgIGJy
ZWFrOwotCQkJCWNhc2UgQVVUSF9SU1BfU1RBVEVfTUFDSElORToKLQkJCQkgICAgU3RhdGVNYWNo
aW5lUGVyZm9ybUFjdGlvbihwQWQsICZwQWQtPk1sbWUuQXV0aFJzcE1hY2hpbmUsIEVsZW0pOwot
CQkJCSAgICBicmVhazsKLQkJCQljYXNlIFNZTkNfU1RBVEVfTUFDSElORToKLQkJCQkgICAgU3Rh
dGVNYWNoaW5lUGVyZm9ybUFjdGlvbihwQWQsICZwQWQtPk1sbWUuU3luY01hY2hpbmUsIEVsZW0p
OwotCQkJCSAgICBicmVhazsKLQkJCQljYXNlIE1MTUVfQ05UTF9TVEFURV9NQUNISU5FOgotCQkJ
CSAgICBNbG1lQ250bE1hY2hpbmVQZXJmb3JtQWN0aW9uKHBBZCwgJnBBZC0+TWxtZS5DbnRsTWFj
aGluZSwgRWxlbSk7Ci0JCQkJICAgIGJyZWFrOwotCQkJCWNhc2UgV1BBX1BTS19TVEFURV9NQUNI
SU5FOgotCQkJCQlTdGF0ZU1hY2hpbmVQZXJmb3JtQWN0aW9uKHBBZCwgJnBBZC0+TWxtZS5XcGFQ
c2tNYWNoaW5lLCBFbGVtKTsKLQkJCQkJYnJlYWs7Ci0JCQkJZGVmYXVsdDoKLQkJCQkgICAgREJH
UFJJTlQoUlRfREVCVUdfVFJBQ0UsICJFUlJPUjogSWxsZWdhbCBtYWNoaW5lICVkIGluIE1sbWVI
YW5kbGVyKClcbiIsRWxlbS0+TWFjaGluZSk7Ci0JCQkJICAgIGJyZWFrOwotCQkJfSAvLyBlbmQg
b2Ygc3dpdGNoCi0KLQkJCS8vIGZyZWUgTUxNRSBlbGVtZW50Ci0JCQlFbGVtLT5PY2N1cGllZCA9
IEZBTFNFOwotCQkJRWxlbS0+TXNnTGVuID0gMDsKLSAgICAgICAgICAgIAotCQl9Ci0JCWVsc2UK
LQkJewotCQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICJFUlJPUjogZW1wdHkgRWxlbSBpbiBN
bG1lUXVldWVcbiIpOwotCQl9Ci0JfQotCi0JaWYgKFJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBf
QURBUFRFUl9NTE1FX1JFU0VUX0lOX1BST0dSRVNTKSkKLQl7Ci0JCURCR1BSSU5UKFJUX0RFQlVH
X1RSQUNFLCAiTWxtZUhhbmRsZXIsIFJlc2V0IE1sbWUhIChxdWV1ZSBudW0gPSAlZClcbiIsIHBB
ZC0+TWxtZS5RdWV1ZS5OdW0pOwotCQlNbG1lUXVldWVEZXN0cm95KCZwQWQtPk1sbWUuUXVldWUp
OwotCQkvLyBDYW5jZWwgYWxsIHRpbWVyIGV2ZW50cwotCQkvLyBCZSBjYXJlZnVsIHRvIGNhbmNl
bCBuZXcgYWRkZWQgdGltZXIKLQkJUlRNUENhbmNlbFRpbWVyKCZwQWQtPk1sbWUuQXNzb2NBdXgu
QXNzb2NUaW1lcik7Ci0JCVJUTVBDYW5jZWxUaW1lcigmcEFkLT5NbG1lLkFzc29jQXV4LlJlYXNz
b2NUaW1lcik7Ci0JCVJUTVBDYW5jZWxUaW1lcigmcEFkLT5NbG1lLkFzc29jQXV4LkRpc2Fzc29j
VGltZXIpOwotCQlSVE1QQ2FuY2VsVGltZXIoJnBBZC0+TWxtZS5BdXRoQXV4LkF1dGhUaW1lcik7
Ci0JCS8vICAgIFJUTVBDYW5jZWxUaW1lcigmcEFkLT5NbG1lLkF1dGhSc3BBdXguQXV0aFJzcFRp
bWVyLCAmQ2FuY2VsbGVkKTsKLQkJUlRNUENhbmNlbFRpbWVyKCZwQWQtPk1sbWUuU3luY0F1eC5C
ZWFjb25UaW1lcik7Ci0JCVJUTVBDYW5jZWxUaW1lcigmcEFkLT5NbG1lLlN5bmNBdXguU2NhblRp
bWVyKTsKLQkJLy8gU2V0IGFsbCBzdGF0ZSBtYWNoaW5lcyBiYWNrIElETEUKLQkJcEFkLT5NbG1l
LkNudGxNYWNoaW5lLkN1cnJTdGF0ZSAgICA9IENOVExfSURMRTsKLQkJcEFkLT5NbG1lLkFzc29j
TWFjaGluZS5DdXJyU3RhdGUgICA9IEFTU09DX0lETEU7Ci0JCXBBZC0+TWxtZS5BdXRoTWFjaGlu
ZS5DdXJyU3RhdGUgICAgPSBBVVRIX1JFUV9JRExFOwotCQlwQWQtPk1sbWUuQXV0aFJzcE1hY2hp
bmUuQ3VyclN0YXRlID0gQVVUSF9SU1BfSURMRTsKLQkJcEFkLT5NbG1lLlN5bmNNYWNoaW5lLkN1
cnJTdGF0ZSAgICA9IFNZTkNfSURMRTsKLQkJaWYgKFJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBf
QURBUFRFUl9CU1NfSk9JTl9JTl9QUk9HUkVTUykpCi0JCQlSVE1QX0NMRUFSX0ZMQUcocEFkLCBm
UlRNUF9BREFQVEVSX0JTU19KT0lOX0lOX1BST0dSRVNTKTsKLQkJaWYgKFJUTVBfVEVTVF9GTEFH
KHBBZCwgZlJUTVBfQURBUFRFUl9SRUFTU09DX0lOX1BST0dSRVNTKSkKLQkJCVJUTVBfQ0xFQVJf
RkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfUkVBU1NPQ19JTl9QUk9HUkVTUyk7Ci0JCWlmIChSVE1Q
X1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfQlNTX1NDQU5fSU5fUFJPR1JFU1MpKQotCQkJ
UlRNUF9DTEVBUl9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9CU1NfU0NBTl9JTl9QUk9HUkVTUyk7
Ci0KLQkJUlRNUF9DTEVBUl9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9NTE1FX1JFU0VUX0lOX1BS
T0dSRVNTKTsgICAKLQl9Ci0KLQlOZGlzQWNxdWlyZVNwaW5Mb2NrKCZwQWQtPk1sbWUuVGFza0xv
Y2spOwotCXBBZC0+TWxtZS5SdW5uaW5nID0gRkFMU0U7Ci0JTmRpc1JlbGVhc2VTcGluTG9jaygm
cEFkLT5NbG1lLlRhc2tMb2NrKTsKLQotfQotCi0KLVZPSUQgTWxtZVN1c3BlbmQoCi0gICAgSU4g
UFJUMjU3MEFEQVBURVIgcEFkKSAKLXsKLSAgICBNTE1FX1FVRVVFX0VMRU0JCSpFbGVtID0gTlVM
TDsKLQotCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAiPT0+TWxtZVN1c3BlbmRcbiIpOwotCi0J
Ly8gQ2FuY2VsIHBlbmRpbmcgdGltZXJzCi0JUlRNUENhbmNlbFRpbWVyKCZwQWQtPk1sbWUuQXNz
b2NBdXguQXNzb2NUaW1lcik7Ci0JUlRNUENhbmNlbFRpbWVyKCZwQWQtPk1sbWUuQXNzb2NBdXgu
UmVhc3NvY1RpbWVyKTsKLQlSVE1QQ2FuY2VsVGltZXIoJnBBZC0+TWxtZS5Bc3NvY0F1eC5EaXNh
c3NvY1RpbWVyKTsKLQlSVE1QQ2FuY2VsVGltZXIoJnBBZC0+TWxtZS5BdXRoQXV4LkF1dGhUaW1l
cik7Ci0JLy8gUlRNUENhbmNlbFRpbWVyKCZwQWQtPk1sbWUuQXV0aFJzcEF1eC5BdXRoUnNwVGlt
ZXIsICZDYW5jZWxsZWQpOwotCVJUTVBDYW5jZWxUaW1lcigmcEFkLT5NbG1lLlN5bmNBdXguQmVh
Y29uVGltZXIpOwotCVJUTVBDYW5jZWxUaW1lcigmcEFkLT5NbG1lLlN5bmNBdXguU2NhblRpbWVy
KTsKLQotCU5kaXNBY3F1aXJlU3BpbkxvY2soJnBBZC0+TWxtZS5UYXNrTG9jayk7Ci0JaWYocEFk
LT5NbG1lLlJ1bm5pbmcpIAotCXsKLQkgICAgTmRpc1JlbGVhc2VTcGluTG9jaygmcEFkLT5NbG1l
LlRhc2tMb2NrKTsKLQkgICAgcmV0dXJuOwotCX0gCi0JZWxzZSAKLQl7Ci0JICAgIHBBZC0+TWxt
ZS5SdW5uaW5nID0gVFJVRTsKLQl9Ci0JTmRpc1JlbGVhc2VTcGluTG9jaygmcEFkLT5NbG1lLlRh
c2tMb2NrKTsKLQotCS8vIFJlbW92ZSBhbGwgTWxtZSBxdWV1ZXMgZWxlbWVudHMKLQl3aGlsZSAo
IU1sbWVRdWV1ZUVtcHR5KCZwQWQtPk1sbWUuUXVldWUpKSAKLQl7Ci0JCS8vRnJvbSBtZXNzYWdl
IHR5cGUsIGRldGVybWluZSB3aGljaCBzdGF0ZSBtYWNoaW5lIEkgc2hvdWxkIGRyaXZlCi0JCWlm
IChNbG1lRGVxdWV1ZSgmcEFkLT5NbG1lLlF1ZXVlLCAmRWxlbSkpIAotCQl7Ci0JCSAgICAvLyBm
cmVlIE1MTUUgZWxlbWVudAotCQkgICAgRWxlbS0+T2NjdXBpZWQgPSBGQUxTRTsKLQkJICAgIEVs
ZW0tPk1zZ0xlbiA9IDA7Ci0JCSAgICAKLQkJfQotCQllbHNlIAotCQl7Ci0JCSAgICBEQkdQUklO
VChSVF9ERUJVR19FUlJPUiwgIkVSUk9SOiBlbXB0eSBFbGVtIGluIE1sbWVRdWV1ZVxuIik7Ci0J
CX0KLQl9Ci0JCi0JLy8gUmVtb3ZlIHJ1bm5pbmcgc3RhdGUKLQlOZGlzQWNxdWlyZVNwaW5Mb2Nr
KCZwQWQtPk1sbWUuVGFza0xvY2spOwotCXBBZC0+TWxtZS5SdW5uaW5nID0gRkFMU0U7Ci0JTmRp
c1JlbGVhc2VTcGluTG9jaygmcEFkLT5NbG1lLlRhc2tMb2NrKTsKLQotCVJUVVNCQ2xlYW5VcE1M
TUVXYWl0UXVldWUocEFkKTsKLQlSVFVTQkNsZWFuVXBNTE1FQnVsa091dFF1ZXVlKHBBZCk7Ci0K
LQkvLyBTZXQgYWxsIHN0YXRlIG1hY2hpbmVzIGJhY2sgSURMRQotCXBBZC0+TWxtZS5DbnRsTWFj
aGluZS5DdXJyU3RhdGUgICAgPSBDTlRMX0lETEU7Ci0JcEFkLT5NbG1lLkFzc29jTWFjaGluZS5D
dXJyU3RhdGUgICA9IEFTU09DX0lETEU7Ci0JcEFkLT5NbG1lLkF1dGhNYWNoaW5lLkN1cnJTdGF0
ZSAgICA9IEFVVEhfUkVRX0lETEU7Ci0JcEFkLT5NbG1lLkF1dGhSc3BNYWNoaW5lLkN1cnJTdGF0
ZSA9IEFVVEhfUlNQX0lETEU7Ci0JcEFkLT5NbG1lLlN5bmNNYWNoaW5lLkN1cnJTdGF0ZSAgICA9
IFNZTkNfSURMRTsKLQlpZiAoUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0JTU19K
T0lOX0lOX1BST0dSRVNTKSkKLQkJUlRNUF9DTEVBUl9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9C
U1NfSk9JTl9JTl9QUk9HUkVTUyk7Ly9zdGV2ZW46Zm9yIHRlc3QKLQlpZiAoUlRNUF9URVNUX0ZM
QUcocEFkLCBmUlRNUF9BREFQVEVSX1JFQVNTT0NfSU5fUFJPR1JFU1MpKQotCQlSVE1QX0NMRUFS
X0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX1JFQVNTT0NfSU5fUFJPR1JFU1MpOy8vc3RldmVuOmZv
ciB0ZXN0Ci0JaWYgKFJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9CU1NfU0NBTl9J
Tl9QUk9HUkVTUykpCi0JCVJUTVBfQ0xFQVJfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfQlNTX1ND
QU5fSU5fUFJPR1JFU1MpOy8vc3RldmVuOmZvciB0ZXN0Ci0KLQlEQkdQUklOVChSVF9ERUJVR19U
UkFDRSwgIjw9PU1sbWVTdXNwZW5kXG4iKTsKLX0KLQotVk9JRAlNbG1lUmVzdW1lKAotICAgIElO
CVBSVDI1NzBBREFQVEVSCXBBZCkKLXsKLSAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgIj09
Pk1sbWVSZXN1bWVcbiIpOwotCi0JaWYgKFJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRF
Ul9CU1NfSk9JTl9JTl9QUk9HUkVTUykpCi0JCVJUTVBfQ0xFQVJfRkxBRyhwQWQsIGZSVE1QX0FE
QVBURVJfQlNTX0pPSU5fSU5fUFJPR1JFU1MpOy8vc3RldmVuOmZvciB0ZXN0Ci0JaWYgKFJUTVBf
VEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9SRUFTU09DX0lOX1BST0dSRVNTKSkKLQkJUlRN
UF9DTEVBUl9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9SRUFTU09DX0lOX1BST0dSRVNTKTsvL3N0
ZXZlbjpmb3IgdGVzdAotCWlmIChSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfQlNT
X1NDQU5fSU5fUFJPR1JFU1MpKQotCQlSVE1QX0NMRUFSX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVS
X0JTU19TQ0FOX0lOX1BST0dSRVNTKTsvL3N0ZXZlbjpmb3IgdGVzdAotCS8vIFNldCBhbGwgc3Rh
dGUgbWFjaGluZXMgYmFjayBJRExFCi0JcEFkLT5NbG1lLkNudGxNYWNoaW5lLkN1cnJTdGF0ZSAg
ICA9IENOVExfSURMRTsKLQlwQWQtPk1sbWUuQXNzb2NNYWNoaW5lLkN1cnJTdGF0ZSAgID0gQVNT
T0NfSURMRTsKLQlwQWQtPk1sbWUuQXV0aE1hY2hpbmUuQ3VyclN0YXRlICAgID0gQVVUSF9SRVFf
SURMRTsKLQlwQWQtPk1sbWUuQXV0aFJzcE1hY2hpbmUuQ3VyclN0YXRlID0gQVVUSF9SU1BfSURM
RTsKLQlwQWQtPk1sbWUuU3luY01hY2hpbmUuQ3VyclN0YXRlICAgID0gU1lOQ19JRExFOwotCi0J
REJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICI8PT1NbG1lUmVzdW1lXG4iKTsKLX0KLQotLyoKLSAg
ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotICAgIERlc2NyaXB0aW9uOgotICAgICAgICBUaGlzIHJvdXRp
bmUgaXMgZXhlY3V0ZWQgcGVyaW9kaWNhbGx5IHRvIC0KLSAgICAgICAgMS4gRGVjaWRlIGlmIGl0
J3MgYSByaWdodCB0aW1lIHRvIHR1cm4gb24gUHdyTWdtdCBiaXQgb2YgYWxsIAotICAgICAgICAg
ICBvdXRnb2lpbmcgZnJhbWVzCi0gICAgICAgIDIuIENhbGN1bGF0ZSBDaGFubmVsUXVhbGl0eSBi
YXNlZCBvbiBzdGF0aXN0aWNzIG9mIHRoZSBsYXN0Ci0gICAgICAgICAgIHBlcmlvZCwgc28gdGhh
dCBUWCByYXRlIHdvbid0IHRvZ2dsaW5nIHZlcnkgZnJlcXVlbnRseSBiZXR3ZWVuIGEgCi0gICAg
ICAgICAgIHN1Y2Nlc3NmdWwgVFggYW5kIGEgZmFpbGVkIFRYLgotICAgICAgICAzLiBJZiB0aGUg
Y2FsY3VsYXRlZCBDaGFubmVsUXVhbGl0eSBpbmRpY2F0ZWQgY3VycmVudCBjb25uZWN0aW9uIG5v
dCAKLSAgICAgICAgICAgaGVhbHRoeSwgdGhlbiBhIFJPQU1pbmcgYXR0ZW1wdCBpcyB0cmllZCBo
ZXJlLgotICAgICAgICAKLQlJUlFMID0gRElTUEFUQ0hfTEVWRUwKLQotICAgID09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0gKi8KLSNkZWZpbmUgQURIT0NfQkVBQ09OX0xPU1RfVElNRSAgICAgIDEwMDAwICAv
LyAxMCBzZWMKLVZPSUQgTWxtZVBlcmlvZGljRXhlYygKLSAgICBJTgl1bnNpZ25lZCBsb25nIGRh
dGEpCi17Ci0JUFJUMjU3MEFEQVBURVIgcEFkID0gKFBSVDI1NzBBREFQVEVSKWRhdGE7Ci0JVUxP
TkcgTm93MzI7Ci0JLy8gVGltZXIgbmVlZCB0byByZXNldCBldmVyeSB0aW1lLCBzbyB1c2luZyBk
by13aGlsZSBsb29wCi0JZG8KLQl7Ci0JCWlmICgoUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9B
REFQVEVSX1JFU0VUX0lOX1BST0dSRVNTKSkgfHwKLQkJCShSVE1QX1RFU1RfRkxBRyhwQWQsIGZS
VE1QX0FEQVBURVJfSEFMVF9JTl9QUk9HUkVTUykpIHx8Ci0JCQkoUlRNUF9URVNUX0ZMQUcocEFk
LCBmUlRNUF9BREFQVEVSX01MTUVfUkVTRVRfSU5fUFJPR1JFU1MpKSB8fAotCQkJKFJUTVBfVEVT
VF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9SRU1PVkVfSU5fUFJPR1JFU1MpKSkKLQkJewotCQkJ
REJHUFJJTlRfUkFXKFJUX0RFQlVHX1RSQUNFLCAiPC0tLU1sbWVQZXJpb2RpY0V4ZWNcbiIpOwot
CQkJYnJlYWs7Ci0JCX0KLQotCQlpZiAoUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVS
X01FRElBX1NUQVRFX1BFTkRJTkcpKQotCQl7Ci0JCQlSVE1QX0NMRUFSX0ZMQUcocEFkLCBmUlRN
UF9BREFQVEVSX01FRElBX1NUQVRFX1BFTkRJTkcpOwotCQkJTmRpc01JbmRpY2F0ZVN0YXR1cyhw
QWQtPkFkYXB0ZXJIYW5kbGUsIE5ESVNfU1RBVFVTX01FRElBX0RJU0NPTk5FQ1QsIChQVk9JRClO
VUxMLCAwKTsKLQkJCU5kaXNNSW5kaWNhdGVTdGF0dXNDb21wbGV0ZShwQWQtPkFkYXB0ZXJIYW5k
bGUpOwkJCQotCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICJORElTX1NUQVRVU19NRURJQV9E
SVNDT05ORUNUIEV2ZW50IEIhXG4iKTsKLQkJfQotCi0JCWlmIChwQWQtPlBvcnRDZmcuYkhhcmR3
YXJlUmFkaW8gPT0gVFJVRSkKLQkJewotCQkJUlRVU0JFbnF1ZXVlSW50ZXJuYWxDbWQocEFkLCBS
VF9PSURfQ0hFQ0tfR1BJTyk7Ci0JCX0KLQotCQlpZiAoUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRN
UF9BREFQVEVSX1JBRElPX09GRikpCi0JCXsKLQkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19UUkFD
RSwgIjwtLS1SQURJTyBPRkZcbiIpOwotCQkJYnJlYWs7Ci0JCX0KLQkJCi0JCWlmIChwQWQtPlJh
bGlua0NvdW50ZXJzLk1nbXRSaW5nRnVsbENvdW50ID49IDIpCi0JCXsKLQkJCVBDbWRRRWxtdAlj
bWRxZWxtdDsKLQotCQkJUlRNUF9TRVRfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfUkVTRVRfSU5f
UFJPR1JFU1MpOwotCQkJCi0JCQlOZGlzQWNxdWlyZVNwaW5Mb2NrKCZwQWQtPkNtZFFMb2NrKTsK
LQkJCXdoaWxlIChwQWQtPkNtZFEuc2l6ZSA+IDApCi0JCQl7Ci0JCQkJUlRVU0JEZXF1ZXVlQ21k
KCZwQWQtPkNtZFEsICZjbWRxZWxtdCk7Ci0JCQkJaWYgKGNtZHFlbG10LT5DbWRGcm9tTmRpcyA9
PSBUUlVFKQotCQkJCXsKLQkJCQkJaWYgKChjbWRxZWxtdC0+Y29tbWFuZCAhPSBPSURfODAyXzEx
X0JTU0lEX0xJU1RfU0NBTikgJiYKLQkJCQkJCShjbWRxZWxtdC0+Y29tbWFuZCAhPSBSVF9PSURf
ODAyXzExX0JTU0lEKSAmJgotCQkJCQkJKGNtZHFlbG10LT5jb21tYW5kICE9IE9JRF84MDJfMTFf
U1NJRCkgJiYKLQkJCQkJCShjbWRxZWxtdC0+Y29tbWFuZCAhPSBPSURfODAyXzExX0RJU0FTU09D
SUFURSkpCi0JCQkJCXsKLSNpZiAwCi0JCQkJCQlpZiAoY21kcWVsbXQtPlNldE9wZXJhdGlvbikK
LQkJCQkJCQlOZGlzTVNldEluZm9ybWF0aW9uQ29tcGxldGUocEFkLT5BZGFwdGVySGFuZGxlLCBO
RElTX1NUQVRVU19OT1RfQUNDRVBURUQpOwotCQkJCQkJZWxzZQotCQkJCQkJCU5kaXNNUXVlcnlJ
bmZvcm1hdGlvbkNvbXBsZXRlKHBBZC0+QWRhcHRlckhhbmRsZSwgTkRJU19TVEFUVVNfTk9UX0FD
Q0VQVEVEKTsKLSNlbmRpZgotCQkJCQl9Ci0KLQkJCQkJaWYgKChjbWRxZWxtdC0+Y29tbWFuZCAh
PSBSVF9PSURfU0lOR0xFX1JFQURfTUFDKSAmJgotCQkJCQkJKGNtZHFlbG10LT5jb21tYW5kICE9
IFJUX09JRF9NVUxUSV9SRUFEX01BQykgJiYKLQkJCQkJCShjbWRxZWxtdC0+Y29tbWFuZCAhPSBS
VF9PSURfVkVORE9SX1JFQURfQkJQKSAmJgotCQkJCQkJKGNtZHFlbG10LT5jb21tYW5kICE9IFJU
X09JRF9VU0JfVkVORE9SX0VFUFJPTV9SRUFEKSkKLQkJCQkJewotCQkJCQkJaWYgKGNtZHFlbG10
LT5idWZmZXIgIT0gTlVMTCkKLQkJCQkJCQlrZnJlZShjbWRxZWxtdC0+YnVmZmVyKTsKLQkJCQkJ
fQotCi0JCQkJCWtmcmVlKGNtZHFlbG10KTsKLQkJCQl9Ci0JCQkJZWxzZQotCQkJCQljbWRxZWxt
dC0+SW5Vc2UgPSBGQUxTRTsKLQkJCX0KLQkJCU5kaXNSZWxlYXNlU3BpbkxvY2soJnBBZC0+Q21k
UUxvY2spOwotCQkJCi0JCQlSVFVTQkVucXVldWVJbnRlcm5hbENtZChwQWQsIFJUX09JRF9SRVNF
VF9GUk9NX0VSUk9SKTsKLQotCQkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX0VSUk9SLCAiPC0tLU1s
bWVQZXJpb2RpY0V4ZWMgKE1nbXQgUmluZyBGdWxsKVxuIik7Ci0JCQlicmVhazsKLQkJfQotCQlw
QWQtPlJhbGlua0NvdW50ZXJzLk1nbXRSaW5nRnVsbENvdW50ID0gMDsKLQotCQlpZiAoKFJUTVBf
VEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9CU1NfSk9JTl9JTl9QUk9HUkVTUykpIHx8IChS
VE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfQlNTX1NDQU5fSU5fUFJPR1JFU1MpKSB8
fCAoUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX1JFQVNTT0NfSU5fUFJPR1JFU1Mp
KSkKLQkJewotCQkJYnJlYWs7Ly9zdGV2ZW46Zm9yIHRlc3QKLQkJfQotCQlwQWQtPk1sbWUuUGVy
aW9kaWNSb3VuZCArKzsKLQkJUlRVU0JFbnF1ZXVlSW50ZXJuYWxDbWQocEFkLCBSVF9PSURfUEVS
SU9ESUNfRVhFQ1VUKTsKLQkJTm93MzIgPSBqaWZmaWVzOwotCQlpZiAoSU5GUkFfT04ocEFkKSkK
LQkJewotCQkJLy8gQ2hlY2sgZm9yIEVBUE9MIGZyYW1lIHNlbnQgYWZ0ZXIgTUlDIGNvdW50ZXJt
ZWFzdXJlcwotCQkJaWYgKHBBZC0+UG9ydENmZy5NaWNFcnJDbnQgPj0gMykKLQkJCXsKLQkJCQlN
TE1FX0RJU0FTU09DX1JFUV9TVFJVQ1QJRGlzYXNzb2NSZXE7Ci0JCQkJCi0JCQkJLy8gZGlzYXNz
b2MgZnJvbSBjdXJyZW50IEFQIGZpcnN0Ci0JCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICJN
TE1FIC0gZGlzYXNzb2NpYXRlIHdpdGggY3VycmVudCBBUCBhZnRlciBzZW5kaW5nIHNlY29uZCBj
b250aW51b3VzIEVBUE9MIGZyYW1lXG4iKTsKLQkJCQlEaXNhc3NvY1Bhcm1GaWxsKHBBZCwgJkRp
c2Fzc29jUmVxLCAmcEFkLT5Qb3J0Q2ZnLkJzc2lkLCBSRUFTT05fTUlDX0ZBSUxVUkUpOwotCQkJ
CU1sbWVFbnF1ZXVlKHBBZCwgQVNTT0NfU1RBVEVfTUFDSElORSwgTVQyX01MTUVfRElTQVNTT0Nf
UkVRLAotCQkJCQlzaXplb2YoTUxNRV9ESVNBU1NPQ19SRVFfU1RSVUNUKSwgJkRpc2Fzc29jUmVx
KTsKLQotCQkJCXBBZC0+TWxtZS5DbnRsTWFjaGluZS5DdXJyU3RhdGUgPSBDTlRMX1dBSVRfRElT
QVNTT0M7Ci0JCQkJcEFkLT5Qb3J0Q2ZnLmJCbG9ja0Fzc29jID0gVFJVRTsKLQkJCX0KLQkJCWVs
c2UgaWYgKChwQWQtPlBvcnRDZmcuTGFzdEJlYWNvblJ4VGltZSArIEJFQUNPTl9MT1NUX1RJTUUg
PCBOb3czMikgKQotCQkJewotCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAiQkVBQ09OIGxv
c3QgZm9yIG1vcmUgdGhhbiAlZCBtc2VjLCBsZXQgQ1FJID0gMFxuIiwgQkVBQ09OX0xPU1RfVElN
RSk7Ci0JCQkJcEFkLT5NbG1lLkNoYW5uZWxRdWFsaXR5ID0gMDsKLQkJCQkKLQkJCQkvLyBMb3N0
IEFQLCBzZW5kIGRpc2Nvbm5lY3QgJiBsaW5rIGRvd24gZXZlbnQKLQkJCQlSVFVTQkVucXVldWVJ
bnRlcm5hbENtZChwQWQsIFJUX09JRF9MSU5LX0RPV04pOwotCQkJfQotCQkJZWxzZQotCQkJewot
CQkJCWF0b21pY19zZXQoJihwQWQtPlBvcnRDZmcuRGF0YVBhY2tldHNGcm9tQVApLCAwKTsJCi0J
CQkJTWxtZUNoZWNrRm9yUHNtQ2hhbmdlKHBBZCk7Ci0JCQl9Ci0JCX0KLQkJZWxzZSBpZiAoQURI
T0NfT04ocEFkKSkKLQkJewotCQkJLy8gSWYgYWxsIHBlZXJzIGxlYXZlLCBhbmQgdGhpcyBTVEEg
YmVjb21lcyB0aGUgbGFzdCBvbmUgaW4gdGhpcyBJQlNTLCB0aGVuIGNoYW5nZSBNZWRpYVN0YXRl
Ci0JCQkvLyB0byBESVNDT05ORUNURUQuIEJ1dCBzdGlsbCBob2xkaW5nIHRoaXMgSUJTUyAoaS5l
LiBzZW5kaW5nIEJFQUNPTikgc28gdGhhdCBvdGhlciBTVEFzIGNhbgotCQkJLy8gam9pbiBsYXRl
ci4KLQkJCWlmICgocEFkLT5Qb3J0Q2ZnLkxhc3RCZWFjb25SeFRpbWUgKyBBREhPQ19CRUFDT05f
TE9TVF9USU1FIDwgTm93MzIpICYmCi0JCQkJKHBBZC0+TWVkaWFTdGF0ZSA9PSBOZGlzTWVkaWFT
dGF0ZUNvbm5lY3RlZCkpCi0JCQl7Ci0JCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICJNTUNI
SyAtIGV4Y2Vzc2l2ZSBCRUFDT04gbG9zdCwgbGFzdCBTVEEgaW4gdGhpcyBJQlNTLCBNZWRpYVN0
YXRlPURpc2Nvbm5lY3RlZFxuIik7Ci0JCQkJCi0JCQkJcEFkLT5NZWRpYVN0YXRlID0gTmRpc01l
ZGlhU3RhdGVEaXNjb25uZWN0ZWQ7Ci0JCQkJTmRpc01JbmRpY2F0ZVN0YXR1cyhwQWQtPkFkYXB0
ZXJIYW5kbGUsIE5ESVNfU1RBVFVTX01FRElBX0RJU0NPTk5FQ1QsIChQVk9JRClOVUxMLCAwKTsK
LQkJCQlOZGlzTUluZGljYXRlU3RhdHVzQ29tcGxldGUocEFkLT5BZGFwdGVySGFuZGxlKTsKLQkJ
CQkKLQkJCQkvLyBjbGVhbiB1cCBwcmV2aW91cyBTQ0FOIHJlc3VsdCwgYWRkIGN1cnJlbnQgQlNT
IGJhY2sgdG8gdGFibGUgaWYgYW55Ci0JCQkJQnNzVGFibGVEZWxldGVFbnRyeSgmcEFkLT5Qb3J0
Q2ZnLkJzc1RhYiwgJihwQWQtPlBvcnRDZmcuQnNzaWQpKTsKLQkJCQlwQWQtPlBvcnRDZmcuTGFz
dFNjYW5UaW1lID0gTm93MzI7Ci0JCQl9Ci0JCQllbHNlCi0JCQl7Ci0JCQkJLy8gaWYgYWxsIDEx
YiBwZWVycyBsZWF2ZSB0aGlzIEJTUyBtb3JlIHRoYW4gNSBzZWNvbmRzLCB1cGRhdGUgVHggcmF0
ZQotCQkJCWlmICgocEFkLT5Qb3J0Q2ZnLkNoYW5uZWwgPD0gMTQpCSYmCi0JCQkJCShwQWQtPlBv
cnRDZmcuTWF4VHhSYXRlIDw9IFJBVEVfMTEpCSYmCi0JCQkJCShwQWQtPlBvcnRDZmcuTWF4RGVz
aXJlZFJhdGUgPiBSQVRFXzExKQkmJgotCQkJCQkoKHBBZC0+UG9ydENmZy5MYXN0MTFiQmVhY29u
UnhUaW1lICsgNTAwMCkgPCBOb3czMikpCi0JCQkJewotCQkJCQlEQkdQUklOVChSVF9ERUJVR19U
UkFDRSwgImxhc3QgMTFCIHBlZXIgbGVmdCwgdXBkYXRlIFR4IHJhdGVzXG4iKTsKLQkJCQkJCi0J
CQkJCU5kaXNNb3ZlTWVtb3J5KHBBZC0+UG9ydENmZy5TdXBwb3J0ZWRSYXRlcywgcEFkLT5Qb3J0
Q2ZnLklic3NDb25maWcuU3VwcG9ydGVkUmF0ZXMsIE1BWF9MRU5fT0ZfU1VQUE9SVEVEX1JBVEVT
KTsKLQkJCQkJcEFkLT5Qb3J0Q2ZnLlN1cHBvcnRlZFJhdGVzTGVuID0gcEFkLT5Qb3J0Q2ZnLkli
c3NDb25maWcuU3VwcG9ydGVkUmF0ZXNMZW47Ci0JCQkJCVJUVVNCRW5xdWV1ZUludGVybmFsQ21k
KHBBZCwgUlRfT0lEX1VQREFURV9UWF9SQVRFKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJZWxzZQot
CQl7Ci0JCQlpZiAoKHBBZC0+UG9ydENmZy5iQmxvY2tBc3NvYyA9PSBUUlVFKSAmJiAocEFkLT5Q
b3J0Q2ZnLkxhc3RNaWNFcnJvclRpbWUgKyAoNjAgKiAxMDAwKSA8IE5vdzMyKSkKLQkJCXsKLQkJ
CQlwQWQtPlBvcnRDZmcuYkJsb2NrQXNzb2MgPSBGQUxTRTsKLQkJCX0KLQotCQkJaWYgKChwQWQt
PlBvcnRDZmcuQXV0b1JlY29ubmVjdCA9PSBUUlVFKSAmJgotCQkJCShwQWQtPk1sbWUuQ250bE1h
Y2hpbmUuQ3VyclN0YXRlID09IENOVExfSURMRSkgJiYKLQkJCQkoIVJUTVBfVEVTVF9GTEFHKHBB
ZCwgZlJUTVBfQURBUFRFUl9NTE1FX1JFU0VUX0lOX1BST0dSRVNTKSkgJiYKLQkJCQkoTWxtZVZh
bGlkYXRlU1NJRChwQWQpID09IFRSVUUpKQotCQkJewotCQkJCWlmIChwQWQtPlBvcnRDZmcuQnNz
VGFiLkJzc05yPT0wKQotCQkJCXsKLQkJCQkJTUxNRV9TQ0FOX1JFUV9TVFJVQ1QJICAgU2NhblJl
cTsKLQkJCQkJQ0hBUgkJCQkJICAgQnJvYWRTc2lkW01BWF9MRU5fT0ZfU1NJRF07Ci0JCQkJCi0J
CQkJCWlmICgocEFkLT5Qb3J0Q2ZnLkxhc3RTY2FuVGltZSArIDEwICogMTAwMCkgPCBOb3czMikK
LQkJCQkJewotCQkJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICJDTlRMIC0gTm8gbWF0Y2hp
bmcgQlNTLCBzdGFydCBhIG5ldyBzY2FuXG4iKTsKLQkvLwkJCQkJQnJvYWRTc2lkWzBdID0gJ1ww
JzsKLQkJCQkJCVNjYW5QYXJtRmlsbChwQWQsICZTY2FuUmVxLCBCcm9hZFNzaWQsIDAsIEJTU19B
TlksIFNDQU5fQUNUSVZFKTsKLQkJCQkJCU1sbWVFbnF1ZXVlKHBBZCwgU1lOQ19TVEFURV9NQUNI
SU5FLCBNVDJfTUxNRV9TQ0FOX1JFUSwgc2l6ZW9mKE1MTUVfU0NBTl9SRVFfU1RSVUNUKSwgJlNj
YW5SZXEpOwotCQkJCQkJcEFkLT5NbG1lLkNudGxNYWNoaW5lLkN1cnJTdGF0ZSA9IENOVExfV0FJ
VF9PSURfTElTVF9TQ0FOOwotCQkJCQkJLy8gUmVzZXQgTWlzc2VkIHNjYW4gbnVtYmVyCi0JLy8J
CQkJCXBBZC0+UG9ydENmZy5JZ25vcmVkU2Nhbk51bWJlciA9IDA7Ci0JCQkJCQlwQWQtPlBvcnRD
ZmcuTGFzdFNjYW5UaW1lID0gTm93MzI7Ci0JCQkJCX0KLQkJCQkJZWxzZSBpZiAocEFkLT5Qb3J0
Q2ZnLkJzc1R5cGUgPT0gQlNTX0lOREVQKQkvLyBRdWl0IHRoZSBmb3JldmVyIHNjYW4gd2hlbiBp
biBhIHZlcnkgY2xlYW4gcm9vbQotCQkJCQkJTWxtZUF1dG9SZWNvbm5lY3RMYXN0U1NJRChwQWQp
OwkJCQkJCi0JCQkJfQotCQkJCWVsc2UKLQkJCQl7Ci0JCQkJCWlmICgocEFkLT5NbG1lLlBlcmlv
ZGljUm91bmQgJSAxMCkgPT0gNykKLQkJCQkJewotCQkJCQkJaWYgKChwQWQtPlBvcnRDZmcuTGFz
dFNjYW5UaW1lICsgMTAgKiAxMDAwKSA8IE5vdzMyKQotCQkJCQkJewotCQkJCQkJCS8vTWxtZUF1
dG9TY2FuKHBBZCk7Ci0JCQkJCQkJcEFkLT5Qb3J0Q2ZnLkxhc3RTY2FuVGltZSA9IE5vdzMyOwot
CQkJCQkJfQotCQkJCQkJTWxtZUF1dG9SZWNvbm5lY3RMYXN0U1NJRChwQWQpOwotCQkJCQl9Ci0J
CQkJCWVsc2UgaWYgKChwQWQtPk1sbWUuUGVyaW9kaWNSb3VuZCAlIDMwKSA9PSA4KQotCQkJCQl7
Ci0JCQkJCQlNbG1lRW5xdWV1ZShwQWQsIAotCQkJCQkJCQlNTE1FX0NOVExfU1RBVEVfTUFDSElO
RSwgCi0JCQkJCQkJCU9JRF84MDJfMTFfQlNTSURfTElTVF9TQ0FOLCAKLQkJCQkJCQkJMCwgCi0J
CQkJCQkJCU5VTEwpOwotCQkJCQl9Ci0JCQkJCQotCQkJCX0KLQkJCX0KLQkJfQotCi0JCVJUVVNC
VXAocEFkLCAoJihwQWQtPm1sbWVfc2VtYXBob3JlKSkpOwotCX13aGlsZSgwKTsKLQotCWlmICgo
IVJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9SRVNFVF9JTl9QUk9HUkVTUykpICYm
Ci0JCSghUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0hBTFRfSU5fUFJPR1JFU1Mp
KSAmJgotCQkoIVJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9SRU1PVkVfSU5fUFJP
R1JFU1MpKSkKLQl7Ci0JCVJUTVBTZXRUaW1lcihwQWQsICZwQWQtPk1sbWUuUGVyaW9kaWNUaW1l
ciwgTUxNRV9UQVNLX0VYRUNfSU5UVik7Ci0JfQotCi19Ci0KLS8vIElSUUwgPSBESVNQQVRDSF9M
RVZFTAotVk9JRCBNbG1lQXV0b1NjYW4oCi0gICAgSU4gUFJUMjU3MEFEQVBURVIgcEFkKQotewot
ICAgIC8vIGNoZWNrIENudGxNYWNoaW5lLkN1cnJTdGF0ZSB0byBhdm9pZCBjb2xsaXNpb24gd2l0
aCBORElTIFNldE9JRCByZXF1ZXN0Ci0gICAgaWYgKHBBZC0+TWxtZS5DbnRsTWFjaGluZS5DdXJy
U3RhdGUgPT0gQ05UTF9JRExFKQotICAgIHsKLSAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJB
Q0UsICJNTUNISyAtIERyaXZlciBhdXRvIHNjYW5cbiIpOwotCi0gICAgICAgIC8vIHRlbGwgQ05U
TCBzdGF0ZSBtYWNoaW5lIE5PVCB0byBjYWxsIE5kaXNNU2V0SW5mb3JtYXRpb25Db21wbGV0ZSgp
IGFmdGVyIGNvbXBsZXRpbmcKLSAgICAgICAgLy8gdGhpcyByZXF1ZXN0LCBiZWNhdXNlIHRoaXMg
cmVxdWVzdCBpcyBpbml0aWF0ZWQgYnkgZHJpdmVyIGl0c2VsZi4KLSAgICAgICAgcEFkLT5NbG1l
LkNudGxBdXguQ3VyclJlcUlzRnJvbU5kaXMgPSBGQUxTRTsgCi0gICAgICAgIE1sbWVFbnF1ZXVl
KHBBZCwgCi0gICAgICAgICAgICAgICAgICAgIE1MTUVfQ05UTF9TVEFURV9NQUNISU5FLCAKLSAg
ICAgICAgICAgICAgICAgICAgT0lEXzgwMl8xMV9CU1NJRF9MSVNUX1NDQU4sIAotICAgICAgICAg
ICAgICAgICAgICAwLCAKLSAgICAgICAgICAgICAgICAgICAgTlVMTCk7Ci0JUlRVU0JVcChwQWQs
ICZwQWQtPm1sbWVfc2VtYXBob3JlKTsKLSAgICB9Ci19Ci0vLyBJUlFMID0gRElTUEFUQ0hfTEVW
RUwKLVZPSUQgTWxtZUF1dG9SZWNvdmVyTmV0d29yaygKLSAgICBJTiBQUlQyNTcwQURBUFRFUiBw
QWQpCi17Ci0gICAgLy8gY2hlY2sgQ250bE1hY2hpbmUuQ3VyclN0YXRlIHRvIGF2b2lkIGNvbGxp
c2lvbiB3aXRoIE5ESVMgU2V0T0lEIHJlcXVlc3QKLSAgICBpZiAocEFkLT5NbG1lLkNudGxNYWNo
aW5lLkN1cnJTdGF0ZSA9PSBDTlRMX0lETEUpCi0gICAgewotICAgICAgICBORElTXzgwMl8xMV9T
U0lEIE9pZFNzaWQ7Ci0gICAgICAgIE9pZFNzaWQuU3NpZExlbmd0aCA9IHBBZC0+UG9ydENmZy5T
c2lkTGVuOwotICAgICAgICBOZGlzTW92ZU1lbW9yeShPaWRTc2lkLlNzaWQsIHBBZC0+UG9ydENm
Zy5Tc2lkLCBwQWQtPlBvcnRDZmcuU3NpZExlbik7Ci0KLSAgICAgICAgREJHUFJJTlQoUlRfREVC
VUdfVFJBQ0UsICJNTUNISyAtIERyaXZlciBhdXRvIHJlY292ZXJpbmcgbmV0d29yayAtICVzXG4i
LCBwQWQtPlBvcnRDZmcuU3NpZCk7Ci0KLSAgICAgICAgLy8gdGVsbCBDTlRMIHN0YXRlIG1hY2hp
bmUgTk9UIHRvIGNhbGwgTmRpc01TZXRJbmZvcm1hdGlvbkNvbXBsZXRlKCkgYWZ0ZXIgY29tcGxl
dGluZwotICAgICAgICAvLyB0aGlzIHJlcXVlc3QsIGJlY2F1c2UgdGhpcyByZXF1ZXN0IGlzIGlu
aXRpYXRlZCBieSBkcml2ZXIgaXRzZWxmLgotICAgICAgICBwQWQtPk1sbWUuQ250bEF1eC5DdXJy
UmVxSXNGcm9tTmRpcyA9IEZBTFNFOyAKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgIE1s
bWVFbnF1ZXVlKHBBZCwgCi0gICAgICAgICAgICAgICAgICAgIE1MTUVfQ05UTF9TVEFURV9NQUNI
SU5FLCAKLSAgICAgICAgICAgICAgICAgICAgT0lEXzgwMl8xMV9TU0lELCAKLSAgICAgICAgICAg
ICAgICAgICAgc2l6ZW9mKE5ESVNfODAyXzExX1NTSUQpLCAKLSAgICAgICAgICAgICAgICAgICAg
Jk9pZFNzaWQpOwotCVJUVVNCVXAocEFkLCAoJihwQWQtPm1sbWVfc2VtYXBob3JlKSkpOwotCS8v
S2VTZXRFdmVudCgmcEFkLT5NTE1FRXZlbnQsIDAsIEZBTFNFKTsJCQkKLSAgICB9Ci19Ci0KLS8v
IElSUUwgPSBESVNQQVRDSF9MRVZFTAotVk9JRCBNbG1lQXV0b1JlY29ubmVjdExhc3RTU0lEKAot
ICAgIElOIFBSVDI1NzBBREFQVEVSIHBBZCkKLXsKLSAgICAvLyBjaGVjayBDbnRsTWFjaGluZS5D
dXJyU3RhdGUgdG8gYXZvaWQgY29sbGlzaW9uIHdpdGggTkRJUyBTZXRPSUQgcmVxdWVzdAotICAg
IGlmICgocEFkLT5NbG1lLkNudGxNYWNoaW5lLkN1cnJTdGF0ZSA9PSBDTlRMX0lETEUpICYmIChN
bG1lVmFsaWRhdGVTU0lEKHBBZCkgPT0gVFJVRSkpCi0gICAgewotICAgICAgICBORElTXzgwMl8x
MV9TU0lEIE9pZFNzaWQ7Ci0gICAgICAgIE9pZFNzaWQuU3NpZExlbmd0aCA9IHBBZC0+TWxtZS5D
bnRsQXV4LlNzaWRMZW47Ci0gICAgICAgIE5kaXNNb3ZlTWVtb3J5KE9pZFNzaWQuU3NpZCwgcEFk
LT5NbG1lLkNudGxBdXguU3NpZCwgcEFkLT5NbG1lLkNudGxBdXguU3NpZExlbik7Ci0KLSAgICAg
ICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICJEcml2ZXIgYXV0byByZWNvbm5lY3QgdG8gbGFz
dCBPSURfODAyXzExX1NTSUQgc2V0dGluZyAtICVzXG4iLCBwQWQtPk1sbWUuQ250bEF1eC5Tc2lk
KTsKLQotCQkvLyBXZSB3aWxsIG9ubHkgdHJ5IHRoaXMgYXR0ZW1wIG9uY2UsIHRoZXJlZm9yZSBj
aGFuZ2UgdGhlIEF1dG9SZWNvbm5lY3QgZmxhZyBhZnRlcndhcmRzLgotICAgICAgICBwQWQtPk1s
bWUuQ250bEF1eC5DdXJyUmVxSXNGcm9tTmRpcyA9IEZBTFNFOyAKLSAgICAgICAgICAgICAgICAg
ICAgCi0gICAgICAgIE1sbWVFbnF1ZXVlKHBBZCwgCi0gICAgICAgICAgICAgICAgICAgIE1MTUVf
Q05UTF9TVEFURV9NQUNISU5FLCAKLSAgICAgICAgICAgICAgICAgICAgT0lEXzgwMl8xMV9TU0lE
LCAKLSAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKE5ESVNfODAyXzExX1NTSUQpLCAKLSAgICAg
ICAgICAgICAgICAgICAgJk9pZFNzaWQpOwotCi0JUlRVU0JVcChwQWQsICZwQWQtPm1sbWVfc2Vt
YXBob3JlKTsKLQotICAgIH0KLX0KLQotLy8gVmFsaWRhdGUgU1NJRCBmb3IgY29ubmVjdGlvbiB0
cnkgYW5kIHJlc2NhbiBwdXJwb3NlCi0vLyBWYWxpZCBTU0lEIHdpbGwgaGF2ZSB2aXNpYmxlIGNo
YXJzIG9ubHkuCi0vLyBUaGUgdmFsaWQgbGVuZ3RoIGlzIGZyb20gMCB0byAzMi4KLS8vIElSUUwg
PSBESVNQQVRDSF9MRVZFTAotQk9PTEVBTglNbG1lVmFsaWRhdGVTU0lEKAotICAgIElOIFBSVDI1
NzBBREFQVEVSIHBBZCkKLXsKLQlORElTXzgwMl8xMV9TU0lEIE9pZFNzaWQ7Ci0JVUxPTkcJaW5k
ZXg7Ci0JCi0JLy8gQ29weSB0aGUgU1NJRCBpbnRvIGxvY2FsIGJ1ZmZlcgotCU9pZFNzaWQuU3Np
ZExlbmd0aCA9IHBBZC0+TWxtZS5DbnRsQXV4LlNzaWRMZW47Ci0JTmRpc01vdmVNZW1vcnkoT2lk
U3NpZC5Tc2lkLCBwQWQtPk1sbWUuQ250bEF1eC5Tc2lkLCBwQWQtPk1sbWUuQ250bEF1eC5Tc2lk
TGVuKTsKLQotCS8vIEZpcnN0IGNoZWNrIHRoZSB6ZXJvIGxlbmd0aCAiQU5ZIiBTU0lECi0JaWYg
KE9pZFNzaWQuU3NpZExlbmd0aCA9PSAwKQotCQlyZXR1cm4gKFRSVUUpOwotCWVsc2UgaWYgKE9p
ZFNzaWQuU3NpZExlbmd0aCA+IE5ESVNfODAyXzExX0xFTkdUSF9TU0lEKQotCQlyZXR1cm4gKEZB
TFNFKTsKLQotCS8vIENoZWNrIGVhY2ggY2hhcmFjdGVyIHZhbHVlCi0JZm9yIChpbmRleCA9IDA7
IGluZGV4IDwgT2lkU3NpZC5Tc2lkTGVuZ3RoOyBpbmRleCsrKQotCXsKLQkJaWYgKE9pZFNzaWQu
U3NpZFtpbmRleF0gPCAweDIwKQotCQkJcmV0dXJuIChGQUxTRSk7Ci0JfQotCi0JLy8gQWxsIGNo
ZWNrZWQKLQlyZXR1cm4gKFRSVUUpOwotfQotCi0vKgotICAgID09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0g
ICAgRGVzY3JpcHRpb246Ci0gICAgICAgIFRoaXMgcm91dGluZSBjaGVja3MgaWYgdGhlcmUncmUg
b3RoZXIgQVBzIG91dCB0aGVyZSBjYXBhYmxlIGZvcgotICAgICAgICByb2FtaW5nLiBDYWxsZXIg
c2hvdWxkIGNhbGwgdGhpcyByb3V0aW5lIG9ubHkgd2hlbiBNYXNzb2M9VFJVRSBhbmQKLSAgICAg
ICAgY2hhbm5lbCBxdWFsaXR5IGlzIGJlbG93IENRSV9HT09EX1RIUkVTSE9MRC4KLSAgICAgICAg
Ci0JSVJRTCA9IERJU1BBVENIX0xFVkVMCi0KLSAgICBPdXRwdXQ6Ci0gICAgPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLSAqLwotVk9JRCBNbG1lQ2hlY2tGb3JSb2FtaW5nKAotICAgIElOIFBSVDI1NzBBREFQ
VEVSIHBBZCwKLSAgICBJTiBVTE9ORyAgICBOb3czMikKLXsKLQlVU0hPUlQgICAgIGk7Ci0JQlNT
X1RBQkxFICAqcEJzc1RhYiA9ICZwQWQtPlBvcnRDZmcuQnNzVGFiOwotCUJTU19UQUJMRSAgKnBS
b2FtVGFiID0gJnBBZC0+TWxtZS5DbnRsQXV4LlJvYW1UYWI7Ci0JQlNTX0VOVFJZICAqcEJzczsK
LQotCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAiPT0+IE1sbWVDaGVja0ZvclJvYW1pbmdcbiIp
OwotCS8vIHB1dCBhbGwgcm9hbWluZyBjYW5kaWRhdGVzIGludG8gUm9hbVRhYiwgYW5kIHNvcnQg
aW4gUlNTSSBvcmRlcgotCUJzc1RhYmxlSW5pdChwUm9hbVRhYik7Ci0JZm9yIChpID0gMDsgaSA8
IHBCc3NUYWItPkJzc05yOyBpKyspCi0JewotCQlwQnNzID0gJnBCc3NUYWItPkJzc0VudHJ5W2ld
OwotCi0JCWlmICgocEJzc1RhYi0+QnNzRW50cnlbaV0uTGFzdEJlYWNvblJ4VGltZSArIEJFQUNP
Tl9MT1NUX1RJTUUpIDwgTm93MzIpIAotCQkJY29udGludWU7ICAgIC8vIEFQIGRpc2FwcGVhcgot
CQlpZiAocEJzcy0+UnNzaSA8PSBSU1NJX1RIUkVTSE9MRF9GT1JfUk9BTUlORykKLQkJCWNvbnRp
bnVlOyAgICAvLyBSU1NJIHRvbyB3ZWFrLiBmb3JnZXQgaXQuCi0JCWlmIChNQUNfQUREUl9FUVVB
TCgmcEJzc1RhYi0+QnNzRW50cnlbaV0uQnNzaWQsICZwQWQtPlBvcnRDZmcuQnNzaWQpKQotCQkJ
Y29udGludWU7ICAgIC8vIHNraXAgY3VycmVudCBBUAotCQlpZiAoQ1FJX0lTX0ZBSVIocEFkLT5N
bG1lLkNoYW5uZWxRdWFsaXR5KSAmJiAocEFkLT5Qb3J0Q2ZnLkxhc3RSc3NpICsgUlNTSV9ERUxU
QSA+IHBCc3MtPlJzc2kpKSAKLQkJCWNvbnRpbnVlOyAgICAvLyB3ZSdyZSBzdGlsbCBva2F5LCBv
bmx5IEFQIHdpdGggc3Ryb25nZXIgUlNTSSBpcyBlbGlnaWJsZSBmb3Igcm9hbWluZwotCi0JCS8v
IEFQIHBhc3NpbmcgYWxsIGFib3ZlIHJ1bGVzIGlzIHB1dCBpbnRvIHJvYW1pbmcgY2FuZGlkYXRl
IHRhYmxlICAgICAgICAKLQkJTmRpc01vdmVNZW1vcnkoJnBSb2FtVGFiLT5Cc3NFbnRyeVtwUm9h
bVRhYi0+QnNzTnJdLCBwQnNzLCBzaXplb2YoQlNTX0VOVFJZKSk7Ci0JCXBSb2FtVGFiLT5Cc3NO
ciArPSAxOwotCX0KLQotCWlmIChwUm9hbVRhYi0+QnNzTnIgPiAwKQotCXsKLQkJLy8gY2hlY2sg
Q250bE1hY2hpbmUuQ3VyclN0YXRlIHRvIGF2b2lkIGNvbGxpc2lvbiB3aXRoIE5ESVMgU2V0T0lE
IHJlcXVlc3QKLQkJaWYgKChwQWQtPk1sbWUuQ250bE1hY2hpbmUuQ3VyclN0YXRlID09IENOVExf
SURMRSkgJiYgKCFSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfTUxNRV9SRVNFVF9J
Tl9QUk9HUkVTUykpKQotCQl7Ci0JCS8vIHRlbGwgQ05UTCBzdGF0ZSBtYWNoaW5lIE5PVCB0byBj
YWxsIE5kaXNNU2V0SW5mb3JtYXRpb25Db21wbGV0ZSgpIGFmdGVyIGNvbXBsZXRpbmcKLQkJLy8g
dGhpcyByZXF1ZXN0LCBiZWNhdXNlIHRoaXMgcmVxdWVzdCBpcyBpbml0aWF0ZWQgYnkgZHJpdmVy
IGl0c2VsZiwgbm90IGZyb20gTkRJUy4KLQkJcEFkLT5NbG1lLkNudGxBdXguQ3VyclJlcUlzRnJv
bU5kaXMgPSBGQUxTRTsgCi0KLQkJcEFkLT5SYWxpbmtDb3VudGVycy5Qb29yQ1FJUm9hbWluZ0Nv
dW50ICsrOwotCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgIk1NQ0hLIC0gUm9hbWluZyBhdHRl
bXB0ICMlZFxuIiwgcEFkLT5SYWxpbmtDb3VudGVycy5Qb29yQ1FJUm9hbWluZ0NvdW50KTsKLQkJ
TWxtZUVucXVldWUocEFkLCBNTE1FX0NOVExfU1RBVEVfTUFDSElORSwgTVQyX01MTUVfUk9BTUlO
R19SRVEsIDAsIE5VTEwpOwotCQlSVFVTQlVwKHBBZCwgKCYocEFkLT5tbG1lX3NlbWFwaG9yZSkp
KTsKLQkJLy9LZVNldEV2ZW50KCZwQWQtPk1MTUVFdmVudCwgMCwgRkFMU0UpOwotCQl9Ci0JfQot
CURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAiPD09IE1sbWVDaGVja0ZvclJvYW1pbmdcbiIpOyAg
IAotfQotCi1WT0lEIFBlcmlvZGljRXhlYygKLSAgICBJTiBQUlQyNTcwQURBUFRFUiBwQWQpCi17
Ci0KLSAgICBVU0hPUlQgVHhGYWlsQ291bnQsIFR4Tm9SZXRyeUNudCwgVHhPbmVSZXRyeUNudCwg
VHhNUmV0cnlDbnQsIFR4UmV0cnlPa0NvdW50LCBUeE9rQ291bnQsIFR4VG90YWxDbnQsIFR4UEVS
LCBUeFBSUiA9IDAsIFR4UmVhbE9rQ291bnQ7Ci0JVVNIT1JUIFJ4RmFpbENudDsKLSAgICBVTE9O
RyBSeE9rQ250LCBSeENudCwgUnhQRVI7Ci0JVUxPTkcgTm93MzI7Ci0JVUxPTkcgT2xkVmFsdWU7
Ci0JVUNIQVIgVXBSYXRlLCBEb3duUmF0ZSwgQ3VyclJhdGU7Ci0KLQlpZiAoKFJUTVBfVEVTVF9G
TEFHKHBBZCwgZlJUTVBfQURBUFRFUl9SRVNFVF9JTl9QUk9HUkVTUykpIHx8Ci0JCShSVE1QX1RF
U1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfSEFMVF9JTl9QUk9HUkVTUykpIHx8Ci0JCShSVE1Q
X1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfUkVNT1ZFX0lOX1BST0dSRVNTKSkpCi0Jewot
CQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgIlBlcmlvZGljRXhlYyBub3QgZXhlY3V0ZSEgKHBB
ZC0+RmxhZ3M9MHglMDh4KVxuIiwgcEFkLT5GbGFncyk7Ci0JCXJldHVybiA7Ci0JfQotCUFzaWNB
ZGp1c3RUeFBvd2VyKHBBZCk7Ci0gCVJUVVNCTXVsdGlSZWFkTUFDKHBBZCwgU1RBX0NTUjAsIChQ
VUNIQVIpcEFkLT5NQUNDb3VudGVycywgMjIpOwotCU9sZFZhbHVlID0gcEFkLT5XbGFuQ291bnRl
cnMuRkNTRXJyb3JDb3VudC52di5Mb3dQYXJ0OwotCXBBZC0+V2xhbkNvdW50ZXJzLkZDU0Vycm9y
Q291bnQudnYuTG93UGFydCArPSBwQWQtPk1BQ0NvdW50ZXJzWzBdOwotCWlmIChwQWQtPldsYW5D
b3VudGVycy5GQ1NFcnJvckNvdW50LnZ2Lkxvd1BhcnQgPCBPbGRWYWx1ZSkKLQl7Ci0JCXBBZC0+
V2xhbkNvdW50ZXJzLkZDU0Vycm9yQ291bnQudnYuSGlnaFBhcnQrKzsKLQl9Ci0JT2xkVmFsdWUg
PSBwQWQtPldsYW5Db3VudGVycy5Ob1JldHJ5Q291bnQudnYuTG93UGFydDsKLQlwQWQtPldsYW5D
b3VudGVycy5Ob1JldHJ5Q291bnQudnYuTG93UGFydCArPSBwQWQtPk1BQ0NvdW50ZXJzWzZdOwot
CWlmIChwQWQtPldsYW5Db3VudGVycy5Ob1JldHJ5Q291bnQudnYuTG93UGFydCA8IE9sZFZhbHVl
KQotCXsKLQkJcEFkLT5XbGFuQ291bnRlcnMuTm9SZXRyeUNvdW50LnZ2LkhpZ2hQYXJ0Kys7Ci0J
fQotCU9sZFZhbHVlID0gcEFkLT5XbGFuQ291bnRlcnMuUmV0cnlDb3VudC52di5Mb3dQYXJ0Owot
CXBBZC0+V2xhbkNvdW50ZXJzLlJldHJ5Q291bnQudnYuTG93UGFydCArPSBwQWQtPk1BQ0NvdW50
ZXJzWzddOwotCWlmIChwQWQtPldsYW5Db3VudGVycy5SZXRyeUNvdW50LnZ2Lkxvd1BhcnQgPCBP
bGRWYWx1ZSkKLQl7Ci0JCXBBZC0+V2xhbkNvdW50ZXJzLlJldHJ5Q291bnQudnYuSGlnaFBhcnQr
KzsKLQl9Ci0JT2xkVmFsdWUgPSBwQWQtPldsYW5Db3VudGVycy5NdWx0aXBsZVJldHJ5Q291bnQu
dnYuTG93UGFydDsKLQlwQWQtPldsYW5Db3VudGVycy5NdWx0aXBsZVJldHJ5Q291bnQudnYuTG93
UGFydCArPSBwQWQtPk1BQ0NvdW50ZXJzWzhdOwotCWlmIChwQWQtPldsYW5Db3VudGVycy5NdWx0
aXBsZVJldHJ5Q291bnQudnYuTG93UGFydCA8IE9sZFZhbHVlKQotCXsKLQkJcEFkLT5XbGFuQ291
bnRlcnMuTXVsdGlwbGVSZXRyeUNvdW50LnZ2LkhpZ2hQYXJ0Kys7Ci0JfQotCU9sZFZhbHVlID0g
cEFkLT5XbGFuQ291bnRlcnMuRmFpbGVkQ291bnQudnYuTG93UGFydDsKLQlwQWQtPldsYW5Db3Vu
dGVycy5GYWlsZWRDb3VudC52di5Mb3dQYXJ0ICs9IHBBZC0+TUFDQ291bnRlcnNbOV07Ci0JaWYg
KHBBZC0+V2xhbkNvdW50ZXJzLkZhaWxlZENvdW50LnZ2Lkxvd1BhcnQgPCBPbGRWYWx1ZSkKLQl7
Ci0JCXBBZC0+V2xhbkNvdW50ZXJzLkZhaWxlZENvdW50LnZ2LkhpZ2hQYXJ0Kys7Ci0JfQotCU9s
ZFZhbHVlID0gcEFkLT5RQUNvdW50ZXJzLlJYT3ZlckZsb3dDb3VudC52di5Mb3dQYXJ0OwotCXBB
ZC0+UUFDb3VudGVycy5SWE92ZXJGbG93Q291bnQudnYuTG93UGFydCArPSBwQWQtPk1BQ0NvdW50
ZXJzWzRdOwotCWlmIChwQWQtPlFBQ291bnRlcnMuUlhPdmVyRmxvd0NvdW50LnZ2Lkxvd1BhcnQg
PCBPbGRWYWx1ZSkKLQl7Ci0JCXBBZC0+UUFDb3VudGVycy5SWE92ZXJGbG93Q291bnQudnYuSGln
aFBhcnQrKzsKLQl9Ci0KLSAgICAvLwotICAgIC8vIG1vbml0b3IgVFggY291bnRlcnMgY2hhbmdl
IGZvciB0aGUgcGFzdCBwZXJpb2QKLSAgICAvLwotICAgIFR4RmFpbENvdW50ID0gcEFkLT5NQUND
b3VudGVyc1s5XTsKLSAgICBUeE5vUmV0cnlDbnQgPSBwQWQtPk1BQ0NvdW50ZXJzWzZdOwotICAg
IFR4T25lUmV0cnlDbnQgPSBwQWQtPk1BQ0NvdW50ZXJzWzddOwotICAgIFR4TVJldHJ5Q250ID0g
cEFkLT5NQUNDb3VudGVyc1s4XTsKLQlUeFJldHJ5T2tDb3VudCA9IFR4T25lUmV0cnlDbnQgKyBU
eE1SZXRyeUNudDsKLQlUeE9rQ291bnQgPSBUeE5vUmV0cnlDbnQgKyBUeFJldHJ5T2tDb3VudDsK
LQlUeFRvdGFsQ250ID0gVHhPa0NvdW50ICsgVHhGYWlsQ291bnQ7Ci0JaWYgKFR4VG90YWxDbnQg
PiAxMDApCi0JewotCQlwQWQtPlNjYW5BbGxvd2VkID0gRkFMU0U7Ci0JfQotCWVsc2UKLQl7Ci0J
CXBBZC0+U2NhbkFsbG93ZWQgPSBUUlVFOwotCX0KLSNpZiAxLy9zdGV2ZW46ZXhjbHVkZSBDVFMK
LQlpZiAoKHBBZC0+UG9ydENmZy5UeFJhdGUgPj0gUkFURV9GSVJTVF9PRkRNX1JBVEUpICYmIChw
QWQtPlBvcnRDZmcuQkdQcm90ZWN0aW9uSW5Vc2VkKSkKLQkJVHhUb3RhbENudCA9IFR4VG90YWxD
bnQgLyAyOwotI2VuZGlmCi0JaWYgKFR4VG90YWxDbnQgPiBUeEZhaWxDb3VudCkKLQkJVHhSZWFs
T2tDb3VudCA9IFR4VG90YWxDbnQgLSBUeEZhaWxDb3VudDsKLQllbHNlCi0JCVR4UmVhbE9rQ291
bnQgPSAwOwotCU9sZFZhbHVlID0gcEFkLT5XbGFuQ291bnRlcnMuVHJhbnNtaXR0ZWRGcmFnbWVu
dENvdW50LnZ2Lkxvd1BhcnQ7Ci0JcEFkLT5XbGFuQ291bnRlcnMuVHJhbnNtaXR0ZWRGcmFnbWVu
dENvdW50LnZ2Lkxvd1BhcnQgKz0gVHhSZWFsT2tDb3VudDsKLQlpZiAocEFkLT5XbGFuQ291bnRl
cnMuVHJhbnNtaXR0ZWRGcmFnbWVudENvdW50LnZ2Lkxvd1BhcnQgPCBPbGRWYWx1ZSkKLQl7Ci0J
CXBBZC0+V2xhbkNvdW50ZXJzLlRyYW5zbWl0dGVkRnJhZ21lbnRDb3VudC52di5IaWdoUGFydCsr
OwotCX0KLQotCUFzaWNCYnBUdW5pbmcocEFkKTsKLQlpZiAocEFkLT5NZWRpYVN0YXRlID09IE5k
aXNNZWRpYVN0YXRlQ29ubmVjdGVkKQotCXsKLSAgICBpZiAoVHhUb3RhbENudCA8IDUpIC8vIGlm
IHRvbyBmZXcgVFggc2FtcGxlcywgc2tpcCBUWCByZWxhdGVkIHN0YXRpc3RpY3MKLSAgICB7Ci0g
ICAgICAgIFR4UEVSID0gMDsgIC8vIGRvbid0IHRha2UgVHhQRVIgaW50byBDUUkgY29uc2lkZXJh
dGlvbiBpZiB0b28gZmV3IHNhbXBsZQotICAgICAgICBUeFBSUiA9IDA7Ci0gICAgfQotICAgIGVs
c2UgCi0gICAgewotCQlpZiAoVHhGYWlsQ291bnQgPCBUeFRvdGFsQ250KQotCQl7Ci0JCQlVU0hP
UlQgdGVtcCA9IFR4T25lUmV0cnlDbnQgKyBUeE1SZXRyeUNudCArIFR4RmFpbENvdW50OwotCQkJ
VHhQRVIgPSAoVHhGYWlsQ291bnQgKiAxMDApIC8gVHhUb3RhbENudDsKLQkJCWlmICh0ZW1wIDwg
VHhUb3RhbENudCkKLQkJCQlUeFBSUiA9ICh0ZW1wICogMTAwKSAvIFR4VG90YWxDbnQ7Ci0JCQll
bHNlCi0JCQkJVHhQUlIgPSAxMDA7Ci0JCX0KLQkJZWxzZQotCQkJVHhQRVIgPSAxMDA7Ci0gICAg
fQotCi0gICAgLy8KLSAgICAvLyBjYWxjdWxhdGUgUlggUEVSCi0gICAgLy8KLQlSeEZhaWxDbnQg
PSBwQWQtPk1BQ0NvdW50ZXJzWzBdOwotICAgIFJ4T2tDbnQgICA9IHBBZC0+V2xhbkNvdW50ZXJz
LlJlY2VpdmVkRnJhZ21lbnRDb3VudC52di5Mb3dQYXJ0IC0gCi0gICAgICAgICAgICAgICAgcEFk
LT5NbG1lLlByZXZXbGFuQ291bnRlcnMuUmVjZWl2ZWRGcmFnbWVudENvdW50LnZ2Lkxvd1BhcnQ7
Ci0gICAgUnhDbnQgPSBSeE9rQ250ICsgUnhGYWlsQ250OwotCi0gICAgaWYgKFJ4Q250IDwgNSkK
LSAgICAgICAgUnhQRVIgPSAwOyAgLy8gZG9uJ3QgdGFrZSBSeFBFUiBpbnRvIENoYW5uZWxRdWFs
aXR5IGNvbnNpZGVyYXRpb24gaWYgdG9vIGZldyBzYW1wbGUKLSAgICBlbHNlCi0gICAgICAgIFJ4
UEVSID0gKFJ4RmFpbENudCAqIDEwMCkgLyBSeENudDsKLQotCWlmICgoQURIT0NfT04ocEFkKSkg
JiYgKHBBZC0+TWVkaWFTdGF0ZSA9PSBOZGlzTWVkaWFTdGF0ZUNvbm5lY3RlZCkpCi0JewotCQlw
QWQtPlNlbnRCZWFjb25zQ291bnQgKz0gcEFkLT5NQUNDb3VudGVyc1s1XTsKLQkJcEFkLT5SZWNl
aXZlZEJlYWNvbnNDb3VudCArPSBwQWQtPk1BQ0NvdW50ZXJzWzEwXTsKLQotCQlpZiAoKHBBZC0+
TWxtZS5QZXJpb2RpY1JvdW5kICUgMikgPT0gMSkKLQkJewotCQkJVFhSWF9DU1IxOF9TVFJVQyBD
c3IxODsKLQkJCVVTSE9SVCB0ZW1wOwotCi0JCQlEQkdQUklOVChSVF9ERUJVR19JTkZPLCAiU2Vu
dEJlYWNvbnNDb3VudCA9ICVkIFJlY2VpdmVkQmVhY29uc0NvdW50ID0gJWRcbiIsIHBBZC0+U2Vu
dEJlYWNvbnNDb3VudCwgcEFkLT5SZWNlaXZlZEJlYWNvbnNDb3VudCk7Ci0JCQlpZiAocEFkLT5C
ZWFjb25JbnRlcnZhbENoYW5nZUFsbG93ZWQgPT0gVFJVRSkKLQkJCXsKLQkJCQlpZiAoMiAqIHBB
ZC0+U2VudEJlYWNvbnNDb3VudCA+IHBBZC0+UmVjZWl2ZWRCZWFjb25zQ291bnQpCi0JCQkJewot
CQkJCQl0ZW1wID0gKHBBZC0+UG9ydENmZy5CZWFjb25QZXJpb2QgPDwgOCkgKyAxOwotCQkJCQlD
c3IxOC5maWVsZC5PZmZzZXQgPSAodGVtcCAmIDB4MDAwRik7Ci0JCQkJCUNzcjE4LmZpZWxkLklu
dGVydmFsID0gKHRlbXAgPj4gNik7Ci0JCQkJCVJUVVNCV3JpdGVNQUNSZWdpc3RlcihwQWQsIFRY
UlhfQ1NSMTgsIENzcjE4LnZhbHVlKTsKLQkJCQkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX0lORk8s
ICJUWFJYX0NTUjE4ID0gMHgleFxuIiwgQ3NyMTgudmFsdWUpOwotCQkJCQkKLQkJCQkJcEFkLT5C
ZWFjb25JbnRlcnZhbENoYW5nZUFsbG93ZWQgPSBGQUxTRTsKLQkJCQl9Ci0JCQkJZWxzZSBpZiAo
cEFkLT5SZWNlaXZlZEJlYWNvbnNDb3VudCA+IDkgKiBwQWQtPlNlbnRCZWFjb25zQ291bnQpCi0J
CQkJewotCQkJCQl0ZW1wID0gKHBBZC0+UG9ydENmZy5CZWFjb25QZXJpb2QgPDwgOCkgLSA1Owot
CQkJCQlDc3IxOC5maWVsZC5PZmZzZXQgPSAodGVtcCAmIDB4MDAwRik7Ci0JCQkJCUNzcjE4LmZp
ZWxkLkludGVydmFsID0gKHRlbXAgPj4gNik7Ci0JCQkJCVJUVVNCV3JpdGVNQUNSZWdpc3Rlcihw
QWQsIFRYUlhfQ1NSMTgsIENzcjE4LnZhbHVlKTsKLQkJCQkJREJHUFJJTlRfUkFXKFJUX0RFQlVH
X0lORk8sICJUWFJYX0NTUjE4ID0gMHgleFxuIiwgQ3NyMTgudmFsdWUpOwotCQkJCQkKLQkJCQkJ
cEFkLT5CZWFjb25JbnRlcnZhbENoYW5nZUFsbG93ZWQgPSBGQUxTRTsKLQkJCQl9Ci0JCQkJZWxz
ZSBpZiAocEFkLT5SZWNlaXZlZEJlYWNvbnNDb3VudCA+IDMgKiBwQWQtPlNlbnRCZWFjb25zQ291
bnQpCi0JCQkJewotCQkJCQl0ZW1wID0gKHBBZC0+UG9ydENmZy5CZWFjb25QZXJpb2QgPDwgOCkg
LSAxOwotCQkJCQlDc3IxOC5maWVsZC5PZmZzZXQgPSAodGVtcCAmIDB4MDAwRik7Ci0JCQkJCUNz
cjE4LmZpZWxkLkludGVydmFsID0gKHRlbXAgPj4gNik7Ci0JCQkJCVJUVVNCV3JpdGVNQUNSZWdp
c3RlcihwQWQsIFRYUlhfQ1NSMTgsIENzcjE4LnZhbHVlKTsKLQkJCQkJREJHUFJJTlRfUkFXKFJU
X0RFQlVHX0lORk8sICJUWFJYX0NTUjE4ID0gMHgleFxuIiwgQ3NyMTgudmFsdWUpOwotCQkJCQkK
LQkJCQkJcEFkLT5CZWFjb25JbnRlcnZhbENoYW5nZUFsbG93ZWQgPSBGQUxTRTsKLQkJCQl9Ci0j
aWYgMAotCQkJCWVsc2UgaWYgKHBBZC0+UmVjZWl2ZWRCZWFjb25zQ291bnQgPiAyICogcEFkLT5T
ZW50QmVhY29uc0NvdW50KQotCQkJCXsKLQkJCQkJdGVtcCA9IChwQWQtPlBvcnRDZmcuQmVhY29u
UGVyaW9kIDw8IDgpIC0gMTsKLQkJCQkJQ3NyMTguZmllbGQuT2Zmc2V0ID0gKHRlbXAgJiAweDAw
MEYpOwotCQkJCQlDc3IxOC5maWVsZC5JbnRlcnZhbCA9ICh0ZW1wID4+IDYpOwotCQkJCQlSVFVT
QldyaXRlTUFDUmVnaXN0ZXIocEFkLCBUWFJYX0NTUjE4LCBDc3IxOC52YWx1ZSk7Ci0JCQkJCURC
R1BSSU5UX1JBVyhSVF9ERUJVR19UUkFDRSwgKCJUWFJYX0NTUjE4ID0gMHgleFxuIiwgQ3NyMTgu
dmFsdWUpKTsKLQkJCQkJCi0JCQkJCXBBZC0+QmVhY29uSW50ZXJ2YWxDaGFuZ2VBbGxvd2VkID0g
RkFMU0U7Ci0JCQkJfQotI2VuZGlmCi0JCQl9Ci0jaWYgMAotCQkJZWxzZSBpZiAocEFkLT5SZWNl
aXZlZEJlYWNvbnNDb3VudCA+IDkgKiBwQWQtPlNlbnRCZWFjb25zQ291bnQpCi0JCQl7Ci0JCQkJ
REJHUFJJTlRfUkFXKFJUX0RFQlVHX1RSQUNFLCAoIkRvIE5vdGhpbmdcbiIpKTsKLQkJCX0KLSNl
bmRpZgotCQkJZWxzZQotCQkJewotCQkJCXRlbXAgPSAocEFkLT5Qb3J0Q2ZnLkJlYWNvblBlcmlv
ZCA8PCA4KTsKLQkJCQlDc3IxOC5maWVsZC5PZmZzZXQgPSAodGVtcCAmIDB4MDAwRik7Ci0JCQkJ
Q3NyMTguZmllbGQuSW50ZXJ2YWwgPSAodGVtcCA+PiA2KTsKLQkJCQlSVFVTQldyaXRlTUFDUmVn
aXN0ZXIocEFkLCBUWFJYX0NTUjE4LCBDc3IxOC52YWx1ZSk7Ci0JCQkJREJHUFJJTlRfUkFXKFJU
X0RFQlVHX0lORk8sICJUWFJYX0NTUjE4ID0gMHgleFxuIiwgQ3NyMTgudmFsdWUpOwotCQkJCQot
CQkJCXBBZC0+QmVhY29uSW50ZXJ2YWxDaGFuZ2VBbGxvd2VkID0gVFJVRTsKLQkJCX0KLQkJCQot
CQkJcEFkLT5TZW50QmVhY29uc0NvdW50ID0gMDsKLQkJCXBBZC0+UmVjZWl2ZWRCZWFjb25zQ291
bnQgPSAwOwotCQl9Ci0JfQotCU5vdzMyID0gamlmZmllczsKLQotCXsKLQkgICAgLy8gQ2hhbm5l
bFF1YWxpdHkgPSBXMSpSU1NJICsgVzIqVHhQUlIgKyBXMypSeFBFUiAgICAoUlNTSSAwLi4xMDAp
LCAoVHhQRVIgMTAwLi4wKSwgKFJ4UEVSIDEwMC4uMCkKLQkgICAgcEFkLT5NbG1lLkNoYW5uZWxR
dWFsaXR5ID0gKFJTU0lfV0VJR0hUSU5HICogcEFkLT5Qb3J0Q2ZnLkxhc3RSc3NpICsgCi0JICAg
ICAgICAgICAgICAgICAgICAgICAgIFRYX1dFSUdIVElORyAqICgxMDAgLSBUeFBSUikgKyAKLQkg
ICAgICAgICAgICAgICAgICAgICAgICAgUlhfV0VJR0hUSU5HKiAoMTAwIC0gUnhQRVIpKSAvIDEw
MDsKLQkgICAgaWYgKHBBZC0+TWxtZS5DaGFubmVsUXVhbGl0eSA+PSAxMDApCi0JICAgICAgICBw
QWQtPk1sbWUuQ2hhbm5lbFF1YWxpdHkgPSAxMDA7Ci0JfQotICAgIAotICAgIERCR1BSSU5UKFJU
X0RFQlVHX0lORk8sICJNTUNISyAtIENRST0gJWQsIChUeCBGYWlsPSVkL1JldHJ5PSVkL1RvdGFs
PSVkLCBSeCBGYWlsPSVkL1RvdGFsPSVkLCBSU1NJPSVkIGRibSlcbiIsIAotICAgICAgICBwQWQt
Pk1sbWUuQ2hhbm5lbFF1YWxpdHksIFR4RmFpbENvdW50LCBUeFJldHJ5T2tDb3VudCwgVHhUb3Rh
bENudCwgUnhGYWlsQ250LCBSeENudCwgcEFkLT5Qb3J0Q2ZnLkxhc3RSc3NpIC0gcEFkLT5CQlBU
dW5pbmdQYXJhbWV0ZXJzLlJTU0lUb0RibU9mZnNldCk7Ci0KLSAgICAvLyBsYXRjaCBjdXJyZW50
IFdMQU4gY291bnRlcnMgZm9yIG5leHQgY2hlY2stZm9yLXJvYW1pbmcgdXNhZ2UKLSAgICBOZGlz
TW92ZU1lbW9yeSgmcEFkLT5NbG1lLlByZXZXbGFuQ291bnRlcnMsICZwQWQtPldsYW5Db3VudGVy
cywgc2l6ZW9mKENPVU5URVJfODAyXzExKSk7Ci0KLSNpZiAxLy9zdGV2ZW46bW92ZSB0aGlzIGZy
b20gTWxtZVBlcmlvZGljRXhlYwotCWlmIChJTkZSQV9PTihwQWQpKQotCXsKLQkJaWYgKENRSV9J
U19CQUQocEFkLT5NbG1lLkNoYW5uZWxRdWFsaXR5KSkKLQkJewotCQkJcEFkLT5SYWxpbmtDb3Vu
dGVycy5CYWRDUUlBdXRvUmVjb3ZlcnlDb3VudCArKzsKLSAgICAgICAgICAgCURCR1BSSU5UKFJU
X0RFQlVHX1RSQUNFLCAiTU1DSEsgLSBCYWQgQ1FJLiBBdXRvIFJlY292ZXJ5IGF0dGVtcHQgIyVk
XG4iLCBwQWQtPlJhbGlua0NvdW50ZXJzLkJhZENRSUF1dG9SZWNvdmVyeUNvdW50KTsKLQkJCU1s
bWVBdXRvUmVjb3Zlck5ldHdvcmsocEFkKTsKLQkJfQotCQllbHNlIGlmIChDUUlfSVNfRkFJUihw
QWQtPk1sbWUuQ2hhbm5lbFF1YWxpdHkpIHx8IENRSV9JU19QT09SKHBBZC0+TWxtZS5DaGFubmVs
UXVhbGl0eSkpCi0JCXsKLQkJCS8vIHBlcmZvcm0gYWdncmVzaXZlIHJvYW1pbmcgb25seSB3aGVu
IFNFQ1VSSVRZIE9GRiBvciBXRVA2NC8xMjg7Ci0JCQkvLyBXUEEgYW5kIFdQQS1QU0sgaGFzIG5v
IGFnZ3Jlc2l2ZSByb2FtaW5nIGJlY2F1c2UgcmUtbmVnb3RpYXRpb24KLQkJCS8vIGJldHdlZW4g
ODAyLjF4IHN1cHBsaWNhbnQgYW5kIGF1dGhlbnRpY2F0b3IvQUFBIHNlcnZlciBpcyByZXF1aXJl
ZAotCQkJLy8gYnV0IGNhbid0IGJlIGd1YXJhbnRlZWQuCi0JCQlpZiAocEFkLT5Qb3J0Q2ZnLkF1
dGhNb2RlIDwgTmRpczgwMl8xMUF1dGhNb2RlV1BBKQotCQkJCU1sbWVDaGVja0ZvclJvYW1pbmco
cEFkLCBOb3czMik7Ci0JCX0KLQl9Ci0jZW5kaWYKLQotCXBBZC0+UG9ydENmZy5DdXJyVHhSYXRl
U3RhYmxlVGltZSsrOwotCUN1cnJSYXRlID0gcEFkLT5Qb3J0Q2ZnLlR4UmF0ZTsKLSAgICBkbwot
ICAgIHsKLQkJVVNIT1JUIFR4RXJyb3JSYXRpbzsKLQkJQk9PTEVBTiBmVXBncmFkZVF1YWxpdHkg
PSBGQUxTRTsKLQkJVVNIT1JUICAqcFJhdGVVcFBFUiwgKnBSYXRlRG93blBFUjsKLQotICAgICAg
ICBpZiAocEFkLT5Qb3J0Q2ZnLkVuYWJsZUF1dG9SYXRlU3dpdGNoaW5nID09IEZBTFNFKQotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgLy8gZG8gbm90aGluZyBpZiBu
byB0cmFmZmljIGluIHRoZSBwYXN0IHBlcmlvZAotICAgICAgICBpZiAoVHhUb3RhbENudCA9PSAw
KQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBUeFJhdGVVcFBlbmFsdHkgbWF5YmUgdG9vIGxh
cmdlLCB3ZSBkb24ndCB3YW50IHRoaXMgcGVuYWx0eSB0byBhZmZlY3QKLSAgICAgICAgICAgIC8v
IG5leHQgQ2hhcmlvdCB0aHJvdWdocHV0IHRlc3QgdG9vIG11Y2ggdGhlcmVmb3JlIHplcm8gaXQg
aGVyZS4KLSAgICAgICAgICAgIHBBZC0+UG9ydENmZy5UeFJhdGVVcFBlbmFsdHkgPSAwOwotICAg
ICAgICAgICAgTmRpc1plcm9NZW1vcnkocEFkLT5EcnNDb3VudGVycy5UeFF1YWxpdHksIE1BWF9M
RU5fT0ZfU1VQUE9SVEVEX1JBVEVTKTsKLSAgICAgICAgICAgIE5kaXNaZXJvTWVtb3J5KHBBZC0+
RHJzQ291bnRlcnMuUEVSLCBNQVhfTEVOX09GX1NVUFBPUlRFRF9SQVRFUyk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIGRlY2lkZSB0aGUgbmV4dCB1cGdyYWRl
IHJhdGUgYW5kIGRvd25ncmFkZSByYXRlLCBpZiBhbnkKLSAgICAgICAgaWYgKHBBZC0+UG9ydENm
Zy5QaHlNb2RlID09IFBIWV8xMUJHX01JWEVEKQotICAgICAgICB7Ci0gICAgICAgICAgICBVcFJh
dGUgPSBQaHkxMUJHTmV4dFJhdGVVcHdhcmRbQ3VyclJhdGVdOwotICAgICAgICAgICAgRG93blJh
dGUgPSBQaHkxMUJHTmV4dFJhdGVEb3dud2FyZFtDdXJyUmF0ZV07Ci0gICAgICAgIH0KLSAgICAg
ICAgZWxzZSBpZiAocEFkLT5Qb3J0Q2ZnLlBoeU1vZGUgPT0gUEhZXzExQikKLSAgICAgICAgewot
ICAgICAgICAgICAgVXBSYXRlID0gUGh5MTFCTmV4dFJhdGVVcHdhcmRbQ3VyclJhdGVdOwotICAg
ICAgICAgICAgRG93blJhdGUgPSBQaHkxMUJOZXh0UmF0ZURvd253YXJkW0N1cnJSYXRlXTsKLSAg
ICAgICAgfQotICAgICAgICBlbHNlIGlmIChwQWQtPlBvcnRDZmcuUGh5TW9kZSA9PSBQSFlfMTFB
KQotICAgICAgICB7Ci0gICAgICAgICAgICBVcFJhdGUgPSBQaHkxMUFOZXh0UmF0ZVVwd2FyZFtD
dXJyUmF0ZV07Ci0gICAgICAgICAgICBEb3duUmF0ZSA9IFBoeTExQU5leHRSYXRlRG93bndhcmRb
Q3VyclJhdGVdOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgLy8gUEhZXzExQUJHX01JWEVECi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGlmIChwQWQtPlBvcnRDZmcuQ2hhbm5lbCA+IDE0KSAgCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgVXBSYXRlID0gUGh5MTFBTmV4dFJhdGVVcHdh
cmRbQ3VyclJhdGVdOwotICAgICAgICAgICAgICAgIERvd25SYXRlID0gUGh5MTFBTmV4dFJhdGVE
b3dud2FyZFtDdXJyUmF0ZV07Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgVXBSYXRlID0gUGh5MTFCR05leHRSYXRlVXB3YXJk
W0N1cnJSYXRlXTsKLSAgICAgICAgICAgICAgICBEb3duUmF0ZSA9IFBoeTExQkdOZXh0UmF0ZURv
d253YXJkW0N1cnJSYXRlXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlm
IChVcFJhdGUgPiBwQWQtPlBvcnRDZmcuTWF4VHhSYXRlKQotICAgICAgICAgICAgVXBSYXRlID0g
cEFkLT5Qb3J0Q2ZnLk1heFR4UmF0ZTsKLSAgICAKLSAgICAgICAgLy8gZGVjaWRlIFRYIHF1YWxp
dHkgYmFzZWQgb24gVHggcmV0cnkgcmF0aW8gd2hlbiBlbm91Z2ggc2FtcGxlcyBhcmUgYXZhaWxh
YmxlCi0gICAgICAgIGlmIChUeFRvdGFsQ250ID4gMTUpCi0gICAgICAgIHsKLQkJCVVTSE9SVCB0
ZW1wID0gVHhSZXRyeU9rQ291bnQgKyBUeEZhaWxDb3VudDsKLQkJCWlmICh0ZW1wIDwgVHhUb3Rh
bENudCkKLQkJCQlUeEVycm9yUmF0aW8gPSAodGVtcCAqMTAwKSAvIFR4VG90YWxDbnQ7Ci0JCQll
bHNlCi0JCQkJVHhFcnJvclJhdGlvID0gMTAwOwotCi0JCQlwUmF0ZVVwUEVSID0gJk5ld1JhdGVV
cFBFUlswXTsKLQkJCXBSYXRlRG93blBFUiA9ICZOZXdSYXRlRG93blBFUlswXTsKLQotICAgICAg
ICAgICAgLy8gZG93bmdyYWRlIFRYIHF1YWxpdHkgaWYgcmV0cnkrZXJyb3IgcmF0aW8gcmVhY2hl
ZAotICAgICAgICAgICAgaWYgKFR4RXJyb3JSYXRpbyA+PSBwUmF0ZURvd25QRVJbQ3VyclJhdGVd
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHBBZC0+RHJzQ291bnRlcnMuVHhRdWFs
aXR5W0N1cnJSYXRlXSA9IERSU19UWF9RVUFMSVRZX1dPUlNUX0JPVU5EOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgLy8gdXBncmFkZSBUWCBxdWFsaXR5IGlmIHJldHJ5K2Vycm9yIHJhdGlv
IHJlYWNoZWQKLSAgICAgICAgICAgIGVsc2UgaWYgKFR4RXJyb3JSYXRpbyA8PSBwUmF0ZVVwUEVS
W0N1cnJSYXRlXSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBmVXBncmFkZVF1YWxp
dHkgPSBUUlVFOwotICAgICAgICAgICAgICAgIGlmIChwQWQtPkRyc0NvdW50ZXJzLlR4UXVhbGl0
eVtDdXJyUmF0ZV0pCi0gICAgICAgICAgICAgICAgICAgIHBBZC0+RHJzQ291bnRlcnMuVHhRdWFs
aXR5W0N1cnJSYXRlXSAtLTsgIC8vIHF1YWxpdHkgdmVyeSBnb29kIGluIEN1cnJSYXRlCi0gICAg
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChwQWQtPlBvcnRDZmcuVHhSYXRl
VXBQZW5hbHR5KQotICAgICAgICAgICAgICAgICAgICBwQWQtPlBvcnRDZmcuVHhSYXRlVXBQZW5h
bHR5IC0tOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHBBZC0+RHJzQ291bnRlcnMuVHhRdWFs
aXR5W1VwUmF0ZV0pCi0gICAgICAgICAgICAgICAgICAgIHBBZC0+RHJzQ291bnRlcnMuVHhRdWFs
aXR5W1VwUmF0ZV0gLS07ICAgIC8vIG1heSBpbXByb3ZlIG5leHQgVVAgcmF0ZSdzIHF1YWxpdHkK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICB9Ci0gICAgICAgIAotICAgICAg
ICAvLyBpZiBub3QgZW5vdWdoIFRYIHNhbXBsZXMsIGRlY2lkZSBieSBoZXVyaXN0aWMgcnVsZXMK
LSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBUeEVycm9yUmF0aW8gPSAwOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBEb3duZ3JhZGUgVFggcXVhbGl0eSB1cG9uIC0K
LSAgICAgICAgICAgIC8vIDEuIGFueSBUWCBmYWlsdXJlIGluIHRoZSBwYXN0IHNlY29uZAotICAg
ICAgICAgICAgLy8gMi4gVFggcmV0cnkgcmF0aW8gdG9vIGhpZ2ggd2hlbiBlbm91Z2ggVFggc2Ft
cGxlcyBhcmUgYXZhaWxhYmxlCi0gICAgICAgICAgICBpZiAoVHhGYWlsQ291bnQpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKChUeEZhaWxDb3VudCA8PSAxKSAmJgotICAgICAg
ICAgICAgICAgICAgICAoVHhSZWFsT2tDb3VudCArIFR4UmV0cnlPa0NvdW50KSkKLSAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHBBZC0+RHJzQ291bnRlcnMuVHhRdWFsaXR5
W0N1cnJSYXRlXSArPSAyOyAgIC8vIGRlZ3JhZGUgcXVhbGl0eQotICAgICAgICAgICAgICAgICAg
ICBpZiAocEFkLT5EcnNDb3VudGVycy5UeFF1YWxpdHlbQ3VyclJhdGVdID4gRFJTX1RYX1FVQUxJ
VFlfV09SU1RfQk9VTkQpCi0gICAgICAgICAgICAgICAgICAgICAgICBwQWQtPkRyc0NvdW50ZXJz
LlR4UXVhbGl0eVtDdXJyUmF0ZV0gPSBEUlNfVFhfUVVBTElUWV9XT1JTVF9CT1VORDsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSAvLyBtb3JlIHRoYW4gMiBmYWlsdXJl
LCBvciBubyBUWCBvayBjYXNlcwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgcEFkLT5EcnNDb3VudGVycy5UeFF1YWxpdHlbQ3VyclJhdGVdICA9IERSU19UWF9RVUFMSVRZ
X1dPUlNUX0JPVU5EOyAgIC8vIHF1YWxpdHkgYmFkCi0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgLy8gdXBncmFkZSBUWCBxdWFsaXR5IGlmIC0KLSAgICAgICAg
ICAgIC8vIDEuIG5vIFRYIGZhaWx1cmUgYnV0IGRvIGhhdmUgVFggb2sgY2FzZSwgYW5kCi0gICAg
ICAgICAgICAvLyAyLiB0aGVyZSdzIG1vcmUgb25lLXRpbWUtb2sgY2FzZXMgdGhhbiByZXRyeS1v
ayBjYXNlcyBpbiB0aGUgcGFzdCBzZWNvbmQKLSAgICAgICAgICAgIC8vIDMuIGN1cnJlbnQgcmF0
ZSdzIFR4IHJldHJ5IHJhdGlvIDw9IDEwJQotICAgICAgICAgICAgZWxzZSBpZiAoKFR4UmVhbE9r
Q291bnQgPiBUeFJldHJ5T2tDb3VudCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ZlVwZ3JhZGVRdWFsaXR5ID0gVFJVRTsKLSAgICAgICAgICAgICAgICBpZiAocEFkLT5EcnNDb3Vu
dGVycy5UeFF1YWxpdHlbQ3VyclJhdGVdKQotICAgICAgICAgICAgICAgICAgICBwQWQtPkRyc0Nv
dW50ZXJzLlR4UXVhbGl0eVtDdXJyUmF0ZV0gLS07ICAvLyBxdWFsaXR5IHZlcnkgZ29vZCBpbiBD
dXJyUmF0ZQotCi0gICAgICAgICAgICAgICAgaWYgKHBBZC0+UG9ydENmZy5UeFJhdGVVcFBlbmFs
dHkpCi0gICAgICAgICAgICAgICAgICAgIHBBZC0+UG9ydENmZy5UeFJhdGVVcFBlbmFsdHkgLS07
Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAocEFkLT5EcnNDb3VudGVycy5UeFF1YWxpdHlbVXBS
YXRlXSkKLSAgICAgICAgICAgICAgICAgICAgcEFkLT5EcnNDb3VudGVycy5UeFF1YWxpdHlbVXBS
YXRlXSAtLTsgICAgLy8gbWF5IGltcHJvdmUgbmV4dCBVUCByYXRlJ3MgcXVhbGl0eQotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcEFkLT5EcnNDb3VudGVycy5QRVJbQ3VyclJh
dGVdID0gKFVDSEFSKVR4RXJyb3JSYXRpbzsKLQotICAgICAgICBpZiAocEFkLT5EcnNDb3VudGVy
cy5mTm9pc3lFbnZpcm9ubWVudCkKLSAgICAgICAgewotICAgICAgICAgICAgREJHUFJJTlRfUkFX
KFJUX0RFQlVHX1RSQUNFLCJEUlMobm9pc3kpOiIpOyAKLSAgICAgICAgfQotICAgICAgICBlbHNl
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIERCR1BSSU5UX1JBVyhSVF9ERUJVR19UUkFDRSwiRFJT
OiIpOyAKLSAgICAgICAgfQotICAgICAgICBEQkdQUklOVF9SQVcoUlRfREVCVUdfVFJBQ0UsIlF0
eVslZF09JWQgUEVSPSVkJSUgJWQtc2VjLCBRdHlbJWRdPSVkLCBQdHk9JWRcbiIsIAotICAgICAg
ICAgICAgUmF0ZUlkVG9NYnBzW0N1cnJSYXRlXSwgcEFkLT5EcnNDb3VudGVycy5UeFF1YWxpdHlb
Q3VyclJhdGVdLAotICAgICAgICAgICAgVHhFcnJvclJhdGlvLAotICAgICAgICAgICAgcEFkLT5E
cnNDb3VudGVycy5DdXJyVHhSYXRlU3RhYmxlVGltZSwKLSAgICAgICAgICAgIFJhdGVJZFRvTWJw
c1tVcFJhdGVdLCBwQWQtPkRyc0NvdW50ZXJzLlR4UXVhbGl0eVtVcFJhdGVdLAotICAgICAgICAg
ICAgcEFkLT5EcnNDb3VudGVycy5UeFJhdGVVcFBlbmFsdHkpOwotICAgICAgICAKLSAgICAgICAg
Ly8gMjAwNC0zLTEzIHNwZWNpYWwgY2FzZTogQ2xhaW0gbm9pc3kgZW52aXJvbm1lbnQKLSAgICAg
ICAgLy8gICBkZWNpZGUgaWYgdGhlcmUgd2FzIGEgZmFsc2UgInJhdGUgZG93biIgaW4gdGhlIHBh
c3QgMiBzZWMgZHVlIHRvIG5vaXN5IAotICAgICAgICAvLyAgIGVudmlyb25tZW50LiBpZiBzbywg
d2Ugd291bGQgcmF0aGVyIHN3aXRjaCBiYWNrIHRvIHRoZSBoaWdoZXIgVFggcmF0ZS4gCi0gICAg
ICAgIC8vICAgY3JpdGVyaWEgLQotICAgICAgICAvLyAgICAgMS4gdGhlcmUncyBhIGhpZ2hlciBy
YXRlIGF2YWlsYWJsZSwgQU5ECi0gICAgICAgIC8vICAgICAyLiB0aGVyZSB3YXMgYSByYXRlLWRv
d24gaGFwcGVuZWQsIEFORAotICAgICAgICAvLyAgICAgMy4gY3VycmVudCByYXRlIGhhcyA3NSUg
PiBQRVIgPiAyNSUsIEFORAotICAgICAgICAvLyAgICAgNC4gY29tcGFyaW5nIHRvIFVwUmF0ZSwg
Y3VycmVudCByYXRlIGRpZG4ndCBpbXByb3ZlIFBFUiBtb3JlIHRoYW4gNSAlCi0gICAgICAgIGlm
ICgoVXBSYXRlICE9IEN1cnJSYXRlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCi0g
ICAgICAgICAgICAocEFkLT5EcnNDb3VudGVycy5MYXN0U2VjVHhSYXRlQ2hhbmdlQWN0aW9uID09
IDIpICYmCi0gICAgICAgICAgICAoKChwQWQtPkRyc0NvdW50ZXJzLlBFUltDdXJyUmF0ZV0gPiAy
MCkgfHwgKHBBZC0+RHJzQ291bnRlcnMuZk5vaXN5RW52aXJvbm1lbnQpKSAmJiAKLQkJCShwQWQt
PkRyc0NvdW50ZXJzLlBFUltDdXJyUmF0ZV0gPCA3NSkpICYmIAotICAgICAgICAgICAgKChwQWQt
PkRyc0NvdW50ZXJzLlBFUltDdXJyUmF0ZV0rNSkgPiBwQWQtPkRyc0NvdW50ZXJzLlBFUltVcFJh
dGVdKSkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gd2UgYmVsaWV2ZSB0aGlzIGlzIGEgbm9p
c3kgZW52aXJvbm1lbnQuIGJldHRlciBzdGF5IGF0IFVwUmF0ZQotICAgICAgICAgICAgREJHUFJJ
TlQoUlRfREVCVUdfVFJBQ0UsIkRSUzogIyMjIyBlbnRlciBOb2lzeSBlbnZpcm9ubWVudCAjIyMj
XG4iKTsKLSAgICAgICAgICAgIHBBZC0+RHJzQ291bnRlcnMuZk5vaXN5RW52aXJvbm1lbnQgPSBU
UlVFOwotCi0gICAgICAgICAgICAvLyAyMDA0LTMtMTQgd2hlbiBjbGFpbWluZyBub2lzeSBlbnZp
cm9ubWVudCwgd2UncmUgbm90IG9ubHkgc3dpdGNoIGJhY2sKLSAgICAgICAgICAgIC8vICAgdG8g
VXBSYXRlLCBidXQgY2FuIGJlIG1vcmUgYWdncmVzc2l2ZSB0byB1c2Ugb25lIG1vcmUgcmF0ZSB1
cAotICAgICAgICAgICAgVXBSYXRlKys7Ci0vLyAgICAgICAgICBpZiAoVXBSYXRlPlJBVEVfNTQp
IFVwUmF0ZT1SQVRFXzU0OwotICAgICAgICAgICAgaWYgKChVcFJhdGU9PVJBVEVfNikgfHwgKFVw
UmF0ZT09UkFURV85KSkgVXBSYXRlPVJBVEVfMTI7Ci0gICAgICAgICAgICBpZiAoVXBSYXRlID4g
cEFkLT5Qb3J0Q2ZnLk1heFR4UmF0ZSkKLSAgICAgICAgICAgICAgICBVcFJhdGUgPSBwQWQtPlBv
cnRDZmcuTWF4VHhSYXRlOwotICAgICAgICAgICAgcEFkLT5Qb3J0Q2ZnLlR4UmF0ZSA9IFVwUmF0
ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gMjAwNC0zLTEy
IHNwZWNpYWwgY2FzZTogTGVhdmUgbm9pc3kgZW52aXJvbm1lbnQKLSAgICAgICAgLy8gICBUaGUg
aW50ZXJmZXJlbmNlIGhhcyBnb25lIHN1ZGRlbmx5LiByZXNldCBUWCByYXRlIHRvCi0gICAgICAg
IC8vICAgdGhlIHRoZW9yaXRpY2FsIHZhbHVlIGFjY29yZGluZyB0byBSU1NJLiBDcml0ZXJpYSAt
Ci0gICAgICAgIC8vICAgICAxLiBpdCdzIGN1cnJlbnRseSBpbiBub2lzeSBlbnZpcm9ubWVudAot
ICAgICAgICAvLyAgICAgMi4gUEVSIGRyb3BzIHRvIGJlIGJlbG93IDEyJQotICAgICAgICBpZiAo
KHBBZC0+RHJzQ291bnRlcnMuZk5vaXN5RW52aXJvbm1lbnQgPT0gVFJVRSkgJiYKLSAgICAgICAg
ICAgIChUeFRvdGFsQ250ID4gMTUpICYmIChwQWQtPkRyc0NvdW50ZXJzLlBFUltDdXJyUmF0ZV0g
PD0gMTIpKQotICAgICAgICB7Ci0gICAgICAgICAgICBVQ0hBUiBKdW1wVXBSYXRlOwotCi0gICAg
ICAgICAgICBwQWQtPkRyc0NvdW50ZXJzLmZOb2lzeUVudmlyb25tZW50ID0gRkFMU0U7Ci0gICAg
ICAgICAgICBmb3IgKEp1bXBVcFJhdGUgPSBSQVRFXzU0OyBKdW1wVXBSYXRlID4gUkFURV8xOyBK
dW1wVXBSYXRlLS0pCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKHBBZC0+UG9y
dENmZy5BdmdSc3NpID4gKFJzc2lTYWZlTGV2ZWxGb3JUeFJhdGVbSnVtcFVwUmF0ZV0gKyBwQWQt
PkJCUFR1bmluZ1BhcmFtZXRlcnMuUlNTSVRvRGJtT2Zmc2V0KSkKLSAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChKdW1wVXBSYXRlID4g
cEFkLT5Qb3J0Q2ZnLk1heFR4UmF0ZSkKLSAgICAgICAgICAgICAgICBKdW1wVXBSYXRlID0gcEFk
LT5Qb3J0Q2ZnLk1heFR4UmF0ZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgREJHUFJJTlQo
UlRfREVCVUdfVFJBQ0UsIkRSUzogIyMjIyBsZWF2ZSBOb2lzeSBlbnZpcm9ubWVudCAjIyMjLCBS
U1NJPSVkLCBKdW1wVXBSYXRlPSVkXG4iLAotICAgICAgICAgICAgICAgIHBBZC0+UG9ydENmZy5B
dmdSc3NpIC0gcEFkLT5CQlBUdW5pbmdQYXJhbWV0ZXJzLlJTU0lUb0RibU9mZnNldCwgUmF0ZUlk
VG9NYnBzW0p1bXBVcFJhdGVdKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKEp1bXBV
cFJhdGUgPiBDdXJyUmF0ZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBwQWQtPlBv
cnRDZmcuVHhSYXRlID0gSnVtcFVwUmF0ZTsKLSAgICAgICAgICAgICAgIAlicmVhazsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gcGVyZm9ybSBEUlMgLSBj
b25zaWRlciBUeFJhdGUgRG93biBmaXJzdCwgdGhlbiByYXRlIHVwLgotICAgICAgICAvLyAgICAg
MS4gcmF0ZSBkb3duLCBpZiBjdXJyZW50IFRYIHJhdGUncyBxdWFsaXR5IGlzIG5vdCBnb29kCi0g
ICAgICAgIC8vICAgICAyLiByYXRlIHVwLCBpZiBVUFJhdGUncyBxdWFsaXR5IGlzIHZlcnkgZ29v
ZAotICAgICAgICBpZiAoKHBBZC0+RHJzQ291bnRlcnMuVHhRdWFsaXR5W0N1cnJSYXRlXSA+PSBE
UlNfVFhfUVVBTElUWV9XT1JTVF9CT1VORCkgJiYKLSAgICAgICAgICAgIChDdXJyUmF0ZSAhPSBE
b3duUmF0ZSkpCi0gICAgICAgIHsKLQotCQkJcEFkLT5Qb3J0Q2ZnLlR4UmF0ZSA9IERvd25SYXRl
OwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKChwQWQtPkRyc0NvdW50ZXJzLlR4UXVhbGl0
eVtDdXJyUmF0ZV0gPD0gMCkgJiYgCi0gICAgICAgICAgICAocEFkLT5EcnNDb3VudGVycy5UeFF1
YWxpdHlbVXBSYXRlXSA8PTApICAgICAgICAgJiYKLSAgICAgICAgICAgIChDdXJyUmF0ZSAhPSBV
cFJhdGUpKQotICAgICAgICB7Ci0gICAgICAgICAgICBwQWQtPlBvcnRDZmcuVHhSYXRlID0gVXBS
YXRlOwotICAgICAgICB9Ci0gICAgfXdoaWxlIChGQUxTRSk7Ci0KLSAgICAvLyBpZiByYXRlLXVw
IGhhcHBlbiwgY2xlYXIgYWxsIGJhZCBoaXN0b3J5IG9mIGFsbCBUWCByYXRlcwotICAgIGlmIChw
QWQtPlBvcnRDZmcuVHhSYXRlID4gQ3VyclJhdGUpCi0gICAgewotICAgICAgIAlEQkdQUklOVF9S
QVcoUlRfREVCVUdfVFJBQ0UsIkRSUzogKytUWCByYXRlIGZyb20gJWQgdG8gJWQgTWJwc1xuIiwg
UmF0ZUlkVG9NYnBzW0N1cnJSYXRlXSxSYXRlSWRUb01icHNbcEFkLT5Qb3J0Q2ZnLlR4UmF0ZV0p
OwotICAgICAgICBwQWQtPkRyc0NvdW50ZXJzLkN1cnJUeFJhdGVTdGFibGVUaW1lID0gMDsKLSAg
ICAgICAgcEFkLT5EcnNDb3VudGVycy5UeFJhdGVVcFBlbmFsdHkgPSAwOwotICAgICAgICBwQWQt
PkRyc0NvdW50ZXJzLkxhc3RTZWNUeFJhdGVDaGFuZ2VBY3Rpb24gPSAxOyAvLyByYXRlIFVQCi0g
ICAgICAgIE5kaXNaZXJvTWVtb3J5KHBBZC0+RHJzQ291bnRlcnMuVHhRdWFsaXR5LCBNQVhfTEVO
X09GX1NVUFBPUlRFRF9SQVRFUyk7Ci0gICAgICAgIE5kaXNaZXJvTWVtb3J5KHBBZC0+RHJzQ291
bnRlcnMuUEVSLCBNQVhfTEVOX09GX1NVUFBPUlRFRF9SQVRFUyk7Ci0gICAgfQotICAgIC8vIGlm
IHJhdGUtZG93biBoYXBwZW4sIG9ubHkgY2xlYXIgRG93blJhdGUncyBiYWQgaGlzdG9yeQotICAg
IGVsc2UgaWYgKHBBZC0+UG9ydENmZy5UeFJhdGUgPCBDdXJyUmF0ZSkKLSAgICB7Ci0gICAgICAg
CURCR1BSSU5UX1JBVyhSVF9ERUJVR19UUkFDRSwiRFJTOiAtLVRYIHJhdGUgZnJvbSAlZCB0byAl
ZCBNYnBzXG4iLCBSYXRlSWRUb01icHNbQ3VyclJhdGVdLFJhdGVJZFRvTWJwc1twQWQtPlBvcnRD
ZmcuVHhSYXRlXSk7Ci0JICAgIC8vIHNob3J0ZXIgc3RhYmxlIHRpbWUgcmVxdWlyZSBtb3JlIHBl
bmFsdHkgaW4gbmV4dCByYXRlIFVQIGNyaXRlcmlhCi0gICAgICAgCWlmIChwQWQtPkRyc0NvdW50
ZXJzLkN1cnJUeFJhdGVTdGFibGVUaW1lIDwgNCkgICAgICAvLyBsZXNzIHRoZW4gNCBzZWMKLSAg
ICAgICAJICAgIHBBZC0+RHJzQ291bnRlcnMuVHhSYXRlVXBQZW5hbHR5ID0gRFJTX1BFTkFMVFk7
IC8vIGFkZCA4IHNlYyBwZW5hbHR5Ci0gICAgICAgCWVsc2UgaWYgKHBBZC0+RHJzQ291bnRlcnMu
Q3VyclR4UmF0ZVN0YWJsZVRpbWUgPCA4KSAvLyBsZXNzIHRoZW4gOCBzZWMKLSAgICAgICAJICAg
IHBBZC0+RHJzQ291bnRlcnMuVHhSYXRlVXBQZW5hbHR5ID0gMjsgICAgICAgICAgIC8vIGFkZCAy
IHNlYyBwZW5hbHR5Ci0gICAgICAgCWVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyA+PSA4IHNlYwotICAgICAgIAkgICAgcEFkLT5EcnNDb3VudGVy
cy5UeFJhdGVVcFBlbmFsdHkgPSAwOyAgICAgICAgICAgLy8gbm8gcGVuYWx0eQotICAgICAgIAkg
ICAgCi0gICAgICAgIHBBZC0+RHJzQ291bnRlcnMuQ3VyclR4UmF0ZVN0YWJsZVRpbWUgPSAwOwot
ICAgICAgICBwQWQtPkRyc0NvdW50ZXJzLkxhc3RTZWNUeFJhdGVDaGFuZ2VBY3Rpb24gPSAyOyAv
LyByYXRlIERPV04KLSAgICAgICAJcEFkLT5EcnNDb3VudGVycy5UeFF1YWxpdHlbcEFkLT5Qb3J0
Q2ZnLlR4UmF0ZV0gPSAwOwotICAgICAgIAlwQWQtPkRyc0NvdW50ZXJzLlBFUltwQWQtPlBvcnRD
ZmcuVHhSYXRlXSA9IDA7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgICAgcEFkLT5EcnNDb3VudGVy
cy5MYXN0U2VjVHhSYXRlQ2hhbmdlQWN0aW9uID0gMDsgLy8gcmF0ZSBubyBjaGFuZ2UKLQl9Ci0K
LQotfQotCi0vKgotICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgRGVzY3JpcHRpb246Ci0gICAg
ICAgIFRoaXMgcm91dGluZSBpcyBleGVjdXRlZCBwZXJpb2RpY2FsbHkgaW5zaWRlIE1sbWVQZXJp
b2RpY0V4ZWMoKSBhZnRlciAKLSAgICAgICAgYXNzb2NpYXRpb24gd2l0aCBhbiBBUC4KLSAgICAg
ICAgSXQgY2hlY2tzIGlmIFBvcnRDZmcuUHNtIGlzIGNvbnNpc3RlbnQgd2l0aCB1c2VyIHBvbGlj
eSAocmVjb3JkZWQgaW4KLSAgICAgICAgUG9ydENmZy5XaW5kb3dzUG93ZXJNb2RlKS4gSWYgbm90
LCBlbmZvcmNlIHVzZXIgcG9saWN5LiBIb3dldmVyLCAKLSAgICAgICAgdGhlcmUncmUgc29tZSBj
b25kaXRpb25zIHRvIGNvbnNpZGVyOgotICAgICAgICAxLiB3ZSBkb24ndCBzdXBwb3J0IHBvd2Vy
LXNhdmluZyBpbiBBREhPQyBtb2RlLCBzbyBQc209UFdSX0FDVElWRSBhbGwKLSAgICAgICAgICAg
dGhlIHRpbWUgd2hlbiBNaWJzcz09VFJVRQotICAgICAgICAyLiBXaGVuIE1hc3NvYz09VFJVRSAo
SU5GUkEgbW9kZSksIFBzbSBzaG91bGQgbm90IGJlIHN3aXRjaCB0byBQV1JfU0FWRQotICAgICAg
ICAgICBpZiBvdXRnb2luZyB0cmFmZmljIGF2YWlsYWJsZSBpbiBUeFJpbmcgb3IgUHJpb1Jpbmcu
Ci0gICAgT3V0cHV0OgotICAgICAgICAxLiBjaGFuZ2UgcEFkLT5Qb3J0Q2ZnLlBzbSB0byBQV1Jf
U0FWRSBvciBsZWF2ZSBpdCB1bnRvdWNoZWQKLSAgICAgICAgCi0JSVJRTCA9IERJU1BBVENIX0xF
VkVMCi0KLSAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICovCi1WT0lEIE1sbWVDaGVja0ZvclBzbUNo
YW5nZSgKLSAgICBJTiBQUlQyNTcwQURBUFRFUiBwQWQpCi17Ci0JVUxPTkcJUG93ZXJNb2RlOwot
ICAgIC8vIGNvbmRpdGlvbiAtCi0gICAgLy8gMS4gUHNtIG1heWJlIE9OIG9ubHkgaGFwcGVuIGlu
IElORlJBU1RSVUNUVVJFIG1vZGUKLSAgICAvLyAyLiB1c2VyIHdhbnRzIGVpdGhlciBNQVhfUFNQ
IG9yIEZBU1RfUFNQCi0gICAgLy8gMy4gYnV0IGN1cnJlbnQgcHNtIGlzIG5vdCBpbiBQV1JfU0FW
RQotICAgIC8vIDQuIENOVEwgc3RhdGUgbWFjaGluZSBpcyBub3QgZG9pbmcgU0NBTm5pbmcKLSAg
ICAvLyA1LiBubyBUWCBTVUNDRVNTIGV2ZW50IGZvciB0aGUgcGFzdCBwZXJpb2QKLSAgICAJUG93
ZXJNb2RlID0gcEFkLT5Qb3J0Q2ZnLldpbmRvd3NQb3dlck1vZGU7Ci0gICAgCi0gICAgaWYgKElO
RlJBX09OKHBBZCkgJiYKLSAgICAgICAgKFBvd2VyTW9kZSAhPSBOZGlzODAyXzExUG93ZXJNb2Rl
Q0FNKSAmJgotCQkocEFkLT5CdWxrT3V0UGVuZGluZyA9PSBGQUxTRSkgJiYKLQkJKExPQ0FMX1RY
X1JJTkdfRU1QVFkocEFkKSkgJiYKLQkJKHBBZC0+U2VuZFR4V2FpdFF1ZXVlLk51bWJlciA9PSAw
KSAmJgotICAgICAgICAocEFkLT5Qb3J0Q2ZnLlBzbSA9PSBQV1JfQUNUSVZFKSAmJgotICAgICAg
ICAocEFkLT5NbG1lLkNudGxNYWNoaW5lLkN1cnJTdGF0ZSA9PSBDTlRMX0lETEUpICYmCi0gICAg
ICAgIChwQWQtPldsYW5Db3VudGVycy5UcmFuc21pdHRlZEZyYWdtZW50Q291bnQudnYuTG93UGFy
dCA9PSBwQWQtPk1sbWUuUHJldlR4Q250KSkKLSAgICB7Ci0JCVJUVVNCRW5xdWV1ZUludGVybmFs
Q21kKHBBZCwgUlRfT0lEX1NFVF9QU01fQklUX1NBVkUpOwotICAgIH0KLSAgICAKLSAgICAvLyBs
YXRjaCBjdXJyZW50IGNvdW50IGZvciBuZXh0LXRpbWUgY29tcGFyaXNvbgotICAgIHBBZC0+TWxt
ZS5QcmV2VHhDbnQgPSBwQWQtPldsYW5Db3VudGVycy5UcmFuc21pdHRlZEZyYWdtZW50Q291bnQu
dnYuTG93UGFydDsKLQotfQotCi0vLyBJUlFMID0gUEFTU0lWRV9MRVZFTAotLy8gSVJRTCA9IERJ
U1BBVENIX0xFVkVMCi1WT0lEIE1sbWVTZXRQc21CaXQoCi0gICAgSU4gUFJUMjU3MEFEQVBURVIg
cEFkLCAKLSAgICBJTiBVU0hPUlQgcHNtKQotewotICAgIHBBZC0+UG9ydENmZy5Qc20gPSBwc207
ICAgIAotICAgIAotICAgIERCR1BSSU5UKFJUX0RFQlVHX1RFTVAsICJNTUNISyAtIGNoYW5nZSBQ
U00gYml0IHRvICVkIDw8PFxuIiwgcHNtKTsKLX0KLQotLy8gSVJRTCA9IERJU1BBVENIX0xFVkVM
Ci0vLyBJUlFMID0gRElTUEFUQ0hfTEVWRUwKLVZPSUQgTWxtZVNldFR4UHJlYW1ibGUoCi0gICAg
SU4gUFJUMjU3MEFEQVBURVIgcEFkLCAKLSAgICBJTiBVU0hPUlQgVHhQcmVhbWJsZSkKLXsKLQlV
U0hPUlQJdmFsdWU7Ci0KLSAgICBSVFVTQlJlYWRNQUNSZWdpc3RlcihwQWQsIFRYUlhfQ1NSMTAs
ICZ2YWx1ZSk7Ci0gICAgaWYgKFR4UHJlYW1ibGUgPT0gUnQ4MDJfMTFQcmVhbWJsZVNob3J0KQot
ICAgIHsKLSAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICJNbG1lU2V0VHhQcmVhbWJs
ZSAoPSBTSE9SVCBQUkVBTUJMRSlcbiIpOwotCQl2YWx1ZSB8PSAweDAwMDQ7Ci0gICAgICAgIHBB
ZC0+UG9ydENmZy5UeFByZWFtYmxlSW5Vc2VkID0gUnQ4MDJfMTFQcmVhbWJsZVNob3J0OwotICAg
IH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgIk1s
bWVTZXRUeFByZWFtYmxlICg9IExPTkcgUFJFQU1CTEUpXG4iKTsKLQkJdmFsdWUgJj0gMHhGRkZC
OwotICAgICAgICBwQWQtPlBvcnRDZmcuVHhQcmVhbWJsZUluVXNlZCA9IFJ0ODAyXzExUHJlYW1i
bGVMb25nOwotICAgIH0KLQotICAgIFJUVVNCV3JpdGVNQUNSZWdpc3RlcihwQWQsIFRYUlhfQ1NS
MTAsIHZhbHVlKTsKLX0KLSAgICAKLS8vIElSUUwgPSBQQVNTSVZFX0xFVkVMCi0vLyBJUlFMID0g
RElTUEFUQ0hfTEVWRUwKLS8vIGJMaW5rVXAgaXMgdG8gaWRlbnRpZnkgdGhlIGluaXRhbCBsaW5r
IHNwZWVkLgotLy8gVFJVRSBpbmRpY2F0ZXMgdGhlIHJhdGUgdXBkYXRlIGF0IGxpbmt1cCwgd2Ug
c2hvdWxkIG5vdCB0cnkgdG8gc2V0IHRoZSByYXRlIGF0IDU0TWJwcy4KLVZPSUQgTWxtZVVwZGF0
ZVR4UmF0ZXMoCi0gICAgSU4gUFJUMjU3MEFEQVBURVIgcEFkLAotICAgIElOIEJPT0xFQU4JCSBi
TGlua1VwKQotewotICAgIGludCBpLCBudW07Ci0gICAgVUNIQVIgUmF0ZSwgTWF4RGVzaXJlID0g
UkFURV8xLCBNYXhTdXBwb3J0ID0gUkFURV8xOwotICAgIFVTSE9SVCBCYXNpY1JhdGVCaXRtYXAg
PSAwOwotICAgIFVDSEFSIEN1cnJCYXNpY1JhdGUgPSBSQVRFXzE7Ci0KLSAgICAvLyBmaW5kIG1h
eCBkZXNpcmVkIHJhdGUKLSAgICBudW0gPSAwOwotICAgIGZvciAoaT0wOyBpPE1BWF9MRU5fT0Zf
U1VQUE9SVEVEX1JBVEVTOyBpKyspCi0gICAgewotICAgICAgICBzd2l0Y2ggKHBBZC0+UG9ydENm
Zy5EZXNpcmVkUmF0ZXNbaV0gJiAweDdmKQotICAgICAgICB7Ci0gICAgICAgICAgICBjYXNlIDI6
ICBSYXRlID0gUkFURV8xOyAgIG51bSsrOyAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSA0OiAg
UmF0ZSA9IFJBVEVfMjsgICBudW0rKzsgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgMTE6IFJh
dGUgPSBSQVRFXzVfNTsgbnVtKys7ICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIDIyOiBSYXRl
ID0gUkFURV8xMTsgIG51bSsrOyAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAxMjogUmF0ZSA9
IFJBVEVfNjsgICBudW0rKzsgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgMTg6IFJhdGUgPSBS
QVRFXzk7ICAgbnVtKys7ICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIDI0OiBSYXRlID0gUkFU
RV8xMjsgIG51bSsrOyAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAzNjogUmF0ZSA9IFJBVEVf
MTg7ICBudW0rKzsgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgNDg6IFJhdGUgPSBSQVRFXzI0
OyAgbnVtKys7ICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIDcyOiBSYXRlID0gUkFURV8zNjsg
IG51bSsrOyAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSA5NjogUmF0ZSA9IFJBVEVfNDg7ICBu
dW0rKzsgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgMTA4OiBSYXRlID0gUkFURV81NDsgbnVt
Kys7ICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OiBSYXRlID0gUkFURV8xOyAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgICAgIGlmIChNYXhEZXNpcmUgPCBSYXRlKSAgTWF4RGVzaXJlID0g
UmF0ZTsKLQotCQkvLyBGaXhlZCB0aGUgTWF4aW11bSByYXRlIG9mIDI0MjYgdG8gYiBvbmx5Ci0J
CWlmIChwQWQtPlBvcnRDZmcuUmZUeXBlID09IFJGSUNfMjQyNikKLQkJCWlmIChNYXhEZXNpcmUg
PiBSQVRFXzExKQotCQkJCU1heERlc2lyZSA9IFJBVEVfMTE7Ci0gICAgfQotCi0gICAgLy8gMjAw
My0xMi0xMCA4MDIuMTFnIFdJRkkgc3BlYyBkaXNhbGxvdyBPRkRNIHJhdGVzIGluIDgwMi4xMWcg
QURIT0MgbW9kZQotICAgIGlmICgocEFkLT5Qb3J0Q2ZnLkJzc1R5cGUgPT0gQlNTX0lOREVQKSAg
ICAgICAgJiYKLSAgICAgICAgKHBBZC0+UG9ydENmZy5QaHlNb2RlID09IFBIWV8xMUJHX01JWEVE
KSAgICYmIAotICAgICAgICAocEFkLT5Qb3J0Q2ZnLkFkaG9jTW9kZSA9PSAwKSAmJgotICAgICAg
ICAoTWF4RGVzaXJlID4gUkFURV8xMSkpCi0gICAgICAgIE1heERlc2lyZSA9IFJBVEVfMTE7Ci0g
ICAgCi0gICAgcEFkLT5Qb3J0Q2ZnLk1heERlc2lyZWRSYXRlID0gTWF4RGVzaXJlOwotICAgIAot
ICAgIC8vIEF1dG8gcmF0ZSBzd2l0Y2hpbmcgaXMgZW5hYmxlZCBvbmx5IGlmIG1vcmUgdGhhbiBv
bmUgREVTSVJFRCBSQVRFUyBhcmUgCi0gICAgLy8gc3BlY2lmaWVkOyBvdGhlcndpc2UgZGlzYWJs
ZWQKLSAgICBpZiAobnVtIDw9IDEpCi0gICAgICAgIHBBZC0+UG9ydENmZy5FbmFibGVBdXRvUmF0
ZVN3aXRjaGluZyA9IEZBTFNFOwotICAgIGVsc2UKLSAgICAgICAgcEFkLT5Qb3J0Q2ZnLkVuYWJs
ZUF1dG9SYXRlU3dpdGNoaW5nID0gVFJVRTsKLQotICAgIC8vIGZpbmQgbWF4IHN1cHBvcnRlZCBy
YXRlCi0gICAgZm9yIChpPTA7IGk8cEFkLT5Qb3J0Q2ZnLlN1cHBvcnRlZFJhdGVzTGVuOyBpKysp
Ci0gICAgewotICAgICAgICBzd2l0Y2ggKHBBZC0+UG9ydENmZy5TdXBwb3J0ZWRSYXRlc1tpXSAm
IDB4N2YpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNhc2UgMjogUmF0ZSA9IFJBVEVfMTsgICAK
LSAgICAgICAgICAgICAgICAgICAgaWYgKHBBZC0+UG9ydENmZy5TdXBwb3J0ZWRSYXRlc1tpXSAm
IDB4ODApIAotICAgICAgICAgICAgICAgICAgICAgICAgQmFzaWNSYXRlQml0bWFwIHw9IDB4MDAw
MTsgIAotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgNDogUmF0
ZSA9IFJBVEVfMjsgICAKLSAgICAgICAgICAgICAgICAgICAgaWYgKHBBZC0+UG9ydENmZy5TdXBw
b3J0ZWRSYXRlc1tpXSAmIDB4ODApIAotICAgICAgICAgICAgICAgICAgICAgICAgQmFzaWNSYXRl
Qml0bWFwIHw9IDB4MDAwMjsgIAotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIGNhc2UgMTE6IAotICAgICAgICAgICAgICAgICAgICBSYXRlID0gUkFURV81XzU7IAotICAg
ICAgICAgICAgICAgICAgICBpZiAocEFkLT5Qb3J0Q2ZnLlN1cHBvcnRlZFJhdGVzW2ldICYgMHg4
MCkgCi0gICAgICAgICAgICAgICAgICAgICAgICBCYXNpY1JhdGVCaXRtYXAgfD0gMHgwMDA0OyAg
Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAyMjogCi0gICAg
ICAgICAgICAgICAgICAgIFJhdGUgPSBSQVRFXzExOyAgCi0gICAgICAgICAgICAgICAgICAgIGlm
IChwQWQtPlBvcnRDZmcuU3VwcG9ydGVkUmF0ZXNbaV0gJiAweDgwKSAKLSAgICAgICAgICAgICAg
ICAgICAgICAgIEJhc2ljUmF0ZUJpdG1hcCB8PSAweDAwMDg7ICAKLSAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIDEyOiAKLSAgICAgICAgICAgICAgICAgICAgUmF0
ZSA9IFJBVEVfNjsgICAKLS8vICAgICAgICAgICAgICAgICAgICBpZiAocEFkLT5Qb3J0Q2ZnLlN1
cHBvcnRlZFJhdGVzW2ldICYgMHg4MCkgCi0gICAgICAgICAgICAgICAgICAgICAgICBCYXNpY1Jh
dGVCaXRtYXAgfD0gMHgwMDEwOyAgCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgY2FzZSAxODogCi0gICAgICAgICAgICAgICAgICAgIFJhdGUgPSBSQVRFXzk7ICAgCi0g
ICAgICAgICAgICAgICAgICAgIGlmIChwQWQtPlBvcnRDZmcuU3VwcG9ydGVkUmF0ZXNbaV0gJiAw
eDgwKSAKLSAgICAgICAgICAgICAgICAgICAgICAgIEJhc2ljUmF0ZUJpdG1hcCB8PSAweDAwMjA7
ICAKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIDI0OiAKLSAg
ICAgICAgICAgICAgICAgICAgUmF0ZSA9IFJBVEVfMTI7ICAKLS8vICAgICAgICAgICAgICAgICAg
ICBpZiAocEFkLT5Qb3J0Q2ZnLlN1cHBvcnRlZFJhdGVzW2ldICYgMHg4MCkgCi0gICAgICAgICAg
ICAgICAgICAgICAgICBCYXNpY1JhdGVCaXRtYXAgfD0gMHgwMDQwOyAgCi0gICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAzNjogCi0gICAgICAgICAgICAgICAgICAg
IFJhdGUgPSBSQVRFXzE4OyAgCi0gICAgICAgICAgICAgICAgICAgIGlmIChwQWQtPlBvcnRDZmcu
U3VwcG9ydGVkUmF0ZXNbaV0gJiAweDgwKSAKLSAgICAgICAgICAgICAgICAgICAgICAgIEJhc2lj
UmF0ZUJpdG1hcCB8PSAweDAwODA7ICAKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICBjYXNlIDQ4OiAKLSAgICAgICAgICAgICAgICAgICAgUmF0ZSA9IFJBVEVfMjQ7ICAK
LS8vICAgICAgICAgICAgICAgICAgaWYgKHBBZC0+UG9ydENmZy5TdXBwb3J0ZWRSYXRlc1tpXSAm
IDB4ODApIAotCQkJCQkJQmFzaWNSYXRlQml0bWFwIHw9IDB4MDEwMDsgIAotICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgNzI6IAotICAgICAgICAgICAgICAgICAg
ICBSYXRlID0gUkFURV8zNjsgIAotICAgICAgICAgICAgICAgICAgICBpZiAocEFkLT5Qb3J0Q2Zn
LlN1cHBvcnRlZFJhdGVzW2ldICYgMHg4MCkgCi0gICAgICAgICAgICAgICAgICAgICAgICBCYXNp
Y1JhdGVCaXRtYXAgfD0gMHgwMjAwOyAgCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgY2FzZSA5NjogCi0gICAgICAgICAgICAgICAgICAgIFJhdGUgPSBSQVRFXzQ4OyAg
Ci0gICAgICAgICAgICAgICAgICAgIGlmIChwQWQtPlBvcnRDZmcuU3VwcG9ydGVkUmF0ZXNbaV0g
JiAweDgwKSAKLSAgICAgICAgICAgICAgICAgICAgICAgIEJhc2ljUmF0ZUJpdG1hcCB8PSAweDA0
MDA7ICAKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIDEwODog
Ci0gICAgICAgICAgICAgICAgICAgIFJhdGUgPSBSQVRFXzU0OyAKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKHBBZC0+UG9ydENmZy5TdXBwb3J0ZWRSYXRlc1tpXSAmIDB4ODApIAotICAgICAgICAg
ICAgICAgICAgICAgICAgQmFzaWNSYXRlQml0bWFwIHw9IDB4MDgwMDsgIAotICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6ICAKLSAgICAgICAgICAgICAgICAg
ICAgUmF0ZSA9IFJBVEVfMTsgICAKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICAgICAgaWYgKE1heFN1cHBvcnQgPCBSYXRlKSAgTWF4U3VwcG9ydCA9IFJhdGU7Ci0g
ICAgfQotCi0JLy8gTGltaXQgdGhlIG1heCBzdXBwb3J0IHJhdGUgYW5kIGJhc2ljIHJhdGUgbWFw
IHRvIDExYiBvbmx5Ci0JaWYgKHBBZC0+UG9ydENmZy5SZlR5cGUgPT0gUkZJQ18yNDI2KQotCXsK
LQkJaWYgKE1heFN1cHBvcnQgPiBSQVRFXzExKQotCQl7Ci0JCQlNYXhTdXBwb3J0ID0gUkFURV8x
MTsKLQkJCUJhc2ljUmF0ZUJpdG1hcCAmPSAweDAwMGY7Ci0JCX0KLQl9Ci0JCi0JUlRVU0JXcml0
ZU1BQ1JlZ2lzdGVyKHBBZCwgVFhSWF9DU1IxMSwgQmFzaWNSYXRlQml0bWFwKTsKLQotICAgIC8v
IGNhbGN1bGF0ZSB0aGUgZXhwdGVjdGVkIEFDSyByYXRlIGZvciBlYWNoIFRYIHJhdGUuIFRoaXMg
aW5mbyBpcyB1c2VkIHRvIGNhY3VsYXRlCi0gICAgLy8gdGhlIERVUkFUSU9OIGZpZWxkIG9mIG91
dGdvaW5nIHVuaWljYXN0IERBVEEvTUdNVCBmcmFtZQotICAgIGZvciAoaT0wOyBpPE1BWF9MRU5f
T0ZfU1VQUE9SVEVEX1JBVEVTOyBpKyspCi0gICAgewotICAgICAgICBpZiAoQmFzaWNSYXRlQml0
bWFwICYgKDB4MDEgPDwgaSkpCi0gICAgICAgICAgICBDdXJyQmFzaWNSYXRlID0gKFVDSEFSKWk7
Ci0gICAgICAgIHBBZC0+UG9ydENmZy5FeHBlY3RlZEFDS1JhdGVbaV0gPSBDdXJyQmFzaWNSYXRl
OwotICAgICAgICBEQkdQUklOVChSVF9ERUJVR19JTkZPLCJFeHB0ZWN0ZWQgQUNLIHJhdGVbJWRd
ID0gJWQgTWJwc1xuIiwgUmF0ZUlkVG9NYnBzW2ldLCBSYXRlSWRUb01icHNbQ3VyckJhc2ljUmF0
ZV0pOwotICAgIH0KLQotICAgIC8vIG1heCB0eCByYXRlID0gbWluIHttYXggZGVzaXJlIHJhdGUs
IG1heCBzdXBwb3J0ZWQgcmF0ZX0KLSAgICBpZiAoTWF4U3VwcG9ydCA8IE1heERlc2lyZSkKLSAg
ICAgICAgcEFkLT5Qb3J0Q2ZnLk1heFR4UmF0ZSA9IE1heFN1cHBvcnQ7Ci0gICAgZWxzZQotICAg
ICAgICBwQWQtPlBvcnRDZmcuTWF4VHhSYXRlID0gTWF4RGVzaXJlOwotCi0gICAgLy8gMjAwMy0w
Ny0zMSBqb2huIC0gMjUwMCBkb2Vzbid0IGhhdmUgZ29vZCBzZW5zaXRpdml0eSBhdCBoaWdoIE9G
RE0gcmF0ZXMuIHRvIGluY3JlYXNlIHRoZSBzdWNjZXNzCi0gICAgLy8gcmF0aW8gb2YgaW5pdGlh
bCBESENQIHBhY2tldCBleGNoYW5nZSwgVFggcmF0ZSBzdGFydHMgZnJvbSBhIGxvd2VyIHJhdGUK
LSAgICBpZiAocEFkLT5Qb3J0Q2ZnLkVuYWJsZUF1dG9SYXRlU3dpdGNoaW5nKQotICAgIHsKLSAg
ICAgICAgaWYgKHBBZC0+UG9ydENmZy5DaGFubmVsID4gMTQpCi0gICAgICAgICAgICBwQWQtPlBv
cnRDZmcuVHhSYXRlID0gUkFURV82OyAvLyA4MDIuMTFhCi0gICAgICAgIGVsc2UgCi0JCXsKLQkJ
CWludCBkYm0gPSBwQWQtPlBvcnRDZmcuQXZnUnNzaSAtIHBBZC0+QkJQVHVuaW5nUGFyYW1ldGVy
cy5SU1NJVG9EYm1PZmZzZXQ7Ci0JCQlpZiAoZGJtID4gLTcwKQotCQkJewotCQkJCXBBZC0+UG9y
dENmZy5UeFJhdGUgPSBwQWQtPlBvcnRDZmcuTWF4VHhSYXRlOwotCQkJfQotCQkJZWxzZSBpZiAo
ZGJtID4gLTc1KQotCQkJewotCQkJCXBBZC0+UG9ydENmZy5UeFJhdGUgPSBtaW4oKElOVCkocEFk
LT5Qb3J0Q2ZnLk1heFR4UmF0ZSksIFJBVEVfMzYpOwotCQkJfQotCQkJZWxzZQotCQkJewotCQkJ
CXBBZC0+UG9ydENmZy5UeFJhdGUgPSBtaW4oKElOVCkocEFkLT5Qb3J0Q2ZnLk1heFR4UmF0ZSks
IFJBVEVfMTEpOwotCQkJfQotCQl9Ci0gICAgfQotICAgIGVsc2UKLSAgICAgICAgcEFkLT5Qb3J0
Q2ZnLlR4UmF0ZSA9IHBBZC0+UG9ydENmZy5NYXhUeFJhdGU7Ci0KLSAgICBzd2l0Y2ggKHBBZC0+
UG9ydENmZy5QaHlNb2RlKSB7Ci0gICAgICAgIGNhc2UgUEhZXzExQkdfTUlYRUQ6Ci0gICAgICAg
IGNhc2UgUEhZXzExQjoKLSAgICAgICAgICAgIHBBZC0+UG9ydENmZy5NbG1lUmF0ZSA9IFJBVEVf
MjsKLSNpZmRlZglXSUZJX1RFU1QJCQkKLSAgICAgICAgICAgIHBBZC0+UG9ydENmZy5SdHNSYXRl
ID0gUkFURV8xMTsKLSNlbHNlCi0gICAgICAgICAgICBwQWQtPlBvcnRDZmcuUnRzUmF0ZSA9IFJB
VEVfMjsKLSNlbmRpZgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUEhZXzExQToK
LSAgICAgICAgICAgIHBBZC0+UG9ydENmZy5NbG1lUmF0ZSA9IFJBVEVfNjsKLSAgICAgICAgICAg
IHBBZC0+UG9ydENmZy5SdHNSYXRlID0gUkFURV82OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgUEhZXzExQUJHX01JWEVEOgotICAgICAgICAgICAgaWYgKHBBZC0+UG9ydENmZy5D
aGFubmVsIDw9IDE0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHBBZC0+UG9ydENm
Zy5NbG1lUmF0ZSA9IFJBVEVfMjsKLSAgICAgICAgICAgICAgICBwQWQtPlBvcnRDZmcuUnRzUmF0
ZSA9IFJBVEVfMjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBwQWQtPlBvcnRDZmcuTWxtZVJhdGUgPSBSQVRFXzY7Ci0gICAg
ICAgICAgICAgICAgcEFkLT5Qb3J0Q2ZnLlJ0c1JhdGUgPSBSQVRFXzY7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDogLy8gZXJyb3IKLSAgICAgICAg
ICAgIHBBZC0+UG9ydENmZy5NbG1lUmF0ZSA9IFJBVEVfMjsKLSAgICAgICAgICAgIHBBZC0+UG9y
dENmZy5SdHNSYXRlID0gUkFURV8yOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIAot
ICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAiIE1sbWVVcGRhdGVUeFJhdGVzIChNYXhEZXNp
cmU9JWQsIE1heFN1cHBvcnQ9JWQsIE1heFR4UmF0ZT0lZCwgUmF0ZSBTd2l0Y2hpbmcgPSVkKVxu
IiwgCi0gICAgICAgICAgICAgUmF0ZUlkVG9NYnBzW01heERlc2lyZV0sIFJhdGVJZFRvTWJwc1tN
YXhTdXBwb3J0XSwgUmF0ZUlkVG9NYnBzW3BBZC0+UG9ydENmZy5NYXhUeFJhdGVdLCBwQWQtPlBv
cnRDZmcuRW5hYmxlQXV0b1JhdGVTd2l0Y2hpbmcpOwotICAgIERCR1BSSU5UKFJUX0RFQlVHX1RS
QUNFLCAiIE1sbWVVcGRhdGVUeFJhdGVzIChUeFJhdGU9JWQsIFJ0c1JhdGU9JWQsIEJhc2ljUmF0
ZUJpdG1hcD0weCUwNHgpXG4iLCAKLSAgICAgICAgICAgICBSYXRlSWRUb01icHNbcEFkLT5Qb3J0
Q2ZnLlR4UmF0ZV0sIFJhdGVJZFRvTWJwc1twQWQtPlBvcnRDZmcuUnRzUmF0ZV0sIEJhc2ljUmF0
ZUJpdG1hcCk7Ci19Ci0KLS8vIElSUUwgPSBESVNQQVRDSF9MRVZFTAotVk9JRCBNbG1lUmFkaW9P
ZmYoCi0gICAgSU4gUFJUMjU3MEFEQVBURVIgcEFkKQotewotCU1MTUVfRElTQVNTT0NfUkVRX1NU
UlVDVCBEaXNSZXE7Ci0JTUxNRV9RVUVVRV9FTEVNICAgICAgICAgIE1zZ0VsZW07Ci0JVUlOVAlp
ID0gMDsKLQotCS8vCi0JLy8gU2luY2Ugc2V0IGZsYWcgZlJUTVBfQURBUFRFUl9SQURJT19PRkYg
d2lsbCBkaWFibGUgUlRVU0JLaWNrQnVsa091dCBmdW5jdGlvbi4KLQkvLyBTbyBiZWZvcmUgc2V0
IGZsYWcgZlJUTVBfQURBUFRFUl9SQURJT19PRkYsIAotCS8vIHdlIHNob3VsZCBzZW5kIGEgZGlz
YXNzb2MgZnJhbWUgdG8gb3VyIEFQIGlmIG5lZW5kLgotCS8vCi0JaWYgKCFSVE1QX1RFU1RfRkxB
RyhwQWQsIGZSVE1QX0FEQVBURVJfUkVNT1ZFX0lOX1BST0dSRVNTKSkKLQl7Ci0JCWlmIChJTkZS
QV9PTihwQWQpKSAKLQkJewotCQkJQ09QWV9NQUNfQUREUigmRGlzUmVxLkFkZHIsICZwQWQtPlBv
cnRDZmcuQnNzaWQpOwotCQkJRGlzUmVxLlJlYXNvbiA9ICBSRUFTT05fRElTQVNTT0NfU1RBX0xF
QVZJTkc7Ci0KLQkJCU1zZ0VsZW0uTWFjaGluZSA9IEFTU09DX1NUQVRFX01BQ0hJTkU7Ci0JCQlN
c2dFbGVtLk1zZ1R5cGUgPSBNVDJfTUxNRV9ESVNBU1NPQ19SRVE7Ci0JCQlNc2dFbGVtLk1zZ0xl
biA9IHNpemVvZihNTE1FX0RJU0FTU09DX1JFUV9TVFJVQ1QpOwotCQkJTmRpc01vdmVNZW1vcnko
TXNnRWxlbS5Nc2csICZEaXNSZXEsIHNpemVvZihNTE1FX0RJU0FTU09DX1JFUV9TVFJVQ1QpKTsK
LQotCQkJTWxtZURpc2Fzc29jUmVxQWN0aW9uKHBBZCwgJk1zZ0VsZW0pOwotCQkJTmRpc01TbGVl
cCgxKTsKLQkJfQotCQkvLyBTZXQgUmFkaW8gb2ZmIGZsYWcgd2lsbCB0dXJuIG9mZiBSVFVTQktp
Y2tCdWxrT3V0IGZ1bmN0aW9uCi0JCVJUTVBfU0VUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX1JB
RElPX09GRik7Ci0gICAgICAgIAlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgIjNTZXQgZlJUTVBf
QURBUFRFUl9SQURJT19PRkYgIik7Ci0JCi0JCUxpbmtEb3duKHBBZCk7Ci0JfQotCWVsc2UKLQl7
Ci0JCS8vIFNldCBSYWRpbyBvZmYgZmxhZyB3aWxsIHR1cm4gb2ZmIFJUVVNCS2lja0J1bGtPdXQg
ZnVuY3Rpb24KLQkJUlRNUF9TRVRfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfUkFESU9fT0ZGKTsK
LSAgICAgICAgCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAiNFNldCBmUlRNUF9BREFQVEVSX1JB
RElPX09GRiAiKTsKLQl9CQotCURCR1BSSU5UX1JBVyhSVF9ERUJVR19URU1QLCIgIE1sbWVSYWRp
b09mZiBcbiIgKTsKLQlSVFVTQlJlamVjdFBlbmRpbmdQYWNrZXRzKHBBZCk7Ly9yZWplY3QgYWxs
IE5ESVMgcGFja2V0cyB3YWl0aW5nIGluIFRYIHF1ZXVlCi0JUlRVU0JDbGVhblVwRGF0YUJ1bGtP
dXRRdWV1ZShwQWQpOwotCU1sbWVTdXNwZW5kKHBBZCk7Ci0JREJHUFJJTlRfUkFXKFJUX0RFQlVH
X1RFTVAsIiAgMk1sbWVSYWRpb09mZiBcbiIgKTsKLQkvLyBBYm9ydCBUeAotCS8vIERpc2FibGUg
UngKLQlSVFVTQldyaXRlTUFDUmVnaXN0ZXIocEFkLCBUWFJYX0NTUjIsIDEpOwotCS8vQXNrIG91
ciBkZXZpY2UgdG8gY29tcGxldGUgYW55IHBlbmRpbmcgYnVsayBpbiBJUlAuCi0Jd2hpbGUgKCgg
YXRvbWljX3JlYWQoJnBBZC0+UGVuZGluZ1J4KSA+IDApIHx8IChwQWQtPkJ1bGtPdXRQZW5kaW5n
ID09IFRSVUUpKQotCXsKLQkJaWYgKGF0b21pY19yZWFkKCZwQWQtPlBlbmRpbmdSeCkgPiAwKQot
CQl7Ci0JCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfVFJBQ0UsICJCdWxrSW4gSVJQIFBlbmRpbmch
ISFcbiIpOwotCQkJUlRVU0JfVmVuZG9yUmVxdWVzdChwQWQsCi0JCQkJMCwKLQkJCQlERVZJQ0Vf
VkVORE9SX1JFUVVFU1RfT1VULAotCQkJCTB4MEMsCi0JCQkJMHgwLAotCQkJCTB4MCwKLQkJCQlO
VUxMLAotCQkJCTApOwotCQl9Ci0JCQotCQlpZiAocEFkLT5CdWxrT3V0UGVuZGluZyA9PSBUUlVF
KQotCQl7Ci0JCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfVFJBQ0UsICJCdWxrT3V0IElSUCBQZW5k
aW5nISEhXG4iKTsKLQkJCWlmIChpID09IDApCi0JCQl7Ci0JCQkJUlRVU0JDYW5jZWxQZW5kaW5n
QnVsa091dElSUChwQWQpOwotCQkJCWkrKzsKLQkJCX0KLQkJfQotCQkKLQkJTmRpc01TbGVlcCg1
KTsKLQl9Ci0jaWYgMQotCi0JLy8gVHVybiBvZmYgcmFkaW8KLQlSVFVTQldyaXRlTUFDUmVnaXN0
ZXIocEFkLCBNQUNfQ1NSMTMsIDB4MjEyMSk7Ci0JUlRVU0JXcml0ZU1BQ1JlZ2lzdGVyKHBBZCwg
TUFDX0NTUjE0LCAweDIxMjEpOwotCi0JaWYgKHBBZC0+UG9ydENmZy5MZWRNb2RlID09IExFRF9N
T0RFX0FTVVMpCi0JewotCQlSVFVTQldyaXRlTUFDUmVnaXN0ZXIocEFkLCBNQUNfQ1NSMjAsIDB4
MDAwMSk7IAkJCi0JfQotCQotCS8vIENsZWFuIHVwIG9sZCBic3MgdGFibGUKLQlCc3NUYWJsZUlu
aXQoJnBBZC0+UG9ydENmZy5Cc3NUYWIpOwotCURCR1BSSU5UX1JBVyhSVF9ERUJVR19URU1QLCIg
IDw9PU1sbWVSYWRpb09mZiBcbiIgKTsKLSNlbmRpZgotfQotCi0vLyBJUlFMID0gRElTUEFUQ0hf
TEVWRUwKLVZPSUQgTWxtZVJhZGlvT24oCi0gICAgSU4gUFJUMjU3MEFEQVBURVIgcEFkKQotewkK
LQkvLyBUdXJuIG9uIHJhZGlvCi0JUlRVU0JXcml0ZU1BQ1JlZ2lzdGVyKHBBZCwgTUFDX0NTUjEz
LCAweDMxMDApOwotCVJUVVNCV3JpdGVNQUNSZWdpc3RlcihwQWQsIE1BQ19DU1IxNCwgMHgzZjNi
KTsKLQotCS8vIEFib3J0IFR4Ci0JLy9zdGV2ZW46ZG9uJ3QgaGF2ZSB0aGlzCVJUTVBfSU9fV1JJ
VEUzMihwQWQsIFRYQ1NSMCwgMHgwOCk7Ci0JLy8gRGlzYWJsZSBSeAotCVJUVVNCV3JpdGVNQUNS
ZWdpc3RlcihwQWQsIFRYUlhfQ1NSMiwgMSk7Ci0KLQlOSUNSZXNldEZyb21FcnJvcihwQWQpOwot
CS8vIENsZWFyIFJhZGlvIG9mZiBmbGFnCi0JUlRNUF9DTEVBUl9GTEFHKHBBZCwgZlJUTVBfQURB
UFRFUl9SQURJT19PRkYpOwotCU1sbWVSZXN1bWUocEFkKTsKLQlSVFVTQkJ1bGtSZWNlaXZlKHBB
ZCk7Ci0JUlRVU0JXcml0ZU1BQ1JlZ2lzdGVyKHBBZCwgVFhSWF9DU1IyLCAweDdlKTsKLQlpZiAo
cEFkLT5Qb3J0Q2ZnLkxlZE1vZGUgPT0gTEVEX01PREVfQVNVUykKLQl7Ci0JCVJUVVNCV3JpdGVN
QUNSZWdpc3RlcihwQWQsIE1BQ19DU1IyMCwgMHgwMDAzKTsKLQl9Ci19Ci0KLQotLy8gPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gYnNzX3RhYmxlLmMKLS8vID09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotCi0vKiEgXGJyaWVmIGluaXRpYWxpemUgQlNT
IHRhYmxlCi0gKiAgXHBhcmFtIHBfdGFiIHBvaW50ZXIgdG8gdGhlIHRhYmxlCi0gKiAgXHJldHVy
biBub25lCi0gKiAgXHByZQotICogIFxwb3N0Ci0KLSBJUlFMID0gUEFTU0lWRV9MRVZFTAotIElS
UUwgPSBESVNQQVRDSF9MRVZFTAotICAKLSAqLwotVk9JRCBCc3NUYWJsZUluaXQoCi0gICAgSU4g
QlNTX1RBQkxFICpUYWIpIAotewotICAgIGludCBpOwotCi0gICAgVGFiLT5Cc3NOciA9IDA7Ci0g
ICAgZm9yIChpID0gMDsgaSA8IE1BWF9MRU5fT0ZfQlNTX1RBQkxFOyBpKyspIAotICAgIHsKLSAg
ICAgICAgTmRpc1plcm9NZW1vcnkoJlRhYi0+QnNzRW50cnlbaV0sIHNpemVvZihCU1NfRU5UUlkp
KTsKLSAgICB9Ci19Ci0KLS8qISBcYnJpZWYgc2VhcmNoIHRoZSBCU1MgdGFibGUgYnkgU1NJRAot
ICogIFxwYXJhbSBwX3RhYiBwb2ludGVyIHRvIHRoZSBic3MgdGFibGUKLSAqICBccGFyYW0gc3Np
ZCBTU0lEIHN0cmluZyAKLSAqICBccmV0dXJuIGluZGV4IG9mIHRoZSB0YWJsZSwgQlNTX05PVF9G
T1VORCBpZiBub3QgaW4gdGhlIHRhYmxlCi0gKiAgXHByZQotICogIFxwb3N0Ci0gKiAgXG5vdGUg
c2VhcmNoIGJ5IHNlcXVlbnRpYWwgc2VhcmNoCi0KLSBJUlFMID0gRElTUEFUQ0hfTEVWRUwKLSAK
LSAqLwotVUxPTkcgQnNzVGFibGVTZWFyY2goCi0gICAgSU4gQlNTX1RBQkxFICpUYWIsIAotICAg
IElOIFBNQUNBRERSIEJzc2lkKSAKLXsKLSAgICBVQ0hBUiBpOwotICAgIAotICAgIGZvciAoaSA9
IDA7IGkgPCBUYWItPkJzc05yOyBpKyspIAotICAgIHsKLSAgICAgICAgLy9wcmludGYoImNvbXBh
cmluZyAlcyBhbmQgJXNcbiIsIHBfdGFiLT5ic3NbaV0uc3NpZCwgc3NpZCk7Ci0gICAgICAgIGlm
IChNQUNfQUREUl9FUVVBTCgmKFRhYi0+QnNzRW50cnlbaV0uQnNzaWQpLCBCc3NpZCkpIAotICAg
ICAgICB7IAotICAgICAgICAgICAgcmV0dXJuIGk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0
dXJuIChVTE9ORylCU1NfTk9UX0ZPVU5EOwotfQotCi0vLyBJUlFMID0gRElTUEFUQ0hfTEVWRUwK
LVZPSUQgQnNzVGFibGVEZWxldGVFbnRyeSgKLSAgICBJTiBPVVQJQlNTX1RBQkxFICpUYWIsIAot
ICAgIElOCQlQTUFDQUREUiBCc3NpZCkgCi17Ci0gICAgVUNIQVIgaSwgajsKLSAgICAKLSAgICBm
b3IgKGkgPSAwOyBpIDwgVGFiLT5Cc3NOcjsgaSsrKSAKLSAgICB7Ci0gICAgICAgIC8vcHJpbnRm
KCJjb21wYXJpbmcgJXMgYW5kICVzXG4iLCBwX3RhYi0+YnNzW2ldLnNzaWQsIHNzaWQpOwotICAg
ICAgICBpZiAoTUFDX0FERFJfRVFVQUwoJihUYWItPkJzc0VudHJ5W2ldLkJzc2lkKSwgQnNzaWQp
KSAKLSAgICAgICAgewotICAgICAgICAJZm9yIChqID0gaTsgaiA8IFRhYi0+QnNzTnIgLSAxOyBq
KyspCi0gICAgICAgIAl7Ci0gICAgICAgIAkJTmRpc01vdmVNZW1vcnkoJihUYWItPkJzc0VudHJ5
W2pdKSwgJihUYWItPkJzc0VudHJ5W2ogKyAxXSksIHNpemVvZihCU1NfRU5UUlkpKTsKLSAgICAg
ICAgCX0KLQkgICAgICAgIFRhYi0+QnNzTnIgLT0gMTsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotICAgIH0KLX0KLQotVUNIQVIJWmVyb1NzaWRbMzJdID0gezB4MDAsMHgwMCwweDAw
LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCww
eDAwLDB4MDAsCi0JMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAs
MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH07Ci0vKiEgXGJyaWVmCi0gKiAgXHBh
cmFtIAotICogIFxyZXR1cm4KLSAqICBccHJlCi0gKiAgXHBvc3QKLQkgCi0gSVJRTCA9IERJU1BB
VENIX0xFVkVMCi0gCi0gKi8KLVZPSUQgQnNzRW50cnlTZXQoCi0gICAgSU4JUFJUMjU3MEFEQVBU
RVIJcEFkLCAKLSAgICBPVVQgQlNTX0VOVFJZICpwQnNzLCAKLSAgICBJTiBNQUNBRERSICpwQnNz
aWQsIAotICAgIElOIENIQVIgU3NpZFtdLCAKLSAgICBJTiBVQ0hBUiBTc2lkTGVuLCAKLSAgICBJ
TiBVQ0hBUiBCc3NUeXBlLCAKLSAgICBJTiBVU0hPUlQgQmVhY29uUGVyaW9kLCAKLSAgICBJTiBC
T09MRUFOIENmRXhpc3QsCi0gICAgSU4gQ0ZfUEFSTSAqcENmUGFybSwgCi0gICAgSU4gVVNIT1JU
IEF0aW1XaW4sIAotICAgIElOIFVTSE9SVCBDYXBhYmlsaXR5SW5mbywgCi0gICAgSU4gVUNIQVIg
UmF0ZXNbXSwgCi0gICAgSU4gVUNIQVIgUmF0ZXNMZW4sCi0gICAgSU4gQk9PTEVBTiBFeHRlbmRl
ZFJhdGVJZUV4aXN0LAotICAgIElOIFVDSEFSIENoYW5uZWwsCi0gICAgSU4gVUNIQVIgUnNzaSwK
LSAgICBJTiBMQVJHRV9JTlRFR0VSIFRpbWVTdGFtcCwKLSAgICBJTiBVQ0hBUiBMZW5ndGhWSUUs
Ci0gICAgSU4gUE5ESVNfODAyXzExX1ZBUklBQkxFX0lFcyBwVklFKSAKLXsKLSAgICBDT1BZX01B
Q19BRERSKCZwQnNzLT5Cc3NpZCwgcEJzc2lkKTsKLQkvLyBEZWZhdWx0IEhpZGRlbiBTU0lEIHRv
IGJlIFRSVUUsIGl0IHdpbGwgYmUgdHVybmVkIHRvIEZBTFNFIGFmdGVyIGNvcGluZyBTU0lECi0J
cEJzcy0+SGlkZGVuID0gMTsJCi0JaWYgKFNzaWRMZW4gPiAwKQotCXsKLQkJLy8gRm9yIGhpZGRl
biBTU0lEIEFQLCBpdCBtaWdodCBzZW5kIGJlYWNvbiB3aXRoIFNTSUQgbGVuIGVxdWFsIHRvIDAK
LQkJLy8gT3Igc2VuZCBiZWFjb24gL3Byb2JlIHJlc3BvbnNlIHdpdGggU1NJRCBsZW4gbWF0Y2hp
bmcgcmVhbCBTU0lEIGxlbmd0aCwKLQkJLy8gYnV0IFNTSUQgaXMgYWxsIHplcm8uIHN1Y2ggYXMg
IjAwLTAwLTAwLTAwIiB3aXRoIGxlbmd0aCA0LgotCQkvLyBXZSBoYXZlIHRvIHByZXZlbnQgdGhp
cyBjYXNlIG92ZXJ3cml0ZSBjb3JyZWN0IHRhYmxlCi0JCWlmIChOZGlzRXF1YWxNZW1vcnkoU3Np
ZCwgWmVyb1NzaWQsIFNzaWRMZW4pID09IDApCi0JCXsKLSAgICAJCU5kaXNNb3ZlTWVtb3J5KHBC
c3MtPlNzaWQsIFNzaWQsIFNzaWRMZW4pOwotICAgIAkJcEJzcy0+U3NpZExlbiA9IFNzaWRMZW47
Ci0JCQlwQnNzLT5IaWRkZW4gPSAwOwotCQl9Ci0JfQotICAgIHBCc3MtPkJzc1R5cGUgPSBCc3NU
eXBlOwotICAgIHBCc3MtPkJlYWNvblBlcmlvZCA9IEJlYWNvblBlcmlvZDsKLSAgICBpZiAoQnNz
VHlwZSA9PSBCU1NfSU5GUkEpIAotICAgIHsKLSAgICAgICAgaWYgKENmRXhpc3QpIAotICAgICAg
ICB7Ci0gICAgICAgICAgICBwQnNzLT5DZnBDb3VudCA9IHBDZlBhcm0tPkNmcENvdW50OwotICAg
ICAgICAgICAgcEJzcy0+Q2ZwUGVyaW9kID0gcENmUGFybS0+Q2ZwUGVyaW9kOwotICAgICAgICAg
ICAgcEJzcy0+Q2ZwTWF4RHVyYXRpb24gPSBwQ2ZQYXJtLT5DZnBNYXhEdXJhdGlvbjsKLSAgICAg
ICAgICAgIHBCc3MtPkNmcER1clJlbWFpbmluZyA9IHBDZlBhcm0tPkNmcER1clJlbWFpbmluZzsK
LSAgICAgICAgfQotICAgIH0gCi0gICAgZWxzZSAKLSAgICB7Ci0gICAgICAgIHBCc3MtPkF0aW1X
aW4gPSBBdGltV2luOwotICAgIH0KLQotICAgIHBCc3MtPkNhcGFiaWxpdHlJbmZvID0gQ2FwYWJp
bGl0eUluZm87Ci0JLy8gVGhlIHByaXZhY3kgYml0IGluZGljYXRlIHNlY3VyaXR5IGlzIE9OLCBp
dCBtYWlnaHQgYmUgV0VQLCBUS0lQIG9yIEFFUwotCS8vIENvbWJpbmUgd2l0aCBBdXRoTW9kZSwg
dGhleSB3aWxsIGRlY2lkZSB0aGUgY29ubmVjdGlvbiBtZXRob2RzLgotICAgIHBCc3MtPlByaXZh
Y3kgPSBDQVBfSVNfUFJJVkFDWV9PTihwQnNzLT5DYXBhYmlsaXR5SW5mbyk7Ci0gICAgTmRpc01v
dmVNZW1vcnkocEJzcy0+UmF0ZXMsIFJhdGVzLCBSYXRlc0xlbik7Ci0gICAgcEJzcy0+UmF0ZXNM
ZW4gPSBSYXRlc0xlbjsKLSAgICBwQnNzLT5FeHRlbmRlZFJhdGVJZUV4aXN0ID0gRXh0ZW5kZWRS
YXRlSWVFeGlzdDsKLSAgICBwQnNzLT5DaGFubmVsID0gQ2hhbm5lbDsKLSAgICBwQnNzLT5Sc3Np
ID0gUnNzaTsKLQotCS8vIE5ldyBmb3IgbWljcm9zb2Z0IEZpeGVkIElFcwotCU5kaXNNb3ZlTWVt
b3J5KHBCc3MtPkZpeElFcy5UaW1lc3RhbXAsICZUaW1lU3RhbXAsIDgpOwotCXBCc3MtPkZpeElF
cy5CZWFjb25JbnRlcnZhbCA9IEJlYWNvblBlcmlvZDsKLQlwQnNzLT5GaXhJRXMuQ2FwYWJpbGl0
aWVzID0gQ2FwYWJpbGl0eUluZm87Ci0KLQkvLyBOZXcgZm9yIG1pY3Jvc29mdCBWYXJpYWJsZSBJ
RXMKLQlpZiAoTGVuZ3RoVklFICE9IDApCi0JewotCQlwQnNzLT5WYXJJRUxlbiA9IExlbmd0aFZJ
RTsKLQkJTmRpc01vdmVNZW1vcnkocEJzcy0+VmFySUVzLCBwVklFLCBwQnNzLT5WYXJJRUxlbik7
Ci0JCUJzc0NpcGhlclBhcnNlKHBCc3MpOwotCX0KLQllbHNlCi0JewotCQlwQnNzLT5WYXJJRUxl
biA9IDA7Ci0JCS8vIE5vIFNTTiBJRCwgaWYgc2VjdXJpdHkgaXMgb24sIHRoaXMgaXMgV0VQIGFs
Z29yaXRobQotCQlpZiAgKHBCc3MtPlByaXZhY3kpCi0JCQlwQnNzLT5XZXBTdGF0dXMgPSBOZGlz
ODAyXzExV0VQRW5hYmxlZDsKLQkJLy8gTm8gU1NOIElELCBzZWN1cml0eSBpcyBhbHNvIG9mZi4K
LQkJZWxzZQotCQkJcEJzcy0+V2VwU3RhdHVzID0gTmRpczgwMl8xMVdFUERpc2FibGVkOwotCX0K
LX0KLQotLyohIAotICogIFxicmllZiBpbnNlcnQgYW4gZW50cnkgaW50byB0aGUgYnNzIHRhYmxl
Ci0gKiAgXHBhcmFtIHBfdGFiIFRoZSBCU1MgdGFibGUKLSAqICBccGFyYW0gQnNzaWQgQlNTSUQK
LSAqICBccGFyYW0gc3NpZCBTU0lECi0gKiAgXHBhcmFtIHNzaWRfbGVuIExlbmd0aCBvZiBTU0lE
Ci0gKiAgXHBhcmFtIGJzc190eXBlCi0gKiAgXHBhcmFtIGJlYWNvbl9wZXJpb2QKLSAqICBccGFy
YW0gdGltZXN0YW1wCi0gKiAgXHBhcmFtIHBfY2YKLSAqICBccGFyYW0gYXRpbV93aW4KLSAqICBc
cGFyYW0gY2FwCi0gKiAgXHBhcmFtIHJhdGVzCi0gKiAgXHBhcmFtIHJhdGVzX2xlbgotICogIFxw
YXJhbSBjaGFubmVsX2lkeAotICogIFxyZXR1cm4gbm9uZQotICogIFxwcmUKLSAqICBccG9zdAot
ICogIFxub3RlIElmIFNTSUQgaXMgaWRlbnRpY2FsLCB0aGUgb2xkIGVudHJ5IHdpbGwgYmUgcmVw
bGFjZWQgYnkgdGhlIG5ldyBvbmUKLQkgCi0gSVJRTCA9IERJU1BBVENIX0xFVkVMCi0gCi0gKi8K
LVVMT05HIEJzc1RhYmxlU2V0RW50cnkoCi0gICAgSU4JUFJUMjU3MEFEQVBURVIJcEFkLCAKLSAg
ICBPVVQgQlNTX1RBQkxFICpUYWIsIAotICAgIElOIE1BQ0FERFIgKkJzc2lkLCAKLSAgICBJTiBD
SEFSIFNzaWRbXSwgCi0gICAgSU4gVUNIQVIgU3NpZExlbiwgCi0gICAgSU4gVUNIQVIgQnNzVHlw
ZSwgCi0gICAgSU4gVVNIT1JUIEJlYWNvblBlcmlvZCwgCi0gICAgSU4gQk9PTEVBTiBDZkV4aXN0
LCAKLSAgICBJTiBDRl9QQVJNICpDZlBhcm0sIAotICAgIElOIFVTSE9SVCBBdGltV2luLCAKLSAg
ICBJTiBVU0hPUlQgQ2FwYWJpbGl0eUluZm8sIAotICAgIElOIFVDSEFSIFJhdGVzW10sCi0gICAg
SU4gVUNIQVIgUmF0ZXNMZW4sCi0gICAgSU4gQk9PTEVBTiBFeHRlbmRlZFJhdGVJZUV4aXN0LAot
ICAgIElOIFVDSEFSIENoYW5uZWxObywKLSAgICBJTiBVQ0hBUiBSc3NpLAotICAgIElOIExBUkdF
X0lOVEVHRVIgVGltZVN0YW1wLAotICAgIElOIFVDSEFSIExlbmd0aFZJRSwKLSAgICBJTiBQTkRJ
U184MDJfMTFfVkFSSUFCTEVfSUVzIHBWSUUpCi17Ci0gICAgVUxPTkcgICBJZHg7Ci0KLSAgICBJ
ZHggPSBCc3NUYWJsZVNlYXJjaChUYWIsIEJzc2lkKTsKLSAgICBpZiAoSWR4ID09IEJTU19OT1Rf
Rk9VTkQpIAotICAgIHsKLSAgICAgICAgaWYgKFRhYi0+QnNzTnIgPj0gTUFYX0xFTl9PRl9CU1Nf
VEFCTEUpCi0gICAgICAgICAgICByZXR1cm4gQlNTX05PVF9GT1VORDsKLSAgICAgICAgSWR4ID0g
VGFiLT5Cc3NOcjsKLSAgICAgICAgQnNzRW50cnlTZXQocEFkLCAmVGFiLT5Cc3NFbnRyeVtJZHhd
LCBCc3NpZCwgU3NpZCwgU3NpZExlbiwgQnNzVHlwZSwgQmVhY29uUGVyaW9kLAotICAgICAgICAg
ICAgICAgICAgICBDZkV4aXN0LCBDZlBhcm0sIEF0aW1XaW4sIENhcGFiaWxpdHlJbmZvLCBSYXRl
cywgUmF0ZXNMZW4sIEV4dGVuZGVkUmF0ZUllRXhpc3QsCi0gICAgICAgICAgICAgICAgICAgIENo
YW5uZWxObywgUnNzaSwgVGltZVN0YW1wLCBMZW5ndGhWSUUsIHBWSUUpOwotICAgICAgICBUYWIt
PkJzc05yKys7Ci0gICAgfSAKLSAgICBlbHNlCi0gICAgewotICAgICAgICBCc3NFbnRyeVNldChw
QWQsICZUYWItPkJzc0VudHJ5W0lkeF0sIEJzc2lkLCBTc2lkLCBTc2lkTGVuLCBCc3NUeXBlLCBC
ZWFjb25QZXJpb2QsCi0gICAgICAgICAgICAgICAgICAgIENmRXhpc3QsIENmUGFybSwgQXRpbVdp
biwgQ2FwYWJpbGl0eUluZm8sIFJhdGVzLCBSYXRlc0xlbiwgRXh0ZW5kZWRSYXRlSWVFeGlzdCwK
LSAgICAgICAgICAgICAgICAgICAgQ2hhbm5lbE5vLCBSc3NpLCBUaW1lU3RhbXAsIExlbmd0aFZJ
RSwgcFZJRSk7Ci0gICAgfQotCS8vREJHUFJJTlRfUkFXKFJUX0RFQlVHX1RFTVAsIiAlcyAgIFdl
cCAlZCBhdXRoICVkIFxuIixTc2lkLCBUYWItPkJzc0VudHJ5W0lkeF0uV2VwU3RhdHVzLCBUYWIt
PkJzc0VudHJ5W0lkeF0uQXV0aE1vZGUpOwotICAgIAotICAgIHJldHVybiBJZHg7Ci19Ci0KLQot
Ly8gSVJRTCA9IERJU1BBVENIX0xFVkVMCi1WT0lEIEJzc1RhYmxlU3NpZFNvcnQoCi0gICAgSU4J
UFJUMjU3MEFEQVBURVIJcEFkLCAKLSAgICBPVVQgQlNTX1RBQkxFICpPdXRUYWIsIAotICAgIElO
ICBDSEFSIFNzaWRbXSwgCi0gICAgSU4gIFVDSEFSIFNzaWRMZW4pIAotewotICAgIElOVCBpOwot
ICAgIAotICAgIEJzc1RhYmxlSW5pdChPdXRUYWIpOwotCi0gICAgZm9yIChpID0gMDsgaSA8IHBB
ZC0+UG9ydENmZy5Cc3NUYWIuQnNzTnI7IGkrKykgCi0gICAgewotICAgICAgICBCU1NfRU5UUlkg
KnBJbkJzcyA9ICZwQWQtPlBvcnRDZmcuQnNzVGFiLkJzc0VudHJ5W2ldOwotICAgICAgICAKLSAg
ICAgICAgaWYgKChwSW5Cc3MtPkJzc1R5cGUgPT0gcEFkLT5Qb3J0Q2ZnLkJzc1R5cGUpICYmIAot
CQkJKChwSW5Cc3MtPlNzaWRMZW49PVNzaWRMZW4pICYmIFJUTVBFcXVhbE1lbW9yeShwSW5Cc3Mt
PlNzaWQsIFNzaWQsIChVTE9ORykgU3NpZExlbikpKQotICAgICAgICB7Ci0gICAgICAgICAgICBC
U1NfRU5UUlkgKnBPdXRCc3MgPSAmT3V0VGFiLT5Cc3NFbnRyeVtPdXRUYWItPkJzc05yXTsKLQkJ
CS8vIE5ldyBmb3IgV1BBMgotCQkJLy8gQ2hlY2sgdGhlIEF1dGhtb2RlIGZpcnN0Ci0JCQlpZiAo
cEFkLT5Qb3J0Q2ZnLkF1dGhNb2RlID49IE5kaXM4MDJfMTFBdXRoTW9kZVdQQSkKLQkJCXsKLQkJ
CQkvLyBDaGVjayBBdXRoTW9kZSBhbmQgQXV0aE1vZGVBdXggZm9yIG1hdGNoaW5nLCBpbiBjYXNl
IEFQIHN1cHBvcnQgZHVhbC1tb2RlCi0JCQkJaWYgKChwQWQtPlBvcnRDZmcuQXV0aE1vZGUgIT0g
cEluQnNzLT5BdXRoTW9kZSkgJiYgKHBBZC0+UG9ydENmZy5BdXRoTW9kZSAhPSBwSW5Cc3MtPkF1
dGhNb2RlQXV4KSkKLQkJCQkJLy8gTm9uZSBtYXRjaGVkCi0JCQkJCWNvbnRpbnVlOwotCQkJCQot
CQkJCS8vIENoZWNrIGNpcGhlciBzdWl0ZSwgQVAgbXVzdCBoYXZlIG1vcmUgc2VjdXJlZCBjaXBo
ZXIgdGhhbiBzdGF0aW9uIHNldHRpbmcKLQkJCQlpZiAoKHBBZC0+UG9ydENmZy5BdXRoTW9kZSA9
PSBOZGlzODAyXzExQXV0aE1vZGVXUEEpIHx8IChwQWQtPlBvcnRDZmcuQXV0aE1vZGUgPT0gTmRp
czgwMl8xMUF1dGhNb2RlV1BBUFNLKSkKLQkJCQl7Ci0JCQkJCS8vIElmIGl0J3Mgbm90IG1peGVk
IG1vZGUsIHdlIHNob3VsZCBvbmx5IGxldCBCU1MgcGFzcyB3aXRoIHRoZSBzYW1lIGVuY3J5cHRp
b24KLQkJCQkJaWYgKHBJbkJzcy0+V1BBLmJNaXhNb2RlID09IEZBTFNFKQotCQkJCQkJaWYgKHBB
ZC0+UG9ydENmZy5XZXBTdGF0dXMgIT0gcEluQnNzLT5XUEEuR3JvdXBDaXBoZXIpCi0JCQkJCQkJ
Y29udGludWU7CQkJCQkJCi0JCQkJCi0JCQkJCS8vIGNoZWNrIGdyb3VwIGNpcGhlcgotCQkJCQlp
ZiAocEFkLT5Qb3J0Q2ZnLldlcFN0YXR1cyA8IHBJbkJzcy0+V1BBLkdyb3VwQ2lwaGVyKQotCQkJ
CQkJY29udGludWU7Ci0KLQkJCQkJLy8gY2hlY2sgcGFpcndpc2UgY2lwaGVyLCBza2lwIGlmIG5v
bmUgbWF0Y2hlZAotCQkJCQkvLyBJZiBwcm9maWxlIHNldCB0byBBRVMsIGxldCBpdCBwYXNzIHdp
dGhvdXQgcXVlc3Rpb24uCi0JCQkJCS8vIElmIHByb2ZpbGUgc2V0IHRvIFRLSVAsIHdlIG11c3Qg
ZmluZCBvbmUgbWF0ZWNoZWQKLQkJCQkJaWYgKChwQWQtPlBvcnRDZmcuV2VwU3RhdHVzID09IE5k
aXM4MDJfMTFFbmNyeXB0aW9uMkVuYWJsZWQpICYmIAotCQkJCQkJKHBBZC0+UG9ydENmZy5XZXBT
dGF0dXMgIT0gcEluQnNzLT5XUEEuUGFpckNpcGhlcikgJiYgCi0JCQkJCQkocEFkLT5Qb3J0Q2Zn
LldlcFN0YXR1cyAhPSBwSW5Cc3MtPldQQS5QYWlyQ2lwaGVyQXV4KSkKLQkJCQkJCWNvbnRpbnVl
OwkJCQkJCQotCQkJCX0KLQkJCQllbHNlIGlmICgocEFkLT5Qb3J0Q2ZnLkF1dGhNb2RlID09IE5k
aXM4MDJfMTFBdXRoTW9kZVdQQTIpIHx8IChwQWQtPlBvcnRDZmcuQXV0aE1vZGUgPT0gTmRpczgw
Ml8xMUF1dGhNb2RlV1BBMlBTSykpCi0JCQkJewotCQkJCQkvLyBJZiBpdCdzIG5vdCBtaXhlZCBt
b2RlLCB3ZSBzaG91bGQgb25seSBsZXQgQlNTIHBhc3Mgd2l0aCB0aGUgc2FtZSBlbmNyeXB0aW9u
Ci0JCQkJCWlmIChwSW5Cc3MtPldQQTIuYk1peE1vZGUgPT0gRkFMU0UpCi0JCQkJCQlpZiAocEFk
LT5Qb3J0Q2ZnLldlcFN0YXR1cyAhPSBwSW5Cc3MtPldQQTIuR3JvdXBDaXBoZXIpCi0JCQkJCQkJ
Y29udGludWU7CQkJCQkJCi0JCQkJCi0JCQkJCS8vIGNoZWNrIGdyb3VwIGNpcGhlcgotCQkJCQlp
ZiAocEFkLT5Qb3J0Q2ZnLldlcFN0YXR1cyA8IHBJbkJzcy0+V1BBMi5Hcm91cENpcGhlcikKLQkJ
CQkJCWNvbnRpbnVlOwotCi0JCQkJCS8vIGNoZWNrIHBhaXJ3aXNlIGNpcGhlciwgc2tpcCBpZiBu
b25lIG1hdGNoZWQKLQkJCQkJLy8gSWYgcHJvZmlsZSBzZXQgdG8gQUVTLCBsZXQgaXQgcGFzcyB3
aXRob3V0IHF1ZXN0aW9uLgotCQkJCQkvLyBJZiBwcm9maWxlIHNldCB0byBUS0lQLCB3ZSBtdXN0
IGZpbmQgb25lIG1hdGVjaGVkCi0JCQkJCWlmICgocEFkLT5Qb3J0Q2ZnLldlcFN0YXR1cyA9PSBO
ZGlzODAyXzExRW5jcnlwdGlvbjJFbmFibGVkKSAmJiAKLQkJCQkJCShwQWQtPlBvcnRDZmcuV2Vw
U3RhdHVzICE9IHBJbkJzcy0+V1BBMi5QYWlyQ2lwaGVyKSAmJiAKLQkJCQkJCShwQWQtPlBvcnRD
ZmcuV2VwU3RhdHVzICE9IHBJbkJzcy0+V1BBMi5QYWlyQ2lwaGVyQXV4KSkKLQkJCQkJCWNvbnRp
bnVlOwkJCQkJCQotCQkJCX0KLQkJCX0JCQkKLQkJCS8vIEJzcyBUeXBlIG1hdGNoZWQsIFNTSUQg
bWF0Y2hlZC4gCi0JCQkvLyBXZSB3aWxsIGNoZWNrIHdlcHN0YXR1cyBmb3IgcXVhbGlmaWNhdGlv
biBCc3MKLQkJCWVsc2UgaWYgKHBBZC0+UG9ydENmZy5XZXBTdGF0dXMgIT0gcEluQnNzLT5XZXBT
dGF0dXMpCi0JCQkJCWNvbnRpbnVlOwotCQkJCi0JCQkvLyBTaW5jZSB0aGUgQVAgaXMgdXNpbmcg
aGlkZGVuIFNTSUQsIGFuZCB3ZSBhcmUgdHJ5aW5nIHRvIGNvbm5lY3QgdG8gQU5ZCi0JCQkvLyBJ
dCBkZWZpbml0ZWx5IHdpbGwgZmFpbC4gU28sIHNraXAgaXQuCi0JCQkvLyBDQ1ggYWxzbyByZXF1
aXJlIG5vdCBldmVuIHRyeSB0byBjb25uZWN0IGl0ISEKLQkJCWlmIChTc2lkTGVuID09IDApCi0J
CQkJY29udGludWU7Ci0JCQkKLSAgICAgICAgICAgIC8vIGNvcHkgbWF0Y2hpbmcgQlNTIGZyb20g
SW5UYWIgdG8gT3V0VGFiCi0gICAgICAgICAgICBOZGlzTW92ZU1lbW9yeShwT3V0QnNzLCBwSW5C
c3MsIHNpemVvZihCU1NfRU5UUlkpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgT3V0VGFi
LT5Cc3NOcisrOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKChwSW5Cc3MtPkJzc1R5cGUg
PT0gcEFkLT5Qb3J0Q2ZnLkJzc1R5cGUpICYmIChTc2lkTGVuID09IDApKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBCU1NfRU5UUlkgKnBPdXRCc3MgPSAmT3V0VGFiLT5Cc3NFbnRyeVtPdXRUYWIt
PkJzc05yXTsKLQotCQkJLy8gTmV3IGZvciBXUEEyCi0JCQkvLyBDaGVjayB0aGUgQXV0aG1vZGUg
Zmlyc3QKLQkJCWlmIChwQWQtPlBvcnRDZmcuQXV0aE1vZGUgPj0gTmRpczgwMl8xMUF1dGhNb2Rl
V1BBKQotCQkJewotCQkJCS8vIENoZWNrIEF1dGhNb2RlIGFuZCBBdXRoTW9kZUF1eCBmb3IgbWF0
Y2hpbmcsIGluIGNhc2UgQVAgc3VwcG9ydCBkdWFsLW1vZGUKLQkJCQlpZiAoKHBBZC0+UG9ydENm
Zy5BdXRoTW9kZSAhPSBwSW5Cc3MtPkF1dGhNb2RlKSAmJiAocEFkLT5Qb3J0Q2ZnLkF1dGhNb2Rl
ICE9IHBJbkJzcy0+QXV0aE1vZGVBdXgpKQotCQkJCQkvLyBOb25lIG1hdGNoZWQKLQkJCQkJY29u
dGludWU7Ci0JCQkKLQkJCQkvLyBDaGVjayBjaXBoZXIgc3VpdGUsIEFQIG11c3QgaGF2ZSBtb3Jl
IHNlY3VyZWQgY2lwaGVyIHRoYW4gc3RhdGlvbiBzZXR0aW5nCi0JCQkJaWYgKChwQWQtPlBvcnRD
ZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBKSB8fCAocEFkLT5Qb3J0Q2ZnLkF1
dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQVBTSykpCi0JCQkJewotCQkJCQkvLyBJZiBp
dCdzIG5vdCBtaXhlZCBtb2RlLCB3ZSBzaG91bGQgb25seSBsZXQgQlNTIHBhc3Mgd2l0aCB0aGUg
c2FtZSBlbmNyeXB0aW9uCi0JCQkJCWlmIChwSW5Cc3MtPldQQS5iTWl4TW9kZSA9PSBGQUxTRSkK
LQkJCQkJCWlmIChwQWQtPlBvcnRDZmcuV2VwU3RhdHVzICE9IHBJbkJzcy0+V1BBLkdyb3VwQ2lw
aGVyKQotCQkJCQkJCWNvbnRpbnVlOwkJCQkJCQotCQkJCQotCQkJCQkvLyBjaGVjayBncm91cCBj
aXBoZXIKLQkJCQkJaWYgKHBBZC0+UG9ydENmZy5XZXBTdGF0dXMgPCBwSW5Cc3MtPldQQS5Hcm91
cENpcGhlcikKLQkJCQkJCWNvbnRpbnVlOwotICAgICAgICAgICAgCi0JCQkJCS8vIGNoZWNrIHBh
aXJ3aXNlIGNpcGhlciwgc2tpcCBpZiBub25lIG1hdGNoZWQKLQkJCQkJLy8gSWYgcHJvZmlsZSBz
ZXQgdG8gQUVTLCBsZXQgaXQgcGFzcyB3aXRob3V0IHF1ZXN0aW9uLgotCQkJCQkvLyBJZiBwcm9m
aWxlIHNldCB0byBUS0lQLCB3ZSBtdXN0IGZpbmQgb25lIG1hdGVjaGVkCi0JCQkJCWlmICgocEFk
LT5Qb3J0Q2ZnLldlcFN0YXR1cyA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjJFbmFibGVkKSAmJiAK
LQkJCQkJCShwQWQtPlBvcnRDZmcuV2VwU3RhdHVzICE9IHBJbkJzcy0+V1BBLlBhaXJDaXBoZXIp
ICYmIAotCQkJCQkJKHBBZC0+UG9ydENmZy5XZXBTdGF0dXMgIT0gcEluQnNzLT5XUEEuUGFpckNp
cGhlckF1eCkpCi0JCQkJCQljb250aW51ZTsJCQkJCQkKLQkJCQl9Ci0JCQkJZWxzZSBpZiAoKHBB
ZC0+UG9ydENmZy5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEEyKSB8fCAocEFkLT5Q
b3J0Q2ZnLkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQTJQU0spKQotCQkJCXsKLQkJ
CQkJLy8gSWYgaXQncyBub3QgbWl4ZWQgbW9kZSwgd2Ugc2hvdWxkIG9ubHkgbGV0IEJTUyBwYXNz
IHdpdGggdGhlIHNhbWUgZW5jcnlwdGlvbgotCQkJCQlpZiAocEluQnNzLT5XUEEyLmJNaXhNb2Rl
ID09IEZBTFNFKQotCQkJCQkJaWYgKHBBZC0+UG9ydENmZy5XZXBTdGF0dXMgIT0gcEluQnNzLT5X
UEEyLkdyb3VwQ2lwaGVyKQotCQkJCQkJCWNvbnRpbnVlOwotCQkJCQotCQkJCQkvLyBjaGVjayBn
cm91cCBjaXBoZXIKLQkJCQkJaWYgKHBBZC0+UG9ydENmZy5XZXBTdGF0dXMgPCBwSW5Cc3MtPldQ
QTIuR3JvdXBDaXBoZXIpCi0JCQkJCQljb250aW51ZTsKLQotCQkJCQkvLyBjaGVjayBwYWlyd2lz
ZSBjaXBoZXIsIHNraXAgaWYgbm9uZSBtYXRjaGVkCi0JCQkJCS8vIElmIHByb2ZpbGUgc2V0IHRv
IEFFUywgbGV0IGl0IHBhc3Mgd2l0aG91dCBxdWVzdGlvbi4KLQkJCQkJLy8gSWYgcHJvZmlsZSBz
ZXQgdG8gVEtJUCwgd2UgbXVzdCBmaW5kIG9uZSBtYXRlY2hlZAotCQkJCQlpZiAoKHBBZC0+UG9y
dENmZy5XZXBTdGF0dXMgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24yRW5hYmxlZCkgJiYgCi0JCQkJ
CQkocEFkLT5Qb3J0Q2ZnLldlcFN0YXR1cyAhPSBwSW5Cc3MtPldQQTIuUGFpckNpcGhlcikgJiYg
Ci0JCQkJCQkocEFkLT5Qb3J0Q2ZnLldlcFN0YXR1cyAhPSBwSW5Cc3MtPldQQTIuUGFpckNpcGhl
ckF1eCkpCi0JCQkJCQljb250aW51ZTsJCQkJCQkKLQkJCQl9Ci0JCQl9Ci0JCQkvLyBCc3MgVHlw
ZSBtYXRjaGVkLCBTU0lEIG1hdGNoZWQuIAotCQkJLy8gV2Ugd2lsbCBjaGVjayB3ZXBzdGF0dXMg
Zm9yIHF1YWxpZmljYXRpb24gQnNzCi0JCQllbHNlIGlmIChwQWQtPlBvcnRDZmcuV2VwU3RhdHVz
ICE9IHBJbkJzcy0+V2VwU3RhdHVzKQotCQkJCQljb250aW51ZTsKLQkJCQotICAgICAgICAgICAg
Ly8gY29weSBtYXRjaGluZyBCU1MgZnJvbSBJblRhYiB0byBPdXRUYWIKLSAgICAgICAgICAgIE5k
aXNNb3ZlTWVtb3J5KHBPdXRCc3MsIHBJbkJzcywgc2l6ZW9mKEJTU19FTlRSWSkpOwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBPdXRUYWItPkJzc05yKys7Ci0gICAgICAgIH0KLQkJCi0JCWlm
IChPdXRUYWItPkJzc05yID49IE1BWF9MRU5fT0ZfQlNTX1RBQkxFKQotCQkJYnJlYWs7Ci0JCQot
ICAgIH0KLSAgICBCc3NUYWJsZVNvcnRCeVJzc2koT3V0VGFiKTsKLX0KLQotCi0KLQotLy8gSVJR
TCA9IERJU1BBVENIX0xFVkVMCi1WT0lEIEJzc1RhYmxlU29ydEJ5UnNzaSgKLSAgICBJTiBPVVQg
QlNTX1RBQkxFICpPdXRUYWIpIAotewotICAgIElOVCAgICAgICBpLCBqOwotICAgIEJTU19FTlRS
WSBUbXBCc3M7Ci0KLSAgICBmb3IgKGkgPSAwOyBpIDwgT3V0VGFiLT5Cc3NOciAtIDE7IGkrKykg
Ci0gICAgewotICAgICAgICBmb3IgKGogPSBpKzE7IGogPCBPdXRUYWItPkJzc05yOyBqKyspIAot
ICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoT3V0VGFiLT5Cc3NFbnRyeVtqXS5Sc3NpID4gT3V0
VGFiLT5Cc3NFbnRyeVtpXS5Sc3NpKSAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBO
ZGlzTW92ZU1lbW9yeSgmVG1wQnNzLCAmT3V0VGFiLT5Cc3NFbnRyeVtqXSwgc2l6ZW9mKEJTU19F
TlRSWSkpOwotICAgICAgICAgICAgICAgIE5kaXNNb3ZlTWVtb3J5KCZPdXRUYWItPkJzc0VudHJ5
W2pdLCAmT3V0VGFiLT5Cc3NFbnRyeVtpXSwgc2l6ZW9mKEJTU19FTlRSWSkpOwotICAgICAgICAg
ICAgICAgIE5kaXNNb3ZlTWVtb3J5KCZPdXRUYWItPkJzc0VudHJ5W2ldLCAmVG1wQnNzLCBzaXpl
b2YoQlNTX0VOVFJZKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLWV4
dGVybglVQ0hBUglSU05fT1VJW107CQkvLyBpbiBzYW5pdHkuYwotCi1WT0lECQlCc3NDaXBoZXJQ
YXJzZSgKLQlJTiBPVVQJUEJTU19FTlRSWQlwQnNzKQotewotI2lmIDEKLQlQQkVBQ09OX0VJRF9T
VFJVQ1QJCQkJcEVpZDsKLQlQVUNIQVIJCQkJCQkJcFRtcDsKLQlQUlNOX0lFX0hFQURFUl9TVFJV
Q1QJCQlwUnNuSGVhZGVyOwotCVBDSVBIRVJfU1VJVEVfU1RSVUNUCQkJcENpcGhlcjsKLQlQQUtN
X1NVSVRFX1NUUlVDVAkJCQlwQUtNOwotCVVTSE9SVAkJCQkJCQlDb3VudDsKLQlJTlQJCQkJCQkJ
CUxlbmd0aDsKLQlORElTXzgwMl8xMV9FTkNSWVBUSU9OX1NUQVRVUwlUbXBDaXBoZXI7Ci0KLQkv
LyBTZXQgZGVmYXVsdCB0byBkaXNhYmxlICYgb3BlbiBhdXRoZW50aWNhdGlvbiBiZWZvcmUgcGFy
c2luZyB2YXJpYWJsZSBJRQotCXBCc3MtPldlcFN0YXR1cyAgICAgPSBOZGlzODAyXzExV0VQRGlz
YWJsZWQ7Ci0JcEJzcy0+QXV0aE1vZGUgICAgICA9IE5kaXM4MDJfMTFBdXRoTW9kZU9wZW47Ci0J
cEJzcy0+QXV0aE1vZGVBdXggICA9IE5kaXM4MDJfMTFBdXRoTW9kZU9wZW47Ci0KLQkvLyBJbml0
IFdQQSBzZXR0aW5nCi0JcEJzcy0+V1BBLlBhaXJDaXBoZXIgICAgPSBOZGlzODAyXzExV0VQRGlz
YWJsZWQ7Ci0JcEJzcy0+V1BBLlBhaXJDaXBoZXJBdXggPSBOZGlzODAyXzExV0VQRGlzYWJsZWQ7
Ci0JcEJzcy0+V1BBLkdyb3VwQ2lwaGVyICAgPSBOZGlzODAyXzExV0VQRGlzYWJsZWQ7Ci0JcEJz
cy0+V1BBLlJzbkNhcGFiaWxpdHkgPSAwOwotCXBCc3MtPldQQS5iTWl4TW9kZSAgICAgID0gRkFM
U0U7Ci0KLQkvLyBJbml0IFdQQTIgc2V0dGluZwotCXBCc3MtPldQQTIuUGFpckNpcGhlciAgICA9
IE5kaXM4MDJfMTFXRVBEaXNhYmxlZDsKLQlwQnNzLT5XUEEyLlBhaXJDaXBoZXJBdXggPSBOZGlz
ODAyXzExV0VQRGlzYWJsZWQ7Ci0JcEJzcy0+V1BBMi5Hcm91cENpcGhlciAgID0gTmRpczgwMl8x
MVdFUERpc2FibGVkOwotCXBCc3MtPldQQTIuUnNuQ2FwYWJpbGl0eSA9IDA7Ci0JcEJzcy0+V1BB
Mi5iTWl4TW9kZSAgICAgID0gRkFMU0U7Ci0JTGVuZ3RoID0gKElOVCkgcEJzcy0+VmFySUVMZW47
Ci0KLQl3aGlsZSAoTGVuZ3RoID4gMCkKLQl7Ci0JCS8vIFBhcnNlIGNpcGhlciBzdWl0ZSBiYXNl
IG9uIFdQQTEgJiBXUEEyLCB0aGV5IHNob3VsZCBiZSBwYXJzZWQgZGlmZmVyZW50bHkKLQkJcFRt
cCA9ICgoUFVDSEFSKSBwQnNzLT5WYXJJRXMpICsgcEJzcy0+VmFySUVMZW4gLSBMZW5ndGg7Ci0J
CXBFaWQgPSAoUEJFQUNPTl9FSURfU1RSVUNUKSBwVG1wOwotCQlzd2l0Y2ggKHBFaWQtPkVpZCkK
LQkJewotCQkJY2FzZSBJRV9XUEE6Ci0JCQkJLy8gU2tpcCBPVUksIHZlcnNpb24sIGFuZCBtdWx0
aWNhc3Qgc3VpdGUKLQkJCQkvLyBUaGlzIHBhcnQgc2hvdWxkIGJlIGltcHJvdmVkIGluIHRoZSBm
dXR1cmUgd2hlbiBBUCBzdXBwb3J0ZWQgbXVsdGlwbGUgY2lwaGVyIHN1aXRlLgotCQkJCS8vIEZv
ciBub3csIGl0J3MgT0sgc2luY2UgYWxtb3N0IGFsbCBBUHMgaGF2ZSBmaXhlZCBjaXBoZXIgc3Vp
dGUgc3VwcG9ydGVkLgotCQkJCS8vIHBUbXAgPSAoUFVDSEFSKSBwRWlkLT5PY3RldDsKLQkJCQlw
VG1wICAgKz0gMTE7Ci0KLQkJCQkvLyBDaXBoZXIgU3VpdGUgU2VsZWN0b3JzIGZyb20gU3BlYyBQ
ODAyLjExaS9EMy4yIFAyNi4KLQkJCQkvLyAgVmFsdWUgICAgICBNZWFuaW5nCi0JCQkJLy8gIDAg
ICAgICAgICAgIE5vbmUgCi0JCQkJLy8gIDEgICAgICAgICAgIFdFUC00MAotCQkJCS8vICAyICAg
ICAgICAgICBUa2lwCi0JCQkJLy8gIDMgICAgICAgICAgIFdSQVAKLQkJCQkvLyAgNCAgICAgICAg
ICAgQUVTCi0JCQkJLy8gIDUgICAgICAgICAgIFdFUC0xMDQKLQkJCQkvLyBQYXJzZSBncm91cCBj
aXBoZXIKLQkJCQlzd2l0Y2ggKCpwVG1wKQotCQkJCXsKLQkJCQkJY2FzZSAxOgotCQkJCQljYXNl
IDU6CS8vIEFsdGhvdWdoIFdFUCBpcyBub3QgYWxsb3dlZCBpbiBXUEEgcmVsYXRlZCBhdXRoIG1v
ZGUsIHdlIHBhcnNlIGl0IGFueXdheQotCQkJCQkJcEJzcy0+V1BBLkdyb3VwQ2lwaGVyID0gTmRp
czgwMl8xMUVuY3J5cHRpb24xRW5hYmxlZDsKLQkJCQkJCWJyZWFrOwotCQkJCQljYXNlIDI6Ci0J
CQkJCQlwQnNzLT5XUEEuR3JvdXBDaXBoZXIgPSBOZGlzODAyXzExRW5jcnlwdGlvbjJFbmFibGVk
OwotCQkJCQkJYnJlYWs7Ci0JCQkJCWNhc2UgNDoKLQkJCQkJCXBCc3MtPldQQS5Hcm91cENpcGhl
ciA9IE5kaXM4MDJfMTFFbmNyeXB0aW9uM0VuYWJsZWQ7Ci0JCQkJCQlicmVhazsKLQkJCQkJZGVm
YXVsdDoKLQkJCQkJCWJyZWFrOwotCQkJCX0KLQkJCQkvLyBudW1iZXIgb2YgdW5pY2FzdCBzdWl0
ZQotCQkJCXBUbXAgICArPSAxOwotCQkJCQotCQkJCS8vIHNraXAgYWxsIHVuaWNhc3QgY2lwaGVy
IHN1aXRlcwotCQkJCUNvdW50ID0gKihQVVNIT1JUKSBwVG1wOwkJCQkKLQkJCQlwVG1wICAgKz0g
c2l6ZW9mKFVTSE9SVCk7Ci0KLQkJCQkvLyBQYXJzaW5nIGFsbCB1bmljYXN0IGNpcGhlciBzdWl0
ZQotCQkJCXdoaWxlIChDb3VudCA+IDApCi0JCQkJewotCQkJCQkvLyBTa2lwIE9VSQotCQkJCQlw
VG1wICs9IDM7Ci0JCQkJCVRtcENpcGhlciA9IE5kaXM4MDJfMTFXRVBEaXNhYmxlZDsKLQkJCQkJ
c3dpdGNoICgqcFRtcCkKLQkJCQkJewotCQkJCQkJY2FzZSAxOgotCQkJCQkJY2FzZSA1OiAvLyBB
bHRob3VnaCBXRVAgaXMgbm90IGFsbG93ZWQgaW4gV1BBIHJlbGF0ZWQgYXV0aCBtb2RlLCB3ZSBw
YXJzZSBpdCBhbnl3YXkKLQkJCQkJCQlUbXBDaXBoZXIgPSBOZGlzODAyXzExRW5jcnlwdGlvbjFF
bmFibGVkOwotCQkJCQkJCWJyZWFrOwotCQkJCQkJY2FzZSAyOgotCQkJCQkJCVRtcENpcGhlciA9
IE5kaXM4MDJfMTFFbmNyeXB0aW9uMkVuYWJsZWQ7Ci0JCQkJCQkJYnJlYWs7Ci0JCQkJCQljYXNl
IDQ6Ci0JCQkJCQkJVG1wQ2lwaGVyID0gTmRpczgwMl8xMUVuY3J5cHRpb24zRW5hYmxlZDsKLQkJ
CQkJCQlicmVhazsKLQkJCQkJCWRlZmF1bHQ6Ci0JCQkJCQkJYnJlYWs7Ci0JCQkJCX0KLQkJCQkJ
aWYgKFRtcENpcGhlciA+IHBCc3MtPldQQS5QYWlyQ2lwaGVyKQotCQkJCQl7Ci0JCQkJCQkvLyBN
b3ZlIHRoZSBsb3dlciBjaXBoZXIgc3VpdGUgdG8gUGFpckNpcGhlckF1eAotCQkJCQkJcEJzcy0+
V1BBLlBhaXJDaXBoZXJBdXggPSBwQnNzLT5XUEEuUGFpckNpcGhlcjsKLQkJCQkJCXBCc3MtPldQ
QS5QYWlyQ2lwaGVyICAgID0gVG1wQ2lwaGVyOwotCQkJCQl9Ci0JCQkJCWVsc2UKLQkJCQkJewot
CQkJCQkJcEJzcy0+V1BBLlBhaXJDaXBoZXJBdXggPSBUbXBDaXBoZXI7Ci0JCQkJCX0KLQkJCQkJ
cFRtcCsrOwotCQkJCQlDb3VudC0tOwotCQkJCX0KLQkJCQkKLQkJCQkvLyA0LiBnZXQgQUtNIHN1
aXRlIGNvdW50cwotCQkJCUNvdW50ICAgPSAqKFBVU0hPUlQpIHBUbXA7Ci0JCQkJcFRtcCAgICs9
IHNpemVvZihVU0hPUlQpOwotCQkJCXBUbXAgICArPSAzOwotCQkJCQotCQkJCXN3aXRjaCAoKnBU
bXApCi0JCQkJewotCQkJCQljYXNlIDE6Ci0JCQkJCQkvLyBTZXQgQVAgc3VwcG9ydCBXUEEgbW9k
ZQotCQkJCQkJaWYgKHBCc3MtPkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZU9wZW4pCi0J
CQkJCQkJcEJzcy0+QXV0aE1vZGUgPSBOZGlzODAyXzExQXV0aE1vZGVXUEE7Ci0JCQkJCQllbHNl
Ci0JCQkJCQkJcEJzcy0+QXV0aE1vZGVBdXggPSBOZGlzODAyXzExQXV0aE1vZGVXUEE7Ci0JCQkJ
CQlicmVhazsKLQkJCQkJY2FzZSAyOgotCQkJCQkJLy8gU2V0IEFQIHN1cHBvcnQgV1BBIG1vZGUK
LQkJCQkJCWlmIChwQnNzLT5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVPcGVuKQotCQkJ
CQkJCXBCc3MtPkF1dGhNb2RlID0gTmRpczgwMl8xMUF1dGhNb2RlV1BBUFNLOwotCQkJCQkJZWxz
ZQotCQkJCQkJCXBCc3MtPkF1dGhNb2RlQXV4ID0gTmRpczgwMl8xMUF1dGhNb2RlV1BBUFNLOwot
CQkJCQkJYnJlYWs7Ci0JCQkJCWRlZmF1bHQ6Ci0JCQkJCQlicmVhazsKLQkJCQl9Ci0JCQkJcFRt
cCAgICs9IDE7Ci0KLQkJCQkvLyBGaXhlZCBmb3IgV1BBLU5vbmUKLQkJCQlpZiAocEJzcy0+QnNz
VHlwZSA9PSBCU1NfSU5ERVApCi0JCQkJewotCQkJCQlwQnNzLT5BdXRoTW9kZSAgICA9IE5kaXM4
MDJfMTFBdXRoTW9kZVdQQU5vbmU7Ci0JCQkJCXBCc3MtPkF1dGhNb2RlQXV4ID0gTmRpczgwMl8x
MUF1dGhNb2RlV1BBTm9uZTsKLQkJCQkJcEJzcy0+V2VwU3RhdHVzICAgPSBwQnNzLT5XUEEuR3Jv
dXBDaXBoZXI7Ci0JCQkJCS8vIFBhdGNoZWQgYnVncyBmb3Igb2xkIGRyaXZlcgotCQkJCQlpZiAo
cEJzcy0+V1BBLlBhaXJDaXBoZXJBdXggPT0gTmRpczgwMl8xMVdFUERpc2FibGVkKQotCQkJCQkJ
cEJzcy0+V1BBLlBhaXJDaXBoZXJBdXggPSBwQnNzLT5XUEEuR3JvdXBDaXBoZXI7Ci0JCQkJfQot
CQkJCWVsc2UKLQkJCQkJcEJzcy0+V2VwU3RhdHVzICAgPSBwQnNzLT5XUEEuUGFpckNpcGhlcjsJ
CQkJCQotCQkJCQotCQkJCS8vIENoZWNrIHRoZSBQYWlyICYgR3JvdXAsIGlmIGRpZmZlcmVudCwg
dHVybiBvbiBtaXhlZCBtb2RlIGZsYWcKLQkJCQlpZiAocEJzcy0+V1BBLkdyb3VwQ2lwaGVyICE9
IHBCc3MtPldQQS5QYWlyQ2lwaGVyKQotCQkJCQlwQnNzLT5XUEEuYk1peE1vZGUgPSBUUlVFOwot
CQkJCQotCQkJCWJyZWFrOwotCi0JCQljYXNlIElFX1JTTjoKLQkJCQlwUnNuSGVhZGVyID0gKFBS
U05fSUVfSEVBREVSX1NUUlVDVCkgcFRtcDsKLQkJCQkKLQkJCQkvLyAwLiBWZXJzaW9uIG11c3Qg
YmUgMQotCQkJCWlmIChwUnNuSGVhZGVyLT5WZXJzaW9uICE9IDEpCi0JCQkJCWJyZWFrOwotCQkJ
CXBUbXAgICArPSBzaXplb2YoUlNOX0lFX0hFQURFUl9TVFJVQ1QpOwotCi0JCQkJLy8gMS4gQ2hl
Y2sgZ3JvdXAgY2lwaGVyCi0JCQkJcENpcGhlciA9IChQQ0lQSEVSX1NVSVRFX1NUUlVDVCkgcFRt
cDsKLQkJCQlpZiAoIVJUTVBFcXVhbE1lbW9yeShwVG1wLCBSU05fT1VJLCAzKSkKLQkJCQkJYnJl
YWs7Ci0KLQkJCQkvLyBQYXJzZSBncm91cCBjaXBoZXIKLQkJCQlzd2l0Y2ggKHBDaXBoZXItPlR5
cGUpCi0JCQkJewotCQkJCQljYXNlIDE6Ci0JCQkJCWNhc2UgNToJLy8gQWx0aG91Z2ggV0VQIGlz
IG5vdCBhbGxvd2VkIGluIFdQQSByZWxhdGVkIGF1dGggbW9kZSwgd2UgcGFyc2UgaXQgYW55d2F5
Ci0JCQkJCQlwQnNzLT5XUEEyLkdyb3VwQ2lwaGVyID0gTmRpczgwMl8xMUVuY3J5cHRpb24xRW5h
YmxlZDsKLQkJCQkJCWJyZWFrOwotCQkJCQljYXNlIDI6Ci0JCQkJCQlwQnNzLT5XUEEyLkdyb3Vw
Q2lwaGVyID0gTmRpczgwMl8xMUVuY3J5cHRpb24yRW5hYmxlZDsKLQkJCQkJCWJyZWFrOwotCQkJ
CQljYXNlIDQ6Ci0JCQkJCQlwQnNzLT5XUEEyLkdyb3VwQ2lwaGVyID0gTmRpczgwMl8xMUVuY3J5
cHRpb24zRW5hYmxlZDsKLQkJCQkJCWJyZWFrOwotCQkJCQlkZWZhdWx0OgotCQkJCQkJYnJlYWs7
Ci0JCQkJfQotCQkJCS8vIHNldCB0byBjb3JyZWN0IG9mZnNldCBmb3IgbmV4dCBwYXJzaW5nCi0J
CQkJcFRtcCAgICs9IHNpemVvZihDSVBIRVJfU1VJVEVfU1RSVUNUKTsKLQotCQkJCS8vIDIuIEdl
dCBwYWlyd2lzZSBjaXBoZXIgY291bnRzCi0JCQkJQ291bnQgPSAqKFBVU0hPUlQpIHBUbXA7Ci0J
CQkJcFRtcCAgICs9IHNpemVvZihVU0hPUlQpOwotCQkJCQotCQkJCS8vIDMuIEdldCBwYWlyd2lz
ZSBjaXBoZXIKLQkJCQkvLyBQYXJzaW5nIGFsbCB1bmljYXN0IGNpcGhlciBzdWl0ZQotCQkJCXdo
aWxlIChDb3VudCA+IDApCi0JCQkJewotCQkJCQkvLyBTa2lwIE9VSQotCQkJCQlwQ2lwaGVyID0g
KFBDSVBIRVJfU1VJVEVfU1RSVUNUKSBwVG1wOwotCQkJCQlUbXBDaXBoZXIgPSBOZGlzODAyXzEx
V0VQRGlzYWJsZWQ7Ci0JCQkJCXN3aXRjaCAocENpcGhlci0+VHlwZSkKLQkJCQkJewotCQkJCQkJ
Y2FzZSAxOgotCQkJCQkJY2FzZSA1OiAvLyBBbHRob3VnaCBXRVAgaXMgbm90IGFsbG93ZWQgaW4g
V1BBIHJlbGF0ZWQgYXV0aCBtb2RlLCB3ZSBwYXJzZSBpdCBhbnl3YXkKLQkJCQkJCQlUbXBDaXBo
ZXIgPSBOZGlzODAyXzExRW5jcnlwdGlvbjFFbmFibGVkOwotCQkJCQkJCWJyZWFrOwotCQkJCQkJ
Y2FzZSAyOgotCQkJCQkJCVRtcENpcGhlciA9IE5kaXM4MDJfMTFFbmNyeXB0aW9uMkVuYWJsZWQ7
Ci0JCQkJCQkJYnJlYWs7Ci0JCQkJCQljYXNlIDQ6Ci0JCQkJCQkJVG1wQ2lwaGVyID0gTmRpczgw
Ml8xMUVuY3J5cHRpb24zRW5hYmxlZDsKLQkJCQkJCQlicmVhazsKLQkJCQkJCWRlZmF1bHQ6Ci0J
CQkJCQkJYnJlYWs7Ci0JCQkJCX0KLQkJCQkJaWYgKFRtcENpcGhlciA+IHBCc3MtPldQQTIuUGFp
ckNpcGhlcikKLQkJCQkJewotCQkJCQkJLy8gTW92ZSB0aGUgbG93ZXIgY2lwaGVyIHN1aXRlIHRv
IFBhaXJDaXBoZXJBdXgKLQkJCQkJCXBCc3MtPldQQTIuUGFpckNpcGhlckF1eCA9IHBCc3MtPldQ
QTIuUGFpckNpcGhlcjsKLQkJCQkJCXBCc3MtPldQQTIuUGFpckNpcGhlciAgICA9IFRtcENpcGhl
cjsKLQkJCQkJfQotCQkJCQllbHNlCi0JCQkJCXsKLQkJCQkJCXBCc3MtPldQQTIuUGFpckNpcGhl
ckF1eCA9IFRtcENpcGhlcjsKLQkJCQkJfQotCQkJCQlwVG1wICs9IHNpemVvZihDSVBIRVJfU1VJ
VEVfU1RSVUNUKTsKLQkJCQkJQ291bnQtLTsKLQkJCQl9Ci0JCQkJCi0JCQkJLy8gNC4gZ2V0IEFL
TSBzdWl0ZSBjb3VudHMKLQkJCQlDb3VudCAgID0gKihQVVNIT1JUKSBwVG1wOwotCQkJCXBUbXAg
ICArPSBzaXplb2YoVVNIT1JUKTsKLQotCQkJCS8vIDUuIEdldCBBS00gY2lwaGVycwotCQkJCXBB
S00gPSAoUEFLTV9TVUlURV9TVFJVQ1QpIHBUbXA7Ci0JCQkJaWYgKCFSVE1QRXF1YWxNZW1vcnko
cFRtcCwgUlNOX09VSSwgMykpCi0JCQkJCWJyZWFrOwotCi0JCQkJc3dpdGNoIChwQUtNLT5UeXBl
KQotCQkJCXsKLQkJCQkJY2FzZSAxOgotCQkJCQkJLy8gU2V0IEFQIHN1cHBvcnQgV1BBIG1vZGUK
LQkJCQkJCWlmIChwQnNzLT5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVPcGVuKQotCQkJ
CQkJCXBCc3MtPkF1dGhNb2RlID0gTmRpczgwMl8xMUF1dGhNb2RlV1BBMjsKLQkJCQkJCWVsc2UK
LQkJCQkJCQlwQnNzLT5BdXRoTW9kZUF1eCA9IE5kaXM4MDJfMTFBdXRoTW9kZVdQQTI7Ci0JCQkJ
CQlicmVhazsKLQkJCQkJY2FzZSAyOgotCQkJCQkJLy8gU2V0IEFQIHN1cHBvcnQgV1BBIG1vZGUK
LQkJCQkJCWlmIChwQnNzLT5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVPcGVuKQotCQkJ
CQkJCXBCc3MtPkF1dGhNb2RlID0gTmRpczgwMl8xMUF1dGhNb2RlV1BBMlBTSzsKLQkJCQkJCWVs
c2UKLQkJCQkJCQlwQnNzLT5BdXRoTW9kZUF1eCA9IE5kaXM4MDJfMTFBdXRoTW9kZVdQQTJQU0s7
Ci0JCQkJCQlicmVhazsKLQkJCQkJZGVmYXVsdDoKLQkJCQkJCWJyZWFrOwotCQkJCX0KLQkJCQlw
VG1wICAgKz0gKENvdW50ICogc2l6ZW9mKEFLTV9TVUlURV9TVFJVQ1QpKTsKLQkJCQkKLQkJCQkv
LyBGaXhlZCBmb3IgV1BBLU5vbmUKLQkJCQlpZiAocEJzcy0+QnNzVHlwZSA9PSBCU1NfSU5ERVAp
Ci0JCQkJewotCQkJCQlwQnNzLT5BdXRoTW9kZSA9IE5kaXM4MDJfMTFBdXRoTW9kZVdQQU5vbmU7
Ci0JCQkJCXBCc3MtPkF1dGhNb2RlQXV4ID0gTmRpczgwMl8xMUF1dGhNb2RlV1BBTm9uZTsKLQkJ
CQkJcEJzcy0+V1BBLlBhaXJDaXBoZXJBdXggPSBwQnNzLT5XUEEyLlBhaXJDaXBoZXJBdXg7Ci0J
CQkJCXBCc3MtPldQQS5Hcm91cENpcGhlciAgID0gcEJzcy0+V1BBMi5Hcm91cENpcGhlcjsKLQkJ
CQkJcEJzcy0+V2VwU3RhdHVzICAgICAgICAgPSBwQnNzLT5XUEEuR3JvdXBDaXBoZXI7Ci0JCQkJ
CS8vIFBhdGNoZWQgYnVncyBmb3Igb2xkIGRyaXZlcgotCQkJCQlpZiAocEJzcy0+V1BBLlBhaXJD
aXBoZXJBdXggPT0gTmRpczgwMl8xMVdFUERpc2FibGVkKQotCQkJCQkJcEJzcy0+V1BBLlBhaXJD
aXBoZXJBdXggPSBwQnNzLT5XUEEuR3JvdXBDaXBoZXI7Ci0JCQkJfQotCQkJCXBCc3MtPldlcFN0
YXR1cyAgID0gcEJzcy0+V1BBMi5QYWlyQ2lwaGVyOwkJCQkJCi0JCQkJCi0JCQkJLy8gNi4gR2V0
IFJTTiBjYXBhYmlsaXR5Ci0JCQkJcEJzcy0+V1BBMi5Sc25DYXBhYmlsaXR5ID0gKihQVVNIT1JU
KSBwVG1wOwotCQkJCXBUbXAgKz0gc2l6ZW9mKFVTSE9SVCk7Ci0JCQkJCi0JCQkJLy8gQ2hlY2sg
dGhlIFBhaXIgJiBHcm91cCwgaWYgZGlmZmVyZW50LCB0dXJuIG9uIG1peGVkIG1vZGUgZmxhZwot
CQkJCWlmIChwQnNzLT5XUEEyLkdyb3VwQ2lwaGVyICE9IHBCc3MtPldQQTIuUGFpckNpcGhlcikK
LQkJCQkJcEJzcy0+V1BBMi5iTWl4TW9kZSA9IFRSVUU7Ci0JCQkJCi0JCQkJYnJlYWs7Ci0KLQkJ
CWRlZmF1bHQ6Ci0JCQkJYnJlYWs7Ci0JCX0KLQkJTGVuZ3RoIC09IChwRWlkLT5MZW4gKyAyKTsK
LQl9Ci0jZW5kaWYKLQlyZXR1cm47Ci19Ci0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS8vIG1hY190YWJsZS5jCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0KLS8qISBcYnJpZWYgZ2VuZXJhdGVzIGEgcmFuZG9tIG1hYyBhZGRyZXNzIHZhbHVl
IGZvciBJQlNTIEJTU0lECi0gKiAgXHBhcmFtIEFkZHIgdGhlIGJzc2lkIGxvY2F0aW9uCi0gKiAg
XHJldHVybiBub25lCi0gKiAgXHByZQotICogIFxwb3N0Ci0gKi8KLVZPSUQgTWFjQWRkclJhbmRv
bUJzc2lkKAotICAgIElOIFBSVDI1NzBBREFQVEVSIHBBZCwgCi0gICAgT1VUIE1BQ0FERFIgKkFk
ZHIpIAotewotICAgIElOVCBpOwotCi0gICAgZm9yIChpID0gMDsgaSA8IE1BQ19BRERSX0xFTjsg
aSsrKSAKLSAgICB7Ci0gICAgICAgIEFkZHItPk9jdGV0W2ldID0gUmFuZG9tQnl0ZShwQWQpOwot
ICAgIH0KLSAgICAKLSAgICBBZGRyLT5PY3RldFswXSA9IChBZGRyLT5PY3RldFswXSAmIDB4ZmUp
IHwgMHgwMjsgIC8vIHRoZSBmaXJzdCAyIGJpdHMgbXVzdCBiZSAwMXh4eHh4eHh4Ci19Ci0KLQot
LyohIFxicmllZiBpbml0IHRoZSBtYW5hZ2VtZW50IG1hYyBmcmFtZSBoZWFkZXIKLSAqICBccGFy
YW0gcF9oZHIgbWFjIGhlYWRlcgotICogIFxwYXJhbSBzdWJ0eXBlIHN1YnR5cGUgb2YgdGhlIGZy
YW1lCi0gKiAgXHBhcmFtIHBfZHMgZGVzdGluYXRpb24gYWRkcmVzcywgZG9uJ3QgY2FyZSBpZiBp
dCBpcyBhIGJyb2FkY2FzdCBhZGRyZXNzCi0gKiAgXHJldHVybiBub25lCi0gKiAgXHByZSB0aGUg
c3RhdGlvbiBoYXMgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiBpbiB0aGUgcEFkLT5Qb3J0Q2Zn
Ci0gKiAgIC0gYnNzaWQKLSAqICAgLSBzdGF0aW9uIGFkZHJlc3MKLSAqICBccG9zdAotICogIFxu
b3RlIHRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIGZvbGxvd2luZyBmaWVsZAotCi0gSVJR
TCA9IFBBU1NJVkVfTEVWRUwKLSBJUlFMID0gRElTUEFUQ0hfTEVWRUwKLSAgCi0gKi8KLVZPSUQg
TWd0TWFjSGVhZGVySW5pdCgKLSAgICBJTglQUlQyNTcwQURBUFRFUglwQWQsIAotICAgIElOIE9V
VCBQTUFDSERSIEhkciwgCi0gICAgSU4gVUNIQVIgU3VidHlwZSwgCi0gICAgSU4gVUNIQVIgVG9E
cywgCi0gICAgSU4gUE1BQ0FERFIgRHMsIAotICAgIElOIFBNQUNBRERSIEJzc2lkKSAKLXsKLSAg
ICBOZGlzWmVyb01lbW9yeShIZHIsIHNpemVvZihNQUNIRFIpKTsKLSAgICBIZHItPlR5cGUgPSBC
VFlQRV9NR01UOwotICAgIEhkci0+U3ViVHlwZSA9IFN1YnR5cGU7Ci0gICAgSGRyLT5Ub2RzID0g
VG9EczsKLSAgICBDT1BZX01BQ19BRERSKCZIZHItPkFkZHIxLCBEcyk7Ci0gICAgQ09QWV9NQUNf
QUREUigmSGRyLT5BZGRyMiwgJnBBZC0+Q3VycmVudEFkZHJlc3MpOwotICAgIENPUFlfTUFDX0FE
RFIoJkhkci0+QWRkcjMsIEJzc2lkKTsKLX0KLQotCi0KLS8vID09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS8vIG1lbV9tZ210LmMKLS8vID09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLQotLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBUaGlzIHJvdXRpbmUgYnVp
bGQgYW4gb3V0Z29pbmcgZnJhbWUsIGFuZCBmaWxsIGFsbCBpbmZvcm1hdGlvbiBzcGVjaWZpZWQg
Ci0gKiBpbiBhcmd1bWVudCBsaXN0IHRvIHRoZSBmcmFtZSBib2R5LiBUaGUgYWN0dWFsIGZyYW1l
IHNpemUgaXMgdGhlIHN1bW1hdGlvbiAKLSAqIG9mIGFsbCBhcmd1bWVudHMuCi0gKiBpbnB1dCBw
YXJhbXM6Ci0gKiAgICAgIEJ1ZmZlciAtIHBvaW50ZXIgdG8gYSBwcmUtYWxsb2NhdGVkIG1lbW9y
eSBzZWdtZW50Ci0gKiAgICAgIGFyZ3MgLSBhIGxpc3Qgb2YgPGludCBhcmdfc2l6ZSwgYXJnPiBw
YWlycy4KLSAqICAgICAgTk9URSBOT1RFIE5PVEUhISEhIHRoZSBsYXN0IGFyZ3VtZW50IG11c3Qg
YmUgTlVMTCwgb3RoZXJ3aXNlIHRoaXMKLSAqICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0
aW9uIHdpbGwgRkFJTCEhIQotICogcmV0dXJuOgotICogICAgICBTaXplIG9mIHRoZSBidWZmZXIK
LSAqIHVzYWdlOiAgCi0gKiAgICAgIE1ha2VPdXRnb2luZ0ZyYW1lKEJ1ZmZlciwgb3V0cHV0X2xl
bmd0aCwgMiwgJmZjLCAyLCAmZHVyLCA2LCBwX2FkZHIxLCA2LHBfYWRkcjIsIEVORF9PRl9BUkdT
KTsKLQotIElSUUwgPSBQQVNTSVZFX0xFVkVMCi0gSVJRTCA9IERJU1BBVENIX0xFVkVMCi0gIAot
ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiovCi1VTE9ORyBNYWtlT3V0Z29pbmdGcmFtZSgKLSAgICBPVVQg
Q0hBUiAqQnVmZmVyLCAKLSAgICBPVVQgVUxPTkcgKkZyYW1lTGVuLCAuLi4pIAotewotICAgIENI
QVIgICAqcDsKLSAgICBpbnQgICAgIGxlbmc7Ci0gICAgVUxPTkcgICBUb3RMZW5nOwotICAgIHZh
X2xpc3QgQXJnczsKLQotICAgIC8vIGNhbGN1bGF0ZXMgdGhlIHRvdGFsIGxlbmd0aAotICAgIFRv
dExlbmcgPSAwOwotICAgIHZhX3N0YXJ0KEFyZ3MsIEZyYW1lTGVuKTsKLSAgICBkbyAKLSAgICB7
Ci0gICAgICAgIGxlbmcgPSB2YV9hcmcoQXJncywgaW50KTsKLSAgICAgICAgaWYgKGxlbmcgPT0g
RU5EX09GX0FSR1MpIAotICAgICAgICB7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICBwID0gdmFfYXJnKEFyZ3MsIFBWT0lEKTsKLSAgICAgICAgTmRpc01vdmVNZW1vcnko
JkJ1ZmZlcltUb3RMZW5nXSwgcCwgbGVuZyk7Ci0gICAgICAgIFRvdExlbmcgPSBUb3RMZW5nICsg
bGVuZzsKLSAgICB9IHdoaWxlKFRSVUUpOwotCi0gICAgdmFfZW5kKEFyZ3MpOyAvKiBjbGVhbiB1
cCAqLwotICAgICpGcmFtZUxlbiA9IFRvdExlbmc7Ci0gICAgcmV0dXJuIFRvdExlbmc7Ci19Ci0K
LS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vIG1sbWVfcXVldWUuYwot
Ly8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0vKiEgXGJyaWVmCUluaXRp
YWxpemUgVGhlIE1MTUUgUXVldWUsIHVzZWQgYnkgTUxNRSBGdW5jdGlvbnMKLSAqCVxwYXJhbQkq
UXVldWUJICAgVGhlIE1MTUUgUXVldWUKLSAqCVxyZXR1cm4gQWx3YXlzCSAgIFJldHVybiBORElT
X1NUQVRFX1NVQ0NFU1MgaW4gdGhpcyBpbXBsZW1lbnRhdGlvbgotICoJXHByZQotICoJXHBvc3QK
LSAqCVxub3RlCUJlY2F1c2UgdGhpcyBpcyBkb25lIG9ubHkgb25jZSAoYXQgdGhlIGluaXQgc3Rh
Z2UpLCBubyBuZWVkIHRvIGJlIGxvY2tlZAotICovCi1ORElTX1NUQVRVUyBNbG1lUXVldWVJbml0
KAotCUlOIE1MTUVfUVVFVUUgKlF1ZXVlKSAKLXsKLQlJTlQgaTsKLQotCURCR1BSSU5UKFJUX0RF
QlVHX0lORk8sIi0tPiBNbG1lUXVldWVJbml0XG4iKTsKLQotCU5kaXNBbGxvY2F0ZVNwaW5Mb2Nr
KCZRdWV1ZS0+TG9jayk7Ci0JUXVldWUtPk51bQk9IDA7Ci0JUXVldWUtPkhlYWQgPSAwOwotCVF1
ZXVlLT5UYWlsID0gMDsKLQotCWZvciAoaSA9IDA7IGkgPCBNQVhfTEVOX09GX01MTUVfUVVFVUU7
IGkrKykgCi0JewotCQlRdWV1ZS0+RW50cnlbaV0uT2NjdXBpZWQgPSBGQUxTRTsKLQkJUXVldWUt
PkVudHJ5W2ldLk1zZ0xlbiA9IDA7Ci0JCU5kaXNaZXJvTWVtb3J5KFF1ZXVlLT5FbnRyeVtpXS5N
c2csIE1BWF9MRU5fT0ZfTUxNRV9CVUZGRVIpOwotCX0KLQotCURCR1BSSU5UKFJUX0RFQlVHX0lO
Rk8sIjwtLSBNbG1lUXVldWVJbml0XG4iKTsKLQlyZXR1cm4gTkRJU19TVEFUVVNfU1VDQ0VTUzsK
LX0KLQotQk9PTEVBTiBNbG1lRW5xdWV1ZSgKLSAgICBJTiBQUlQyNTcwQURBUFRFUiBwQWQsIAot
CUlOIFVMT05HIE1hY2hpbmUsIAotCUlOIFVMT05HIE1zZ1R5cGUsIAotCUlOIFVMT05HIE1zZ0xl
biwgCi0JSU4gVk9JRCAqTXNnKSAKLXsKLQlJTlQgVGFpbDsKLQlNTE1FX1FVRVVFCSpRdWV1ZSA9
IChNTE1FX1FVRVVFICopJnBBZC0+TWxtZS5RdWV1ZTsKLQotCWlmIChwQWQtPk1MTUVUaHJfcGlk
ID4gMCkKLQl7Ci0KLQkJaWYgKE1sbWVRdWV1ZUZ1bGwoUXVldWUpKSAKLQkJewotCQkJREJHUFJJ
TlQoUlRfREVCVUdfRVJST1IsIk1sbWVFbnF1ZXVlIGZ1bGwsIG1zZyBkcm9wcGVkIGFuZCBtYXkg
Y29ycnVwdCBNTE1FXG4iKTsKLQkJCXJldHVybiBGQUxTRTsKLQkJfQotCi0JCU5kaXNBY3F1aXJl
U3BpbkxvY2soJihRdWV1ZS0+TG9jaykpOwotCQlUYWlsID0gUXVldWUtPlRhaWw7Ci0JCVF1ZXVl
LT5UYWlsKys7Ci0JCVF1ZXVlLT5OdW0rKzsKLQkJaWYgKFF1ZXVlLT5UYWlsID09IE1BWF9MRU5f
T0ZfTUxNRV9RVUVVRSkgCi0JCXsKLQkJCVF1ZXVlLT5UYWlsID0gMDsKLQkJfQotCQlOZGlzUmVs
ZWFzZVNwaW5Mb2NrKCYoUXVldWUtPkxvY2spKTsKLQkJREJHUFJJTlQoUlRfREVCVUdfSU5GTywi
TWxtZUVucXVldWUsIG51bT0lZFxuIixRdWV1ZS0+TnVtKTsKLQkgCi0JCVF1ZXVlLT5FbnRyeVtU
YWlsXS5PY2N1cGllZCA9IFRSVUU7Ci0JCVF1ZXVlLT5FbnRyeVtUYWlsXS5NYWNoaW5lID0gTWFj
aGluZTsKLQkJUXVldWUtPkVudHJ5W1RhaWxdLk1zZ1R5cGUgPSBNc2dUeXBlOwotCQlRdWV1ZS0+
RW50cnlbVGFpbF0uTXNnTGVuICA9IE1zZ0xlbjsKLQkJTmRpc01vdmVNZW1vcnkoUXVldWUtPkVu
dHJ5W1RhaWxdLk1zZywgTXNnLCBNc2dMZW4pOwotCX0KLQlyZXR1cm4gVFJVRTsKLX0KLQotCi0v
KiEgXGJyaWVmICAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHdoZW4gUmVjdiBnZXRzIGEgTUxNRSBt
ZXNzYWdlCi0gKiAgXHBhcmFtICAqUXVldWUgICAgICAgICAgIFRoZSBNTE1FIFF1ZXVlCi0gKiAg
XHBhcmFtICAgVGltZVN0YW1wSGlnaCAgIFRoZSB1cHBlciAzMiBiaXQgb2YgdGltZXN0YW1wCi0g
KiAgXHBhcmFtICAgVGltZVN0YW1wTG93ICAgIFRoZSBsb3dlciAzMiBiaXQgb2YgdGltZXN0YW1w
Ci0gKiAgXHBhcmFtICAgUnNzaSAgICAgICAgICAgIFRoZSByZWNlaXZpbmcgUlNTSSBzdHJlbmd0
aAotICogIFxwYXJhbSAgIE1zZ0xlbiAgICAgICAgICBUaGUgbGVuZ3RoIG9mIHRoZSBtZXNzYWdl
Ci0gKiAgXHBhcmFtICAqTXNnICAgICAgICAgICAgIFRoZSBtZXNzYWdlIHBvaW50ZXIKLSAqICBc
cmV0dXJuICBUUlVFIGlmIGV2ZXJ5dGhpbmcgb2ssIEZBTFNFIG90aGVyd2lzZSAobGlrZSBRdWV1
ZSBGdWxsKQotICogIFxwcmUKLSAqICBccG9zdAotIAotIElSUUwgPSBESVNQQVRDSF9MRVZFTAot
IAotICovCi1CT09MRUFOIE1sbWVFbnF1ZXVlRm9yUmVjdigKLSAgICBJTiBQUlQyNTcwQURBUFRF
UglwQWQsIAotICAgIE9VVCBNTE1FX1FVRVVFICpRdWV1ZSwgCi0gICAgSU4gVUNIQVIgUnNzaSwg
Ci0gICAgSU4gVUxPTkcgTXNnTGVuLCAKLSAgICBJTiBWT0lEICpNc2cpIAotewotICAgIElOVCAg
ICAgICAgICBUYWlsLCBNYWNoaW5lOwotICAgIE1BQ0ZSQU1FICAgICpGciA9IChNQUNGUkFNRSAq
KU1zZzsKLSAgICBVTE9ORyAgICAgICAgTXNnVHlwZTsKLQotCS8vREJHUFJJTlQoUlRfREVCVUdf
RVJST1IsIk1sbWVFbnF1ZXVlRm9yUmVjdiAiKTsKLQlpZigocEFkLT5NTE1FVGhyX3BpZCA8PSAw
KSkKLQkJcmV0dXJuIEZBTFNFOwotCS8vIEZpcnN0IGNoZWNrIHRoZSBzaXplLCBpdCBNVVNUIG5v
dCBleGNlZWQgdGhlIG1sbWUgcXVldWUgc2l6ZQotCWlmIChNc2dMZW4gPiBNQVhfTEVOX09GX01M
TUVfQlVGRkVSKQotCXsKLQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICJNbG1lRW5xdWV1ZUZv
clJlY3YgbWxtZSBmcmFtZSB0b28gbGFyZ2UsIHNpemUgPSAlZCBcbiIsIE1zZ0xlbik7Ci0JCXJl
dHVybiBGQUxTRTsKLQl9Ci0JCi0JaWYgKChSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBU
RVJfUkVTRVRfSU5fUFJPR1JFU1MpKSB8fAotCQkoUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9B
REFQVEVSX01MTUVfUkVTRVRfSU5fUFJPR1JFU1MpKSB8fAotCQkoUlRNUF9URVNUX0ZMQUcocEFk
LCBmUlRNUF9BREFQVEVSX0hBTFRfSU5fUFJPR1JFU1MpKSB8fAotCQkoUlRNUF9URVNUX0ZMQUco
cEFkLCBmUlRNUF9BREFQVEVSX1JFTU9WRV9JTl9QUk9HUkVTUykpKQotCXsKLQkJREJHUFJJTlQo
UlRfREVCVUdfVFJBQ0UsICJNbG1lRW5xdWV1ZUZvclJlY3YgKG5vdCBpbiBvcGVyYXRpb24pIEZs
YWcgPSAweCV4XG4iLCBwQWQtPkZsYWdzKTsKLQkJcmV0dXJuIEZBTFNFOwotCX0KLQotICAgIGlm
IChNbG1lUXVldWVGdWxsKFF1ZXVlKSkgCi0gICAgewotICAgICAgICAvL0RCR1BSSU5UKFJUX0RF
QlVHX0VSUk9SLCAiTWxtZUVucXVldWVGb3JSZWN2IChxdWV1ZSBmdWxsIGVycm9yKSBcbiIpOwot
ICAgICAgICByZXR1cm4gRkFMU0U7Ci0gICAgfQotCi0gICAgaWYgKCFNc2dUeXBlU3Vic3QocEFk
LCBGciwgJk1hY2hpbmUsICZNc2dUeXBlKSkgCi0gICAgewotICAgICAgICBEQkdQUklOVChSVF9E
RUJVR19FUlJPUiwgIk1sbWVFbnF1ZXVlRm9yUmVjdiAoZHJvcCBtZ210LT5zdWJ0eXBlPSVkKVxu
IixGci0+SGRyLlN1YlR5cGUpOwotICAgICAgICByZXR1cm4gRkFMU0U7Ci0gICAgfQotICAgIAot
ICAgIC8vIE9LLCB3ZSBnb3QgYWxsIHRoZSBpbmZvcm1hdGlvbnMsIGl0IGlzIHRpbWUgdG8gcHV0
IHRoaW5ncyBpbnRvIHF1ZXVlCi0gICAgTmRpc0FjcXVpcmVTcGluTG9jaygmKFF1ZXVlLT5Mb2Nr
KSk7Ci0gICAgVGFpbCA9IFF1ZXVlLT5UYWlsOwotICAgIFF1ZXVlLT5UYWlsKys7Ci0gICAgUXVl
dWUtPk51bSsrOwotICAgIGlmIChRdWV1ZS0+VGFpbCA9PSBNQVhfTEVOX09GX01MTUVfUVVFVUUp
IAotICAgIHsKLSAgICAgICAgUXVldWUtPlRhaWwgPSAwOwotICAgIH0KLSAgICBOZGlzUmVsZWFz
ZVNwaW5Mb2NrKCYoUXVldWUtPkxvY2spKTsKLSAgICBEQkdQUklOVChSVF9ERUJVR19JTkZPLCAi
TWxtZUVucXVldWVGb3JSZWN2LCBudW09JWRcbiIsUXVldWUtPk51bSk7Ci0gICAgCi0gICAgUXVl
dWUtPkVudHJ5W1RhaWxdLk9jY3VwaWVkID0gVFJVRTsKLSAgICBRdWV1ZS0+RW50cnlbVGFpbF0u
TWFjaGluZSA9IE1hY2hpbmU7Ci0gICAgUXVldWUtPkVudHJ5W1RhaWxdLk1zZ1R5cGUgPSBNc2dU
eXBlOwotICAgIFF1ZXVlLT5FbnRyeVtUYWlsXS5Nc2dMZW4gID0gTXNnTGVuOwotCi0gICAgUXVl
dWUtPkVudHJ5W1RhaWxdLlJzc2kgPSBSc3NpOwotICAgIE5kaXNNb3ZlTWVtb3J5KFF1ZXVlLT5F
bnRyeVtUYWlsXS5Nc2csIE1zZywgTXNnTGVuKTsKLSAgICAKLQlSVFVTQlVwKHBBZCwgKCYocEFk
LT5tbG1lX3NlbWFwaG9yZSkpKTsKLQotICAgIHJldHVybiBUUlVFOwotfQotLyohIFxicmllZiAg
IERlcXVldWUgYSBtZXNzYWdlIGZyb20gdGhlIE1MTUUgUXVldWUKLSAqICBccGFyYW0gICpRdWV1
ZSAgICBUaGUgTUxNRSBRdWV1ZQotICogIFxwYXJhbSAgKkVsZW0gICAgIFRoZSBtZXNzYWdlIGRl
cXVldWVkIGZyb20gTUxNRSBRdWV1ZQotICogIFxyZXR1cm4gIFRSVUUgaWYgdGhlIEVsZW0gY29u
dGFpbnMgc29tZXRoaW5nLCBGQUxTRSBvdGhlcndpc2UKLSAqICBccHJlCi0gKiAgXHBvc3QKLSAK
LSBJUlFMID0gRElTUEFUQ0hfTEVWRUwKLSAKLSAqLwotQk9PTEVBTiBNbG1lRGVxdWV1ZSgKLSAg
ICBJTiBNTE1FX1FVRVVFICpRdWV1ZSwgCi0gICAgT1VUIE1MTUVfUVVFVUVfRUxFTSAqKkVsZW0p
IAotewotICAgIE5kaXNBY3F1aXJlU3BpbkxvY2soJihRdWV1ZS0+TG9jaykpOwotCWlmIChRdWV1
ZS0+TnVtID09IDApCi0JewotCQlOZGlzUmVsZWFzZVNwaW5Mb2NrKCYoUXVldWUtPkxvY2spKTsK
LQkJcmV0dXJuIEZBTFNFOyAvL0VtcHR5Ci0JfQotCi0gICAgKkVsZW0gPSAmKFF1ZXVlLT5FbnRy
eVtRdWV1ZS0+SGVhZF0pOwotICAgIFF1ZXVlLT5OdW0tLTsKLSAgICBRdWV1ZS0+SGVhZCsrOwot
ICAgIGlmIChRdWV1ZS0+SGVhZCA9PSBNQVhfTEVOX09GX01MTUVfUVVFVUUpIAotICAgIHsKLSAg
ICAgICAgUXVldWUtPkhlYWQgPSAwOwotICAgIH0KLSAgICAKLSAgICBOZGlzUmVsZWFzZVNwaW5M
b2NrKCYoUXVldWUtPkxvY2spKTsKLSAgICBEQkdQUklOVChSVF9ERUJVR19JTkZPLCAiTWxtZURl
cXVldWUsIG51bT0lZFxuIixRdWV1ZS0+TnVtKTsKLQotICAgIHJldHVybiBUUlVFOwotfQotCi0v
LyBJUlFMID0gRElTUEFUQ0hfTEVWRUwKLVZPSUQJTWxtZVJlc3RhcnRTdGF0ZU1hY2hpbmUoCi0g
ICAgSU4JUFJUMjU3MEFEQVBURVIJcEFkKQotewotCi0JREJHUFJJTlQoUlRfREVCVUdfVFJBQ0Us
ICI9PT4gTWxtZVJlc3RhcnRTdGF0ZU1hY2hpbmVcbiIpOwotCi0JUlRNUF9TRVRfRkxBRyhwQWQs
IGZSVE1QX0FEQVBURVJfTUxNRV9SRVNFVF9JTl9QUk9HUkVTUyk7Ci0KLQlOZGlzQWNxdWlyZVNw
aW5Mb2NrKCZwQWQtPk1sbWUuVGFza0xvY2spOwotCWlmKHBBZC0+TWxtZS5SdW5uaW5nKSAKLQl7
Ci0JCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAiPD09IE1sbWVSZXN0YXJ0U3RhdGVNYWNoaW5l
LCBNbG1lIGlzIFJ1bmluZ1tRdWV1ZT0lZF0hXG4iLCBwQWQtPk1sbWUuUXVldWUuTnVtKTsKLQkJ
TmRpc1JlbGVhc2VTcGluTG9jaygmcEFkLT5NbG1lLlRhc2tMb2NrKTsKLQkJcmV0dXJuOwotCX0g
Ci0JcEFkLT5NbG1lLlJ1bm5pbmcgPSBUUlVFOwotCU5kaXNSZWxlYXNlU3BpbkxvY2soJnBBZC0+
TWxtZS5UYXNrTG9jayk7Ci0KLQlNbG1lUXVldWVEZXN0cm95KCZwQWQtPk1sbWUuUXVldWUpOwot
Ci0JLy8gQ2FuY2VsIGFsbCB0aW1lciBldmVudHMKLQkvLyBCZSBjYXJlZnVsIHRvIGNhbmNlbCBu
ZXcgYWRkZWQgdGltZXIKLQlSVE1QQ2FuY2VsVGltZXIoJnBBZC0+TWxtZS5Bc3NvY0F1eC5Bc3Nv
Y1RpbWVyKTsKLQlSVE1QQ2FuY2VsVGltZXIoJnBBZC0+TWxtZS5Bc3NvY0F1eC5SZWFzc29jVGlt
ZXIpOwotCVJUTVBDYW5jZWxUaW1lcigmcEFkLT5NbG1lLkFzc29jQXV4LkRpc2Fzc29jVGltZXIp
OwotCVJUTVBDYW5jZWxUaW1lcigmcEFkLT5NbG1lLkF1dGhBdXguQXV0aFRpbWVyKTsKLQkvLyAg
ICBSVE1QQ2FuY2VsVGltZXIoJnBBZC0+TWxtZS5BdXRoUnNwQXV4LkF1dGhSc3BUaW1lciwgJkNh
bmNlbGxlZCk7Ci0JUlRNUENhbmNlbFRpbWVyKCZwQWQtPk1sbWUuU3luY0F1eC5CZWFjb25UaW1l
cik7Ci0JUlRNUENhbmNlbFRpbWVyKCZwQWQtPk1sbWUuU3luY0F1eC5TY2FuVGltZXIpOwotCi0J
Ly8gU2V0IGFsbCBzdGF0ZSBtYWNoaW5lcyBiYWNrIElETEUKLQlwQWQtPk1sbWUuQ250bE1hY2hp
bmUuQ3VyclN0YXRlICAgID0gQ05UTF9JRExFOwotCXBBZC0+TWxtZS5Bc3NvY01hY2hpbmUuQ3Vy
clN0YXRlICAgPSBBU1NPQ19JRExFOwotCXBBZC0+TWxtZS5BdXRoTWFjaGluZS5DdXJyU3RhdGUg
ICAgPSBBVVRIX1JFUV9JRExFOwotCXBBZC0+TWxtZS5BdXRoUnNwTWFjaGluZS5DdXJyU3RhdGUg
PSBBVVRIX1JTUF9JRExFOwotCXBBZC0+TWxtZS5TeW5jTWFjaGluZS5DdXJyU3RhdGUgICAgPSBT
WU5DX0lETEU7Ci0JaWYgKFJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9CU1NfSk9J
Tl9JTl9QUk9HUkVTUykpCi0JCVJUTVBfQ0xFQVJfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfQlNT
X0pPSU5fSU5fUFJPR1JFU1MpOy8vc3RldmVuOmZvciB0ZXN0Ci0JaWYgKFJUTVBfVEVTVF9GTEFH
KHBBZCwgZlJUTVBfQURBUFRFUl9SRUFTU09DX0lOX1BST0dSRVNTKSkKLQkJUlRNUF9DTEVBUl9G
TEFHKHBBZCwgZlJUTVBfQURBUFRFUl9SRUFTU09DX0lOX1BST0dSRVNTKTsvL3N0ZXZlbjpmb3Ig
dGVzdAotCWlmIChSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfQlNTX1NDQU5fSU5f
UFJPR1JFU1MpKQotCQlSVE1QX0NMRUFSX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0JTU19TQ0FO
X0lOX1BST0dSRVNTKTsvL3N0ZXZlbjpmb3IgdGVzdAotCi0JUlRNUF9DTEVBUl9GTEFHKHBBZCwg
ZlJUTVBfQURBUFRFUl9NTE1FX1JFU0VUX0lOX1BST0dSRVNTKTsKLQotCS8vIFJlbW92ZSBydW5u
aW5nIHN0YXRlCi0JTmRpc0FjcXVpcmVTcGluTG9jaygmcEFkLT5NbG1lLlRhc2tMb2NrKTsKLQlw
QWQtPk1sbWUuUnVubmluZyA9IEZBTFNFOwotCU5kaXNSZWxlYXNlU3BpbkxvY2soJnBBZC0+TWxt
ZS5UYXNrTG9jayk7Ci0KLQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgIjw9PSBNbG1lUmVzdGFy
dFN0YXRlTWFjaGluZVxuIik7Ci19Ci0KLVZPSUQJTWxtZVBvc3RSZXN0YXJ0U3RhdGVNYWNoaW5l
KAotICAgIElOCVBSVDI1NzBBREFQVEVSCXBBZCkKLXsKLQkvLwotCS8vIEZsYWcgZlJUTVBfQURB
UFRFUl9NTE1FX1JFU0VUX0lOX1BST0dSRVNTIHdpbGwgYmUgY2xlYXIgYXQgTWxtZUhhbmRsZXIK
LQkvLyB3aGVuIHJlcXVpcmVkIHRvIGRvIE1MTUUgUmVzZXQhCi0JLy8gU2luY2UgTWxtZVJlc3Rh
cnRTdGF0ZU1hY2hpbmUgd2lsbCBkbyBub3RoaW5nIHdoZW4gTWxtZSBpcyBydW5uaW5nLgotCS8v
Ci0Jd2hpbGUgKFJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9NTE1FX1JFU0VUX0lO
X1BST0dSRVNTKSkKLQkJTmRpc01TbGVlcCgxMDApOwotCi0JLy8gQ2hhbmdlIGJhY2sgdG8gb3Jp
Z2luYWwgY2hhbm5lbCBpbiBjYXNlIG9mIGRvaW5nIHNjYW4KLQlBc2ljU3dpdGNoQ2hhbm5lbChw
QWQsIHBBZC0+UG9ydENmZy5DaGFubmVsKTsKLQlBc2ljTG9ja0NoYW5uZWwocEFkLCBwQWQtPlBv
cnRDZmcuQ2hhbm5lbCk7Ci0KLQkvLyBSZXN1bWUgTVNEVSB3aGljaCBpcyB0dXJuZWQgb2ZmIGR1
cm5pbmcgc2NhbgotCVJUVVNCUmVzdW1lTXNkdVRyYW5zbWlzc2lvbihwQWQpOwotfQotCi0vKiEg
XGJyaWVmICB0ZXN0IGlmIHRoZSBNTE1FIFF1ZXVlIGlzIGVtcHR5Ci0gKiAgXHBhcmFtICAqUXVl
dWUgICAgVGhlIE1MTUUgUXVldWUKLSAqICBccmV0dXJuIFRSVUUgaWYgdGhlIFF1ZXVlIGlzIGVt
cHR5LCBGQUxTRSBvdGhlcndpc2UKLSAqICBccHJlCi0gKiAgXHBvc3QKLSAKLSBJUlFMID0gRElT
UEFUQ0hfTEVWRUwKLSAKLSAqLwotQk9PTEVBTiBNbG1lUXVldWVFbXB0eSgKLSAgICBJTiBNTE1F
X1FVRVVFICpRdWV1ZSkgCi17Ci0gICAgQk9PTEVBTiBBbnM7Ci0KLSAgICBOZGlzQWNxdWlyZVNw
aW5Mb2NrKCYoUXVldWUtPkxvY2spKTsKLSAgICBBbnMgPSAoUXVldWUtPk51bSA9PSAwKTsKLSAg
ICBOZGlzUmVsZWFzZVNwaW5Mb2NrKCYoUXVldWUtPkxvY2spKTsKLQotICAgIHJldHVybiBBbnM7
Ci19Ci0KLQotLyohIFxicmllZiAgIHRlc3QgaWYgdGhlIE1MTUUgUXVldWUgaXMgZnVsbAotICog
IFxwYXJhbSAgICpRdWV1ZSAgICAgIFRoZSBNTE1FIFF1ZXVlCi0gKiAgXHJldHVybiAgVFJVRSBp
ZiB0aGUgUXVldWUgaXMgZW1wdHksIEZBTFNFIG90aGVyd2lzZQotICogIFxwcmUKLSAqICBccG9z
dAotCi0gSVJRTCA9IFBBU1NJVkVfTEVWRUwKLSBJUlFMID0gRElTUEFUQ0hfTEVWRUwKLSAgCi0g
Ki8KLUJPT0xFQU4gTWxtZVF1ZXVlRnVsbCgKLSAgICBJTiBNTE1FX1FVRVVFICpRdWV1ZSkgCi17
Ci0gICAgQk9PTEVBTiBBbnM7Ci0KLSAgICBOZGlzQWNxdWlyZVNwaW5Mb2NrKCYoUXVldWUtPkxv
Y2spKTsKLSAgICBBbnMgPSAoUXVldWUtPk51bSA9PSBNQVhfTEVOX09GX01MTUVfUVVFVUUpOwot
ICAgIE5kaXNSZWxlYXNlU3BpbkxvY2soJihRdWV1ZS0+TG9jaykpOwotCi0gICAgcmV0dXJuIEFu
czsKLX0KLQotLyohIFxicmllZiAgIFRoZSBkZXN0cnVjdG9yIG9mIE1MTUUgUXVldWUKLSAqICBc
cGFyYW0gCi0gKiAgXHJldHVybgotICogIFxwcmUKLSAqICBccG9zdAotICogIFxub3RlICAgQ2xl
YXIgTWxtZSBRdWV1ZSwgU2V0IFF1ZXVlLT5OdW0gdG8gWmVyby4KLQotIElSUUwgPSBQQVNTSVZF
X0xFVkVMCi0gCi0gKi8KLVZPSUQgTWxtZVF1ZXVlRGVzdHJveSgKLSAgICBJTiBNTE1FX1FVRVVF
ICpRdWV1ZSkgCi17Ci0gICAgTmRpc0FjcXVpcmVTcGluTG9jaygmKFF1ZXVlLT5Mb2NrKSk7Ci0g
ICAgUXVldWUtPk51bSAgPSAwOwotICAgIFF1ZXVlLT5IZWFkID0gMDsKLSAgICBRdWV1ZS0+VGFp
bCA9IDA7Ci0gICAgTmRpc1JlbGVhc2VTcGluTG9jaygmKFF1ZXVlLT5Mb2NrKSk7Ci19Ci0KLS8q
ISBcYnJpZWYgICBUbyBzdWJzdGl0dXRlIHRoZSBtZXNzYWdlIHR5cGUgaWYgdGhlIG1lc3NhZ2Ug
aXMgY29taW5nIGZyb20gZXh0ZXJuYWwKLSAqICBccGFyYW0gICpGciAgICAgICAgICAgIFRoZSBm
cmFtZSByZWNlaXZlZAotICogIFxwYXJhbSAgKk1hY2hpbmUgICAgICAgVGhlIHN0YXRlIG1hY2hp
bmUKLSAqICBccGFyYW0gICpNc2dUeXBlICAgICAgIHRoZSBtZXNzYWdlIHR5cGUgZm9yIHRoZSBz
dGF0ZSBtYWNoaW5lCi0gKiAgXHJldHVybiBUUlVFIGlmIHRoZSBzdWJzdGl0dXRpb24gaXMgc3Vj
Y2Vzc2Z1bCwgRkFMU0Ugb3RoZXJ3aXNlCi0gKiAgXHByZQotICogIFxwb3N0Ci0gCi0gSVJRTCA9
IERJU1BBVENIX0xFVkVMCi0gCi0gKi8KLUJPT0xFQU4gTXNnVHlwZVN1YnN0KAotCUlOIFBSVDI1
NzBBREFQVEVSIHBBZCwKLQlJTiBNQUNGUkFNRSAqRnIsIAotCU9VVCBJTlQgKk1hY2hpbmUsIAot
CU9VVCBJTlQgKk1zZ1R5cGUpIAotewotCVVTSE9SVCBTZXE7Ci0JVUNIQVIJRUFQVHlwZTsKLQlQ
SEVBREVSXzgwMl8xMSBwSGVhZGVyOwotCQotCS8vIFRoZSBvbmx5IGRhdGEgdHlwZSB3aWxsIHBh
c3MgdG8gdGhpcyBmdW5jdGlvbiBpcyBFQVBPTCBmcmFtZQotCWlmIChGci0+SGRyLlR5cGUgPT0g
QlRZUEVfREFUQSkgCi0JewkgCi0JCSpNYWNoaW5lID0gV1BBX1BTS19TVEFURV9NQUNISU5FOwot
Ci0JIHBIZWFkZXIJPSAoUEhFQURFUl84MDJfMTEpRnI7Ci0JCQotCSBpZiggKHBBZC0+UG9ydENm
Zy5DaXBoZXJBbGcgPT0gQ0lQSEVSX1RLSVAgfHwgcEFkLT5Qb3J0Q2ZnLkNpcGhlckFsZyA9PSBD
SVBIRVJfQUVTKSAmJiBwSGVhZGVyLT5Db250cm9saGVhZC5GcmFtZS5XZXApCi0JCUVBUFR5cGUg
PSAqKChVQ0hBUiopRnIgKyBMRU5HVEhfODAyXzExICsgOCArIExFTkdUSF84MDJfMV9IICsgMSk7
Ly84IGlzIElWICsgRUlWCi0JIGVsc2UKLQkJCUVBUFR5cGUgPSAqKChVQ0hBUiopRnIgKyBMRU5H
VEhfODAyXzExICsgTEVOR1RIXzgwMl8xX0ggKyAxKTsKLQkgCi0JIAotCQlyZXR1cm4oV3BhTXNn
VHlwZVN1YnN0KEVBUFR5cGUsIE1zZ1R5cGUpKTsKLQl9CQotCi0KLSAgICBzd2l0Y2ggKEZyLT5I
ZHIuU3ViVHlwZSkgCi0gICAgewotICAgICAgICBjYXNlIFNVQlRZUEVfQVNTT0NfUkVROgotICAg
ICAgICAgICAgKk1hY2hpbmUgPSBBU1NPQ19TVEFURV9NQUNISU5FOwotICAgICAgICAgICAgKk1z
Z1R5cGUgPSBNVDJfUEVFUl9BU1NPQ19SRVE7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBTVUJUWVBFX0FTU09DX1JTUDoKLSAgICAgICAgICAgICpNYWNoaW5lID0gQVNTT0NfU1RB
VEVfTUFDSElORTsKLSAgICAgICAgICAgICpNc2dUeXBlID0gTVQyX1BFRVJfQVNTT0NfUlNQOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgU1VCVFlQRV9SRUFTU09DX1JFUToKLSAg
ICAgICAgICAgICpNYWNoaW5lID0gQVNTT0NfU1RBVEVfTUFDSElORTsKLSAgICAgICAgICAgICpN
c2dUeXBlID0gTVQyX1BFRVJfUkVBU1NPQ19SRVE7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBTVUJUWVBFX1JFQVNTT0NfUlNQOgotICAgICAgICAgICAgKk1hY2hpbmUgPSBBU1NP
Q19TVEFURV9NQUNISU5FOwotICAgICAgICAgICAgKk1zZ1R5cGUgPSBNVDJfUEVFUl9SRUFTU09D
X1JTUDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFNVQlRZUEVfUFJPQkVfUkVR
OgotICAgICAgICAgICAgKk1hY2hpbmUgPSBTWU5DX1NUQVRFX01BQ0hJTkU7Ci0gICAgICAgICAg
ICAqTXNnVHlwZSA9IE1UMl9QRUVSX1BST0JFX1JFUTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIFNVQlRZUEVfUFJPQkVfUlNQOgotICAgICAgICAgICAgKk1hY2hpbmUgPSBTWU5D
X1NUQVRFX01BQ0hJTkU7Ci0gICAgICAgICAgICAqTXNnVHlwZSA9IE1UMl9QRUVSX1BST0JFX1JT
UDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFNVQlRZUEVfQkVBQ09OOgotICAg
ICAgICAgICAgKk1hY2hpbmUgPSBTWU5DX1NUQVRFX01BQ0hJTkU7Ci0gICAgICAgICAgICAqTXNn
VHlwZSA9IE1UMl9QRUVSX0JFQUNPTjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IFNVQlRZUEVfQVRJTToKLSAgICAgICAgICAgICpNYWNoaW5lID0gU1lOQ19TVEFURV9NQUNISU5F
OwotICAgICAgICAgICAgKk1zZ1R5cGUgPSBNVDJfUEVFUl9BVElNOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgU1VCVFlQRV9ESVNBU1NPQzoKLSAgICAgICAgICAgICpNYWNoaW5l
ID0gQVNTT0NfU1RBVEVfTUFDSElORTsKLSAgICAgICAgICAgICpNc2dUeXBlID0gTVQyX1BFRVJf
RElTQVNTT0NfUkVROwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgU1VCVFlQRV9B
VVRIOgotICAgICAgICAgICAgLy8gZ2V0IHRoZSBzZXF1ZW5jZSBudW1iZXIgZnJvbSBwYXlsb2Fk
IDI0IE1hYyBIZWFkZXIgKyAyIGJ5dGVzIGFsZ29yaXRobQotICAgICAgICAgICAgTmRpc01vdmVN
ZW1vcnkoJlNlcSwgJkZyLT5PY3RldFsyXSwgc2l6ZW9mKFVTSE9SVCkpOwotICAgICAgICAgICAg
aWYgKFNlcSA9PSAxIHx8IFNlcSA9PSAzKSAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAqTWFjaGluZSA9IEFVVEhfUlNQX1NUQVRFX01BQ0hJTkU7Ci0gICAgICAgICAgICAgICAgKk1z
Z1R5cGUgPSBNVDJfUEVFUl9BVVRIX09ERDsKLSAgICAgICAgICAgIH0gCi0gICAgICAgICAgICBl
bHNlIGlmIChTZXEgPT0gMiB8fCBTZXEgPT0gNCkgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgKk1hY2hpbmUgPSBBVVRIX1NUQVRFX01BQ0hJTkU7Ci0gICAgICAgICAgICAgICAgKk1z
Z1R5cGUgPSBNVDJfUEVFUl9BVVRIX0VWRU47Ci0gICAgICAgICAgICB9IAotICAgICAgICAgICAg
ZWxzZSAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBTVUJUWVBFX0RFQVVU
SDoKLSAgICAgICAgICAgICpNYWNoaW5lID0gQVVUSF9SU1BfU1RBVEVfTUFDSElORTsKLSAgICAg
ICAgICAgICpNc2dUeXBlID0gTVQyX1BFRVJfREVBVVRIOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gRkFMU0U7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4gVFJVRTsKLX0KLQotLy8gPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLy8gc3RhdGVfbWFjaGluZS5jCi0vLyA9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0KLS8qISBcYnJpZWYgSW5pdGlhbGl6ZSB0aGUgc3RhdGUg
bWFjaGluZS4KLSAqICBccGFyYW0gKlMgICAgICAgICAgIHBvaW50ZXIgdG8gdGhlIHN0YXRlIG1h
Y2hpbmUgCi0gKiAgXHBhcmFtICBUcmFucyAgICAgICBTdGF0ZSBtYWNoaW5lIHRyYW5zaXRpb24g
ZnVuY3Rpb24KLSAqICBccGFyYW0gIFN0TnIgICAgICAgIG51bWJlciBvZiBzdGF0ZXMgCi0gKiAg
XHBhcmFtICBNc2dOciAgICAgICBudW1iZXIgb2YgbWVzc2FnZXMgCi0gKiAgXHBhcmFtICBEZWZG
dW5jICAgICBkZWZhdWx0IGZ1bmN0aW9uLCB3aGVuIHRoZXJlIGlzIGludmFsaWQgc3RhdGUvbWVz
c2FnZSBjb21iaW5hdGlvbiAKLSAqICBccGFyYW0gIEluaXRTdGF0ZSAgIGluaXRpYWwgc3RhdGUg
b2YgdGhlIHN0YXRlIG1hY2hpbmUgCi0gKiAgXHBhcmFtICBCYXNlICAgICAgICBTdGF0ZU1hY2hp
bmUgYmFzZSwgaW50ZXJuYWwgdXNlIG9ubHkKLSAqICBccHJlIHBfc20gc2hvdWxkIGJlIGEgbGVn
YWwgcG9pbnRlcgotICogIFxwb3N0Ci0KLSBJUlFMID0gUEFTU0lWRV9MRVZFTAotIAotICovCi0K
LVZPSUQgU3RhdGVNYWNoaW5lSW5pdCgKLSAgICBJTiBTVEFURV9NQUNISU5FICpTLCAKLSAgICBJ
TiBTVEFURV9NQUNISU5FX0ZVTkMgVHJhbnNbXSwgCi0gICAgSU4gVUxPTkcgU3ROciwgCi0gICAg
SU4gVUxPTkcgTXNnTnIsIAotICAgIElOIFNUQVRFX01BQ0hJTkVfRlVOQyBEZWZGdW5jLCAKLSAg
ICBJTiBVTE9ORyBJbml0U3RhdGUsIAotICAgIElOIFVMT05HIEJhc2UpIAotewotICAgIFVMT05H
IGksIGo7Ci0KLSAgICAvLyBzZXQgbnVtYmVyIG9mIHN0YXRlcyBhbmQgbWVzc2FnZXMKLSAgICBT
LT5OclN0YXRlID0gU3ROcjsKLSAgICBTLT5Ock1zZyAgID0gTXNnTnI7Ci0gICAgUy0+QmFzZSAg
ICA9IEJhc2U7Ci0KLSAgICBTLT5UcmFuc0Z1bmMgID0gVHJhbnM7Ci0gICAgCi0gICAgLy8gaW5p
dCBhbGwgc3RhdGUgdHJhbnNpdGlvbiB0byBkZWZhdWx0IGZ1bmN0aW9uCi0gICAgZm9yIChpID0g
MDsgaSA8IFN0TnI7IGkrKykgCi0gICAgewotICAgICAgICBmb3IgKGogPSAwOyBqIDwgTXNnTnI7
IGorKykgCi0gICAgICAgIHsKLSAgICAgICAgICAgIFMtPlRyYW5zRnVuY1tpICogTXNnTnIgKyBq
XSA9IERlZkZ1bmM7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgLy8gc2V0IHRoZSBzdGFy
dGluZyBzdGF0ZQotICAgIFMtPkN1cnJTdGF0ZSA9IEluaXRTdGF0ZTsKLX0KLQotCi0vKiEgXGJy
aWVmIFRoaXMgZnVuY3Rpb24gZmlsbHMgaW4gdGhlIGZ1bmN0aW9uIHBvaW50ZXIgaW50byB0aGUg
Y2VsbCBpbiB0aGUgc3RhdGUgbWFjaGluZSAKLSAqICBccGFyYW0gKlMgICBwb2ludGVyIHRvIHRo
ZSBzdGF0ZSBtYWNoaW5lCi0gKiAgXHBhcmFtIFN0ICAgc3RhdGUKLSAqICBccGFyYW0gTXNnICBp
bmNvbWluZyBtZXNzYWdlCi0gKiAgXHBhcmFtIGYgICAgdGhlIGZ1bmN0aW9uIHRvIGJlIGV4ZWN1
dGVkIHdoZW4gKHN0YXRlLCBtZXNzYWdlKSBjb21iaW5hdGlvbiBvY2N1cnMgYXQgdGhlIHN0YXRl
IG1hY2hpbmUKLSAqICBccHJlICpTIHNob3VsZCBiZSBhIGxlZ2FsIHBvaW50ZXIgdG8gdGhlIHN0
YXRlIG1hY2hpbmUsIHN0LCBtc2csIHNob3VsZCBiZSBhbGwgd2l0aGluIHRoZSByYW5nZSwgQmFz
ZSBzaG91bGQgYmUgc2V0IGluIHRoZSBpbml0aWFsIHN0YXRlCi0gKiAgXHBvc3QKLQotIElSUUwg
PSBQQVNTSVZFX0xFVkVMCi0gCi0gKi8KLVZPSUQgU3RhdGVNYWNoaW5lU2V0QWN0aW9uKAotICAg
IElOIFNUQVRFX01BQ0hJTkUgKlMsIAotICAgIElOIFVMT05HIFN0LCAKLSAgICBJTiBVTE9ORyBN
c2csIAotICAgIElOIFNUQVRFX01BQ0hJTkVfRlVOQyBGdW5jKSAKLXsKLSAgICBVTE9ORyBNc2dJ
ZHg7Ci0gICAgCi0gICAgTXNnSWR4ID0gTXNnIC0gUy0+QmFzZTsKLQotICAgIGlmIChTdCA8IFMt
Pk5yU3RhdGUgJiYgTXNnSWR4IDwgUy0+TnJNc2cpIAotICAgIHsKLSAgICAgICAgLy8gYm91bmRh
cnkgY2hlY2tpbmcgYmVmb3JlIHNldHRpbmcgdGhlIGFjdGlvbgotICAgICAgICBTLT5UcmFuc0Z1
bmNbU3QgKiBTLT5Ock1zZyArIE1zZ0lkeF0gPSBGdW5jOwotICAgIH0gCi19Ci0KLS8qISBcYnJp
ZWYgICBUaGUgZGVzdHJ1Y3RvciBvZiB0aGUgc3RhdGUgbWFjaGluZQotICogIFxwYXJhbSAgKlMg
dGhlIHN0YXRlbWFjaGluZQotICogIFxub3RlICAgIGRvaW5nIG5vdGhpbmcgYXQgdGhpcyBtb21l
bnQsIG1heSBuZWVkIHRvIGRvIHNvbWV0aGluZyBpZiB0aGUgaW1wbGVtZW50YXRpb24gY2hhbmdl
ZAotCi0gSVJRTCA9IFBBU1NJVkVfTEVWRUwKLSAKLSAqLwotVk9JRAotU3RhdGVNYWNoaW5lRGVz
dHJveShJTiBTVEFURV9NQUNISU5FICpTKSAKLXsKLX0KLS8qISBcYnJpZWYgICBUaGlzIGZ1bmN0
aW9uIGRvZXMgdGhlIHN0YXRlIHRyYW5zaXRpb24KLSAqICBccGFyYW0gICAqQWRhcHRlciB0aGUg
TklDIGFkYXB0ZXIgcG9pbnRlcgotICogIFxwYXJhbSAgICpTICAgICAgIHRoZSBzdGF0ZSBtYWNo
aW5lCi0gKiAgXHBhcmFtICAgKkVsZW0gICAgdGhlIG1lc3NhZ2UgdG8gYmUgZXhlY3V0ZWQKLSAq
ICBccmV0dXJuICAgTm9uZQotIAotIElSUUwgPSBESVNQQVRDSF9MRVZFTAotIAotICovCi1WT0lE
IFN0YXRlTWFjaGluZVBlcmZvcm1BY3Rpb24oCi0gICAgSU4JUFJUMjU3MEFEQVBURVIJcEFkLCAK
LSAgICBJTiBTVEFURV9NQUNISU5FICpTLCAKLSAgICBJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0p
IAotewotICAgICgqKFMtPlRyYW5zRnVuY1tTLT5DdXJyU3RhdGUgKiBTLT5Ock1zZyArIEVsZW0t
Pk1zZ1R5cGUgLSBTLT5CYXNlXSkpKHBBZCwgRWxlbSk7Ci19Ci0KLS8qCi0gICAgPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLSAgICBEZXNjcmlwdGlvbjoKLSAgICAgICAgVGhlIGRyb3AgZnVuY3Rpb24sIHdo
ZW4gbWFjaGluZSBleGVjdXRlcyB0aGlzLCB0aGUgbWVzc2FnZSBpcyBzaW1wbHkgCi0gICAgICAg
IGlnbm9yZWQuIFRoaXMgZnVuY3Rpb24gZG9lcyBub3RoaW5nLCB0aGUgbWVzc2FnZSBpcyBmcmVl
ZCBpbiAKLSAgICAgICAgU3RhdGVNYWNoaW5lUGVyZm9ybUFjdGlvbigpCi0gICAgPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLSAqLwotVk9JRCBEcm9wKAotICAgIElOIFBSVDI1NzBBREFQVEVSIHBBZCwgCi0g
ICAgSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKSAKLXsKLX0KLQotLyoKLSAgICA9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotICAgIERlc2NyaXB0aW9uOgotICAgICAgICAKLQlJUlFMID0gUEFTU0lWRV9MRVZF
TAotCi0gICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqLwotVk9JRCBMZnNySW5pdCgKLSAgICBJTiBQ
UlQyNTcwQURBUFRFUiBwQWQsIAotICAgIElOIFVMT05HIFNlZWQpIAotewotICAgIGlmIChTZWVk
ID09IDApIAotICAgICAgICBwQWQtPk1sbWUuU2hpZnRSZWcgPSAxOwotICAgIGVsc2UgCi0gICAg
ICAgIHBBZC0+TWxtZS5TaGlmdFJlZyA9IFNlZWQ7Ci19Ci0KLQotLyoKLSAgICA9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotICAgIERlc2NyaXB0aW9uOgotICAgID09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KLVVD
SEFSIFJhbmRvbUJ5dGUoCi0gICAgSU4gUFJUMjU3MEFEQVBURVIgcEFkKSAKLXsKLSAgICBVTE9O
RyBpOwotICAgIFVDSEFSIFIsIFJlc3VsdDsKLQotICAgIFIgPSAwOwotCi0gICAgZm9yIChpID0g
MDsgaSA8IDg7IGkrKykgCi0gICAgewotICAgICAgICBpZiAocEFkLT5NbG1lLlNoaWZ0UmVnICYg
MHgwMDAwMDAwMSkgCi0gICAgICAgIHsKLSAgICAgICAgICAgIHBBZC0+TWxtZS5TaGlmdFJlZyA9
ICgocEFkLT5NbG1lLlNoaWZ0UmVnIF4gTEZTUl9NQVNLKSA+PiAxKSB8IDB4ODAwMDAwMDA7Ci0g
ICAgICAgICAgICBSZXN1bHQgPSAxOwotICAgICAgICB9IAotICAgICAgICBlbHNlIAotICAgICAg
ICB7Ci0gICAgICAgICAgICBwQWQtPk1sbWUuU2hpZnRSZWcgPSBwQWQtPk1sbWUuU2hpZnRSZWcg
Pj4gMTsKLSAgICAgICAgICAgIFJlc3VsdCA9IDA7Ci0gICAgICAgIH0KLSAgICAgICAgUiA9IChS
IDw8IDEpIHwgUmVzdWx0OwotICAgIH0KLQotICAgIHJldHVybiBSOwotfQotCi0vKgotCT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0JRGVzY3JpcHRpb246Ci0JPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqLwotVk9J
RCBBc2ljU3dpdGNoQ2hhbm5lbCgKLQlJTiBQUlQyNTcwQURBUFRFUiBwQWQsIAotCUlOIFVDSEFS
IENoYW5uZWwpIAotewotCVVMT05HIFIzOwotCVVDSEFSIGluZGV4OwotCi0JLy8gVE9ETzogbmVl
ZCB0byB1cGRhdGUgRTJQUk9NIGZvcm1hdCB0byBhZGQgODAyLjExYSBjaGFubmVsJ3MgVFggcG93
ZXIgY2FsaWJyYXRpb24gdmFsdWVzCi0JaWYgKENoYW5uZWwgPD0gMTQpCSAgCi0JUjMgPSBwQWQt
PlBvcnRDZmcuQ2hhbm5lbFR4UG93ZXJbQ2hhbm5lbCAtIDFdOwotCWVsc2UgCi0JCVIzID0gcEFk
LT5Qb3J0Q2ZnLkNoYW5uZWxUeFBvd2VyWzBdOwotCi0JaWYgKFIzID4gMzEpICBSMyA9IDMxOwot
Ci0JLy8gRTJQUk9NIHNldHRpbmcgaXMgY2FsaWJyYXRlZCBmb3IgbWF4aW11bSBUWCBwb3dlciAo
aS5lLiAxMDAlKQotCS8vIFdlIGxvd2VyIFRYIHBvd2VyIGhlcmUgYWNjb3JkaW5nIHRvIHRoZSBw
ZXJjZW50YWdlIHNwZWNpZmllZCBmcm9tIFVJCi0JaWYgKHBBZC0+UG9ydENmZy5UeFBvd2VyUGVy
Y2VudGFnZSA+IDkwKQkgICAvLyA5MSB+IDEwMCUsIHRyZWF0IGFzIDEwMCUgaW4gdGVybXMgb2Yg
bVcKLQkJOwotCWVsc2UgaWYgKHBBZC0+UG9ydENmZy5UeFBvd2VyUGVyY2VudGFnZSA+IDYwKSAg
Ly8gNjEgfiA5MCUsIHRyZWF0IGFzIDc1JSBpbiB0ZXJtcyBvZiBtVwotCQlSMyAtPSAxOwotCWVs
c2UgaWYgKHBBZC0+UG9ydENmZy5UeFBvd2VyUGVyY2VudGFnZSA+IDMwKSAgLy8gMzEgfiA2MCUs
IHRyZWF0IGFzIDUwJSBpbiB0ZXJtcyBvZiBtVwotCQlSMyAtPSAzOwotCWVsc2UgaWYgKHBBZC0+
UG9ydENmZy5UeFBvd2VyUGVyY2VudGFnZSA+IDE1KSAgLy8gMTYgfiAzMCUsIHRyZWF0IGFzIDI1
JSBpbiB0ZXJtcyBvZiBtVwotCQlSMyAtPSA2OwotCWVsc2UgaWYgKHBBZC0+UG9ydENmZy5UeFBv
d2VyUGVyY2VudGFnZSA+IDkpICAgLy8gMTAgfiAxNSUsIHRyZWF0IGFzIDEyLjUlIGluIHRlcm1z
IG9mIG1XCi0JCVIzIC09IDk7Ci0JZWxzZQkJCQkJCQkJCQkgICAvLyAwIH4gOSAlLCB0cmVhdCBh
cyA2LjI1JSBpbiB0ZXJtcyBvZiBtVwotCQlSMyAtPSAxMjsKLQotCVIzID0gUjMgPDwgOTsgLy8g
c2hpZnQgVFggcG93ZXIgY29udHJvbCB0byBjb3JyZWN0IFJGIFIzIGJpdCBwb3NpdGlvbgotCXN3
aXRjaCAocEFkLT5Qb3J0Q2ZnLlJmVHlwZSkKLQl7Ci0JCWNhc2UgUkZJQ18yNTIyOgotCQkJZm9y
IChpbmRleCA9IDA7IGluZGV4IDwgTlVNX09GXzI1MjJfQ0hOTDsgaW5kZXgrKykKLQkJCXsKLQkJ
CQlpZiAoQ2hhbm5lbCA9PSBSRjI1MjJSZWdUYWJsZVtpbmRleF0uQ2hhbm5lbCkKLQkJCQl7Ci0J
CQkJCVIzID0gUjMgfCBSRjI1MjJSZWdUYWJsZVtpbmRleF0uUjM7IC8vIHNldCBUWCBwb3dlcgot
CQkJCQlSVFVTQldyaXRlUkZSZWdpc3RlcihwQWQsIFJGMjUyMlJlZ1RhYmxlW2luZGV4XS5SMSk7
Ci0JCQkJCVJUVVNCV3JpdGVSRlJlZ2lzdGVyKHBBZCwgUkYyNTIyUmVnVGFibGVbaW5kZXhdLlIy
KTsKLQkJCQkJUlRVU0JXcml0ZVJGUmVnaXN0ZXIocEFkLCBSMyk7Ci0JCQkJCXBBZC0+UG9ydENm
Zy5MYXRjaFJmUmVncy5DaGFubmVsID0gQ2hhbm5lbDsKLQkJCQkJcEFkLT5Qb3J0Q2ZnLkxhdGNo
UmZSZWdzLlIxID0gUkYyNTIyUmVnVGFibGVbaW5kZXhdLlIxOwotCQkJCQlwQWQtPlBvcnRDZmcu
TGF0Y2hSZlJlZ3MuUjIgPSBSRjI1MjJSZWdUYWJsZVtpbmRleF0uUjI7Ci0JCQkJCXBBZC0+UG9y
dENmZy5MYXRjaFJmUmVncy5SMyA9IFIzOwotCQkJCQlwQWQtPlBvcnRDZmcuTGF0Y2hSZlJlZ3Mu
UjQgPSBSRjI1MjJSZWdUYWJsZVtpbmRleF0uUjQ7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0K
LQkJCWJyZWFrOwotCi0JCWNhc2UgUkZJQ18yNTIzOgotCQkJZm9yIChpbmRleCA9IDA7IGluZGV4
IDwgTlVNX09GXzI1MjNfQ0hOTDsgaW5kZXgrKykKLQkJCXsKLQkJCQlpZiAoQ2hhbm5lbCA9PSBS
RjI1MjNSZWdUYWJsZVtpbmRleF0uQ2hhbm5lbCkKLQkJCQl7Ci0JCQkJCVIzID0gUjMgfCBSRjI1
MjNSZWdUYWJsZVtpbmRleF0uUjM7IC8vIHNldCBUWCBwb3dlcgotCQkJCQlSVFVTQldyaXRlUkZS
ZWdpc3RlcihwQWQsIFJGMjUyM1JlZ1RhYmxlW2luZGV4XS5SMSk7Ci0JCQkJCVJUVVNCV3JpdGVS
RlJlZ2lzdGVyKHBBZCwgUkYyNTIzUmVnVGFibGVbaW5kZXhdLlIyKTsKLQkJCQkJUlRVU0JXcml0
ZVJGUmVnaXN0ZXIocEFkLCBSMyk7Ci0JCQkJCVJUVVNCV3JpdGVSRlJlZ2lzdGVyKHBBZCwgUkYy
NTIzUmVnVGFibGVbaW5kZXhdLlI0KTsKLQkJCQkJcEFkLT5Qb3J0Q2ZnLkxhdGNoUmZSZWdzLkNo
YW5uZWwgPSBDaGFubmVsOwotCQkJCQlwQWQtPlBvcnRDZmcuTGF0Y2hSZlJlZ3MuUjEgPSBSRjI1
MjNSZWdUYWJsZVtpbmRleF0uUjE7Ci0JCQkJCXBBZC0+UG9ydENmZy5MYXRjaFJmUmVncy5SMiA9
IFJGMjUyM1JlZ1RhYmxlW2luZGV4XS5SMjsKLQkJCQkJcEFkLT5Qb3J0Q2ZnLkxhdGNoUmZSZWdz
LlIzID0gUjM7Ci0JCQkJCXBBZC0+UG9ydENmZy5MYXRjaFJmUmVncy5SNCA9IFJGMjUyM1JlZ1Rh
YmxlW2luZGV4XS5SNDsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCQkJYnJlYWs7Ci0KLQkJ
Y2FzZSBSRklDXzI1MjQ6Ci0JCQlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBOVU1fT0ZfMjUyNF9D
SE5MOyBpbmRleCsrKQotCQkJewotCQkJCWlmIChDaGFubmVsID09IFJGMjUyNFJlZ1RhYmxlW2lu
ZGV4XS5DaGFubmVsKQotCQkJCXsKLQkJCQkJUjMgPSBSMyB8IFJGMjUyNFJlZ1RhYmxlW2luZGV4
XS5SMzsgLy8gc2V0IFRYIHBvd2VyCi0JCQkJCVJUVVNCV3JpdGVSRlJlZ2lzdGVyKHBBZCwgUkYy
NTI0UmVnVGFibGVbaW5kZXhdLlIxKTsKLQkJCQkJUlRVU0JXcml0ZVJGUmVnaXN0ZXIocEFkLCBS
RjI1MjRSZWdUYWJsZVtpbmRleF0uUjIpOwotCQkJCQlSVFVTQldyaXRlUkZSZWdpc3RlcihwQWQs
IFIzKTsKLQkJCQkJUlRVU0JXcml0ZVJGUmVnaXN0ZXIocEFkLCBSRjI1MjRSZWdUYWJsZVtpbmRl
eF0uUjQpOwotCQkJCQlwQWQtPlBvcnRDZmcuTGF0Y2hSZlJlZ3MuQ2hhbm5lbCA9IENoYW5uZWw7
Ci0JCQkJCXBBZC0+UG9ydENmZy5MYXRjaFJmUmVncy5SMSA9IFJGMjUyNFJlZ1RhYmxlW2luZGV4
XS5SMTsKLQkJCQkJcEFkLT5Qb3J0Q2ZnLkxhdGNoUmZSZWdzLlIyID0gUkYyNTI0UmVnVGFibGVb
aW5kZXhdLlIyOwotCQkJCQlwQWQtPlBvcnRDZmcuTGF0Y2hSZlJlZ3MuUjMgPSBSMzsKLQkJCQkJ
cEFkLT5Qb3J0Q2ZnLkxhdGNoUmZSZWdzLlI0ID0gUkYyNTI0UmVnVGFibGVbaW5kZXhdLlI0Owot
CQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0JCQlicmVhazsKLQkJCQotCQljYXNlIFJGSUNfMjUy
NToKLQkJCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IE5VTV9PRl8yNTI1X0NITkw7IGluZGV4Kysp
Ci0JCQl7Ci0JCQkJaWYgKENoYW5uZWwgPT0gUkYyNTI1UmVnVGFibGVbaW5kZXhdLkNoYW5uZWwp
Ci0JCQkJewotCQkJCQlSMyA9IFIzIHwgUkYyNTI1UmVnVGFibGVbaW5kZXhdLlIzOyAvLyBzZXQg
VFggcG93ZXIKLQkJCQkJUlRVU0JXcml0ZVJGUmVnaXN0ZXIocEFkLCBSRjI1MjVSZWdUYWJsZVtp
bmRleF0uUjEpOwotCi0JCQkJCVJUVVNCV3JpdGVSRlJlZ2lzdGVyKHBBZCwgUkYyNTI1UmVnVGFi
bGVbaW5kZXhdLlIyKTsKLQotCQkJCQlSVFVTQldyaXRlUkZSZWdpc3RlcihwQWQsIFIzKTsKLQot
CQkJCQlSVFVTQldyaXRlUkZSZWdpc3RlcihwQWQsIFJGMjUyNVJlZ1RhYmxlW2luZGV4XS5SNCk7
Ci0KLQkJCQkJcEFkLT5Qb3J0Q2ZnLkxhdGNoUmZSZWdzLkNoYW5uZWwgPSBDaGFubmVsOwotCQkJ
CQlwQWQtPlBvcnRDZmcuTGF0Y2hSZlJlZ3MuUjEgPSBSRjI1MjVSZWdUYWJsZVtpbmRleF0uUjE7
Ci0JCQkJCXBBZC0+UG9ydENmZy5MYXRjaFJmUmVncy5SMiA9IFJGMjUyNVJlZ1RhYmxlW2luZGV4
XS5SMjsKLQkJCQkJcEFkLT5Qb3J0Q2ZnLkxhdGNoUmZSZWdzLlIzID0gUjM7Ci0JCQkJCXBBZC0+
UG9ydENmZy5MYXRjaFJmUmVncy5SNCA9IFJGMjUyNVJlZ1RhYmxlW2luZGV4XS5SNDsKLQkJCQkJ
YnJlYWs7Ci0JCQkJfQotCQkJfQotCQkJYnJlYWs7Ci0JCQkKLQkJY2FzZSBSRklDXzI1MjVFOgot
CQkJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgTlVNX09GXzI1MjVFX0NITkw7IGluZGV4KyspCi0J
CQl7Ci0JCQkJaWYgKENoYW5uZWwgPT0gUkYyNTI1ZVJlZ1RhYmxlW2luZGV4XS5DaGFubmVsKQot
CQkJCXsKLQkJCQkJUlRVU0JXcml0ZVJGUmVnaXN0ZXIocEFkLCBSRjI1MjVlUmVnVGFibGVbaW5k
ZXhdLlRlbXBSMik7Ci0JCQkJCVJUVVNCV3JpdGVSRlJlZ2lzdGVyKHBBZCwgUkYyNTI1ZVJlZ1Rh
YmxlW2luZGV4XS5SNCk7Ci0JCQkJCVIzID0gUjMgfCBSRjI1MjVlUmVnVGFibGVbaW5kZXhdLlIz
OyAvLyBzZXQgVFggcG93ZXIKLQkJCQkJUlRVU0JXcml0ZVJGUmVnaXN0ZXIocEFkLCBSRjI1MjVl
UmVnVGFibGVbaW5kZXhdLlIxKTsKLQkJCQkJUlRVU0JXcml0ZVJGUmVnaXN0ZXIocEFkLCBSRjI1
MjVlUmVnVGFibGVbaW5kZXhdLlIyKTsKLQkJCQkJUlRVU0JXcml0ZVJGUmVnaXN0ZXIocEFkLCBS
Myk7Ci0JCQkJCVJUVVNCV3JpdGVSRlJlZ2lzdGVyKHBBZCwgUkYyNTI1ZVJlZ1RhYmxlW2luZGV4
XS5SNCk7Ci0JCQkJCXBBZC0+UG9ydENmZy5MYXRjaFJmUmVncy5DaGFubmVsID0gQ2hhbm5lbDsK
LQkJCQkJcEFkLT5Qb3J0Q2ZnLkxhdGNoUmZSZWdzLlIxID0gUkYyNTI1ZVJlZ1RhYmxlW2luZGV4
XS5SMTsKLQkJCQkJcEFkLT5Qb3J0Q2ZnLkxhdGNoUmZSZWdzLlIyID0gUkYyNTI1ZVJlZ1RhYmxl
W2luZGV4XS5SMjsKLQkJCQkJcEFkLT5Qb3J0Q2ZnLkxhdGNoUmZSZWdzLlIzID0gUjM7Ci0JCQkJ
CXBBZC0+UG9ydENmZy5MYXRjaFJmUmVncy5SNCA9IFJGMjUyNWVSZWdUYWJsZVtpbmRleF0uUjQ7
Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0KLQkJCWJyZWFrOwotCQkJCi0JCWNhc2UgUkZJQ181
MjIyOgotCQkJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgTlVNX09GXzUyMjJfQ0hOTDsgaW5kZXgr
KykKLQkJCXsKLQkJCQlpZiAoQ2hhbm5lbCA9PSBSRjUyMjJSZWdUYWJsZVtpbmRleF0uQ2hhbm5l
bCkKLQkJCQl7Ci0JCQkJCVIzID0gUjMgfCBSRjUyMjJSZWdUYWJsZVtpbmRleF0uUjM7IC8vIHNl
dCBUWCBwb3dlcgotCQkJCQlSVFVTQldyaXRlUkZSZWdpc3RlcihwQWQsIFJGNTIyMlJlZ1RhYmxl
W2luZGV4XS5SMSk7Ci0JCQkJCVJUVVNCV3JpdGVSRlJlZ2lzdGVyKHBBZCwgUkY1MjIyUmVnVGFi
bGVbaW5kZXhdLlIyKTsKLQkJCQkJUlRVU0JXcml0ZVJGUmVnaXN0ZXIocEFkLCBSMyk7Ci0JCQkJ
CVJUVVNCV3JpdGVSRlJlZ2lzdGVyKHBBZCwgUkY1MjIyUmVnVGFibGVbaW5kZXhdLlI0KTsKLQkJ
CQkJcEFkLT5Qb3J0Q2ZnLkxhdGNoUmZSZWdzLkNoYW5uZWwgPSBDaGFubmVsOwotCQkJCQlwQWQt
PlBvcnRDZmcuTGF0Y2hSZlJlZ3MuUjEgPSBSRjUyMjJSZWdUYWJsZVtpbmRleF0uUjE7Ci0JCQkJ
CXBBZC0+UG9ydENmZy5MYXRjaFJmUmVncy5SMiA9IFJGNTIyMlJlZ1RhYmxlW2luZGV4XS5SMjsK
LQkJCQkJcEFkLT5Qb3J0Q2ZnLkxhdGNoUmZSZWdzLlIzID0gUjM7Ci0JCQkJCXBBZC0+UG9ydENm
Zy5MYXRjaFJmUmVncy5SNCA9IFJGNTIyMlJlZ1RhYmxlW2luZGV4XS5SNDsKLQkJCQkJYnJlYWs7
Ci0JCQkJfQotCQkJfQotCQkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoKLQkJCWJyZWFrOwotCX0KLQot
CURCR1BSSU5UKFJUX0RFQlVHX0lORk8sICJBc2ljU3dpdGNoQ2hhbm5lbChSRj0lZCkgdG8gIyVk
LCBUWFB3cj0leCUlID0gJXgsIFIxPTB4JTA4eCwgUjI9MHglMDh4LCBSMz0weCUwOHgsIFI0PTB4
JTA4eFxuIiwKLQkJcEFkLT5Qb3J0Q2ZnLlJmVHlwZSwgCi0JCXBBZC0+UG9ydENmZy5MYXRjaFJm
UmVncy5DaGFubmVsLCAKLQkJcEFkLT5Qb3J0Q2ZnLlR4UG93ZXJQZXJjZW50YWdlLAotCQlwQWQt
PlBvcnRDZmcuQ2hhbm5lbFR4UG93ZXJbQ2hhbm5lbCAtIDFdLAotCQlwQWQtPlBvcnRDZmcuTGF0
Y2hSZlJlZ3MuUjEsIAotCQlwQWQtPlBvcnRDZmcuTGF0Y2hSZlJlZ3MuUjIsIAotCQlwQWQtPlBv
cnRDZmcuTGF0Y2hSZlJlZ3MuUjMsIAotCQlwQWQtPlBvcnRDZmcuTGF0Y2hSZlJlZ3MuUjQpOwot
CQotfQotCi0KLQotLyoKLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCURlc2NyaXB0aW9uOgotCQlUaGlz
IGZ1bmN0aW9uIGlzIHJlcXVpcmVkIGZvciAyNDIxIG9ubHksIGFuZCBzaG91bGQgbm90IGJlIHVz
ZWQgZHVyaW5nCi0JCXNpdGUgc3VydmV5LiBJdCdzIG9ubHkgcmVxdWlyZWQgYWZ0ZXIgTklDIGRl
Y2lkZWQgdG8gc3RheSBhdCBhIGNoYW5uZWwKLQkJZm9yIGEgbG9uZ2VyIHBlcmlvZC4KLQkJV2hl
biB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCwgaXQncyBhbHdheXMgYWZ0ZXIgQXNpY1N3aXRjaENo
YW5uZWwoKS4KLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICovCi1WT0lEIEFzaWNMb2NrQ2hhbm5lbCgK
LQlJTiBQUlQyNTcwQURBUFRFUiBwQWQsIAotCUlOIFVMT05HIENoYW5uZWwpIAotewotCVVDSEFS
CXI3MDsKLQlVU0hPUlQJUnhGYWlsQ250OwotCi0JcmV0dXJuOwotCVJUVVNCUmVhZEJCUFJlZ2lz
dGVyKHBBZCwgNzAsICZyNzApOwotCWlmIChDaGFubmVsID09IDE0KQotCQlyNzAgfD0gMHgwODsJ
Ly8gdHVybiBvbiBKYXBhbiBmaWx0ZXIgYml0Ci0JZWxzZQotCQlyNzAgJj0gMHhmNzsJLy8gdHVy
biBvZmYgSmFwYW4gZmlsdGVyIGJpdAotCVJUVVNCV3JpdGVCQlBSZWdpc3RlcihwQWQsIDcwLCBy
NzApOwotCi0JLy8gQ2xlYXIgZmFsc2UgQ1JDIGR1cm5pbmcgc3dpdGNoIGNoYW5uZWwKLQlSVFVT
QlJlYWRNQUNSZWdpc3RlcihwQWQsIFNUQV9DU1IwLCAmUnhGYWlsQ250KTsKLQotCi0JTmRpc01T
bGVlcCgxMCk7IAotIAotCXN3aXRjaCAocEFkLT5Qb3J0Q2ZnLlJmVHlwZSkKLQl7Ci0JCWNhc2Ug
UkZJQ18yNTIyOgotCQljYXNlIFJGSUNfMjUyNDoKLQkJY2FzZSBSRklDXzI1MjU6Ci0JCWNhc2Ug
UkZJQ181MjIyOgotCQljYXNlIFJGSUNfMjUyNUU6Ci0JCQlwQWQtPlBvcnRDZmcuTGF0Y2hSZlJl
Z3MuUjEgJj0gMHhmZmZkZmZmZjsJLy8gUkYgUjEuYml0MTcgInR1bmVfZW4xIiBPRkYKLQkJCXBB
ZC0+UG9ydENmZy5MYXRjaFJmUmVncy5SMyAmPSAweGZmZmZmZWZmOwkgLy8gUkYgUjMuYml0OCAi
dHVuZV9lbjIiIE9GRgotCQkJUlRVU0JXcml0ZVJGUmVnaXN0ZXIocEFkLCBwQWQtPlBvcnRDZmcu
TGF0Y2hSZlJlZ3MuUjEpOyAKLQkJCVJUVVNCV3JpdGVSRlJlZ2lzdGVyKHBBZCwgcEFkLT5Qb3J0
Q2ZnLkxhdGNoUmZSZWdzLlIzKTsgCi0JCQlEQkdQUklOVChSVF9ERUJVR19JTkZPLCAiQXNpY1Jm
VHVuaW5nRXhlYyhSMT0weCV4LFIzPTB4JXgpXG4iLHBBZC0+UG9ydENmZy5MYXRjaFJmUmVncy5S
MSxwQWQtPlBvcnRDZmcuTGF0Y2hSZlJlZ3MuUjMpOwotCQkJYnJlYWs7Ci0JCQkKLQkJY2FzZSBS
RklDXzI1MjM6Ci0JCQlwQWQtPlBvcnRDZmcuTGF0Y2hSZlJlZ3MuUjMgJj0gMHhmZmZmZmVmZjsJ
IC8vIFJGIFIzLmJpdDggInR1bmVfZW4yIiBPRkYKLQkJCVJUVVNCV3JpdGVSRlJlZ2lzdGVyKHBB
ZCwgcEFkLT5Qb3J0Q2ZnLkxhdGNoUmZSZWdzLlIzKTsgCi0JCQlEQkdQUklOVChSVF9ERUJVR19J
TkZPLCAiQXNpY1JmVHVuaW5nRXhlYyhSMz0weCV4KVxuIixwQWQtPlBvcnRDZmcuTGF0Y2hSZlJl
Z3MuUjMpOwotCQkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoKLQkJCWJyZWFrOwotCX0KLX0KLQotLyoK
LQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotCURlc2NyaXB0aW9uOgotCQlHaXZlcyBDQ0sgVFggcmF0ZSAy
IG1vcmUgZEIgVFggcG93ZXIuCi0JCVRoaXMgcm91dGluZSB3b3JrcyBvbmx5IGluIExJTksgVVAg
aW4gSU5GUkFTVFJVQ1RVUkUgbW9kZS4KLQotCQljYWxjdWxhdGUgZGVzaXJlZCBUeCBwb3dlciBp
biBSRiBSMy5UeDB+NSwJc2hvdWxkIGNvbnNpZGVyIC0KLQkJMS4gVHhQb3dlclBlcmNlbnRhZ2UK
LQkJMi4gYXV0byBjYWxpYnJhdGlvbiBiYXNlZCBvbiBUU1NJIGZlZWRiYWNrCi0JCTMuIGV4dHJh
IDIgZGIgZm9yIENDSwotCQk0LiAtMTAgZGIgdXBvbiB2ZXJ5LXNob3J0IGRpc3RhbmNlIChBdmdS
U1NJID49IC00MGRiKSB0byBBUAotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KLVZPSUQgQXNpY0Fk
anVzdFR4UG93ZXIoCi0JSU4gUFJUMjU3MEFEQVBURVIgcEFkKSAKLXsKLQlVTE9ORyBSMywgQ2hh
bm5lbCwgQ3VyclR4UHdyOwotCi0JaWYgKChwQWQtPlBvcnRDZmcuQ2hhbm5lbCA+PSAxKSAmJiAo
cEFkLT5Qb3J0Q2ZnLkNoYW5uZWwgPD0gMTQpKQotCQlDaGFubmVsID0gcEFkLT5Qb3J0Q2ZnLkNo
YW5uZWw7Ci0JZWxzZSAKLQkJQ2hhbm5lbCA9IDE7ICAvLyBkb24ndCBoYXZlIGNhbGlicmF0aW9u
IGluZm8gZm9yIDExQSwgdGVtcG9yYXJpbHkgdXNlIENoYW5uZWwgMQotCQotCS8vIGdldCBUWCBQ
b3dlciBiYXNlIGZyb20gRTJQUk9NCi0JUjMgPSBwQWQtPlBvcnRDZmcuQ2hhbm5lbFR4UG93ZXJb
Q2hhbm5lbCAtIDFdOwotCWlmIChSMyA+IDMxKSAgUjMgPSAzMTsKLQotCS8vIEUyUFJPTSBzZXR0
aW5nIGlzIGNhbGlicmF0ZWQgZm9yIG1heGltdW0gVFggcG93ZXIgKGkuZS4gMTAwJSkKLQkvLyBX
ZSBsb3dlciBUWCBwb3dlciBoZXJlIGFjY29yZGluZyB0byB0aGUgcGVyY2VudGFnZSBzcGVjaWZp
ZWQgZnJvbSBVSQotCWlmIChwQWQtPlBvcnRDZmcuVHhQb3dlclBlcmNlbnRhZ2UgPT0gMHhmZmZm
ZmZmZikgICAgICAgLy8gQVVUTyBUWCBQT1dFUiBjb250cm9sCi0JewotCQkvLyBvbmx5IElORlJB
U1RSVUNUVVJFIG1vZGUgYW5kIDEwMCUgVFggcG93ZXIgbmVlZCBmdXJ0aHVyIGNhbGlicmF0aW9u
Ci0JCWlmIChwQWQtPk1lZGlhU3RhdGUgPT0gTmRpc01lZGlhU3RhdGVDb25uZWN0ZWQpCi0JCXsK
LQkJCS8vIGxvdyBUWCBwb3dlciB1cG9uIHZlcnktc2hvcnQgZGlzdGFuY2UgdG8gQVAgdG8gc29s
dmUgc29tZSB2ZW5kb3IncyBBUCBSWCBwcm9ibGVtCi0JCQkvLyBpbiB0aGlzIGNhc2UsIG5vIFRT
U0kgY29tcGVuc2F0aW9uIGlzIHJlcXVpcmVkLgotCQkJaWYgKChwQWQtPkRyc0NvdW50ZXJzLmZO
b2lzeUVudmlyb25tZW50ID09IEZBTFNFKSAmJiAKLQkJCSAgICAocEFkLT5Qb3J0Q2ZnLkF2Z1Jz
c2kgPiAocEFkLT5CQlBUdW5pbmdQYXJhbWV0ZXJzLlJTU0lUb0RibU9mZnNldCAtIFJTU0lfRk9S
X0xPV0VTVF9UWF9QT1dFUikpKQotCQkJCVIzIC09IExPV0VTVF9UWF9QT1dFUl9ERUxUQTsKLQkJ
CWVsc2UgaWYgKChwQWQtPkRyc0NvdW50ZXJzLmZOb2lzeUVudmlyb25tZW50ID09IEZBTFNFKSAm
JiAKLQkJCSAgICAocEFkLT5Qb3J0Q2ZnLkF2Z1Jzc2kgPiAocEFkLT5CQlBUdW5pbmdQYXJhbWV0
ZXJzLlJTU0lUb0RibU9mZnNldCAtIFJTU0lfRk9SX0xPV19UWF9QT1dFUikpKQotCQkJCVIzIC09
IExPV19UWF9QT1dFUl9ERUxUQTsKLQkJCS8vIDIwMDQtMDMtMTYgZ2l2ZSBPRkRNIHJhdGVzIGxv
d2VyIHRoYW4gNDggbWJwcyAyIG1vcmUgREIKLQkJCWVsc2UgaWYgKChwQWQtPlBvcnRDZmcuVHhS
YXRlIDw9IFJBVEVfMzYpICYmIChwQWQtPlBvcnRDZmcuVHhSYXRlID4gUkFURV8xMSkpCi0JCQl7
Ci0JCQkgICAgUjMgKz0yOwotCQkJICAgIGlmIChSMyA+IDMxKSBSMyA9IDMxOwotCQkJfQotICAg
ICAgICAgICAgCi0KLQkJCS8vIDIgZXhjbHVzaXZlIHJ1bGVzIGFwcGxpZWQgb24gQ0NLIHJhdGVz
IG9ubHkgLQotCQkJLy8JICAxLiBhbHdheXMgcGx1cyAyIGRiIGZvciBDQ0sKLQkJCS8vCSAgMi4g
YWRqdXN0IFRYIFBvd2VyIGJhc2VkIG9uIFRTU0kKLQkJCWVsc2UgCi0JCQlpZiAocEFkLT5Qb3J0
Q2ZnLlR4UmF0ZSA8PSBSQVRFXzExKQotCQkJewotCQkJCS8vIGlmICJhdXRvIGNhbGlicmF0aW9u
IGJhc2VkIG9uIFRTU0kiIGlzIG5vdCByZXF1aXJlZCwgdGhlbgotCQkJCS8vIGFsd2F5cyBnaXZl
IENDSyAyIG1vcmUgZGIKLQkJCQlpZiAocEFkLT5Qb3J0Q2ZnLmJBdXRvVHhBZ2MgPT0gRkFMU0Up
Ci0JCQkJewotCQkJCQkvLyBkbyBub3QgZ2l2ZSBSQVRFXzExIDIgbW9yZSBkYiB0byBhdm9pZCB0
aGUgY2FzZSB0aGF0Ci0JCQkJCS8vIHRoZSBvdXRnb2luZyBOVUxMIGZyYW1lIChmb3IgcmF0ZSB1
cGdyYWRlIGV2YWx1YXRpb24pIAotCQkJCQkvLyB1c2luZyAxMiBNYnBzIE9GRE0gcmF0ZSBpcyBv
dmVyLXBvd2VyZWQKLQkJCQkJaWYgKHBBZC0+UG9ydENmZy5UeFJhdGUgPD0gUkFURV81XzUpCi0J
CQkJCXsKLQkJCQkJCVIzICs9IDI7ICAvLyBwbHVzIDIgZGIKLQkJCQkJCWlmIChSMyA+IDMxKSBS
MyA9IDMxOwotCQkJCQl9Ci0JCQkJfQotCQkJCQotCQkJCS8vIEF1dG8gY2FsaWJyYXRlIFR4IEFH
QyBpZiBiQXV0b1R4QWdjIGlzIFRSVUUgYW5kIFRYIHJhdGUgaXMgQ0NLLCAKLQkJCQkvLyBiZWNh
dXNlIEUyUFJPTSdzIFRTU0kgcmVmZXJlbmNlIGlzIHZhbGlkIG9ubHkgaW4gQ0NLIHJhbmdlLgot
CQkJCWVsc2UKLQkJCQl7Ci0JCQkJCVVDSEFSCVIxLFR4UG93ZXJSZWYsIFRzc2lSZWY7Ci0KLQkJ
CQkJUjMgPSAocEFkLT5Qb3J0Q2ZnLkxhdGNoUmZSZWdzLlIzID4+IDkpICYgMHgwMDAwMDAxZjsK
LQkJCQkJaWYgKHBBZC0+TWxtZS5QZXJpb2RpY1JvdW5kICUgNCA9PSAwKSAvLyBldmVyeSA0IHNl
Y29uZAotCQkJCQl7Ci0JCQkJCVR4UG93ZXJSZWYgPSBwQWQtPlBvcnRDZmcuQ2hhbm5lbFR4UG93
ZXJbQ2hhbm5lbCAtIDFdOwotCQkJCQlUc3NpUmVmICAgID0gcEFkLT5Qb3J0Q2ZnLkNoYW5uZWxU
c3NpUmVmW0NoYW5uZWwgLSAxXTsKLQkJCQkJUlRVU0JSZWFkQkJQUmVnaXN0ZXIocEFkLCBCQlBf
VHhfVHNzaSwJJlIxKTsKLQkJCQkJaWYgKChUc3NpUmVmID49IChSMSArIHBBZC0+UG9ydENmZy5D
aGFubmVsVHNzaURlbHRhKSkgfHwKLQkJCQkJCShUc3NpUmVmIDw9IChSMSAtIHBBZC0+UG9ydENm
Zy5DaGFubmVsVHNzaURlbHRhKSkpCi0JCQkJCXsKLQkJCQkJCS8vIE5lZWQgUjMgYWRqdXN0bWVu
dC4gSG93ZXZlciwgd2UgaGF2ZSB0byBtYWtlIHN1cmUgdGhlcmUgaXMgb25seQotCQkJCQkJLy8g
cGx1cyAvIG1pbnVzIDUgdmFyaWF0aW9uIGFsbG93ZWQKLQkJCQkJCWlmIChUc3NpUmVmID4gUjEp
Ci0JCQkJCQl7CQkJCQotCQkJCQkJCVIzID0gKFIzIDwgKFVMT05HKSAoVHhQb3dlclJlZiArIDUp
KSA/IChSMyArIDEpIDogUjM7Ci0JCQkJCQkJaWYgKFIzID4gMzEpCi0JCQkJCQkJCVIzID0gMzE7
Ci0JCQkJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCJUU1NJKFIxKT0lZCwgKytUeFB3cj0l
ZFxuIiwgUjEsIFIzKTsKLQkJCQkJCQl9Ci0JCQkJCQkJZWxzZQotCQkJCQkJCXsKLQkJCQkJCQkJ
UjMgPSAoUjMgPiAoVUxPTkcpIChUeFBvd2VyUmVmIC0gNSkpID8gKFIzIC0gMSkgOiBSMzsKLQkJ
CQkJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsIlRTU0koUjEpPSVkLCAtLVR4UHdyPSVkXG4i
LCBSMSwgUjMpOwotCQkJCQkJCX0KLQkJCQkJCX0KLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJCQot
CQl9Ci0JfQotCWVsc2UgLy8gZml4ZWQgQVVUTyBUWCBwb3dlcgotCXsKLQkJaWYgKHBBZC0+UG9y
dENmZy5UeFBvd2VyUGVyY2VudGFnZSA+IDkwKSAgLy8gOTEgfiAxMDAlLCB0cmVhdCBhcyAxMDAl
IGluIHRlcm1zIG9mIG1XCi0JCSAgICA7Ci0JCWVsc2UgaWYgKHBBZC0+UG9ydENmZy5UeFBvd2Vy
UGVyY2VudGFnZSA+IDYwKSAgLy8gNjEgfiA5MCUsIHRyZWF0IGFzIDc1JSBpbiB0ZXJtcyBvZiBt
VwotCQkgICAgUjMgLT0gMTsKLQkJZWxzZSBpZiAocEFkLT5Qb3J0Q2ZnLlR4UG93ZXJQZXJjZW50
YWdlID4gMzApICAvLyAzMSB+IDYwJSwgdHJlYXQgYXMgNTAlIGluIHRlcm1zIG9mIG1XCi0JCSAg
ICBSMyAtPSAzOwotCQllbHNlIGlmIChwQWQtPlBvcnRDZmcuVHhQb3dlclBlcmNlbnRhZ2UgPiAx
NSkgIC8vIDE2IH4gMzAlLCB0cmVhdCBhcyAyNSUgaW4gdGVybXMgb2YgbVcKLQkJICAgIFIzIC09
IDY7Ci0JCWVsc2UgaWYgKHBBZC0+UG9ydENmZy5UeFBvd2VyUGVyY2VudGFnZSA+IDkpICAgLy8g
MTAgfiAxNSUsIHRyZWF0IGFzIDEyLjUlIGluIHRlcm1zIG9mIG1XCi0JCSAgICBSMyAtPSA5Owot
CQllbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDAgfiA5
ICUsIHRyZWF0IGFzIE1JTih+MyUpIGluIHRlcm1zIG9mIG1XCi0JCSAgICBSMyAtPSAxMjsKLQkJ
aWYgKFIzID4gMzEpICBSMyA9IDA7ICAgLy8gbmVnYXRpdmUgdmFsdWUsIHNldCBhcyBtaW5pbXVt
IDAKLQotCQkvLyAyMDA0LTAzLTE2IGdpdmUgVFggcmF0ZXMgPD0gMzYgbWJwcyAyIG1vcmUgREIK
LQkJaWYgKHBBZC0+UG9ydENmZy5UeFJhdGUgPD0gUkFURV8zNikKLQkJewotCQkgICAgUjMgKz0y
OwotCQkgICAgaWYgKFIzID4gMzEpIFIzID0gMzE7Ci0JCX0KLQl9Ci0KLQkKLQkvLyBjb21wYXJl
IHRoZSBkZXNpcmVkIFIzLlR4UHdyIHZhbHVlIHdpdGggY3VycmVudCBSMywgaWYgbm90IGVxdWFs
Ci0JLy8gc2V0IG5ldyBSMy5UeFB3cgotCUN1cnJUeFB3ciA9IChwQWQtPlBvcnRDZmcuTGF0Y2hS
ZlJlZ3MuUjMgPj4gOSkgJiAweDAwMDAwMDFmOwotCWlmIChDdXJyVHhQd3IgIT0gUjMpCi0Jewot
CQlDdXJyVHhQd3IgPSBSMzsKLQkJUjMgPSAocEFkLT5Qb3J0Q2ZnLkxhdGNoUmZSZWdzLlIzICYg
MHhmZmZmYzFmZikgfCAoUjMgPDwgOSk7Ci0JCVJUVVNCV3JpdGVSRlJlZ2lzdGVyKHBBZCwgUjMp
OwotCQlwQWQtPlBvcnRDZmcuTGF0Y2hSZlJlZ3MuUjMgPSBSMzsKLQl9Ci0gICAgREJHUFJJTlQo
UlRfREVCVUdfSU5GTywgIkFzaWNBZGp1c3RUeFBvd2VyID0gJWQsIEF2Z1Jzc2kgPSAlZFxuIiwK
LSAgICAgICAgQ3VyclR4UHdyLCBwQWQtPlBvcnRDZmcuQXZnUnNzaSAtIHBBZC0+QkJQVHVuaW5n
UGFyYW1ldGVycy5SU1NJVG9EYm1PZmZzZXQpOwotCQotfQotCi0KLQotLyoKLQk9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotCURlc2NyaXB0aW9uOgotCQlwdXQgUEhZIHRvIHNsZWVwIGhlcmUsIGFuZCBzZXQg
bmV4dCB3YWtldXAgdGltZXIKLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICovCi1WT0lEIEFzaWNTbGVl
cFRoZW5BdXRvV2FrZXVwKAotCUlOIFBSVDI1NzBBREFQVEVSIHBBZCwgCi0JSU4gVVNIT1JUIFRi
dHROdW1Ub05leHRXYWtlVXApIAotewotCU1BQ19DU1IxOF9TVFJVQyBDc3IyMDsKLQlNQUNfQ1NS
MTdfU1RSVUMgUHdyY3NyMTsKLQotCS8vIHdlIGhhdmUgZGVjaWRlZCB0byBTTEVFUCwgc28gYXQg
bGVhc3QgZG8gaXQgZm9yIGEgQkVBQ09OIHBlcmlvZC4KLQlpZiAoVGJ0dE51bVRvTmV4dFdha2VV
cD09MCkKLQkJVGJ0dE51bVRvTmV4dFdha2VVcD0xOwotCQotCS8vIFBXUkNTUjAgcmVtYWlucyB1
bnRvdWNoZWQKLQkKLQkvLyBzZXQgQ1NSMjAgZm9yIG5leHQgd2FrZXVwCi0JQ3NyMjAudmFsdWUg
PSAwOwotCUNzcjIwLmZpZWxkLk51bUJjbkJlZm9yZVdha2V1cCA9IFRidHROdW1Ub05leHRXYWtl
VXAgLSAxOwotCUNzcjIwLmZpZWxkLkRlbGF5QWZ0ZXJCY24gPSAocEFkLT5Qb3J0Q2ZnLkJlYWNv
blBlcmlvZCAtIDIwKTsgLy8gMjAgVFUgYWhlYWQgb2YgZGVzaXJlZCBUQlRUCi0JQ3NyMjAuZmll
bGQuQXV0b1dha2UgPSAxOwotCVJUVVNCV3JpdGVNQUNSZWdpc3RlcihwQWQsIE1BQ19DU1IxOCwg
Q3NyMjAudmFsdWUpOwotCi0JLy8gc2V0IFBXUkNTUjEgdG8gcHV0IFBIWSBpbnRvIFNMRUVQIHN0
YXRlCi0JUHdyY3NyMS52YWx1ZSA9IDA7Ci0JUHdyY3NyMS5maWVsZC5QdXRUb1NsZWVwID0gMTsK
LQlQd3Jjc3IxLmZpZWxkLkJicERlc2lyZVN0YXRlID0gMTsgLy8gMDE6U0xFRVAKLQlQd3Jjc3Ix
LmZpZWxkLlJmRGVzaXJlU3RhdGUgPSAxOyAgLy8gMDE6U0xFRVAKLQlSVFVTQldyaXRlTUFDUmVn
aXN0ZXIocEFkLCBNQUNfQ1NSMTcsIFB3cmNzcjEudmFsdWUpOwotCVB3cmNzcjEuZmllbGQuUHV0
VG9TbGVlcCA9IDE7Ci0JUlRVU0JXcml0ZU1BQ1JlZ2lzdGVyKHBBZCwgTUFDX0NTUjE3LCBQd3Jj
c3IxLnZhbHVlKTsKLQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwiTUFDX0NTUjE3ID0gMHgleCAo
QXNpY1NsZWVwVGhlbkF1dG9XYWtldXApXG4iLCBQd3Jjc3IxLnZhbHVlKTsKLQlwQWQtPlBvcnRD
ZmcuUHNzID0gUFdSX1NBVkU7Ci19Ci0KLS8qCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQlEZXNjcmlw
dGlvbjoKLQkJQXNpY0ZvcmNlV2FrZXVwKCkgaXMgdXNlZCB3aGVuZXZlciBtYW51YWwgd2FrZXVw
IGlzIHJlcXVpcmVkCi0JCUFzaWNGb3JjZVNsZWVwKCkgc2hvdWxkIG9ubHkgYmUgdXNlZCB3aGVu
IE1hc3NvYz09RkFMU0UuIFdoZW4KLQkJTWFzc29jPT1UUlVFLCB3ZSBzaG91bGQgdXNlIEFzaWNT
bGVlcFRoZW5BdXRvV2FrZXVwKCkgaW5zdGVhZC4KLQk9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICovCi1W
T0lEIEFzaWNGb3JjZVNsZWVwKAotCUlOIFBSVDI1NzBBREFQVEVSIHBBZCkKLXsKLQlNQUNfQ1NS
MTdfU1RSVUMgUHdyY3NyMTsKLQotCWlmIChwQWQtPlBvcnRDZmcuUHNzID09IFBXUl9BQ1RJVkUp
Ci0JewotCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwiPj4+QXNpY0ZvcmNlU2xlZXA8PDxcbiIp
OwotCQlQd3Jjc3IxLnZhbHVlID0gMDsKLQkJUHdyY3NyMS5maWVsZC5SZkRlc2lyZVN0YXRlID0g
MTsgLy8gMDE6U0xFRVAgc3RhdGUKLQkJUHdyY3NyMS5maWVsZC5CYnBEZXNpcmVTdGF0ZSA9IDE7
IC8vIDAxOlNMRUVQIHN0YXRlCi0JCVB3cmNzcjEuZmllbGQuU2V0U3RhdGUgPSAxOwotCQlSVFVT
QldyaXRlTUFDUmVnaXN0ZXIocEFkLCBNQUNfQ1NSMTcsIFB3cmNzcjEudmFsdWUpOwotCQlwQWQt
PlBvcnRDZmcuUHNzID0gUFdSX1NBVkU7Ci0JfQotfQotCi1WT0lEIEFzaWNGb3JjZVdha2V1cCgK
LQlJTiBQUlQyNTcwQURBUFRFUiBwQWQpCi17Ci0JTUFDX0NTUjE3X1NUUlVDIFB3cmNzcjE7Ci0K
LQlpZiAocEFkLT5Qb3J0Q2ZnLlBzcyA9PSBQV1JfU0FWRSkKLQl7Ci0JCVVJTlQgaSwgajsKLQkJ
VVNIT1JUIHRlbXA7Ci0JCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCItLS0+QXNpY0ZvcmNlV2Fr
ZXVwXG4iKTsKLQotCQkvLyAyMDAzLTEyLTE5IHR1cm4gT0ZGIGF1dG8gd2FrZXVwIGZpcnN0Ci0J
CVJUVVNCV3JpdGVNQUNSZWdpc3RlcihwQWQsIE1BQ19DU1IxOCwgMCk7Ci0JCVB3cmNzcjEudmFs
dWUgPSAwOwotCQlQd3Jjc3IxLmZpZWxkLlJmRGVzaXJlU3RhdGUgPSAzOyAvLyAxMTpBV0FLRSBz
dGF0ZQotCQlQd3Jjc3IxLmZpZWxkLkJicERlc2lyZVN0YXRlID0gMzsgLy8gMTE6QVdBS0Ugc3Rh
dGUKLQkJUlRVU0JXcml0ZU1BQ1JlZ2lzdGVyKHBBZCwgTUFDX0NTUjE3LCBQd3Jjc3IxLnZhbHVl
KTsKLQkJUHdyY3NyMS5maWVsZC5TZXRTdGF0ZSA9IDE7Ci0JCVJUVVNCV3JpdGVNQUNSZWdpc3Rl
cihwQWQsIE1BQ19DU1IxNywgUHdyY3NyMS52YWx1ZSk7Ci0JCS8vUlRNUHVzZWNEZWxheSgzMDAw
MCk7Ci0JCU5kaXNNU2xlZXAoMzApOwotCQlSVFVTQlJlYWRNQUNSZWdpc3RlcihwQWQsIE1BQ19D
U1IxNywgJnRlbXApOwotCQlpZiAoKHRlbXAgJiAweDAxRTApID09IDB4MDFFMCkKLQkJewotCQkJ
REJHUFJJTlRfUkFXKFJUX0RFQlVHX1RSQUNFLCAiQVNJQyBhd2FrZW4hISFcbiIpOwotCQkJaSA9
IDA7Ci0JCX0KLQkJZWxzZQotCQl7Ci0JCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfVFJBQ0UsICJB
U0lDIG5vdCBhd2FrZW4geWV0ISEhXG4iKTsKLQkJICAgICAgICBQd3Jjc3IxLnZhbHVlID0gMDsK
LQkJICAgICAgICBQd3Jjc3IxLmZpZWxkLlJmRGVzaXJlU3RhdGUgPSAzOyAvLyAxMTpBV0FLRSBz
dGF0ZQotCQkgICAgICAgIFB3cmNzcjEuZmllbGQuQmJwRGVzaXJlU3RhdGUgPSAzOyAvLyAxMTpB
V0FLRSBzdGF0ZQotCQkgICAgICAgIFB3cmNzcjEuZmllbGQuU2V0U3RhdGUgPSAxOwotCQkJaSA9
IDU7Ci0JCX0KLQkJZm9yIChqID0gMDsgaiA8IDM7IGorKykKLQkJewotCQkJaWYgKGkgPT0gNSkK
LQkJCXsKLQkJCQlSVFVTQldyaXRlTUFDUmVnaXN0ZXIocEFkLCBNQUNfQ1NSMTcsIFB3cmNzcjEu
dmFsdWUpOwotCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCJNQUNfQ1NSMTcgPSAweCV4IChB
c2ljRm9yY2VXYWtldXApXG4iLCBQd3Jjc3IxLnZhbHVlKTsKLQkJCX0KLQkJCWVsc2UKLQkJCQli
cmVhazsKLQotCQkJZm9yIChpID0gMDsgaSA8IDU7IGkrKykKLQkJCXsKLQkJCQkvL1JUTVB1c2Vj
RGVsYXkoNTAwMCk7Ci0JCQkJTmRpc01TbGVlcCg1KTsKLQkJCQlSVFVTQlJlYWRNQUNSZWdpc3Rl
cihwQWQsIE1BQ19DU1IxNywgJnRlbXApOwotCQkJCWlmICgodGVtcCAmIDB4MDFFMCkgPT0gMHgw
MUUwKQotCQkJCXsKLQkJCQkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX1RSQUNFLCAiQVNJQyBhd2Fr
ZW4hISFcbiIpOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQkJZWxzZQotCQkJCXsKLQkJCQkJREJH
UFJJTlRfUkFXKFJUX0RFQlVHX1RSQUNFLCAiQVNJQyBub3QgYXdha2VuIHlldCEhIVxuIik7Ci0J
CQkJfQotCQkJfQotCQl9Ci0JCi0JCXBBZC0+UG9ydENmZy5Qc3MgPSBQV1JfQUNUSVZFOwotCQlE
QkdQUklOVChSVF9ERUJVR19UUkFDRSwiPC0tLUFzaWNGb3JjZVdha2V1cFxuIik7Ci0JfQotfQot
Ci0vKgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0JRGVzY3JpcHRpb246Ci0JPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLSAqLwotVk9JRCBBc2ljU2V0QnNzaWQoCi0JSU4gUFJUMjU3MEFEQVBURVIgcEFkLCAKLQlJ
TiBNQUNBRERSICpCc3NpZCkgCi17Ci0JVVNIT1JUCQkgICBBZGRyNDsKLQotCUFkZHI0ID0gKFVT
SE9SVCkoQnNzaWQtPk9jdGV0WzBdKSB8IChVU0hPUlQpKEJzc2lkLT5PY3RldFsxXSA8PCA4KTsK
LQlSVFVTQldyaXRlTUFDUmVnaXN0ZXIocEFkLCBNQUNfQ1NSNSwgQWRkcjQpOwotCi0JQWRkcjQg
PSAoVVNIT1JUKShCc3NpZC0+T2N0ZXRbMl0pIHwgKFVTSE9SVCkoQnNzaWQtPk9jdGV0WzNdIDw8
IDgpOwotCVJUVVNCV3JpdGVNQUNSZWdpc3RlcihwQWQsIE1BQ19DU1I2LCBBZGRyNCk7Ci0KLQlB
ZGRyNCA9IChVU0hPUlQpKEJzc2lkLT5PY3RldFs0XSkgfCAoVVNIT1JUKShCc3NpZC0+T2N0ZXRb
NV0gPDwgOCk7Ci0JUlRVU0JXcml0ZU1BQ1JlZ2lzdGVyKHBBZCwgTUFDX0NTUjcsIEFkZHI0KTsK
LX0KLQotLyoKLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCURlc2NyaXB0aW9uOgotCT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0gKi8KLVZPSUQgQXNpY0Rpc2FibGVTeW5jKAotCUlOIFBSVDI1NzBBREFQVEVSIHBB
ZCkgCi17Ci0JREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsIi0tLT5EaXNhYmxlIFRTRiBzeW5jaHJv
bml6YXRpb25cbiIpOwotCS8vcGVyIGplcnJ5J3MgcmVxdWVzdCAgIAlSVFVTQlJlYWRNQUNSZWdp
c3RlcihwQWQsIFRYUlhfQ1NSMTksIDkpOwotfQotCi0vKgotCT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0J
RGVzY3JpcHRpb246Ci0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqLwotVk9JRCBBc2ljRW5hYmxlQnNz
U3luYygKLQlJTiBQUlQyNTcwQURBUFRFUiBwQWQpIAotewotCVVTSE9SVCB0ZW1wOwotCVRYUlhf
Q1NSMThfU1RSVUMgQ3NyMTg7Ci0JVFhSWF9DU1IxOV9TVFJVQyBDc3IxNDsKLQlUWFJYX0NTUjIw
X1NUUlVDIEJjbmNzcjE7Ci0KLQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwiLS0tPkFzaWNFbmFi
bGVCc3NTeW5jKElORlJBIG1vZGUpXG4iKTsKLQkKLQlSVFVTQldyaXRlTUFDUmVnaXN0ZXIocEFk
LCBUWFJYX0NTUjE5LCAwKTsKLQkKLQl0ZW1wID0gKHBBZC0+UG9ydENmZy5CZWFjb25QZXJpb2Qg
PDwgOCk7Ci0JQ3NyMTguZmllbGQuT2Zmc2V0ID0gKHRlbXAgJiAweDAwMEYpOwotCUNzcjE4LmZp
ZWxkLkludGVydmFsID0gKHRlbXAgPj4gNik7Ci0JUlRVU0JXcml0ZU1BQ1JlZ2lzdGVyKHBBZCwg
VFhSWF9DU1IxOCwgQ3NyMTgudmFsdWUpOwotCQotCUJjbmNzcjEudmFsdWUgPSAwOwotCUJjbmNz
cjEuZmllbGQuQmVhY29uRXhwZWN0V2luZG93ID0gMjsKLQlCY25jc3IxLmZpZWxkLk9mZnNldCA9
IFRCVFRfUFJFTE9BRF9USU1FID4+IDY7IC8vIHdlIGd1ZXNzIFRCVFQgaXMgMiBUVSBhaGVhZCBv
ZiBCRUFDT04tUnhFbmQgdGltZQotCVJUVVNCV3JpdGVNQUNSZWdpc3RlcihwQWQsIFRYUlhfQ1NS
MjAsIEJjbmNzcjEudmFsdWUpOwotCi0JCi0JQ3NyMTQudmFsdWUgPSAwOwotCUNzcjE0LmZpZWxk
LlRzZkNvdW50ID0gMTsKLQlDc3IxNC5maWVsZC5Uc2ZTeW5jID0gMTsgLy8gc3luYyBUU0YgaW4g
SU5GUkFTVFJVQ1RVUkUgbW9kZQotCUNzcjE0LmZpZWxkLkJlYWNvbkdlbiA9IDA7Ci0vLwlDc3Ix
NC5maWVsZC5UYmNuUHJlbG9hZCA9IChwQWQtPlBvcnRDZmcuQmVhY29uUGVyaW9kIC0gMzApIDw8
IDQ7IC8vIFRPRE86ID8/Pz8gMSBUVSA/Pz8KLQlDc3IxNC5maWVsZC5UYmNuID0gMTsKLQlSVFVT
QldyaXRlTUFDUmVnaXN0ZXIocEFkLCBUWFJYX0NTUjE5LCBDc3IxNC52YWx1ZSk7Ci19Ci0KLS8q
Ci0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLQlEZXNjcmlwdGlvbjoKLQlOb3RlOiAKLQkJQkVBQ09OIGZy
YW1lIGluIHNoYXJlZCBtZW1vcnkgc2hvdWxkIGJlIGJ1aWx0IG9rIGJlZm9yZSB0aGlzIHJvdXRp
bmUKLQkJY2FuIGJlIGNhbGxlZC4gT3RoZXJ3aXNlLCBhIGdhcmJhZ2UgZnJhbWUgbWF5YmUgdHJh
bnNtaXR0ZWQgb3V0IGV2ZXJ5Ci0JCUJlYWNvbiBwZXJpb2QuCi0JPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LSAqLwotVk9JRCBBc2ljRW5hYmxlSWJzc1N5bmMoCi0JSU4gUFJUMjU3MEFEQVBURVIgcEFkKQot
ewotCVVTSE9SVCB0ZW1wOwotCVRYUlhfQ1NSMThfU1RSVUMgQ3NyMTg7Ci0JVFhSWF9DU1IxOV9T
VFJVQyBDc3IxNDsKLQlUWFJYX0NTUjIwX1NUUlVDIEJjbmNzcjE7Ci0JCi0JREJHUFJJTlQoUlRf
REVCVUdfVFJBQ0UsIi0tLT5Bc2ljRW5hYmxlSWJzc1N5bmMoQURIT0MgbW9kZSlcbiIpOwotCi0J
UlRVU0JXcml0ZU1BQ1JlZ2lzdGVyKHBBZCwgVFhSWF9DU1IxOSwgMCk7Ci0JTWFrZUlic3NCZWFj
b24ocEFkKTsKLQotCXRlbXAgPSAocEFkLT5Qb3J0Q2ZnLkJlYWNvblBlcmlvZCA8PCA4KTsKLQlD
c3IxOC5maWVsZC5PZmZzZXQgPSAodGVtcCAmIDB4MDAwRik7Ci0JQ3NyMTguZmllbGQuSW50ZXJ2
YWwgPSAodGVtcCA+PiA2KTsKLQlSVFVTQldyaXRlTUFDUmVnaXN0ZXIocEFkLCBUWFJYX0NTUjE4
LCBDc3IxOC52YWx1ZSk7Ci0KLQlCY25jc3IxLnZhbHVlID0gMDsKLQlCY25jc3IxLmZpZWxkLk9m
ZnNldCA9IDB4MTQwOwotCVJUVVNCV3JpdGVNQUNSZWdpc3RlcihwQWQsIFRYUlhfQ1NSMjAsIEJj
bmNzcjEudmFsdWUpOwotCQotCUNzcjE0LnZhbHVlID0gMDsKLQlDc3IxNC5maWVsZC5Uc2ZDb3Vu
dCA9IDE7Ci0JQ3NyMTQuZmllbGQuVHNmU3luYyA9IDI7IC8vIHN5bmMgVFNGIGluIElCU1MgbW9k
ZQotCUNzcjE0LmZpZWxkLlRiY24gPSAxOwotCUNzcjE0LmZpZWxkLkJlYWNvbkdlbiA9IDE7Ci0J
UlRVU0JXcml0ZU1BQ1JlZ2lzdGVyKHBBZCwgVFhSWF9DU1IxOSwgQ3NyMTQudmFsdWUpOwotCVJU
VVNCV3JpdGVNQUNSZWdpc3RlcihwQWQsIFRYUlhfQ1NSMTksIDApOwotCUNzcjE0LnZhbHVlID0g
MDsKLQlDc3IxNC5maWVsZC5Uc2ZDb3VudCA9IDE7Ci0JQ3NyMTQuZmllbGQuVHNmU3luYyA9IDI7
IC8vIHN5bmMgVFNGIGluIElCU1MgbW9kZQotCUNzcjE0LmZpZWxkLlRiY24gPSAxOwotCUNzcjE0
LmZpZWxkLkJlYWNvbkdlbiA9IDE7Ci0JUlRVU0JXcml0ZU1BQ1JlZ2lzdGVyKHBBZCwgVFhSWF9D
U1IxOSwgQ3NyMTQudmFsdWUpOwotCS8vCi0JLy8gU25pY2UgQURIT0MgQmVhY29uIEdlbmVyYXRp
b24gd2lsbCBnZXQgZmFpbGVkLgotCS8vIFRvIHByZXZlbnQgdGhhdCwgcHJvZ3JhbSB0aGUgUmVn
aXN0ZXIgVFhSWF9DU1IxOSBhZ2Fpbi4KLQkvLyAgICAKLQlSVFVTQldyaXRlTUFDUmVnaXN0ZXIo
cEFkLCBUWFJYX0NTUjE5LCAwKTsKLQotCUNzcjE0LnZhbHVlID0gMDsKLQlDc3IxNC5maWVsZC5U
c2ZDb3VudCA9IDE7Ci0JQ3NyMTQuZmllbGQuVHNmU3luYyA9IDI7IC8vIHN5bmMgVFNGIGluIElC
U1MgbW9kZQotCUNzcjE0LmZpZWxkLlRiY24gPSAxOwotCUNzcjE0LmZpZWxkLkJlYWNvbkdlbiA9
IDE7Ci0JUlRVU0JXcml0ZU1BQ1JlZ2lzdGVyKHBBZCwgVFhSWF9DU1IxOSwgQ3NyMTQudmFsdWUp
OwotfQotCi0vKiBGbGFzaCB0aGUgUy9XIExFRCBwZXJpb2RpY2FsbHkuIC0gUGF1bCBDaGVuICov
Ci1WT0lEIEFzaWNMZWRQZXJpb2RpY0V4ZWMoCi0JSU4JdW5zaWduZWQgbG9uZyBkYXRhKSAKLXsK
LX0KLQotLyoKLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCURlc2NyaXB0aW9uOgotCT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0gKi8KLVZPSUQgQXNpY1NldFNsb3RUaW1lKAotCUlOIFBSVDI1NzBBREFQVEVSIHBB
ZCwKLQlJTiBCT09MRUFOIFVzZVNob3J0U2xvdFRpbWUpIAotewotCVVTSE9SVAkJc2xvdHRpbWU9
MjA7Ci0JVUNIQVIgUGh5TW9kZTsKLQlwQWQtPlBvcnRDZmcuU2hvcnRTbG90SW5Vc2VkID0gVXNl
U2hvcnRTbG90VGltZTsKLQkKLQlQaHlNb2RlID0gcEFkLT5Qb3J0Q2ZnLlBoeU1vZGU7Ci0JaWYg
KFBoeU1vZGUgPT0gUEhZXzExQUJHX01JWEVEKQotCXsKLQkJaWYgKHBBZC0+UG9ydENmZy5DaGFu
bmVsIDw9MTQpCi0JCQlQaHlNb2RlID0gUEhZXzExQkdfTUlYRUQ7Ci0JCWVsc2UKLQkJCVBoeU1v
ZGUgPSBQSFlfMTFBOwotCX0KLQotCWlmICgoSU5GUkFfT04ocEFkKSkgJiYgKHBBZC0+UG9ydENm
Zy5FbmFibGVUeEJ1cnN0KSAmJiAocEFkLT5Qb3J0Q2ZnLldlcFN0YXR1cyAhPSBOZGlzODAyXzEx
RW5jcnlwdGlvbkRpc2FibGVkKSkKLQkJLy9FeHRlbmQgc2xvdCB0aW1lIGlmIGFueSBlbmNyeXB0
aW9uIG1ldGhvZCBpcyB1c2VkIHRvIGdpdmUgQVNJQyBtb3JlIHRpbWUgdG8gZG8gZW5jcnlwdGlv
bi9kZWNyeXB0aW9uIGR1cmluZyBUeCBidXJzdCBtb2RlLgotCQlSVFVTQldyaXRlTUFDUmVnaXN0
ZXIocEFkLCBNQUNfQ1NSMTAsIDB4MjApOwotCWVsc2UKLQl7Ci0JCWlmIChQaHlNb2RlID09IFBI
WV8xMUEpCi0JCQlzbG90dGltZSA9IDk7Ci0JCWVsc2UKLQkJCXNsb3R0aW1lID0gKFVzZVNob3J0
U2xvdFRpbWUpPyA5IDogMjA7Ci0JCi0JCVJUVVNCV3JpdGVNQUNSZWdpc3RlcihwQWQsIE1BQ19D
U1IxMCwgc2xvdHRpbWUpOwotCX0KLQkvL3NldCBJRlMgdmFsdWVzCi0JaWYgKFBoeU1vZGUgPT0g
UEhZXzExQikKLQl7Ci0JCVJUVVNCV3JpdGVNQUNSZWdpc3RlcihwQWQsIE1BQ19DU1IxMSwgMTYg
LSBQSFlfVFJfU1dJVENIX1RJTUUpOwotCQlSVFVTQldyaXRlTUFDUmVnaXN0ZXIocEFkLCBNQUNf
Q1NSMTIsIDY0KTsKLQl9Ci0JZWxzZQotCXsKLQkJUlRVU0JXcml0ZU1BQ1JlZ2lzdGVyKHBBZCwg
TUFDX0NTUjExLCAxMCAtIFBIWV9UUl9TV0lUQ0hfVElNRSk7Ci0JCVJUVVNCV3JpdGVNQUNSZWdp
c3RlcihwQWQsIE1BQ19DU1IxMiwgMzY0KTsKLQl9Ci19Ci1WT0lEIEFzaWNCYnBUdW5pbmcoCi0g
ICAgSU4gUFJUMjU3MEFEQVBURVIgcEFkKQotewotCVVDSEFSIFIxNzsKLQlVTE9ORyBGYWxzZUNj
YVVwcGVyVGhyZXNob2xkID0gcEFkLT5Qb3J0Q2ZnLkJicFR1bmluZy5GYWxzZUNjYVVwcGVyVGhy
ZXNob2xkIDw8IDc7Ci0JaW50IGRibSA9IHBBZC0+UG9ydENmZy5BdmdSc3NpIC0gcEFkLT5CQlBU
dW5pbmdQYXJhbWV0ZXJzLlJTU0lUb0RibU9mZnNldDsKLQlpZiAoKCEgcEFkLT5Qb3J0Q2ZnLkJi
cFR1bmluZ0VuYWJsZSkgfHwgKHBBZC0+UG9ydENmZy5CYnBUdW5pbmcuVmdjRGVsdGE9PTApKQot
CSAgICByZXR1cm47Ci0KLQlSMTcgPSBwQWQtPlBvcnRDZmcuQmJwV3JpdGVMYXRjaFsxN107Ci0J
REJHUFJJTlQoUlRfREVCVUdfSU5GTywgIlJTU0kgPSAlZCBkYm0sIEZhbHNlIENDQSA9ICVkIEJC
UFR1bmluZ1RocmVzaG9sZCA9ICV4XG4iLCBkYm0sIHBBZC0+TUFDQ291bnRlcnNbM10sIHBBZC0+
QkJQVHVuaW5nUGFyYW1ldGVycy5CQlBUdW5pbmdUaHJlc2hvbGQpOwotCWlmIChwQWQtPk1lZGlh
U3RhdGUgPT0gTmRpc01lZGlhU3RhdGVDb25uZWN0ZWQpCi0JewotCQlpZiAoKGRibSArIChJTlQp
KHBBZC0+QkJQVHVuaW5nUGFyYW1ldGVycy5CQlBUdW5pbmdUaHJlc2hvbGQpKSA+IDApCi0JCXsK
LQkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19JTkZPLCAiUlNTSSA+IC0lZGRibVxuIiwgcEFkLT5C
QlBUdW5pbmdQYXJhbWV0ZXJzLkJCUFR1bmluZ1RocmVzaG9sZCk7Ci0JCQlpZiAocEFkLT5CQlBU
dW5pbmdQYXJhbWV0ZXJzLkxhcmdlQ3VycmVudFJTU0kgPT0gRkFMU0UpCi0JCQl7Ci0JCQkJUlRV
U0JXcml0ZUJCUFJlZ2lzdGVyKHBBZCwgMjQsIHBBZC0+QkJQVHVuaW5nUGFyYW1ldGVycy5SMjRI
aWdoZXJWYWx1ZSk7Ci0JCQkJUlRVU0JXcml0ZUJCUFJlZ2lzdGVyKHBBZCwgMjUsIHBBZC0+QkJQ
VHVuaW5nUGFyYW1ldGVycy5SMjVIaWdoZXJWYWx1ZSk7Ci0JCQkJUlRVU0JXcml0ZUJCUFJlZ2lz
dGVyKHBBZCwgNjEsIHBBZC0+QkJQVHVuaW5nUGFyYW1ldGVycy5SNjFIaWdoZXJWYWx1ZSk7Ci0J
CQkJcEFkLT5CQlBUdW5pbmdQYXJhbWV0ZXJzLkxhcmdlQ3VycmVudFJTU0kgPSBUUlVFOwotCQkJ
fQotCQl9Ci0JCWVsc2UKLQkJewotCQkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX0lORk8sICJSU1NJ
IDw9IC0lZGRibVxuIiwgcEFkLT5CQlBUdW5pbmdQYXJhbWV0ZXJzLkJCUFR1bmluZ1RocmVzaG9s
ZCk7Ci0JCQlpZiAocEFkLT5CQlBUdW5pbmdQYXJhbWV0ZXJzLkxhcmdlQ3VycmVudFJTU0kgPT0g
VFJVRSkKLQkJCXsKLQkJCQlSVFVTQldyaXRlQkJQUmVnaXN0ZXIocEFkLCAyNCwgcEFkLT5CQlBU
dW5pbmdQYXJhbWV0ZXJzLlIyNExvd2VyVmFsdWUpOwotCQkJCVJUVVNCV3JpdGVCQlBSZWdpc3Rl
cihwQWQsIDI1LCBwQWQtPkJCUFR1bmluZ1BhcmFtZXRlcnMuUjI1TG93ZXJWYWx1ZSk7Ci0JCQkJ
UlRVU0JXcml0ZUJCUFJlZ2lzdGVyKHBBZCwgNjEsIHBBZC0+QkJQVHVuaW5nUGFyYW1ldGVycy5S
NjFMb3dlclZhbHVlKTsKLQkJCQlwQWQtPkJCUFR1bmluZ1BhcmFtZXRlcnMuTGFyZ2VDdXJyZW50
UlNTSSA9IEZBTFNFOwotCQkJfQotCQl9Ci0JCS8vIFJ1bGUgMC4KLQkJLy8gd2hlbiBSU1NJIGlz
IHRvbyB3ZWFrLCBtYW55IHNpZ25hbHMgd2lsbCBiZWNvbWUgZmFsc2UgQ0NBIHRodXMgYWZmZWN0
IFIxNyB0dW5pbmcuCi0JCS8vIHNvIGluIHRoaXMgY2FzZSwganVzdCBzdG9wIFIxNyB0dW5pbmcg
KGJlIHN1cmUgUjE3IHJlbWFpbnMgaW4gPEUyUFJPTS02LCBCQlBfUjE3X0RZTkFNSUNfVVBfQk9V
TkQ+IHJhbmdlKQotI2lmIDEKLQkJaWYgKChkYm0gPj0gLTQwKSAmJiAKLQkJCShwQWQtPk1sbWUu
Q250bE1hY2hpbmUuQ3VyclN0YXRlID09IENOVExfSURMRSkpCi0JCXsKLQkJCWlmIChSMTcgIT0g
MHg2MCkKLQkJCXsKLQkJCQlSMTcgPSAweDYwOwotCQkJCVJUVVNCV3JpdGVCQlBSZWdpc3Rlcihw
QWQsIDE3LCBSMTcpOwotCQkJfQotCQkJREJHUFJJTlQoUlRfREVCVUdfSU5GTywgIlJTU0kgPSAl
ZCBkYm0sIGZpeGVkIFIxNyBhdCAweCV4XG4iLCBkYm0sIFIxNyk7Ci0JCQlyZXR1cm47Ci0JCX0K
LQotI2Vsc2UKLQkJaWYgKChkYm0gPCAtODApICYmIChwQWQtPk1sbWUuUGVyaW9kaWNSb3VuZCA+
IDIwKSkKLQkJewotCQkgICAgaWYgKFIxNyA+PSBwQWQtPkJCUFR1bmluZ1BhcmFtZXRlcnMuQkJQ
UjE3TWlkU2Vuc2l0aXZpdHkpCi0JCSAgICB7Ci0JCSAgICAgICAgUjE3ID0gcEFkLT5Qb3J0Q2Zn
Lkxhc3RSMTdWYWx1ZTsKLQkJCSAgICBSVFVTQldyaXRlQkJQUmVnaXN0ZXIocEFkLCAxNywgUjE3
KTsKLQkJICAgIH0KLQkJICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAiUlNTSSA9ICVkIGRi
bSwgc3RvcCBSMTcgYXQgMHgleFxuIiwgZGJtLCBSMTcpOwotCQkgICAgcmV0dXJuOwotCQl9Ci0j
ZW5kaWYKLQkJLy8gUnVsZSAxLiAic3BlY2lhbCBiaWctUjE3IGZvciBzaG9ydC1kaXN0YW5jZSIg
d2hlbiBub3QgU0NBTk5JTkcKLQkJZWxzZSBpZiAoKGRibSA+PSBSU1NJX0ZPUl9MT1dfU0VOU0lC
SUxJVFkpICYmIAotCQkgICAgKHBBZC0+TWxtZS5DbnRsTWFjaGluZS5DdXJyU3RhdGUgPT0gQ05U
TF9JRExFKSkKLQkJewotCQkgICAgaWYgKFIxNyAhPSBwQWQtPkJCUFR1bmluZ1BhcmFtZXRlcnMu
QkJQUjE3TG93U2Vuc2l0aXZpdHkpCi0JCSAgICB7Ci0JCSAgICAgICAgUjE3ID0gcEFkLT5CQlBU
dW5pbmdQYXJhbWV0ZXJzLkJCUFIxN0xvd1NlbnNpdGl2aXR5OwotCQkgICAgICAgIFJUVVNCV3Jp
dGVCQlBSZWdpc3RlcihwQWQsIDE3LCBSMTcpOwotCQkgICAgfQotCQkgICAgREJHUFJJTlQoUlRf
REVCVUdfSU5GTywgIlJTU0kgPSAlZCBkYm0sIGZpeGVkIFIxNyBhdCBMb3cgMHgleFxuIiwgZGJt
LCBSMTcpOwotCQkgICAgcmV0dXJuOwotCQl9Ci0JCS8vIFJ1bGUgMi4gInNwZWNpYWwgbWlkLVIx
NyBmb3IgbWlkLWRpc3RhbmNlIiB3aGVuIG5vdCBTQ0FOTklORwotCQllbHNlIGlmICgoZGJtID49
IFJTU0lfRk9SX01JRF9TRU5TSUJJTElUWSkgJiYgCi0JCSAgICAocEFkLT5NbG1lLkNudGxNYWNo
aW5lLkN1cnJTdGF0ZSA9PSBDTlRMX0lETEUpKQotCQl7Ci0JCSAgICBpZiAoUjE3ICE9IHBBZC0+
QkJQVHVuaW5nUGFyYW1ldGVycy5CQlBSMTdNaWRTZW5zaXRpdml0eSkKLQkJICAgIHsKLQkJICAg
ICAgICBSMTcgPSBwQWQtPkJCUFR1bmluZ1BhcmFtZXRlcnMuQkJQUjE3TWlkU2Vuc2l0aXZpdHk7
Ci0JCSAgICAgICAgUlRVU0JXcml0ZUJCUFJlZ2lzdGVyKHBBZCwgMTcsIFIxNyk7Ci0JCSAgICB9
Ci0JCSAgICBEQkdQUklOVChSVF9ERUJVR19JTkZPLCAiUlNTSSA9ICVkIGRibSwgZml4ZWQgUjE3
IGF0IE1pZCAweCV4XG4iLCBkYm0sIFIxNyk7Ci0JCSAgICByZXR1cm47Ci0JCX0KLQkJLy8gUnVs
ZSAzLiBsZWF2ZSAic2hvcnQgb3IgbWlkLWRpc3RhbmNlIiBjb25kaXRpb24sIHJlc3RvcmUgUjE3
IHRvIHRoZSAKLQkJLy8gICAgZHluYW1pYyB0dW5pbmcgcmFuZ2UgPEUyUFJPTS02LCBCQlBfUjE3
X0RZTkFNSUNfVVBfQk9VTkQ+Ci0jaWYgMQotCQllbHNlIGlmIChwQWQtPk1sbWUuQ250bE1hY2hp
bmUuQ3VyclN0YXRlID09IENOVExfSURMRSkKLQkJewotCQkJVUNIQVIgVXBwZXJCb25kOwotCQkJ
VUNIQVIgTG93ZXJCb25kOwotCi0JCQlMb3dlckJvbmQgPSBwQWQtPkJCUFIxN0luaXRWYWx1ZTsK
LQkJCWlmIChkYm0gPj0gLTc3KQotCQkJCVVwcGVyQm9uZCA9IHBBZC0+UG9ydENmZy5CYnBUdW5p
bmcuVmdjVXBwZXJCb3VuZDsKLQkJCWVsc2UKLQkJCQlVcHBlckJvbmQgPSBwQWQtPlBvcnRDZmcu
QmJwVHVuaW5nLlZnY1VwcGVyQm91bmQgLSAoLTc3IC0gZGJtKTsKLQotCQkJaWYgKFVwcGVyQm9u
ZCA8IExvd2VyQm9uZCkKLQkJCQlVcHBlckJvbmQgPSBMb3dlckJvbmQ7Ci0KLQkJCURCR1BSSU5U
KFJUX0RFQlVHX0lORk8sICJSMTcgPSAleCAsIHVwcGVyID0gJXgsIGxvd2VyID0gJXhcbiIsIFIx
NywgVXBwZXJCb25kLCBMb3dlckJvbmQpOwotCi0JCQlpZiAoUjE3ID4gVXBwZXJCb25kKQotCQkJ
ewotCQkJCXBBZC0+UG9ydENmZy5MYXN0UjE3VmFsdWUgPSBSMTcgPSBVcHBlckJvbmQ7Ci0JCQkJ
UlRVU0JXcml0ZUJCUFJlZ2lzdGVyKHBBZCwgMTcsIFIxNyk7Ci0JCQkJREJHUFJJTlQoUlRfREVC
VUdfSU5GTywgIlJTU0kgPSAlZCBkYm0sIHJlc3RvcmUgUjE3IHRvIDB4JXhcbiIsIGRibSwgUjE3
KTsKLQkJCQlyZXR1cm47Ci0JCQl9Ci0JCQlpZiAoKHBBZC0+TUFDQ291bnRlcnNbM10gPiBGYWxz
ZUNjYVVwcGVyVGhyZXNob2xkKSAmJgotCQkJCShSMTcgPCBVcHBlckJvbmQpKQotCQkJewotCQkJ
CVIxNyArPSBwQWQtPlBvcnRDZmcuQmJwVHVuaW5nLlZnY0RlbHRhOwotCQkJCXBBZC0+UG9ydENm
Zy5MYXN0UjE3VmFsdWUgPSBSMTc7Ci0JCQkJUlRVU0JXcml0ZUJCUFJlZ2lzdGVyKHBBZCwgMTcs
IFIxNyk7Ci0JCQkJREJHUFJJTlQoUlRfREVCVUdfSU5GTywgIisrUjE3PSAweCV4XG4iLCBSMTcp
OwotCQkJfQotCQkJZWxzZSBpZiAoKHBBZC0+TUFDQ291bnRlcnNbM10gPCBwQWQtPlBvcnRDZmcu
QmJwVHVuaW5nLkZhbHNlQ2NhTG93ZXJUaHJlc2hvbGQpICYmCi0JCQkJCShSMTcgPiBMb3dlckJv
bmQpKQotCQkJewotCQkJCVIxNyAtPSBwQWQtPlBvcnRDZmcuQmJwVHVuaW5nLlZnY0RlbHRhOwot
CQkJCXBBZC0+UG9ydENmZy5MYXN0UjE3VmFsdWUgPSBSMTc7Ci0JCQkJUlRVU0JXcml0ZUJCUFJl
Z2lzdGVyKHBBZCwgMTcsIFIxNyk7Ci0JCQkJREJHUFJJTlQoUlRfREVCVUdfSU5GTywgIi0tUjE3
PSAweCV4XG4iLCBSMTcpOwotCQkJfQotCQkJcmV0dXJuOwotCQl9Ci0jZWxzZQotCQllbHNlIGlm
IChSMTcgPj0gcEFkLT5CQlBUdW5pbmdQYXJhbWV0ZXJzLkJCUFIxN01pZFNlbnNpdGl2aXR5KQot
CQl7Ci0JCSAgICBSMTcgPSBwQWQtPlBvcnRDZmcuTGFzdFIxN1ZhbHVlOwotCQkgICAgUlRVU0JX
cml0ZUJCUFJlZ2lzdGVyKHBBZCwgMTcsIFIxNyk7Ci0JCSAgICBEQkdQUklOVChSVF9ERUJVR19U
UkFDRSwgIlJTU0kgPSAlZCBkYm0sIHJlc3RvcmUgUjE3IHRvIDB4JXhcbiIsIGRibSwgUjE3KTsK
LQkJICAgIHJldHVybjsKLQkJfQotI2VuZGlmCi0KLQl9Ci0KLQkvLyBSdWxlIDMuIG90aGVyd2lz
ZSwgUjE3IGlzIGN1cnJlbmx5IGluIGR5YW5taWMgdHVuaW5nIHJhbmdlOiA8RTJQUk9NLTYsIEJC
UF9SMTdfRFlOQU1JQ19VUF9CT1VORD4uCi0JLy8gICAgS2VlcCBkeW5hbWljIHR1bmluZyBiYXNl
ZCBvbiBGYWxzZSBDQ0EgY29udGVyCi0KLQlEQkdQUklOVChSVF9ERUJVR19JTkZPLCAiQ0NBIGZs
YXNlIGFsYXJtID0gJWQsIEF2ZyBSU1NJPSAlZCBkYm1cbiIsIHBBZC0+TUFDQ291bnRlcnNbM10s
IGRibSk7Ci0JaWYgKChwQWQtPk1BQ0NvdW50ZXJzWzNdID4gRmFsc2VDY2FVcHBlclRocmVzaG9s
ZCkgJiYKLQkgICAgKFIxNyA8IHBBZC0+UG9ydENmZy5CYnBUdW5pbmcuVmdjVXBwZXJCb3VuZCkp
Ci0JewotCQlSMTcgKz0gcEFkLT5Qb3J0Q2ZnLkJicFR1bmluZy5WZ2NEZWx0YTsKLQkJcEFkLT5Q
b3J0Q2ZnLkxhc3RSMTdWYWx1ZSA9IFIxNzsKLQkJUlRVU0JXcml0ZUJCUFJlZ2lzdGVyKHBBZCwg
MTcsIFIxNyk7Ci0JCURCR1BSSU5UKFJUX0RFQlVHX0lORk8sICIrK1IxNz0gMHgleFxuIiwgUjE3
KTsKLQl9Ci0JZWxzZSBpZiAoKHBBZC0+TUFDQ291bnRlcnNbM10gPCBwQWQtPlBvcnRDZmcuQmJw
VHVuaW5nLkZhbHNlQ2NhTG93ZXJUaHJlc2hvbGQpICYmCi0JICAgIChSMTcgPiBwQWQtPlBvcnRD
ZmcuVmdjTG93ZXJCb3VuZCkpCi0JewotCQlSMTcgLT0gcEFkLT5Qb3J0Q2ZnLkJicFR1bmluZy5W
Z2NEZWx0YTsKLQkJcEFkLT5Qb3J0Q2ZnLkxhc3RSMTdWYWx1ZSA9IFIxNzsKLQkJUlRVU0JXcml0
ZUJCUFJlZ2lzdGVyKHBBZCwgMTcsIFIxNyk7Ci0JCURCR1BSSU5UKFJUX0RFQlVHX0lORk8sICIt
LVIxNz0gMHgleFxuIiwgUjE3KTsKLQl9Ci0KLX0KLQotLy8gc3RvcCBhbmQgcmVzdG9yZSBSMTcg
dmFsdWUgdXBvbiBTSVRFLVNVUlZFWSBhbmQgTElOSy1ET1dOCi1WT0lEIEFzaWNSZXN0b3JlQmJw
U2Vuc2liaWxpdHkoCi0JSU4gUFJUMjU3MEFEQVBURVIgcEFkKQotewotCVVDSEFSIFIxNzsKLQkJ
REJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICJBc2ljUmVzdG9yZUJicFNlbnNpYmlsaXR5XG4iKTsK
LQotCVIxNyA9IHBBZC0+UG9ydENmZy5CYnBXcml0ZUxhdGNoWzE3XTsKLQlpZiAoUjE3ID49IHBB
ZC0+QkJQVHVuaW5nUGFyYW1ldGVycy5CQlBSMTdNaWRTZW5zaXRpdml0eSkKLQl7Ci0JCURCR1BS
SU5UKFJUX0RFQlVHX1RSQUNFLCAiMUFzaWNSZXN0b3JlQmJwU2Vuc2liaWxpdHlcbiIpOwotCQlS
MTcgPSBwQWQtPlBvcnRDZmcuTGFzdFIxN1ZhbHVlOwotCQlSVFVTQldyaXRlQkJQUmVnaXN0ZXIo
cEFkLCAxNywgUjE3KTsKLQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICJBc2ljUmVzdG9yZUJi
cFNlbnNpYmlsaXR5KHNldCBSMTc9IDB4JXgpXG4iLCBSMTcpOwotCX0KLQotfQotCi0vKgotCT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotCi0JUm91dGluZSBEZXNjcmlwdGlvbjoKLQkJTWxtZSBmcmVlIHRoZSBp
bi11c2VkIG5vbnBhZ2VkIG1lbW9yeSwKLQkJbW92ZSBpdCB0byB0aGUgdW51c2VkIG1lbW9yeSBs
aW5rIGxpc3QKLQotCUFyZ3VtZW50czoKLQkJcEFkIAkJCQlQb2ludGVyIHRvIG91ciBhZGFwdGVy
Ci0JCUFsbG9jVmEgCQkJUG9pbnRlciB0byB0aGUgYmFzZSB2aXJ0dWFsIGFkZHJlc3MgZm9yIGZy
ZWUKLQotCVJldHVybiBWYWx1ZToKLQkJTm9uZQotCi0JTm90ZToKLQotCT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotKi8KLVZPSUQJTWxtZUZyZWVNZW1vcnkoCi0JSU4gUFJUMjU3MEFEQVBURVIgcEFkLAotCUlO
IFBWT0lECQkgQWxsb2NWYSkKLXsKLQlQTUxNRV9NRU1PUllfU1RSVUNUIAkJCXBQcmV2aW91czsK
LQlQTUxNRV9NRU1PUllfU1RSVUNUIAkJCXBNbG1lTWVtb3J5U3RydWN0OwotCUJPT0xFQU4gCQkJ
CQkJYklzRm91bmQ7Ci0KLQlpZiAoQWxsb2NWYSA9PSBOVUxMKQotCQlyZXR1cm47Ci0KLSAJYklz
Rm91bmQgPSBGQUxTRTsKLQlwUHJldmlvdXMgPSBOVUxMOwotCXBNbG1lTWVtb3J5U3RydWN0ID0g
cEFkLT5NbG1lLk1lbUhhbmRsZXIucEluVXNlSGVhZDsKLQl3aGlsZSAocE1sbWVNZW1vcnlTdHJ1
Y3QpCi0JewotLy8JCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCJwTWxtZU1lbW9yeVN0cnVjdC0+
QWxsb2NWYT0leFxuIiwoaW50KXBNbG1lTWVtb3J5U3RydWN0LT5BbGxvY1ZhKTsKLQkJaWYgKHBN
bG1lTWVtb3J5U3RydWN0LT5BbGxvY1ZhID09IEFsbG9jVmEpCi0JCXsgCi0JCQkvL0ZvdW5kIHZp
cnR1YWwgYWRkcmVzcyBpbiB0aGUgaW4tdXNlZCBsaW5rIGxpc3QKLQkJCS8vUmVtb3ZlIGl0IGZy
b20gdGhlIG1lbW9yeSBpbi11c2VkIGxpbmsgbGlzdCwgYW5kIG1vdmUgaXQgdG8gdGhlIHVudXNl
ZCBsaW5rIGxpc3QKLQkJCWlmIChwUHJldmlvdXMgPT0gTlVMTCkKLQkJCQlwQWQtPk1sbWUuTWVt
SGFuZGxlci5wSW5Vc2VIZWFkID0gcE1sbWVNZW1vcnlTdHJ1Y3QtPk5leHQ7Ci0JCQllbHNlCi0J
CQkJcFByZXZpb3VzLT5OZXh0ID0gcE1sbWVNZW1vcnlTdHJ1Y3QtPk5leHQ7Ci0JCQlwQWQtPk1s
bWUuTWVtSGFuZGxlci5JblVzZUNvdW50LS07Ci0KLQkJCS8vYXBwZW5kIGl0IHRvIHRoZSB0YWls
IG9mIHVudXNlZCBsaXN0Ci0JCQlwTWxtZU1lbW9yeVN0cnVjdC0+TmV4dCA9IE5VTEw7Ci0gCQkJ
aWYgKChwQWQtPk1sbWUuTWVtSGFuZGxlci5wVW5Vc2VIZWFkID09IE5VTEwpKQotCQkJeyAvL05v
IGhlYWQsIGFkZCBpdCBhcyBoZWFkCi0JCQkJcEFkLT5NbG1lLk1lbUhhbmRsZXIucFVuVXNlSGVh
ZCA9IHBNbG1lTWVtb3J5U3RydWN0OwotCQkJCXBBZC0+TWxtZS5NZW1IYW5kbGVyLnBVblVzZVRh
aWwgPSBwTWxtZU1lbW9yeVN0cnVjdDsKLQkJCX0KLQkJCWVsc2UKLQkJCXsKLQkJCQkvL0FwcGVu
ZCBpdCB0byB0aGUgdGFpbCBpbiBwQWQtPk1sbWUuTWVtSGFuZGxlci5wVW5Vc2VUYWlsCi0JCQkJ
cEFkLT5NbG1lLk1lbUhhbmRsZXIucFVuVXNlVGFpbC0+TmV4dCA9IHBNbG1lTWVtb3J5U3RydWN0
OwotCQkJCXBBZC0+TWxtZS5NZW1IYW5kbGVyLnBVblVzZVRhaWwgPSBwQWQtPk1sbWUuTWVtSGFu
ZGxlci5wVW5Vc2VUYWlsLT5OZXh0OwotCQkJfQotCQkJcEFkLT5NbG1lLk1lbUhhbmRsZXIuVW5V
c2VDb3VudCsrOwotIAotCQkJYklzRm91bmQgPSBUUlVFOwotCQkJYnJlYWs7Ci0JCX0KLQkJZWxz
ZQotCQl7Ci0JCQlwUHJldmlvdXMgPSBwTWxtZU1lbW9yeVN0cnVjdDsKLQkJCXBNbG1lTWVtb3J5
U3RydWN0ID0gcE1sbWVNZW1vcnlTdHJ1Y3QtPk5leHQ7Ci0JCX0KLQl9Ci0gfQotCi0vKgotCT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotCi0JUm91dGluZSBEZXNjcmlwdGlvbjoKLQkJR2V0IGFuIHVudXNlZCBu
b25wYWdlZCBzeXN0ZW0tc3BhY2UgbWVtb3J5IGZvciB1c2UKLQotCUFyZ3VtZW50czoKLQkJcEFk
IAkJCQlQb2ludGVyIHRvIG91ciBhZGFwdGVyCi0JCUFsbG9jVmEgCQkJUG9pbnRlciB0byB0aGUg
YmFzZSB2aXJ0dWFsIGFkZHJlc3MgZm9yIGxhdGVyIHVzZQotCi0JUmV0dXJuIFZhbHVlOgotCQlO
RElTX1NUQVRVU19TVUNDRVNTCi0JCU5ESVNfU1RBVFVTX0ZBSUxVUkUKLQkJTkRJU19TVEFUVVNf
UkVTT1VSQ0VTCi0KLQlOb3RlOgotCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qLwotCi1ORElTX1NUQVRV
UyBNbG1lQWxsb2NhdGVNZW1vcnkoCi0JSU4gUFJUMjU3MEFEQVBURVIgcEFkLAotCU9VVCBQVk9J
RAkJICpBbGxvY1ZhKQotewotCVBNTE1FX01FTU9SWV9TVFJVQ1QgCQkJcE1sbWVNZW1vcnlTdHJ1
Y3QgPSBOVUxMOwotCi0JREJHUFJJTlQoUlRfREVCVUdfSU5GTywiPT0+IE1sbWVBbGxvY2F0ZU1l
bW9yeVxuIik7Ci0KLQotIAlpZiAocEFkLT5NbG1lLk1lbUhhbmRsZXIucFVuVXNlSGVhZCA9PSBO
VUxMKQotCXsgLy9UaGVyZSBhcmUgbm8gYXZhaWxhYmxlIG1lbW9yeSBmb3IgY2FsbGVyIHVzZQot
IAkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsIk1sbWVBbGxvY2F0ZU1lbW9yeSwgZmFpbGVkISEg
KFRoZXJlIGFyZSBubyBhdmFpbGFibGUgbWVtb3J5IGluIGxpc3QpXG4iKTsKLQkJREJHUFJJTlQo
UlRfREVCVUdfRVJST1IsIjw9PSBNbG1lQWxsb2NhdGVNZW1vcnlcbiIpOwotCQlyZXR1cm4gKE5E
SVNfU1RBVFVTX1JFU09VUkNFUyk7Ci0JfQotCXBNbG1lTWVtb3J5U3RydWN0ID0gcEFkLT5NbG1l
Lk1lbUhhbmRsZXIucFVuVXNlSGVhZDsKLQkvL1VudXNlZCBtZW1vcnkgcG9pbnQgdG8gbmV4dCBh
dmFpbGFibGUKLQlwQWQtPk1sbWUuTWVtSGFuZGxlci5wVW5Vc2VIZWFkID0gcEFkLT5NbG1lLk1l
bUhhbmRsZXIucFVuVXNlSGVhZC0+TmV4dDsKLQlpZiAocEFkLT5NbG1lLk1lbUhhbmRsZXIucFVu
VXNlSGVhZCA9PSBOVUxMKQotCQlwQWQtPk1sbWUuTWVtSGFuZGxlci5wVW5Vc2VUYWlsID0gTlVM
TDsKLQlwQWQtPk1sbWUuTWVtSGFuZGxlci5VblVzZUNvdW50LS07Ci0gCi0JKkFsbG9jVmEgPSBw
TWxtZU1lbW9yeVN0cnVjdC0+QWxsb2NWYTsJCQkvL1NhdmVkIHBvcmludCB0byBQb2ludGVyIHRo
ZSBiYXNlIHZpcnR1YWwgYWRkcmVzcyBvZiB0aGUgbm9ucGFnZWQgbWVtb3J5IGZvciBjYWxsZXIg
dXNlLgotCi0JcE1sbWVNZW1vcnlTdHJ1Y3QtPk5leHQgPSBOVUxMOwotCS8vQXBwZW5kIHRoZSB1
bnVzZWQgbWVtb3J5IGxpbmsgbGlzdCB0byB0aGUgaW4tdXNlZCBsaW5rIGxpc3QgdGFpbAotCWlm
IChwQWQtPk1sbWUuTWVtSGFuZGxlci5wSW5Vc2VIZWFkID09IE5VTEwpCi0Jey8vbm8gaGVhZCwg
c28gY3VycmVudCBJdGVtIGFzc2lnbiB0byBJbi11c2UgSGVhZC4KLQkJcEFkLT5NbG1lLk1lbUhh
bmRsZXIucEluVXNlSGVhZCA9IHBNbG1lTWVtb3J5U3RydWN0OwotCQlwQWQtPk1sbWUuTWVtSGFu
ZGxlci5wSW5Vc2VUYWlsID0gcE1sbWVNZW1vcnlTdHJ1Y3Q7Ci0JfQotCWVsc2UKLQl7Ci0JCXBB
ZC0+TWxtZS5NZW1IYW5kbGVyLnBJblVzZVRhaWwtPk5leHQgPSBwTWxtZU1lbW9yeVN0cnVjdDsK
LQkJcEFkLT5NbG1lLk1lbUhhbmRsZXIucEluVXNlVGFpbCA9IHBBZC0+TWxtZS5NZW1IYW5kbGVy
LnBJblVzZVRhaWwtPk5leHQ7Ci0JfQotCXBBZC0+TWxtZS5NZW1IYW5kbGVyLkluVXNlQ291bnQr
KzsKLSAKLQotCi0JREJHUFJJTlQoUlRfREVCVUdfSU5GTywgIk1sbWVBbGxvY2F0ZU1lbW9yeSBb
cE1sbWVNZW1vcnlTdHJ1Y3Q9MHglbHhdW1ZBPTB4JWx4XVxuIiwgKHVuc2lnbmVkIGxvbmcpcE1s
bWVNZW1vcnlTdHJ1Y3QsICh1bnNpZ25lZCBsb25nKXBNbG1lTWVtb3J5U3RydWN0LT5BbGxvY1Zh
KTsKLQlEQkdQUklOVChSVF9ERUJVR19JTkZPLCAiPD09IE1sbWVBbGxvY2F0ZU1lbW9yeVtJTjol
ZF1bVU46JWRdXG4iLAotCQkJCXBBZC0+TWxtZS5NZW1IYW5kbGVyLkluVXNlQ291bnQsIHBBZC0+
TWxtZS5NZW1IYW5kbGVyLlVuVXNlQ291bnQpOwotCXJldHVybiAoTkRJU19TVEFUVVNfU1VDQ0VT
Uyk7Ci19Ci0KLQotLyoKLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotCVJvdXRpbmUgRGVzY3JpcHRpb246
Ci0JCUFsbG9jYXRlcyByZXNpZGVudCAobm9ucGFnZWQpIHN5c3RlbS1zcGFjZSBtZW1vcnkgZm9y
IE1MTUUgc2VuZCBmcmFtZXMKLQotCUFyZ3VtZW50czoKLQkJcEFkIAkJCQlQb2ludGVyIHRvIG91
ciBhZGFwdGVyCi0JCU51bWJlcgkJCQlUb3RhbCBub25wYWdlZCBtZW1vcnkgZm9yIHVzZQotCQlT
aXplCQkJCUVhY2ggbm9ucGFnZWQgbWVtb3J5IHNpemUKLQotCVJldHVybiBWYWx1ZToKLQkJTkRJ
U19TVEFUVVNfU1VDQ0VTUwotCQlORElTX1NUQVRVU19SRVNPVVJDRVMKLQotCU5vdGU6Ci0KLQk9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLSovCi1ORElTX1NUQVRVUyBNbG1lSW5pdE1lbW9yeUhhbmRsZXIoCi0J
SU4gUFJUMjU3MEFEQVBURVIgcEFkLAotCUlOIFVJTlQgIE51bWJlciwKLQlJTiBVSU5UICBTaXpl
KQotewotCVBNTE1FX01FTU9SWV9TVFJVQ1QgCQlDdXJyZW50ID0gTlVMTDsKLQlORElTX1NUQVRV
UyAJCQkJU3RhdHVzID0gTkRJU19TVEFUVVNfU1VDQ0VTUzsKLQlVSU5UCQkJCQkJaTsKLQotCURC
R1BSSU5UKFJUX0RFQlVHX0lORk8sIj09PiBNbG1lSW5pdE1lbW9yeVxuIik7Ci0JcEFkLT5NbG1l
Lk1lbUhhbmRsZXIuTWVtb3J5Q291bnQgPSAwOwotCXBBZC0+TWxtZS5NZW1IYW5kbGVyLnBJblVz
ZUhlYWQgPSBOVUxMOwotCXBBZC0+TWxtZS5NZW1IYW5kbGVyLnBJblVzZVRhaWwgPSBOVUxMOwot
CXBBZC0+TWxtZS5NZW1IYW5kbGVyLnBVblVzZUhlYWQgPSBOVUxMOwotCXBBZC0+TWxtZS5NZW1I
YW5kbGVyLnBVblVzZVRhaWwgPSBOVUxMOwotCXBBZC0+TWxtZS5NZW1IYW5kbGVyLk1lbVJ1bm5p
bmcgPSBGQUxTRTsKLQotIAkvL2luaXRpYWwgdGhlIG1lbW9yeSBmcmVlLXBlbmRpbmcgYXJyYXkg
YWxsIHRvIE5VTEw7Ci0JZm9yIChpID0gMDsgaSA8IE1BWF9NTE1FX0hBTkRMRVJfTUVNT1JZOyBp
KyspCi0JCXBBZC0+TWxtZS5NZW1IYW5kbGVyLk1lbUZyZWVQZW5kaW5nW2ldID0gTlVMTDsKLQot
IAkvLwotCS8vIEF2YWlsYWJsZSBub25wYWdlZCBtZW1vcnkgY291bnRzIE1BWF9NTE1FX0hBTkRM
RVJfTUVNT1JZCi0JLy8KLQlpZiAoTnVtYmVyID4gTUFYX01MTUVfSEFORExFUl9NRU1PUlkpCi0J
CU51bWJlciA9IE1BWF9NTE1FX0hBTkRMRVJfTUVNT1JZOwotICAgICAgICAKLQlmb3IgKGkgPSAw
OyBpIDwgTnVtYmVyOyBpKyspCi0JewotCQkvL0FsbG9jYXRlIGEgbm9ucGFnZWQgbWVtb3J5IGZv
ciBsaW5rIGxpc3QgdXNlLgotCQkvL1N0YXR1cyA9IE5kaXNBbGxvY2F0ZU1lbW9yeVdpdGhUYWco
KFZPSUQgKikmQ3VycmVudCwgc2l6ZW9mKE1MTUVfTUVNT1JZX1NUUlVDVCksIE5JQ19UQUcpOwot
CQkgQ3VycmVudD0gKFBNTE1FX01FTU9SWV9TVFJVQ1QpIGttYWxsb2Moc2l6ZW9mKE1MTUVfTUVN
T1JZX1NUUlVDVCksIEdGUF9BVE9NSUMpOwotCQkgaWYgKCFDdXJyZW50KSB7Ci0JCQkJREJHUFJJ
TlQoUlRfREVCVUdfRVJST1IsIk5vdCBlbm91Z2ggbWVtb3J5XG4iKTsKLQkJCQlTdGF0dXMgPSBO
RElTX1NUQVRVU19SRVNPVVJDRVM7Ci0JCQkJYnJlYWs7Ci0JCSB9CQotCQkKLQotCQlDdXJyZW50
LT5BbGxvY1ZhPSAoVk9JRCAqKSBrbWFsbG9jKFNpemUsIEdGUF9BVE9NSUMpOwotCQkgaWYgKCFD
dXJyZW50LT5BbGxvY1ZhKSB7Ci0JCQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsIk5vdCBlbm91
Z2ggbWVtb3J5XG4iKTsKLQkJCQlrZnJlZSgoVk9JRCAqKUN1cnJlbnQpOwotCQkJCVN0YXR1cyA9
IE5ESVNfU1RBVFVTX1JFU09VUkNFUzsKLQkJCQlicmVhazsKLQkJIH0KLQotCQlOZGlzWmVyb01l
bW9yeShDdXJyZW50LT5BbGxvY1ZhLCBTaXplKTsKLQotCQlwQWQtPk1sbWUuTWVtSGFuZGxlci5N
ZW1vcnlDb3VudCsrOwotCi0JCS8vYnVpbGQgdXAgdGhlIGxpbmsgbGlzdAotCQlpZiAocEFkLT5N
bG1lLk1lbUhhbmRsZXIucFVuVXNlSGVhZCAhPSBOVUxMKQotCQl7Ci0JCQlDdXJyZW50LT5OZXh0
ID0gcEFkLT5NbG1lLk1lbUhhbmRsZXIucFVuVXNlSGVhZDsKLQkJCXBBZC0+TWxtZS5NZW1IYW5k
bGVyLnBVblVzZUhlYWQgPSBDdXJyZW50OwotCQl9Ci0JCWVsc2UKLQkJewotCQkJQ3VycmVudC0+
TmV4dCA9IE5VTEw7Ci0JCQlwQWQtPk1sbWUuTWVtSGFuZGxlci5wVW5Vc2VIZWFkID0gQ3VycmVu
dDsKLQkJfQotCi0JCWlmIChwQWQtPk1sbWUuTWVtSGFuZGxlci5wVW5Vc2VUYWlsID09IE5VTEwp
Ci0JCQlwQWQtPk1sbWUuTWVtSGFuZGxlci5wVW5Vc2VUYWlsID0gQ3VycmVudDsKLQotCX0KLQkK
LQlpZiAocEFkLT5NbG1lLk1lbUhhbmRsZXIuTWVtb3J5Q291bnQgPCBOdW1iZXIpCi0JewotCQlT
dGF0dXMgPSBORElTX1NUQVRVU19SRVNPVVJDRVM7Ci0JCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNF
LCJNbG1lSW5pdE1lbW9yeSBJbml0aWFsIGZhaWxlZCBbUmVxdWlyZT0lZCwgYXZhaWxhYmxlPSVk
XVxuIiwgTnVtYmVyLCBwQWQtPk1sbWUuTWVtSGFuZGxlci5NZW1vcnlDb3VudCk7Ci0JfQotCi0J
cEFkLT5NbG1lLk1lbUhhbmRsZXIuSW5Vc2VDb3VudCA9IDA7Ci0JcEFkLT5NbG1lLk1lbUhhbmRs
ZXIuVW5Vc2VDb3VudCA9IE51bWJlcjsKLQlwQWQtPk1sbWUuTWVtSGFuZGxlci5QZW5kaW5nQ291
bnQgPSAwOwotIAlEQkdQUklOVChSVF9ERUJVR19JTkZPLCI8PT0gTWxtZUluaXRNZW1vcnlcbiIp
OwotCQotCXJldHVybiAoU3RhdHVzKTsKLX0KLQotCi1WT0lEIERlbGV0ZVRpbWVyKAotCUlOIFBS
VDI1NzBBREFQVEVSCSBwQWQpCi17Ci19Ci0KLQotLyoKLSAgICA9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQot
ICAgIFJvdXRpbmUgRGVzY3JpcHRpb246Ci0gICAgICAgIEZyZWUgTWxtZSBtZW1vcnkgaGFuZGxl
ciAobGluayBsaXN0LCBub25wYWdlZCBtZW1vcnksIHNwaW4gbG9jaykKLQotICAgIEFyZ3VtZW50
czoKLSAgICAgICAgcEFkICAgICAgICAgICAgICAgICBQb2ludGVyIHRvIG91ciBhZGFwdGVyCi0K
LSAgICBSZXR1cm4gVmFsdWU6Ci0gICAgICAgIE5vbmUKLSAgICA9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSov
Ci1WT0lEIE1sbWVGcmVlTWVtb3J5SGFuZGxlcigKLSAgICBJTiBQUlQyNTcwQURBUFRFUiBwQWQp
Ci17Ci0JUE1MTUVfTUVNT1JZX1NUUlVDVCAgICAgIHBNbG1lTWVtb3J5U3RydWN0ID0gTlVMTDsK
LQotCURCR1BSSU5UX1JBVyhSVF9ERUJVR19JTkZPLCAiLS0tPk1sbWVGcmVlTWVtb3J5SGFuZGxl
clxuIik7Ci0KLQl3aGlsZSAocEFkLT5NbG1lLk1lbUhhbmRsZXIucEluVXNlSGVhZCAhPSBOVUxM
KQotCXsKLQkgICAgcE1sbWVNZW1vcnlTdHJ1Y3QgPSBwQWQtPk1sbWUuTWVtSGFuZGxlci5wSW5V
c2VIZWFkOwotCSAgICBwQWQtPk1sbWUuTWVtSGFuZGxlci5wSW5Vc2VIZWFkID0gcEFkLT5NbG1l
Lk1lbUhhbmRsZXIucEluVXNlSGVhZC0+TmV4dDsKLQkgICAgLy9GcmVlIHRoZSB2aXJ0dWFsIGFk
ZHJlc3MgaW4gQWxsb2NWYSB3aGljaCBzaXplIGlzIE1BWF9MRU5fT0ZfTUxNRV9CVUZGRVIKLQkg
ICAga2ZyZWUocE1sbWVNZW1vcnlTdHJ1Y3QtPkFsbG9jVmEpOwotCSAgICAvL0ZyZWUgdGhlIGxp
bmsgbGlzdCBpdGVtIHNlbGYKLQkgICAga2ZyZWUocE1sbWVNZW1vcnlTdHJ1Y3QpOwotCX0KLQot
CS8vRnJlZSBub25wYWdlZCBtZW1vcnksIGZyZWUgaXQgaW4gdGhlICpVbnVzZWQqIGxpbmsgbGlz
dC4KLQl3aGlsZSAocEFkLT5NbG1lLk1lbUhhbmRsZXIucFVuVXNlSGVhZCAhPSBOVUxMKQotCXsK
LQkgICAgcE1sbWVNZW1vcnlTdHJ1Y3QgPSBwQWQtPk1sbWUuTWVtSGFuZGxlci5wVW5Vc2VIZWFk
OwotCSAgICBwQWQtPk1sbWUuTWVtSGFuZGxlci5wVW5Vc2VIZWFkID0gcEFkLT5NbG1lLk1lbUhh
bmRsZXIucFVuVXNlSGVhZC0+TmV4dDsKLQkgICAgLy9GcmVlIHRoZSB2aXJ0dWFsIGFkZHJlc3Mg
aW4gQWxsb2NWYSB3aGljaCBzaXplIGlzIE1BWF9MRU5fT0ZfTUxNRV9CVUZGRVIKLQkgICAga2Zy
ZWUocE1sbWVNZW1vcnlTdHJ1Y3QtPkFsbG9jVmEpOwotCSAgICAvL0ZyZWUgdGhlIGxpbmsgbGlz
dCBpdGVtIHNlbGYKLQkgICAga2ZyZWUocE1sbWVNZW1vcnlTdHJ1Y3QpOwotCX0KLQkKLQlEQkdQ
UklOVF9SQVcoUlRfREVCVUdfSU5GTywgIjwtLS1NbG1lRnJlZU1lbW9yeUhhbmRsZXJcbiIpOwot
fQotLyoKLSAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotICAgIFJvdXRpbmUgRGVzY3JpcHRpb246Ci0g
ICAgICAgIFZlcmlmeSB0aGUgc3VwcG9ydCByYXRlIGZvciBkaWZmZXJlbnQgUEhZIHR5cGUKLQot
ICAgIEFyZ3VtZW50czoKLSAgICAgICAgcEFkICAgICAgICAgICAgICAgICBQb2ludGVyIHRvIG91
ciBhZGFwdGVyCi0KLSAgICBSZXR1cm4gVmFsdWU6Ci0gICAgICAgIE5vbmUKLSAgICAgICAgCi0J
SVJRTCA9IFBBU1NJVkVfTEVWRUwKLQotICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKi8KLVZPSUQJUlRN
UENoZWNrUmF0ZXMoCi0JSU4JCVBSVDI1NzBBREFQVEVSCXBBZCwKLQlJTiBPVVQJVUNIQVIJCQlT
dXBSYXRlW10sCi0JSU4gT1VUCVVDSEFSCQkJKlN1cFJhdGVMZW4pCi17Ci0JVUNIQVIJUmF0ZUlk
eCwgaSwgajsKLQlVQ0hBUglOZXdSYXRlWzEyXSwgTmV3UmF0ZUxlbjsKLQkKLQlOZXdSYXRlTGVu
ID0gMDsKLQkKLQlpZiAocEFkLT5Qb3J0Q2ZnLlBoeU1vZGUgPT0gUEhZXzExQikKLQkJUmF0ZUlk
eCA9IDQ7Ci0JZWxzZQotCQlSYXRlSWR4ID0gMTI7Ci0KLQkvLyBDaGVjayBmb3Igc3VwcG9ydCBy
YXRlcyBleGNsdWRlIGJhc2ljIHJhdGUgYml0CQotCWZvciAoaSA9IDA7IGkgPCAqU3VwUmF0ZUxl
bjsgaSsrKQotCQlmb3IgKGogPSAwOyBqIDwgUmF0ZUlkeDsgaisrKQotCQkJaWYgKChTdXBSYXRl
W2ldICYgMHg3ZikgPT0gUmF0ZUlkVG81MDBLYnBzW2pdKQotCQkJCU5ld1JhdGVbTmV3UmF0ZUxl
bisrXSA9IFN1cFJhdGVbaV07Ci0JCQkKLQkqU3VwUmF0ZUxlbiA9IE5ld1JhdGVMZW47Ci0JTmRp
c01vdmVNZW1vcnkoU3VwUmF0ZSwgTmV3UmF0ZSwgTmV3UmF0ZUxlbik7Ci19Ci0KZGlmZiAtcnVO
IHJ0MjU3MC0xLjEuMC1iMS9Nb2R1bGUvLiNtbG1lLmguMS4yIHJ0MjU3MC1jdnMtMjAwNTEyMjYx
Ni9Nb2R1bGUvLiNtbG1lLmguMS4yCi0tLSBydDI1NzAtMS4xLjAtYjEvTW9kdWxlLy4jbWxtZS5o
LjEuMgkyMDA1LTA3LTMwIDExOjQ0OjMwLjAwMDAwMDAwMCAtMDUwMAorKysgcnQyNTcwLWN2cy0y
MDA1MTIyNjE2L01vZHVsZS8uI21sbWUuaC4xLjIJMTk2OS0xMi0zMSAxODowMDowMC4wMDAwMDAw
MDAgLTA2MDAKQEAgLTEsNDk4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCi0gKiBSVDJ4
MDAgU291cmNlRm9yZ2UgUHJvamVjdCAtIGh0dHA6Ly9ydDJ4MDAuc291cmNlZm9yZ2UubmV0ICAg
ICAgICAgICAgICAqIAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAKLSAqICAgVGhpcyBwcm9ncmFtIGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICog
Ci0gKiAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5ICAqIAotICogICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgKiAKLSAqICAgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICogCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIAotICogICBUaGlzIHByb2dyYW0gaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgKiAKLSAq
ICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YgICAgICAgICogCi0gKiAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAqIAotICogICBHTlUgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAg
ICAgKiAKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICogCi0gKiAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAqIAotICogICBh
bG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgICAgICAgICAgICAg
ICAgICAgICAgICAgKiAKLSAqICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogCi0gKiAgIDU5IFRlbXBsZSBQbGFj
ZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLiAgICAgICAgICAgICAq
IAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKiAKLSAqICAgTGljZW5zZWQgdW5kZXIgdGhlIEdOVSBHUEwg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogCi0gKiAgIE9yaWdp
bmFsIGNvZGUgc3VwcGxpZWQgdW5kZXIgbGljZW5zZSBmcm9tIFJhTGluayBJbmMsIDIwMDQuICAg
ICAgICAgICAqIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyoqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAK
LSAqCU1vZHVsZSBOYW1lOgltbG1lLmgKLSAqCi0gKglBYnN0cmFjdDoKLSAqCi0gKglSZXZpc2lv
biBIaXN0b3J5OgotICoJV2hvCQlXaGVuCQlXaGF0Ci0gKgktLS0tLS0tLQktLS0tLS0tLS0tCS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqCU5hbWUJCURhdGUJCU1vZGlmaWNhdGlv
biBsb2dzCi0gKglKYW4gTGVlCQkyMDA1LTA2LTAxCVJlbGVhc2UKLSAqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KiovCi0KLSNpZm5kZWYgX19NTE1FX0hfXw0KLSNkZWZpbmUgX19NTE1FX0hfXw0KLQ0KLS8vIG1h
eGltdW0gc3VwcG9ydGVkIGNhcGFiaWxpdHkgaW5mb3JtYXRpb24gLSANCi0vLyBFU1MsIElCU1Ms
IFByaXZhY3ksIFNob3J0IFByZWFtYmxlLCBTaG9ydCBTbG90DQotI2RlZmluZSBTVVBQT1JURURf
Q0FQQUJJTElUWV9JTkZPIDB4MDQzMw0KLQ0KLSNkZWZpbmUgRU5EX09GX0FSR1MgICAgICAgICAg
ICAgLTENCi0jZGVmaW5lIExGU1JfTUFTSyAgICAgICAgICAgICAgIDB4ODAwMDAwNTcNCi0jZGVm
aW5lIFRCVFRfUFJFTE9BRF9USU1FICAgICAgIDM4NCAgICAgICAgLy8gdXNlYy4gTG9tZ1ByZWFt
YmxlICsgMjQtYnl0ZSBhdCAxTWJwcw0KLSNkZWZpbmUgTUxNRV9UQVNLX0VYRUNfSU5UViAgICAg
KDEwMDApCQkvLyAxIHNlYw0KLQ0KLSNkZWZpbmUgQkVBQ09OX0xPU1RfVElNRSAgICAgICAgKDQq
SFopDQotDQotLy8jZGVmaW5lIEFVVEhfS0VZX1RJTUVPVVQgICAgICAgIDUwMCAgICAgLy8gdW5p
dDogbXNlYw0KLS8vI2RlZmluZSBBVVRIX09QRU5fVElNRU9VVCAgICAgICAyMDAgICAgIC8vIHVu
aXQ6IG1zZWMNCi0jZGVmaW5lIEFVVEhfVElNRU9VVCAgICAgICAgICAgIDMwMCAgICAgLy8gdW5p
dDogbXNlYw0KLSNkZWZpbmUgQVNTT0NfVElNRU9VVCAgICAgICAgICAgMzAwICAgICAvLyB1bml0
OiBtc2VjDQotI2RlZmluZSBKT0lOX1RJTUVPVVQgICAgICAgICAgICAyMDAwICAgICAvLyB1bml0
OiBtc2VjDQotI2RlZmluZSBNSU5fQ0hBTk5FTF9USU1FICAgICAgICAxMTAgICAgICAgIC8vIHVu
aXQ6IG1zZWMsIGZvciBkdWFsIGJhbmQgc2Nhbg0KLSNkZWZpbmUgTUFYX0NIQU5ORUxfVElNRSAg
ICAgICAgMTQwICAgICAgIC8vIHVuaXQ6IG1zZWMsIGZvciBzaW5nbGUgYmFuZCBzY2FuDQotI2Rl
ZmluZQlBQ1RJVkVfU0NBTl9USU1FCQk0MAkJCS8vIEFjdGl2ZSBzY2FuIHdhaXRpbmcgZm9yIHBy
b2JlIHJlc3BvbnNlIHRpbWUNCi0NCi0jZGVmaW5lIENXX01JTl9JTl9CSVRTICAgICAgICAgIDMg
ICAgICAgLy8gYWN0dWFsIEN3TWluID0gMl5DV19NSU5fSU5fQklUUyAtIDEgPSAzMQ0KLSNkZWZp
bmUgQ1dfTUFYX0lOX0JJVFMgICAgICAgICAgNSAgICAgICAvLyBhY3R1YWwgQ3dNYXggPSAyXkNX
X01BWF9JTl9CSVRTIC0gMSA9IDEwMjMNCi0NCi0jZGVmaW5lIEJFQUNPTl9DV19JTl9CSVRTICAg
ICAgICAgIDUNCi0NCi0vL2JsdWUsI2RlZmluZSBSU1NJX1RPX0RCTV9PRkZTRVQgICAgICAxMTAg
ICAgICAgLy8gZm9yIFJUMjUzMCBSU1NJLTExMCA9IGRCbQ0KLSNkZWZpbmUgUlNTSV9UT19EQk1f
T0ZGU0VUICAgICAgICAgIDEyMCAvLyBmb3IgUlQyNTMwIFJTU0ktMTE1ID0gZEJtDQotI2RlZmlu
ZSBSU1NJX0ZPUl9NSURfVFhfUE9XRVIgICAgICAgNTUgIC8vIC01NSBkYiBpcyBjb25zaWRlcmVk
IG1pZC1kaXN0YW5jZQ0KLSNkZWZpbmUgUlNTSV9GT1JfTE9XX1RYX1BPV0VSICAgICAgIDQ1ICAv
LyAtNDUgZGIgaXMgY29uc2lkZXJlZCB2ZXJ5IHNob3J0IGRpc3RhbmNlIGFuZCANCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZWxpZ2libGUgdG8gdXNlIGEgbG93
ZXIgVFggcG93ZXINCi0jZGVmaW5lIFJTU0lfRk9SX0xPV0VTVF9UWF9QT1dFUiAgICAzMA0KLSNk
ZWZpbmUgTUlEX1RYX1BPV0VSX0RFTFRBICAgICAgICAgIDAgICAvLyAtMyBkYiBmcm9tIGZ1bGwg
VFggcG93ZXIgdXBvbiBtaWQtZGlzdGFuY2UgdG8gQVANCi0jZGVmaW5lIExPV19UWF9QT1dFUl9E
RUxUQSAgICAgICAgICAzICAgLy8gLTggZGIgZnJvbSBmdWxsIFRYIHBvd2VyIHVwb24gdmVyeSBz
aG9ydCBkaXN0YW5jZQ0KLSNkZWZpbmUgTE9XRVNUX1RYX1BPV0VSX0RFTFRBICAgICAgIDYgICAv
LyAtMTIgZGIgZnJvbSBmdWxsIFRYIHBvd2VyIHVwb24gc2hvcnRlc3QgZGlzdGFuY2UNCi0NCi0j
ZGVmaW5lIFJTU0lfVFJJR0dFUkVEX1VQT05fQkVMT1dfVEhSRVNIT0xEICAgICAwDQotI2RlZmlu
ZSBSU1NJX1RSSUdHRVJFRF9VUE9OX0VYQ0NFRURfVEhSRVNIT0xEICAgMQ0KLSNkZWZpbmUgUlNT
SV9USFJFU0hPTERfRk9SX1JPQU1JTkcgICAgICAgICAgICAgIDI1DQotI2RlZmluZSBSU1NJX0RF
TFRBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQ0KLQ0KLS8vIENoYW5uZWwgUXVhbGl0
eSBJbmRpY2F0aW9uDQotLy8jZGVmaW5lIENRSV9HT09EX1RIUkVTSE9MRCAgICAgIDcwICAvLyA+
PSB0aGlzIHRocmVzaG9sZCBtZWFucyBjaGFubmVsIHF1YWxpdHkgR09PRA0KLS8vI2RlZmluZSBD
UUlfRkFJUl9USFJFU0hPTEQgICAgICA1MCAgLy8gPj0gdGhpcyB0aHJlc2hvbGQgbWVhbnMgY2hh
bm5lbCBxdWFsaXR5IEZBSVINCi0vLyNkZWZpbmUgQ1FJX1BPT1JfVEhSRVNIT0xEICAgICAgMzAg
IC8vID49IHRoaXMgdGhyZXNob2xkIG1lYW5zIGNoYW5uZWwgcXVhbGl0eSBQT09SDQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gPCB0aGlzIHRocmVzaG9sZCBtZWFucyBj
aGFubmVsIHF1YWxpdHkgcmVhbGx5IEJBRCwgbGluayBkb3duDQotI2RlZmluZSBDUUlfSVNfR09P
RChjcWkpICAgICAgICAoKGNxaSkgPj0gNTApDQotI2RlZmluZSBDUUlfSVNfRkFJUihjcWkpICAg
ICAgICAoKChjcWkpID49IDIwKSAmJiAoKGNxaSkgPCA1MCkpIC8vICgoKGNxaSkgPj0gNTApICYm
ICgoY3FpKSA8IDcwKSkNCi0jZGVmaW5lIENRSV9JU19QT09SKGNxaSkgICAgICAgICgoKGNxaSkg
Pj0gNSkgJiYgKChjcWkpIDwgMjApKSAgLy8gKCgoY3FpKSA+PSAyNSkgJiYgKChjcWkpIDwgNTAp
KQ0KLSNkZWZpbmUgQ1FJX0lTX0JBRChjcWkpICAgICAgICAgKChjcWkpIDwgNSkgICAgICAgICAg
ICAgICAgICAgICAvLyAoKGNxaSkgPCAyNSkNCi0NCi0vLyB3ZWlnaHRpbmcgZmFjdG9yIHRvIGNh
bGN1bGF0ZSBDaGFubmVsIHF1YWxpdHksIHRvdGFsIHNob3VsZCBiZSAxMDAlDQotI2RlZmluZSBS
U1NJX1dFSUdIVElORyAgICAgICAgICA0MA0KLSNkZWZpbmUgVFhfV0VJR0hUSU5HICAgICAgICAg
ICAgNDANCi0jZGVmaW5lIFJYX1dFSUdIVElORyAgICAgICAgICAgIDIwDQotDQotLy8gcHJpbWUg
bnVtYmVyIGNsb3Nlc3QgdG8gMjU2DQotLy8jZGVmaW5lIEhBU0hfVEFCTEVfU0laRSAgICAgICAg
ICAgICAgICAgIDE5MSAvLzE5MSBpcyBhbm90aGVyIHByaW1lDQotLy8gT25seSBhbGxvd3MgMzIg
ZW50cmllcyBpbiB0aGUgdGFibGUNCi0jZGVmaW5lIE1BQ19UQUJMRV9NQVhfQ0FQQUNJVFkgICAg
ICAgICAgIDMyDQotDQotI2RlZmluZSBNQUNfRU5UUllfTk9UX1VTRUQgICAgICAgICAgICAgICAw
eGZmDQotI2RlZmluZSBDT05URU5UX05PVF9BVkFJTCAgICAgICAgICAgICAgICAweGFhDQotDQot
Ly8gMTAgbWludXRlIG9mIGFnZSBvdXQNCi0jZGVmaW5lIE1BQ19UQUJMRV9BR0VfT1VUX1RJTUUg
ICAgICAgICAgIDB4ZmZmZmZmDQotDQotI2RlZmluZSBNQUNfQUREUl9IQVNIX0VSUk9SICAgICAg
ICAgICAgICAweGZmZmZmZmZlDQotI2RlZmluZSBNQUNfVEFCTEVfVU5LTk9XTl9JTkRFWCAgICAg
ICAgICAweGZmDQotI2RlZmluZSBNQUNfVEFCTEVfQUREUl9OT1RfSU4gICAgICAgICAgICAweGZm
ZmZmZmZkDQotDQotI2RlZmluZSBQRUVSX0tFWV9OT1RfVVNFRCAgICAgICAgICAgICAgICAwDQot
I2RlZmluZSBQRUVSX0tFWV82NF9CSVQgICAgICAgICAgICAgICAgICA2NA0KLSNkZWZpbmUgUEVF
Ul9LRVlfMTI4X0JJVCAgICAgICAgICAgICAgICAgMTI4DQotDQotI2RlZmluZSBQRUVSX0tFWV82
NEJJVF9MRU4gICAgICAgICAgICAgICA4DQotI2RlZmluZSBQRUVSX0tFWV8xMjhCSVRfTEVOICAg
ICAgICAgICAgICAxNg0KLQ0KLSNkZWZpbmUgTUFYX0xFTl9PRl9CU1NfVEFCTEUgICAgICAgICAg
ICAgNjQNCi0jZGVmaW5lIEJTU19OT1RfRk9VTkQgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZG
RkYNCi0NCi0jZGVmaW5lIE1BWF9MRU5fT0ZfTUxNRV9RVUVVRSAgICAgICAgICAgIDEwMA0KLSNk
ZWZpbmUgTUFYX0xFTl9PRl9NTE1FX1FVRVVFX01TRyAgICAgICAgNTEyDQotDQotLy8hIGFzc29j
IHN0YXRlLW1hY2hpbmUgc3RhdGVzDQotI2RlZmluZSBBU1NPQ19JRExFICAgICAgICAgICAgICAg
ICAgICAgICAwDQotI2RlZmluZSBBU1NPQ19XQUlUX1JTUCAgICAgICAgICAgICAgICAgICAxDQot
I2RlZmluZSBSRUFTU09DX1dBSVRfUlNQICAgICAgICAgICAgICAgICAyDQotI2RlZmluZSBESVNB
U1NPQ19XQUlUX1JTUCAgICAgICAgICAgICAgICAzDQotI2RlZmluZSBNQVhfQVNTT0NfU1RBVEUg
ICAgICAgICAgICAgICAgICA0DQotDQotI2RlZmluZSBBU1NPQ19GVU5DX1NJWkUgICAgICAgICAg
ICAgICAgICA0NCAvLyA0LXN0YXRlICogMTItZXZlbnQNCi0NCi0vL2F1dGhlbnRpY2F0aW9uIHN0
YXRlIG1hY2hpbmUNCi0jZGVmaW5lIEFVVEhfUkVRX0lETEUgICAgICAgICAgICAgICAgICAgIDAN
Ci0jZGVmaW5lIEFVVEhfV0FJVF9TRVEyICAgICAgICAgICAgICAgICAgIDENCi0jZGVmaW5lIEFV
VEhfV0FJVF9TRVE0ICAgICAgICAgICAgICAgICAgIDINCi0jZGVmaW5lIE1BWF9BVVRIX1NUQVRF
ICAgICAgICAgICAgICAgICAgIDMNCi0NCi0jZGVmaW5lIEFVVEhfRlVOQ19TSVpFICAgICAgICAg
ICAgICAgICAgIDE1IC8vIDMtc3RhdGUgKiA1LWV2ZW50DQotDQotI2RlZmluZSBBVVRIX1JTUF9J
RExFICAgICAgICAgICAgICAgICAgICAwDQotI2RlZmluZSBBVVRIX1JTUF9XQUlUX0NIQUwgICAg
ICAgICAgICAgICAxDQotI2RlZmluZSBNQVhfQVVUSF9SU1BfU1RBVEUgICAgICAgICAgICAgICAy
DQotDQotI2RlZmluZSBBVVRIX1JTUF9GVU5DX1NJWkUgICAgICAgICAgICAgICA2IC8vIDItc3Rh
dGUgKiAzLWV2ZW50DQotDQotLy8gU1lOQyBzdGF0ZSBtYWNoaW5lDQotI2RlZmluZSBTWU5DX0lE
TEUgICAgICAgICAgICAgICAgICAgICAgICAwIC8vIG1lcmdlIE5PX0JTUyxJQlNTX0lETEUsSUJT
U19BQ1RJVkUgYW5kIEJTUyBpbiB0byAxIHN0YXRlDQotI2RlZmluZSBKT0lOX1dBSVRfQkVBQ09O
ICAgICAgICAgICAgICAgICAxDQotI2RlZmluZSBTQ0FOX0xJU1RFTiAgICAgICAgICAgICAgICAg
ICAgICAyDQotI2RlZmluZSBNQVhfU1lOQ19TVEFURSAgICAgICAgICAgICAgICAgICAzDQotDQot
I2RlZmluZSBTWU5DX0ZVTkNfU0laRSAgICAgICAgICAgICAgICAgICAzMCAgLy8gMy1zdGF0ZSAq
IDEwLWV2ZW50DQotDQotI2RlZmluZSBTQ0FOX1BBU1NJVkUgICAgICAgICAgICAgICAgICAgICAx
OA0KLSNkZWZpbmUgU0NBTl9BQ1RJVkUgICAgICAgICAgICAgICAgICAgICAgMTkNCi0NCi0vL1dQ
QSBTdGF0ZSBtYWNoaW5lDQotI2RlZmluZSBXUEFfUFNLX0lETEUgICAgICAgICAgICAgICAgICAg
IDANCi0jZGVmaW5lIE1BWF9XUEFfUFNLX1NUQVRFICAgICAgICAgICAgICAgMQ0KLSNkZWZpbmUg
V1BBX1BTS19GVU5DX1NJWkUgICAgICAgICAgICAgICA1DQotDQotDQotLy8gQ29udHJvbCBzdGF0
ZSBtYWNoaW5lDQotI2RlZmluZSBDTlRMX0lETEUgICAgICAgICAgICAgICAgICAgICAgICAxMDAN
Ci0jZGVmaW5lIENOVExfV0FJVF9ESVNBU1NPQyAgICAgICAgICAgICAgIDEwMQ0KLSNkZWZpbmUg
Q05UTF9XQUlUX0pPSU4gICAgICAgICAgICAgICAgICAgMTAyDQotI2RlZmluZSBDTlRMX1dBSVRf
UkVBU1NPQyAgICAgICAgICAgICAgICAxMDMNCi0jZGVmaW5lIENOVExfV0FJVF9TVEFSVCAgICAg
ICAgICAgICAgICAgIDEwNA0KLSNkZWZpbmUgQ05UTF9XQUlUX0FVVEggICAgICAgICAgICAgICAg
ICAgMTA1DQotI2RlZmluZSBDTlRMX1dBSVRfQVNTT0MgICAgICAgICAgICAgICAgICAxMDYNCi0j
ZGVmaW5lIENOVExfV0FJVF9BVVRIMiAgICAgICAgICAgICAgICAgIDEwNw0KLSNkZWZpbmUgQ05U
TF9XQUlUX09JRF9MSVNUX1NDQU4gICAgICAgICAgMTA4DQotI2RlZmluZSBDTlRMX1dBSVRfT0lE
X0RJU0FTU09DICAgICAgICAgICAxMDkNCi0NCi0vLyNkZWZpbmUgQlNTX1RBQkxFX0VNUFRZKHgp
ICAgICAgICAgICAgICAgKCh4KS5Cc3NOciA9PSAwKQ0KLSNkZWZpbmUgQ2FwYWJpbGl0eUluZm9H
ZW4oRXNzLElic3MsQ2ZwLENmcFJlcSxQcml2KSAoKEVzcykgPyAweDAwMDEgOiAweDAwMDApIHwg
KChJYnNzKSA/IDB4MDAwMiA6IDB4MDAwMCkgfCAoKENmcCkgPyAweDAwMDQgOiAweDAwMDApIHwg
KChDZnBSZXEpID8gMHgwMDA4IDogMHgwMDAwKSB8ICgoUHJpdikgPyAweDAwMTA6IDB4MDAwMCkN
Ci0NCi0NCi0jZGVmaW5lIE1BQ19BRERSX0lTX0dST1VQKEFkZHIpICAgICAgICgoKChBZGRyKS5P
Y3RldFswXSkgJiAweDAxKSAhPSAwKQ0KLSNkZWZpbmUgTUFDX0FERFJfSEFTSChBZGRyKSAgICAg
ICAgICAgKChBZGRyKS5PY3RldFswXSBeIChBZGRyKS5PY3RldFsxXSBeIChBZGRyKS5PY3RldFsy
XSBeIChBZGRyKS5PY3RldFszXSBeIChBZGRyKS5PY3RldFs0XSBeIChBZGRyKS5PY3RldFs1XSkN
Ci0jZGVmaW5lIE1BQ19BRERSX0hBU0hfSU5ERVgoQWRkcikgICAgIChNQUNfQUREUl9IQVNIKEFk
ZHIpICUgSEFTSF9UQUJMRV9TSVpFKQ0KLSNkZWZpbmUgTUFDX0FERFJfRVFVQUwocEFkZHIxLHBB
ZGRyMikgUlRNUEVxdWFsTWVtb3J5KChQVk9JRCkocEFkZHIxKSwgKFBWT0lEKShwQWRkcjIpLCBN
QUNfQUREUl9MRU4pDQotI2RlZmluZSBDT1BZX01BQ19BRERSKEFkZHIxLCBBZGRyMikgICBtZW1j
cHkoKEFkZHIxKSwgKEFkZHIyKSwgRVRIX0xFTkdUSF9PRl9BRERSRVNTKQ0KLS8vI2RlZmluZSBN
QUtFX0JST0FEQ0FTVF9BRERSKEFkZHIpICAgICBOZGlzRmlsbE1lbW9yeSgmQWRkciwgTUFDX0FE
RFJfTEVOLCAweGZmKQ0KLQ0KLS8vIExFRCBDb250cm9sDQotLy8gYXNzb2lhdGlvbiBPTi4gb25l
IExFRCBPTi4gYW5vdGhlciBibGlua2luZyB3aGVuIFRYLCBPRkYgd2hlbiBpZGxlDQotI2RlZmlu
ZSBBU0lDX0xFRF9BQ1RfT04ocEFkYXB0ZXIpICAgICAgICAgUlRVU0JXcml0ZU1BQ1JlZ2lzdGVy
KHBBZGFwdGVyLCBNQUNfQ1NSMjAsIDB4MDAwMykNCi0vLyBubyBhc3NvY2lhdGlvbiwgYm90aCBM
RUQgb2ZmDQotI2RlZmluZSBBU0lDX0xFRF9BQ1RfT0ZGKHBBZGFwdGVyKSAgICAgICAgUlRVU0JX
cml0ZU1BQ1JlZ2lzdGVyKHBBZGFwdGVyLCBNQUNfQ1NSMjAsIDB4MDAwMCkNCi0vLyNkZWZpbmUg
QVNJQ19MRURfTElOS19VUChwQWRhcHRlcikgICAgICAgIFJUTVBfSU9fV1JJVEUzMihwQWRhcHRl
ciwgTEVEQ1NSLCAweDAwMDExRTQ2KQ0KLS8vI2RlZmluZSBBU0lDX0xFRF9MSU5LX0RPV04ocEFk
YXB0ZXIpICAgICAgUlRNUF9JT19XUklURTMyKHBBZGFwdGVyLCBMRURDU1IsIDB4MDAwMDFFNDYp
DQotDQotI2RlZmluZSBDQVBfSVNfRVNTX09OKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkg
JiAweDAwMDEpICE9IDApDQotI2RlZmluZSBDQVBfSVNfSUJTU19PTih4KSAgICAgICAgICAgICAg
ICAgICAgKCgoeCkgJiAweDAwMDIpICE9IDApDQotI2RlZmluZSBDQVBfSVNfQ0ZfUE9MTEFCTEVf
T04oeCkgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDQpICE9IDApDQotI2RlZmluZSBDQVBfSVNf
Q0ZfUE9MTF9SRVFfT04oeCkgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDgpICE9IDApDQotI2Rl
ZmluZSBDQVBfSVNfUFJJVkFDWV9PTih4KSAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMTAp
ICE9IDApDQotDQotLy8gODAyLjExRyBjYXBhYmlsaXR5IGZlYXR1cmVzDQotI2RlZmluZSBDQVBf
SVNfU0hPUlRfUFJFQU1CTEVfT04oeCkgICAgICAgICAgKCgoeCkgJiAweDAwMjApICE9IDApDQot
I2RlZmluZSBDQVBfSVNfUEJDQ19PTih4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAw
NDApICE9IDApDQotI2RlZmluZSBDQVBfSVNfQUdJTElUWV9PTih4KSAgICAgICAgICAgICAgICAg
KCgoeCkgJiAweDAwODApICE9IDApDQotI2RlZmluZSBDQVBfSVNfRVhUX1JBVEVfUEJDQ19PTih4
KSAgICAgICAgICAgKCgoeCkgJiAweDAxMDApICE9IDApDQotLy8jZGVmaW5lIENBUF9JU19DQ0tf
T0ZETV9PTih4KSAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDIwMCkgIT0gMCkNCi0jZGVmaW5l
IENBUF9JU19RT1MoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDIwMCkgIT0g
MCkgIC8vIGRlZmluZWQgaW4gODAyLjExZSBkNC4zDQotI2RlZmluZSBDQVBfSVNfU0hPUlRfU0xP
VF9USU1FKHgpICAgICAgICAgICAgKCgoeCkgJiAweDA0MDApICE9IDApDQotI2RlZmluZSBDQVBf
SVNfQVBTRCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDA4MDApICE9IDApICAv
LyBkZWZpbmVkIGluIDgwMi4xMWUgZDQuMw0KLSNkZWZpbmUgQ0FQX0lTX1FfQUNLKHgpICAgICAg
ICAgICAgICAgICAgICAgICgoKHgpICYgMHgxMDAwKSAhPSAwKSAgLy8gZGVmaW5lZCBpbiA4MDIu
MTFlIGQ0LjMNCi0jZGVmaW5lIENBUF9JU19EU1NTX09GRE0oeCkgICAgICAgICAgICAgICAgICAo
KCh4KSAmIDB4MjAwMCkgIT0gMCkNCi0jZGVmaW5lIENBUF9JU19CTE9DS19BQ0soeCkgICAgICAg
ICAgICAgICAgICAoKCh4KSAmIDB4NDAwMCkgIT0gMCkgIC8vIGRlZmluZWQgaW4gODAyLjExZSBk
NC4zDQotDQotI2RlZmluZSBDQVBfR0VORVJBVEUoZXNzLGlic3MsY2ZwLGNmcHJlcSxwcml2LHBy
ZWEpICgoZXNzKSA/IDB4MDAwMSA6IDB4MDAwMCkgfCAoKGlic3MpID8gMHgwMDAyIDogMHgwMDAw
KSB8ICgoY2ZwKSA/IDB4MDAwNCA6IDB4MDAwMCkgfCAoKGNmcHJlcSkgPyAweDAwMDggOiAweDAw
MDApIHwgKChwcml2KSA/IDB4MDAxMCA6IDB4MDAwMCkgfCAoKHByZWEpID8gMHgwMDIwIDogMHgw
MDAwKQ0KLQ0KLSNkZWZpbmUgRVJQX0lTX05PTl9FUlBfUFJFU0VOVCh4KSAgICAgICAgICAgICgo
KHgpICYgMHgwMSkgIT0gMCkgICAgLy8gZGVmaW5lIGluIDgwMi4xMWcNCi0jZGVmaW5lIEVSUF9J
U19VU0VfUFJPVEVDVElPTih4KSAgICAgICAgICAgICAoKCh4KSAmIDB4MDIpICE9IDApICAgIC8v
IGRlZmluZSBpbiA4MDIuMTFnDQotI2RlZmluZSBFUlBfSVNfVVNFX0JBUktFUl9QUkVBTUJMRSh4
KSAgICAgICAgKCgoeCkgJiAweDA0KSAhPSAwKSAgICAvLyBkZWZpbmUgaW4gODAyLjExZw0KLQ0K
LSNkZWZpbmUgVFhfRkVSX1RPT19ISUdIKFR4RkVSKSAgICAgKChUeEZFUikgPiAxNSkgICAvLyBj
b25zaWRlciByYXRlIGRvd24gaWYgRkVSPjE1JQ0KLSNkZWZpbmUgVFhfRkVSX1ZFUllfTE9XKFR4
RkVSKSAgICAgKChUeEZFUikgPCA3KSAgICAvLyBjb25zaWRlciByYXRlIHVwIGlmIEZFUjw3JQ0K
LSNkZWZpbmUgRkFJUl9GRVIgICAgICAgICAgICAgICAgICAgMTAgICAgICAgICAgICAgICAvLyBh
bnkgdmFsdWUgYmV0d2VlbiBUT09fSElHSCBhbmQgVkVSWV9MT1cNCi0vL2JsdWUsI2RlZmluZSBE
UlNfVFhfUVVBTElUWV9XT1JTVF9CT1VORCAgICAgIDQgDQotI2lmIDENCi0jZGVmaW5lIERSU19U
WF9RVUFMSVRZX1dPUlNUX0JPVU5EICAgICAgNA0KLSNlbHNlDQotI2RlZmluZSBEUlNfVFhfUVVB
TElUWV9XT1JTVF9CT1VORCAgICAgIDYNCi0jZW5kaWYNCi0jZGVmaW5lIERSU19QRU5BTFRZICAg
ICAgICAgICAgICAgICAgICAgOA0KLQ0KLS8vIE1hYyBBZGRyZXNzIGRhdGEgc3RydWN0dXJlDQot
dHlwZWRlZiBzdHJ1Y3QgX01BQ0FERFIgew0KLSAgICBVQ0hBUiAgICAgT2N0ZXRbTUFDX0FERFJf
TEVOXTsNCi19IE1BQ0FERFIsICpQTUFDQUREUjsNCi0NCi0vLyBNYWMgRnJhbWUgSGVhZGVyDQot
dHlwZWRlZiBzdHJ1Y3QgX01BQ0hEUiB7DQotICAgIC8vIDItYnl0ZSBGcmFtZSBDb250cm9sLiBO
T1RFOiBiaXQgZmllbGQgYXNzaWduZWQgZnJvbSBMU0IgZmlyc3QNCi0gICAgVVNIT1JUICAgIFZl
cjoyOw0KLSAgICBVU0hPUlQgICAgVHlwZToyOw0KLSAgICBVU0hPUlQgICAgU3ViVHlwZTo0Ow0K
LSAgICBVU0hPUlQgICAgVG9kczoxOw0KLSAgICBVU0hPUlQgICAgRnJkczoxOw0KLSAgICBVU0hP
UlQgICAgTW9yZUZyYWc6MTsNCi0gICAgVVNIT1JUICAgIFJldHJ5OjE7DQotICAgIFVTSE9SVCAg
ICBQd3JNZ210OjE7DQotICAgIFVTSE9SVCAgICBNb3JlRGF0YToxOw0KLSAgICBVU0hPUlQgICAg
V2VwOjE7DQotICAgIFVTSE9SVCAgICBPcmRlcjoxOw0KLSAgICANCi0gICAgVVNIT1JUICAgIER1
cmF0aW9uOw0KLSAgICBNQUNBRERSICAgQWRkcjE7DQotICAgIE1BQ0FERFIgICBBZGRyMjsNCi0g
ICAgTUFDQUREUiAgIEFkZHIzOw0KLSAgICANCi0gICAgVVNIT1JUICAgIEZyYWc6NDsNCi0gICAg
VVNIT1JUICAgIFNlcToxMjsNCi19IE1BQ0hEUiwgKlBNQUNIRFI7DQotDQotdHlwZWRlZiBzdHJ1
Y3QgX01BQ0ZSQU1FIHsNCi0gICAgTUFDSERSICAgIEhkcjsNCi0gICAgQ0hBUiAgICAgIE9jdGV0
WzFdOw0KLX0gTUFDRlJBTUUsICpQTUFDRlJBTUU7DQotDQotdHlwZWRlZiBzdHJ1Y3QgX1BTUE9M
TF9GUkFNRSB7DQotICAgIFVTSE9SVCAgICBWZXI6MjsNCi0gICAgVVNIT1JUICAgIFR5cGU6MjsN
Ci0gICAgVVNIT1JUICAgIFN1YlR5cGU6NDsNCi0gICAgVVNIT1JUICAgIFRvZHM6MTsNCi0gICAg
VVNIT1JUICAgIEZyZHM6MTsNCi0gICAgVVNIT1JUICAgIE1vcmVGcmFnOjE7DQotICAgIFVTSE9S
VCAgICBSZXRyeToxOw0KLSAgICBVU0hPUlQgICAgUHdyTWdtdDoxOw0KLSAgICBVU0hPUlQgICAg
TW9yZURhdGE6MTsNCi0gICAgVVNIT1JUICAgIFdlcDoxOw0KLSAgICBVU0hPUlQgICAgT3JkZXI6
MTsNCi0gICAgDQotICAgIFVTSE9SVCAgICBBaWQ7DQotICAgIE1BQ0FERFIgICBCc3NpZDsNCi0g
ICAgTUFDQUREUiAgIFRhOw0KLX0gUFNQT0xMX0ZSQU1FOw0KLQ0KLS8vDQotLy8gQ29udGVudGlv
bi1mcmVlIHBhcmFtZXRlciAod2l0aG91dCBJRCBhbmQgTGVuZ3RoKQ0KLS8vDQotdHlwZWRlZiBz
dHJ1Y3QgX0NGX1BBUk0gew0KLSAgICBVQ0hBUiAgICAgICAgQ2ZwQ291bnQ7DQotICAgIFVDSEFS
ICAgICAgICBDZnBQZXJpb2Q7DQotICAgIFVTSE9SVCAgICAgICBDZnBNYXhEdXJhdGlvbjsNCi0g
ICAgVVNIT1JUICAgICAgIENmcER1clJlbWFpbmluZzsNCi19IENGX1BBUk0sICpQQ0ZfUEFSTTsN
Ci0NCi0NCi10eXBlZGVmCXN0cnVjdAlfQ0lQSEVSX1NVSVRFCXsNCi0JTkRJU184MDJfMTFfRU5D
UllQVElPTl9TVEFUVVMJUGFpckNpcGhlcjsJCS8vIFVuaWNhc3QgY2lwaGVyIDEsIHRoaXMgb25l
IGhhcyBtb3JlIHNlY3VyZWQgY2lwaGVyIHN1aXRlDQotCU5ESVNfODAyXzExX0VOQ1JZUFRJT05f
U1RBVFVTCVBhaXJDaXBoZXJBdXg7CS8vIFVuaWNhc3QgY2lwaGVyIDIgaWYgQVAgYW5ub3VuY2Ug
dHdvIHVuaWNhc3QgY2lwaGVyIHN1aXRlDQotCU5ESVNfODAyXzExX0VOQ1JZUFRJT05fU1RBVFVT
CUdyb3VwQ2lwaGVyOwkvLyBHcm91cCBjaXBoZXINCi0JVVNIT1JUCQkJCQkJCVJzbkNhcGFiaWxp
dHk7CS8vIFJTTiBjYXBhYmlsaXR5IGZyb20gYmVhY29uDQotCUJPT0xFQU4JCQkJCQkJYk1peE1v
ZGU7CQkvLyBJbmRpY2F0ZSBQYWlyICYgR3JvdXAgY2lwaGVyIG1pZ2h0IGJlIGRpZmZlcmVudA0K
LX0JQ0lQSEVSX1NVSVRFLCAqUENJUEhFUl9TVUlURTsJDQotDQotdHlwZWRlZiBzdHJ1Y3Qgew0K
LSAgICBNQUNBRERSIEJzc2lkOw0KLSAgICBVQ0hBUiAgIENoYW5uZWw7DQotICAgIFVDSEFSICAg
QnNzVHlwZTsNCi0gICAgVVNIT1JUICBBdGltV2luOw0KLSAgICBVU0hPUlQgIEJlYWNvblBlcmlv
ZDsNCi0NCi0gICAgVUNIQVIgICBSYXRlc1tNQVhfTEVOX09GX1NVUFBPUlRFRF9SQVRFU107DQot
ICAgIFVDSEFSICAgUmF0ZXNMZW47DQotICAgIEJPT0xFQU4gRXh0ZW5kZWRSYXRlSWVFeGlzdDsg
Ly8gcmVjb3JkcyBpZiB0aGlzIEFQIHVzZSBFWFRFTkRFRF9TVVBQT1JURURfUkFURVMgSUUNCi0g
ICAgVUNIQVIgICBSc3NpOw0KLSAgICBVQ0hBUiAgIFByaXZhY3k7CQkJLy8gSW5kaWNhdGUgc2Vj
dXJpdHkgZnVuY3Rpb24gT04vT0ZGLiBEb24ndCBtZXNzIHVwIHdpdGggYXV0aCBtb2RlLg0KLQlV
Q0hBUglIaWRkZW47DQotDQotICAgIFVTSE9SVCAgRHRpbVBlcmlvZDsNCi0gICAgVVNIT1JUICBD
YXBhYmlsaXR5SW5mbzsNCi0NCi0gICAgVVNIT1JUICBDZnBDb3VudDsNCi0gICAgVVNIT1JUICBD
ZnBQZXJpb2Q7DQotICAgIFVTSE9SVCAgQ2ZwTWF4RHVyYXRpb247DQotICAgIFVTSE9SVCAgQ2Zw
RHVyUmVtYWluaW5nOw0KLSAgICBVQ0hBUiAgIFNzaWRMZW47DQotICAgIENIQVIgICAgU3NpZFtN
QVhfTEVOX09GX1NTSURdOw0KLSAgICANCi0gICAgVUxPTkcgICBMYXN0QmVhY29uUnhUaW1lOyAv
LyBPUydzIHRpbWVzdGFtcA0KLQ0KLQkvLyBOZXcgZm9yIFdQQTINCi0JQ0lQSEVSX1NVSVRFCQkJ
CQlXUEE7CQkJLy8gQVAgYW5ub3VuY2VkIFdQQSBjaXBoZXIgc3VpdGUNCi0JQ0lQSEVSX1NVSVRF
CQkJCQlXUEEyOwkJCS8vIEFQIGFubm91bmNlZCBXUEEyIGNpcGhlciBzdWl0ZQ0KLQ0KLQkvLyBO
ZXcgZm9yIG1pY3Jvc29mdCBXUEEgc3VwcG9ydA0KLQlORElTXzgwMl8xMV9GSVhFRF9JRXMJRml4
SUVzOw0KLQlORElTXzgwMl8xMV9BVVRIRU5USUNBVElPTl9NT0RFCUF1dGhNb2RlQXV4OwkvLyBB
ZGRpdGlvbiBtb2RlIGZvciBXUEEyIC8gV1BBIGNhcGFibGUgQVANCi0JTkRJU184MDJfMTFfQVVU
SEVOVElDQVRJT05fTU9ERQlBdXRoTW9kZTsNCi0JTkRJU184MDJfMTFfV0VQX1NUQVRVUwlXZXBT
dGF0dXM7CQkJCS8vIFVuaWNhc3QgRW5jcnlwdGlvbiBBbGdvcml0aG0gZXh0cmFjdCBmcm9tIFZB
Ul9JRQ0KLQlVQ0hBUgkJCQkJVmFySUVMZW47CQkJCS8vIExlbmd0aCBvZiBuZXh0IFZJRSBpbmNs
dWRlIEVJRCAmIExlbmd0aA0KLQlVQ0hBUgkJCQkJVmFySUVzW01BWF9WSUVfTEVOXTsNCi19IEJT
U19FTlRSWSwgKlBCU1NfRU5UUlk7DQotDQotdHlwZWRlZiBzdHJ1Y3Qgew0KLSAgICBVQ0hBUiAg
ICAgICAgICAgQnNzTnI7DQotICAgIEJTU19FTlRSWSAgICAgICBCc3NFbnRyeVtNQVhfTEVOX09G
X0JTU19UQUJMRV07DQotfSBCU1NfVEFCTEUsICpQQlNTX1RBQkxFOw0KLQ0KLQ0KLXR5cGVkZWYg
c3RydWN0IF9NTE1FX1FVRVVFX0VMRU0gew0KLSAgICBVTE9ORyAgICAgICAgICAgICBNYWNoaW5l
Ow0KLSAgICBVTE9ORyAgICAgICAgICAgICBNc2dUeXBlOw0KLSAgICBVTE9ORyAgICAgICAgICAg
ICBNc2dMZW47DQotICAgIFVDSEFSICAgICAgICAgICAgIFJzc2k7DQotICAgIEJPT0xFQU4gICAg
ICAgICAgIE9jY3VwaWVkOw0KLSAgICBVQ0hBUiAgICAgICAgICAgICBNc2dbTUFYX0xFTl9PRl9N
TE1FX0JVRkZFUl07DQotfSBNTE1FX1FVRVVFX0VMRU0sICpQTUxNRV9RVUVVRV9FTEVNOw0KLQ0K
LXR5cGVkZWYgc3RydWN0IF9NTE1FX1FVRVVFIHsNCi0gICAgVUxPTkcgICAgICAgICAgICAgTnVt
Ow0KLSAgICBVTE9ORyAgICAgICAgICAgICBIZWFkOw0KLSAgICBVTE9ORyAgICAgICAgICAgICBU
YWlsOw0KLSAgICBzcGlubG9ja190ICAgTG9jazsNCi0gICAgTUxNRV9RVUVVRV9FTEVNICBFbnRy
eVtNQVhfTEVOX09GX01MTUVfUVVFVUVdOw0KLX0gTUxNRV9RVUVVRSwgKlBNTE1FX1FVRVVFOw0K
LQ0KLXR5cGVkZWYgVk9JRCAoKlNUQVRFX01BQ0hJTkVfRlVOQykoVk9JRCAqQWRhcHRvciwgTUxN
RV9RVUVVRV9FTEVNICpFbGVtKTsNCi0NCi10eXBlZGVmIHN0cnVjdCBfU1RBVEVfTUFDSElORSB7
DQotICAgIFVMT05HICAgICAgICAgICAgICAgICAgICAgICAgICAgQmFzZTsNCi0gICAgVUxPTkcg
ICAgICAgICAgICAgICAgICAgICAgICAgICBOclN0YXRlOw0KLSAgICBVTE9ORyAgICAgICAgICAg
ICAgICAgICAgICAgICAgIE5yTXNnOw0KLSAgICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEN1cnJTdGF0ZTsNCi0gICAgU1RBVEVfTUFDSElORV9GVU5DICAgICAgICAgICAgICpUcmFu
c0Z1bmM7DQotfSBTVEFURV9NQUNISU5FLCAqUFNUQVRFX01BQ0hJTkU7DQotDQotLy8gQ05UTCBT
dGF0ZSBNYWNoaW5lIEF1eCBkYXRhIHN0cnVjdHVyZQ0KLXR5cGVkZWYgc3RydWN0IF9DTlRMX0FV
WCB7DQotICAgIFVDSEFSICAgICAgICAgICAgICAgU3NpZFtNQVhfTEVOX09GX1NTSURdOw0KLSAg
ICBVQ0hBUiAgICAgICAgICAgICAgIFNzaWRMZW47DQotICAgIE1BQ0FERFIgICAgICAgICAgICAg
QnNzaWQ7DQotICAgIEJTU19UQUJMRSAgICAgICAgICAgU3NpZEJzc1RhYjsgICAgIC8vIEFQIGxp
c3QgZm9yIHRoZSBzYW1lIFNTSUQNCi0gICAgQlNTX1RBQkxFICAgICAgICAgICBSb2FtVGFiOyAg
ICAgICAgLy8gQVAgbGlzdCBlbGlnaWJsZSBmb3Igcm9hbWluZw0KLSAgICBVTE9ORyAgICAgICAg
ICAgICAgIEJzc0lkeDsNCi0gICAgVUxPTkcgICAgICAgICAgICAgICBSb2FtSWR4Ow0KLSAgICBC
T09MRUFOICAgICAgICAgICAgIEN1cnJSZXFJc0Zyb21OZGlzOyAvLyBUUlVFIC0gdGhlbiB3ZSBz
aG91bGQgY2FsbCBOZGlzTVNldEluZm9ybWF0aW9uQ29tcGxldGUoKQ0KLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGQUxTRSAtIHJlcSBpcyBmcm9tIGRyaXZl
ciBpdHNlbGYuIA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBubyBOZGlzTVNldEluZm9ybWF0aW9uQ29tcGxldGUoKSBpcyByZXF1aXJlZA0KLX0gQ05UTF9B
VVgsICpQQ05UTF9BVVg7DQotDQotLy8gQVNTT0MgU3RhdGUgTWFjaGluZSBBdXggZGF0YSBzdHJ1
Y3R1cmUNCi10eXBlZGVmIHN0cnVjdCBfQVNTT0NfQVVYIHsNCi0gICAgTUFDQUREUiAgICAgICAg
ICAgICBBZGRyOw0KLSAgICBVU0hPUlQgICAgICAgICAgICAgIENhcGFiaWxpdHlJbmZvOw0KLSAg
ICBVU0hPUlQgICAgICAgICAgICAgIExpc3RlbkludHY7DQotICAgIENIQVIgICAgICAgICAgICAg
ICAgU3NpZFtNQVhfTEVOX09GX1NTSURdOw0KLSAgICBVQ0hBUiAgICAgICAgICAgICAgIFNzaWRM
ZW47ICAgIA0KLSAgICBSQUxJTktfVElNRVJfU1RSVUNUCSBBc3NvY1RpbWVyLCBSZWFzc29jVGlt
ZXIsIERpc2Fzc29jVGltZXI7DQotfSBBU1NPQ19BVVgsICpQQVNTT0NfQVVYOw0KLQ0KLS8vIEFV
VEggU3RhdGUgTWFjaGluZSBBdXggZGF0YSBzdHJ1Y3R1cmUNCi10eXBlZGVmIHN0cnVjdCBfQVVU
SF9BVVggew0KLSAgICBNQUNBRERSICAgICAgICAgICAgIEFkZHI7DQotICAgIFVTSE9SVCAgICAg
ICAgICAgICAgQWxnOw0KLSAgICAgUkFMSU5LX1RJTUVSX1NUUlVDVAlBdXRoVGltZXI7DQotfSBB
VVRIX0FVWCwgKlBBVVRIX0FVWDsNCi0NCi0vLyBBVVRILVJTUCBTdGF0ZSBNYWNoaW5lIEF1eCBk
YXRhIHN0cnVjdHVyZQ0KLXR5cGVkZWYgc3RydWN0IF9BVVRIX1JTUF9BVVggew0KLSAgICBNQUNB
RERSICAgICAgICAgICAgIEFkZHI7DQotICAgIFVTSE9SVCAgICAgICAgICAgICAgQWxnOw0KLSAg
ICBDSEFSICAgICAgICAgICAgICAgIENoYWxsZW5nZVtDSVBIRVJfVEVYVF9MRU5dOw0KLSAgICAg
UkFMSU5LX1RJTUVSX1NUUlVDVAlBdXRoUnNwVGltZXI7DQotfSBBVVRIX1JTUF9BVVgsICpQQVVU
SF9SU1BfQVVYOw0KLQ0KLS8vIFNZTkMgU3RhdGUgTWFjaGluZSBBdXggZGF0YSBzdHJ1Y3R1cmUN
Ci10eXBlZGVmIHN0cnVjdCBfU1lOQ19BVVggew0KLSAgICBNQUNBRERSICAgICAgICAgICAgIEFk
ZHI7DQotICAgIE1BQ0FERFIgICAgICAgICAgICAgQnNzaWQ7DQotICAgIFVDSEFSICAgICAgICAg
ICAgICAgQnNzVHlwZTsNCi0gICAgVUNIQVIgICAgICAgICAgICAgICBTc2lkTGVuOw0KLSAgICBD
SEFSICAgICAgICAgICAgICAgIFNzaWRbTUFYX0xFTl9PRl9TU0lEXTsNCi0gICAgVUNIQVIgICAg
ICAgICAgICAgICBTY2FuVHlwZTsNCi0gICAgVUNIQVIgICAgICAgICAgICAgICBDaGFubmVsOw0K
LSAgICAgUkFMSU5LX1RJTUVSX1NUUlVDVAlCZWFjb25UaW1lciwgU2NhblRpbWVyOw0KLX0gU1lO
Q19BVVg7DQotDQotIC8vIGFzc29jIHN0cnVjdCBpcyBlcXVhbCB0byByZWFzc29jDQotdHlwZWRl
ZiBzdHJ1Y3QgX01MTUVfQVNTT0NfUkVRX1NUUlVDVHsNCi0gICAgTUFDQUREUiAgIEFkZHI7DQot
ICAgIFVTSE9SVCAgICBDYXBhYmlsaXR5SW5mbzsNCi0gICAgVVNIT1JUICAgIExpc3RlbkludHY7
DQotICAgIFVMT05HICAgICBUaW1lb3V0Ow0KLX0gTUxNRV9BU1NPQ19SRVFfU1RSVUNULCAqUE1M
TUVfQVNTT0NfUkVRX1NUUlVDVCwgTUxNRV9SRUFTU09DX1JFUV9TVFJVQ1QsICpQTUxNRV9SRUFT
U09DX1JFUV9TVFJVQ1Q7DQotDQotdHlwZWRlZiBzdHJ1Y3QgX01MTUVfRElTQVNTT0NfUkVRX1NU
UlVDVHsNCi0gICAgTUFDQUREUiAgIEFkZHI7DQotICAgIFVTSE9SVCAgICBSZWFzb247DQotfSBN
TE1FX0RJU0FTU09DX1JFUV9TVFJVQ1QsICpQTUxNRV9ESVNBU1NPQ19SRVFfU1RSVUNUOw0KLQ0K
LXR5cGVkZWYgc3RydWN0IF9NTE1FX0FVVEhfUkVRX1NUUlVDVCB7DQotICAgIE1BQ0FERFIgICAg
ICBBZGRyOw0KLSAgICBVU0hPUlQgICAgICAgQWxnOw0KLSAgICBVTE9ORyAgICAgICAgVGltZW91
dDsNCi19IE1MTUVfQVVUSF9SRVFfU1RSVUNULCAqUE1MTUVfQVVUSF9SRVFfU1RSVUNUOw0KLQ0K
LXR5cGVkZWYgc3RydWN0IF9NTE1FX0RFQVVUSF9SRVFfU1RSVUNUIHsNCi0gICAgTUFDQUREUiAg
ICAgIEFkZHI7DQotICAgIFVTSE9SVCAgICAgICBSZWFzb247DQotfSBNTE1FX0RFQVVUSF9SRVFf
U1RSVUNULCAqUE1MTUVfREVBVVRIX1JFUV9TVFJVQ1Q7DQotDQotLy90eXBlZGVmIHN0cnVjdCBf
TUxNRV9BVVRIX0lORF9TVFJVQ1Qgew0KLS8vICAgIE1BQ0FERFIgICAgICBBZGRyOw0KLS8vICAg
IFVTSE9SVCAgICAgICBBbGc7DQotLy99IE1MTUVfQVVUSF9JTkRfU1RSVUNULCAqUE1MTUVfQVVU
SF9JTkRfU1RSVUNUOw0KLQ0KLS8vdHlwZWRlZiBzdHJ1Y3QgX0NMUzJFUlJfU1RSVUNUIHsNCi0v
LyAgICBNQUNBRERSICAgICAgQWRkcjsNCi0vL30gQ0xTMkVSUl9TVFJVQ1QsICpQQ0xTMkVSUl9T
VFJVQ1Q7DQotDQotdHlwZWRlZiBzdHJ1Y3Qgew0KLSAgICBVTE9ORyAgICAgIEJzc0lkeDsNCi19
IE1MTUVfSk9JTl9SRVFfU1RSVUNUOw0KLQ0KLXR5cGVkZWYgc3RydWN0IF9NTE1FX1NDQU5fUkVR
X1NUUlVDVCB7DQotICAgIE1BQ0FERFIgICAgQnNzaWQ7DQotICAgIFVDSEFSICAgICAgQnNzVHlw
ZTsNCi0gICAgVUNIQVIgICAgICBTY2FuVHlwZTsNCi0gICAgVUNIQVIgICAgICBTc2lkTGVuOw0K
LSAgICBDSEFSICAgICAgIFNzaWRbTUFYX0xFTl9PRl9TU0lEXTsNCi19IE1MTUVfU0NBTl9SRVFf
U1RSVUNULCAqUE1MTUVfU0NBTl9SRVFfU1RSVUNUOw0KLQ0KLXR5cGVkZWYgc3RydWN0IF9NTE1F
X1NUQVJUX1JFUV9TVFJVQ1Qgew0KLSAgICBDSEFSICAgICAgICBTc2lkW01BWF9MRU5fT0ZfU1NJ
RF07DQotICAgIFVDSEFSICAgICAgIFNzaWRMZW47DQotfSBNTE1FX1NUQVJUX1JFUV9TVFJVQ1Qs
ICpQTUxNRV9TVEFSVF9SRVFfU1RSVUNUOw0KLQ0KLXR5cGVkZWYgc3RydWN0IF9BUkM0X0NPTlRF
WFQgew0KLSAgICBVQ0hBUiB4LCB5LCBTdGF0ZVsyNTZdLCBLZXlbMTZdOyAgICAgLy8gMTI4IGJp
dHMga2V5DQotfSBBUkM0X0NPTlRFWFQsICpQQVJDNF9DT05URVhUOw0KLQ0KLXR5cGVkZWYgc3Ry
dWN0IF9CRUFDT05fRUlEX1NUUlVDVCB7DQotICAgIFVDSEFSICAgRWlkOw0KLSAgICBVQ0hBUiAg
IExlbjsNCi0gICAgQ0hBUiAgIE9jdGV0WzFdOw0KLX0gQkVBQ09OX0VJRF9TVFJVQ1QsKlBCRUFD
T05fRUlEX1NUUlVDVDsNCi0NCi0vLyBOZXcgZm9yIFdQQSBjaXBoZXIgc3VpdGUgDQotdHlwZWRl
ZglzdHJ1Y3QJX1JTTl9FSURfU1RSVUNUCXsNCi0JVUNIQVIJRWlkOw0KLQlVQ0hBUglMZW5ndGg7
DQotCVVDSEFSCU91aVs0XTsNCi0JVVNIT1JUCVZlcnNpb247DQotCVVDSEFSCU11bHRpY2FzdFs0
XTsNCi0JVVNIT1JUCUNvdW50Ow0KLQlzdHJ1Y3QJew0KLQkJVUNIQVIJT3VpWzRdOw0KLQl9CVVu
aWNhc3RbMV07DQotfQlSU05fRUlEX1NUUlVDVCwgKlBSU05fRUlEX1NUUlVDVDsNCi0NCi1leHRl
cm4gVUNIQVIgIFJhdGVJZFRvTWJwc1tdOw0KLWV4dGVybiBVU0hPUlQgUmF0ZUlkVG81MDBLYnBz
W107DQotDQotI2VuZGlmCS8vIE1MTUVfSF9fDQpkaWZmIC1ydU4gcnQyNTcwLTEuMS4wLWIxL01v
ZHVsZS9vaWQuaCBydDI1NzAtY3ZzLTIwMDUxMjI2MTYvTW9kdWxlL29pZC5oCi0tLSBydDI1NzAt
MS4xLjAtYjEvTW9kdWxlL29pZC5oCTIwMDUtMDctMzAgMTE6NDQ6MzAuMDAwMDAwMDAwIC0wNTAw
CisrKyBydDI1NzAtY3ZzLTIwMDUxMjI2MTYvTW9kdWxlL29pZC5oCTIwMDUtMTEtMzAgMDc6NDM6
MjcuMDAwMDAwMDAwIC0wNjAwCkBAIC00NCwxMyArNDQsMTIgQEAKICNkZWZpbmUgU0lPQ0lXRklS
U1RQUklWICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTSU9DREVWUFJJVkFURQogI2VuZGlm
CiAKLSNkZWZpbmUgUlRfUFJJVl9JT0NUTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
U0lPQ0lXRklSU1RQUklWICsgMSkKLSNkZWZpbmUgUlRQUklWX0lPQ1RMX1NFVCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAoU0lPQ0lXRklSU1RQUklWICsgMCkKLSNkZWZpbmUgUlRQUklWX0lP
Q1RMX0FVVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgKFNJT0NJV0ZJUlNUUFJJViArIDIp
Ci0jZGVmaW5lIFJUUFJJVl9JT0NUTF9LRVlJRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
U0lPQ0lXRklSU1RQUklWICsgNykKLSNkZWZpbmUgUlRQUklWX0lPQ1RMX1dFUFNUQVRVUyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAoU0lPQ0lXRklSU1RQUklWICsgNCkKLSNkZWZpbmUgUlRQ
UklWX0lPQ1RMX1dQQVBTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoU0lPQ0lXRklSU1RQ
UklWICsgNSkKLSNkZWZpbmUgUlRQUklWX0lPQ1RMX1BTTSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAoU0lPQ0lXRklSU1RQUklWICsgNikKKyNkZWZpbmUgUlRQUklWX0lPQ1RMX0FVVEggICAg
ICAgICAgICAgICAgICAgICAgICAgICAoU0lPQ0lXRklSU1RQUklWICsgMCkKKyNkZWZpbmUgUlRQ
UklWX0lPQ1RMX1dFUFNUQVRVUyAgICAgICAgICAgICAgICAgICAgICAoU0lPQ0lXRklSU1RQUklW
ICsgMSkKKyNkZWZpbmUgUlRQUklWX0lPQ1RMX1dQQVBTSyAgICAgICAgICAgICAgICAgICAgICAg
ICAoU0lPQ0lXRklSU1RQUklWICsgMikKKyNkZWZpbmUgUlRQUklWX0lPQ1RMX1BTTSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAoU0lPQ0lXRklSU1RQUklWICsgMykKKyNkZWZpbmUgUlRQUklW
X0lPQ1RMX0FESE9DTU9ERQkJCSAgICAoU0lPQ0lXRklSU1RQUklWICsgNCkKKyNkZWZpbmUgUlRQ
UklWX0lPQ1RMX1JGTU9OVFgJCQkgICAgKFNJT0NJV0ZJUlNUUFJJViArIDUpCiAKIAogLy8KQEAg
LTU5LDggKzU4LDggQEAKIAogCiAjaWZkZWYgUlQyNTAwX0RCRwotI2RlZmluZSBSVFBSSVZfSU9D
VExfQkJQICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNJT0NJV0ZJUlNUUFJJViArIDB4MDMK
LSNkZWZpbmUgUlRQUklWX0lPQ1RMX01BQyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTSU9D
SVdGSVJTVFBSSVYgKyAweDA1CisjZGVmaW5lIFJUUFJJVl9JT0NUTF9CQlAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgU0lPQ0lXRklSU1RQUklWICsgMHgwNgorI2RlZmluZSBSVFBSSVZfSU9D
VExfTUFDICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNJT0NJV0ZJUlNUUFJJViArIDB4MDcK
ICNlbmRpZgogCiAKQEAgLTU2Nyw3ICs1NjYsNyBAQAogI2RlZmluZSBSVF9PSURfODAyXzExX1BP
V0VSX01PREUgICAgICAgICAgICAgIChPSURfR0VUX1NFVF9UT0dHTEUgfCBPSURfODAyXzExX1BP
V0VSX01PREUpCiAjZGVmaW5lIFJUX09JRF84MDJfMTFfU1RBVElTVElDUyAgICAgICAgICAgICAg
KE9JRF9HRVRfU0VUX1RPR0dMRSB8IE9JRF84MDJfMTFfU1RBVElTVElDUykKIAotI2lmIERCRwor
I2lmZGVmIERCRwogI2RlZmluZSBSVF9PSURfODAyXzExX1FVRVJZX0hBUkRXQVJFX1JFR0lTVEVS
IDB4MEQ3MTAxMDUKICNkZWZpbmUgUlRfT0lEXzgwMl8xMV9TRVRfSEFSRFdBUkVfUkVHSVNURVIg
ICAoT0lEX0dFVF9TRVRfVE9HR0xFIHwgUlRfT0lEXzgwMl8xMV9RVUVSWV9IQVJEV0FSRV9SRUdJ
U1RFUikKICNlbmRpZgpkaWZmIC1ydU4gcnQyNTcwLTEuMS4wLWIxL01vZHVsZS9ydDI1NzBzdy5o
IHJ0MjU3MC1jdnMtMjAwNTEyMjYxNi9Nb2R1bGUvcnQyNTcwc3cuaAotLS0gcnQyNTcwLTEuMS4w
LWIxL01vZHVsZS9ydDI1NzBzdy5oCTIwMDUtMDctMzAgMTE6NDQ6MzAuMDAwMDAwMDAwIC0wNTAw
CisrKyBydDI1NzAtY3ZzLTIwMDUxMjI2MTYvTW9kdWxlL3J0MjU3MHN3LmgJMjAwNS0xMi0wOSAx
Nzo0MToxMi4wMDAwMDAwMDAgLTA2MDAKQEAgLTM3LDEzICszNywxNiBAQAogICoJUGV0ZXJGCQky
Ny0wNi0yMDA1CUFkZGVkIEdOLVdCS0cKICAqCXphawkJMDMtMDctMjAwNQlBZGRlZCBzZWNvbmQg
R04tV0JLRwogICoJUGVkcm9QICAgICAgICAgIDA0LTA3LTIwMDUgICAgICBBZGRlZCBFTUlORU5U
IDMwMzUKKyAqICAgICAgTWFya1cJCTA2LTEyLTIwMDUJQWRkZWQgTGlua3N5c0BIb21lICAKICAq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiovCiAKIAogI2lmbmRlZiBfX3ZuZXRzd19oX09LX18KICNkZWZpbmUg
X192bmV0c3dfaF9PS19fCiAKLQorI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+IEtFUk5FTF9WRVJT
SU9OKDIsIDUsIDApCisjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgorI2VuZGlmCiAKIC8vcmVk
LGV4dGVybgl1bnNpZ25lZCBsb25nCU5JQ19WRU5ET1JfRFJJVkVSX1ZFUlNJT047Ly9ibHVlCiAv
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vCkBAIC0xMTYsNiArMTE5LDggQEAKIAl7IFVTQl9ERVZJQ0UoMHgw
NDExLCAweDAwNjYpfSwJLyogTWVsY28gKi8JCVwKIAl7IFVTQl9ERVZJQ0UoMHgwNDExLCAweDAw
NjcpfSwJLyogTWVsY28gKi8JCVwKIAl7IFVTQl9ERVZJQ0UoMHgwNTBkLCAweDcwNTApfSwJLyog
QmVsa2luICovCQlcCisJeyBVU0JfREVWSUNFKDB4MDUwZCwgMHg3MDVhKX0sICAvKiBCZWxraW4g
Ki8JCVwKKwl7IFVTQl9ERVZJQ0UoMHgwNmY4LCAweGUwMDApfSwgLyogR1VJTExFTU9UICovCQlc
CiAJeyBVU0JfREVWSUNFKDB4MDcwNywgMHhlZTEzKX0sCS8qIFNNQyAqLwkJXAogCXsgVVNCX0RF
VklDRSgweDBiMDUsIDB4MTcwNil9LAkvKiBBU1VTICovCQlcCiAJeyBVU0JfREVWSUNFKDB4MGIw
NSwgMHgxNzA3KX0sCS8qIEFTVVMgKi8JCVwKQEAgLTEyNywxMiArMTMyLDE1IEBACiAJeyBVU0Jf
REVWSUNFKDB4MTE0YiwgMHgwMTEwKX0sCS8qIFNwYWlyb24gKi8JCVwKIAl7IFVTQl9ERVZJQ0Uo
MHgxM2IxLCAweDAwMGQpfSwJLyogQ2lzY28gU3lzdGVtcyAqLwlcCiAJeyBVU0JfREVWSUNFKDB4
MTNiMSwgMHgwMDExKX0sCS8qIENpc2NvIFN5c3RlbXMgKi8JXAorCXsgVVNCX0RFVklDRSgweDEz
YjEsIDB4MDAxYSl9LCAgLyogQ2lzY28gU3lzdGVtcyAqLwlcCiAJeyBVU0JfREVWSUNFKDB4MTQ4
ZiwgMHgxNzA2KX0sCS8qIFJhbGluayAqLwkJXAogCXsgVVNCX0RFVklDRSgweDE0OGYsIDB4MjU3
MCl9LAkvKiBSYWxpbmsgKi8JCVwKKwl7IFVTQl9ERVZJQ0UoMHgxNDhmLCAweDI1NzMpfSwJLyog
Q05FVCBDV0QtODU0ICovCVwKIAl7IFVTQl9ERVZJQ0UoMHgxNDhmLCAweDkwMjApfSwJLyogUmFs
aW5rICovCQlcCiAJeyBVU0JfREVWSUNFKDB4MTRiMiwgMHgzYzAyKX0sCS8qIENvbmNlcHRyb25p
YyAqLwlcCiAJeyBVU0JfREVWSUNFKDB4MTRmOCwgMHgyNTcwKX0sCS8qIEVtaW5lbnQgKi8JCVwK
IAl7IFVTQl9ERVZJQ0UoMHgyMDAxLCAweDNjMDApfSwJLyogRC1MSU5LICovCQlcCisJeyBVU0Jf
REVWSUNFKDB4MDQxMSwgMHgwMDhiKX0sCS8qIE5pbnRlbmRvICovCQlcCiAJezAsfQkJCQkJCQlc
CiB9CiAKQEAgLTE1NywyNCArMTY1LDIyIEBACiAvLwogLy8gIE1BQ1JPIGZvciBkZWJ1Z2dpbmcg
aW5mb3JtYXRpb24KIC8vCi0jaWYgUlQyNTAwX0RCRworI2lmZGVmIFJUMjUwMF9EQkcKIGV4dGVy
biBVTE9ORyAgICBkZWJ1ZzsKIAogI2RlZmluZSBEQkdQUklOVChMZXZlbCwgZm10LCBhcmdzLi4u
KSAJCQkJCVwKIHsJCQkJCQkJCQlcCi0JaWYgKExldmVsIDw9IGRlYnVnKSAgICAgIAkJCQlcCisJ
aWYgKExldmVsIDw9IGRlYnVnKQkJCQkJCVwKIAl7CQkJCQkJCQlcCi0JCXByaW50ayhOSUNfREJH
X1NUUklORyk7CQkJCQlcCi0JCXByaW50ayhLRVJOX0RFQlVHIGZtdCwgIyMgYXJncyk7CQkJXAor
CQlwcmludGsoS0VSTl9ERUJVRyBOSUNfREJHX1NUUklORyBmbXQsICMjIGFyZ3MpOwkJXAogCX0J
CQkJCQkJCVwKIH0KIAotI2RlZmluZSBEQkdQUklOVF9SQVcoTGV2ZWwsIGZtdCwgYXJncy4uLikg
CQkJCQlcCi17CQkJCQkJCQkJXAotCWlmIChMZXZlbCA8PSBkZWJ1ZykgICAgICAJCQkJXAorI2Rl
ZmluZSBEQkdQUklOVF9SQVcoTGV2ZWwsIGZtdCwgYXJncy4uLikJCQkJXAorICB7CQkJCQkJCQkJ
XAorCWlmIChMZXZlbCA8PSBkZWJ1ZykJCQkJCQlcCiAJewkJCQkJCQkJXAotCQlwcmludGsoIiAi
KTsJCQkJCVwKLQkJcHJpbnRrKEtFUk5fREVCVUcgZm10LCAjIyBhcmdzKTsJCQlcCisJCXByaW50
ayhmbXQsICMjIGFyZ3MpOwkJCQkJXAogCX0JCQkJCQkJCVwKIH0KIApAQCAtMjcyLDEwICsyNzgs
MTEgQEAKIAlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwkJCQkJXAogfQogCisjaWYgTElOVVhfVkVS
U0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiwgNSwgMCkKICNkZWZpbmUgUlRVU0JVcChwQWQs
IHNlbWFwaG9yZSkJXAotewlcCit7CQkJCVwKIAlpZihwQWQtPk1MTUVUaHJfcGlkPjApCVwKLQl1
cChzZW1hcGhvcmUpOwlcCisJdXAoc2VtYXBob3JlKTsJCVwKIH0KIAogI2RlZmluZSBSVFVTQkNN
RFVwKHBBZCwgc2VtYXBob3JlKQlcCkBAIC0yODMsNyArMjkwLDE5IEBACiAJaWYocEFkLT5SVFVT
QkNtZFRocl9waWQ+MCkJXAogCXVwKHNlbWFwaG9yZSk7CVwKIH0KKyNlbHNlCisjZGVmaW5lIFJU
VVNCVXAocEFkLCBzZW1hcGhvcmUpCVwKK3sJCQkJXAorCWlmKHBBZC0+TUxNRVRocl9hY3RpdmUp
CVwKKwl1cChzZW1hcGhvcmUpOwkJXAorfQogCisjZGVmaW5lIFJUVVNCQ01EVXAocEFkLCBzZW1h
cGhvcmUpCVwKK3sJXAorCWlmKHBBZC0+UlRVU0JDbWRUaHJfYWN0aXZlKQlcCisJdXAoc2VtYXBo
b3JlKTsJXAorfQorI2VuZGlmCiAKIC8vU2V0dXAgUGFja2V0IHVzZWQgaW4gQ3RybCB1cmIncyBm
aWxsZXIuLi4uCiAKQEAgLTkxMSw2ICs5MzAsOSBAQAogICAgIEJPT0xFQU4gICBNYXNzb2M7CiAg
ICAgQk9PTEVBTiAgIE1hdXRoOwogCisgICAgLy8gUkZNT04gbG9naWMgZmxhZ3MKKyAgICBCT09M
RUFOICAgTWFsbG93UkZNT05UeDsKKwogICAgIC8vIFBIWSBzcGVjaWZpY2F0aW9uCiAgICAgVUNI
QVIgICAgIFBoeU1vZGU7ICAgIC8vIFBIWV8xMUEsIFBIWV8xMUIsIFBIWV8xMUJHX01JWEVELCBQ
SFlfQUJHX01JWEVECiAgICAgVVNIT1JUICAgIERzaWZzOyAgICAgIC8vIGluIHVuaXRzIG9mIHVz
ZWMKQEAgLTE0NTgsOSArMTQ4MCwxNiBAQAogCS8vIFRocmVhZAogCXN0cnVjdCBzZW1hcGhvcmUJ
bWxtZV9zZW1hcGhvcmU7CSAvKiB0byBzbGVlcCB0aHJlYWQgb24gICAqLwogCXN0cnVjdCBzZW1h
cGhvcmUJUlRVU0JDbWRfc2VtYXBob3JlOwkgLyogdG8gc2xlZXAgdGhyZWFkIG9uICAgKi8KLQlz
dHJ1Y3QgY29tcGxldGlvbiAJbm90aWZ5OwkJIC8qIHRocmVhZCBiZWdpbi9lbmQJICovCi0JcGlk
X3QgCQkJTUxNRVRocl9waWQ7Ci0JcGlkX3QgCQkJUlRVU0JDbWRUaHJfcGlkOworI2lmIExJTlVY
X1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsIDUsIDApCisJCXN0cnVjdCBjb21wbGV0
aW9uCW5vdGlmeTsJCS8qIHRocmVhZCBiZWdpbi9lbmQgKi8KKwkJcGlkX3QJCQlNTE1FVGhyX3Bp
ZDsKKwkJcGlkX3QJCQlSVFVTQkNtZFRocl9waWQ7CisjZWxzZQorCXN0cnVjdCB0YXNrX3N0cnVj
dCAqCU1MTUVUaHI7CisJdm9sYXRpbGUgaW50IE1MTUVUaHJfYWN0aXZlOworCXN0cnVjdCB0YXNr
X3N0cnVjdCAqCVJUVVNCQ21kVGhyOworCXZvbGF0aWxlIGludCBSVFVTQkNtZFRocl9hY3RpdmU7
CisjZW5kaWYKIAl3YWl0X3F1ZXVlX2hlYWRfdAkqd2FpdDsKIAkKIAlzcGlubG9ja190ICpsb2Nr
OwpAQCAtMzY5Nyw0ICszNzI2LDU1IEBACiAKIGludCBVU0JfQ2FsbFVTQkQoUFJUMjU3MEFEQVBU
RVIgQWRhcHRlciwgCiAgICAgICAgICAgICAgICAgICAgICAgSU4gUFVSQiAgICAgICBVcmIpOwor
CisjZW5kaWYKKworI2lmbmRlZiBfUFJJU01IRUFERVIKKyNkZWZpbmUgX1BSSVNNSEVBREVSCisK
K2VudW0geworCURJRG1zZ19sbnhpbmRfd2xhbnNuaWZmcm0JCT0gMHgwMDAwMDA0NCwKKwlESURt
c2dfbG54aW5kX3dsYW5zbmlmZnJtX2hvc3R0aW1lCT0gMHgwMDAxMDA0NCwKKwlESURtc2dfbG54
aW5kX3dsYW5zbmlmZnJtX21hY3RpbWUJPSAweDAwMDIwMDQ0LAorCURJRG1zZ19sbnhpbmRfd2xh
bnNuaWZmcm1fY2hhbm5lbAk9IDB4MDAwMzAwNDQsCisJRElEbXNnX2xueGluZF93bGFuc25pZmZy
bV9yc3NpCQk9IDB4MDAwNDAwNDQsCisJRElEbXNnX2xueGluZF93bGFuc25pZmZybV9zcQkJPSAw
eDAwMDUwMDQ0LAorCURJRG1zZ19sbnhpbmRfd2xhbnNuaWZmcm1fc2lnbmFsCT0gMHgwMDA2MDA0
NCwKKwlESURtc2dfbG54aW5kX3dsYW5zbmlmZnJtX25vaXNlCQk9IDB4MDAwNzAwNDQsCisJRElE
bXNnX2xueGluZF93bGFuc25pZmZybV9yYXRlCQk9IDB4MDAwODAwNDQsCisJRElEbXNnX2xueGlu
ZF93bGFuc25pZmZybV9pc3R4CQk9IDB4MDAwOTAwNDQsCisJRElEbXNnX2xueGluZF93bGFuc25p
ZmZybV9mcm1sZW4JPSAweDAwMEEwMDQ0Cit9OworZW51bSB7CisJUDgwMjExRU5VTV9tc2dpdGVt
X3N0YXR1c19ub192YWx1ZQk9IDB4MDAKK307CitlbnVtIHsKKwlQODAyMTFFTlVNX3RydXRoX2Zh
bHNlCQkJPSAweDAwLAorCVA4MDIxMUVOVU1fdHJ1dGhfdHJ1ZQkJCT0gMHgwMQorfTsKKwordHlw
ZWRlZiBzdHJ1Y3QgeworCXVfaW50MzJfdCBkaWQ7CisJdV9pbnQxNl90IHN0YXR1czsKKwl1X2lu
dDE2X3QgbGVuOworCXVfaW50MzJfdCBkYXRhOworfSBwODAyMTFpdGVtX3VpbnQzMl90OworCit0
eXBlZGVmIHN0cnVjdCB7CisJdV9pbnQzMl90IG1zZ2NvZGU7CisJdV9pbnQzMl90IG1zZ2xlbjsK
KyNkZWZpbmUgV0xBTl9ERVZOQU1FTEVOX01BWCAxNgorCXVfaW50OF90IGRldm5hbWVbV0xBTl9E
RVZOQU1FTEVOX01BWF07CisJcDgwMjExaXRlbV91aW50MzJfdCBob3N0dGltZTsKKwlwODAyMTFp
dGVtX3VpbnQzMl90IG1hY3RpbWU7CisJcDgwMjExaXRlbV91aW50MzJfdCBjaGFubmVsOworCXA4
MDIxMWl0ZW1fdWludDMyX3QgcnNzaTsKKwlwODAyMTFpdGVtX3VpbnQzMl90IHNxOworCXA4MDIx
MWl0ZW1fdWludDMyX3Qgc2lnbmFsOworCXA4MDIxMWl0ZW1fdWludDMyX3Qgbm9pc2U7CisJcDgw
MjExaXRlbV91aW50MzJfdCByYXRlOworCXA4MDIxMWl0ZW1fdWludDMyX3QgaXN0eDsKKwlwODAy
MTFpdGVtX3VpbnQzMl90IGZybWxlbjsKK30gd2xhbl9uZ19wcmlzbTJfaGVhZGVyOworCiAjZW5k
aWYKZGlmZiAtcnVOIHJ0MjU3MC0xLjEuMC1iMS9Nb2R1bGUvLiNydDI1NzBzdy5oLjEuMTMgcnQy
NTcwLWN2cy0yMDA1MTIyNjE2L01vZHVsZS8uI3J0MjU3MHN3LmguMS4xMwotLS0gcnQyNTcwLTEu
MS4wLWIxL01vZHVsZS8uI3J0MjU3MHN3LmguMS4xMwkyMDA1LTA3LTMwIDExOjQ0OjMwLjAwMDAw
MDAwMCAtMDUwMAorKysgcnQyNTcwLWN2cy0yMDA1MTIyNjE2L01vZHVsZS8uI3J0MjU3MHN3Lmgu
MS4xMwkxOTY5LTEyLTMxIDE4OjAwOjAwLjAwMDAwMDAwMCAtMDYwMApAQCAtMSwzNzUyICswLDAg
QEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKiogCi0gKiBSVDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdCAt
IGh0dHA6Ly9ydDJ4MDAuc291cmNlZm9yZ2UubmV0ICAgICAgICAgICAgICAqIAotICogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKiAKLSAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICogCi0gKiAgIGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAqIAot
ICogICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAgICAgKiAKLSAqICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogCi0gKiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAqIAotICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgKiAKLSAqICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICogCi0gKiAg
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgICAgICAgICAqIAotICogICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgKiAKLSAqICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICogCi0gKiAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlICAgICAqIAotICogICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsg
aWYgbm90LCB3cml0ZSB0byB0aGUgICAgICAgICAgICAgICAgICAgICAgICAgKiAKLSAqICAgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICogCi0gKiAgIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBN
QSAgMDIxMTEtMTMwNywgVVNBLiAgICAgICAgICAgICAqIAotICogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAK
LSAqICAgTGljZW5zZWQgdW5kZXIgdGhlIEdOVSBHUEwgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICogCi0gKiAgIE9yaWdpbmFsIGNvZGUgc3VwcGxpZWQgdW5kZXIg
bGljZW5zZSBmcm9tIFJhTGluayBJbmMsIDIwMDQuICAgICAgICAgICAqIAotICoqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKLSAqCU1vZHVsZSBOYW1lOglydDI1NzBz
dy5oCi0gKgotICoJQWJzdHJhY3Q6Ci0gKgotICoJUmV2aXNpb24gSGlzdG9yeToKLSAqCVdobwkJ
V2hlbgkJV2hhdAotICoJLS0tLS0tLS0JLS0tLS0tLS0tLQktLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KLSAqCU5hbWUJCURhdGUJCU1vZGlmaWNhdGlvbiBsb2dzCi0gKglKYW4g
TGVlCQkyMDA1LTA2LTAxCVJlbGVhc2UKLSAqCUl2bwkJMDItMDYtMjAwNQlEZWJ1ZyBmbGFnIGZp
eAotICoJRmVsaXBlYUEJMDItMDYtMjAwNQlBZGRlZCBDb25jZXB0cm9uaWMgQzU0UlUKLSAqCU1h
dGhpYXNLCTAyLTA2LTIwMDUJQWRkZWQgRjVENzA1MCxVQjgwMVIKLSAqCU1hcmtXCQkwMi0wOC0y
MDA1CUFkZGVkIE1TSSA2ODYxCi0gKglQZXRlckYJCTI3LTA2LTIwMDUJQWRkZWQgR04tV0JLRwot
ICoJemFrCQkwMy0wNy0yMDA1CUFkZGVkIHNlY29uZCBHTi1XQktHCi0gKglQZWRyb1AgICAgICAg
ICAgMDQtMDctMjAwNSAgICAgIEFkZGVkIEVNSU5FTlQgMzAzNQotICoqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
Ki8KLQotCi0jaWZuZGVmIF9fdm5ldHN3X2hfT0tfXwotI2RlZmluZSBfX3ZuZXRzd19oX09LX18K
LQotCi0KLS8vcmVkLGV4dGVybgl1bnNpZ25lZCBsb25nCU5JQ19WRU5ET1JfRFJJVkVSX1ZFUlNJ
T047Ly9ibHVlCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLyBGcmFtZSBTaXplcwotLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLwotCi0jZGVmaW5lIE1BQ19BRERSRVNTX0xFTkdUSCAgICAgICAgICAgICAgICAg
IDYKLQotI2RlZmluZSBIRUFERVJfU0laRSAgICAgICAgICAgICAgICAgICAgIDE0Ci0jZGVmaW5l
IE1BWElNVU1fUEFDS0VUX1NJWkUgICAgICAgICAgICAgMTUwMAotCi0jZGVmaW5lIE1BWF9RVUVV
RV9TSVpFICAgICAgICAgICAgICAgICAgMTAwCi0KLSNkZWZpbmUgVVNCX1RYX0hFQURFUl9TSVpF
ICAgICAgICAgICAgICA4Ly9XTGVuZ3RoK1R4UmF0ZStQYWRkaW5nQnl0ZXMrUmVzZXJ2ZWQKLSNk
ZWZpbmUgVVNCX1JYX0hFQURFUl9TSVpFICAgICAgICAgICAgICAxMgotCi0jZGVmaW5lIFdJUkVM
RVNTX0hFQURFUl9PVkVSSEVBRCAgICAgICAgMTgKLSNkZWZpbmUgTUFYX1RYX1BBRERJTkdfQllU
RVMgICAgICAgICAgICA1MAotI2RlZmluZSBNQVhfUlhfUEFERElOR19CWVRFUyAgICAgICAgICAg
IDY2Ci0jZGVmaW5lIENSQzMyX0JZVEVTICAgICAgICAgICAgICAgICAgICAgNAotCi0jZGVmaW5l
IE1BWF9XSVJFTEVTU19TSVpFICAgICAgICAgICAgICAgV0lSRUxFU1NfSEVBREVSX09WRVJIRUFE
ICsgSEVBREVSX1NJWkUgKyBNQVhJTVVNX1BBQ0tFVF9TSVpFICsgQ1JDMzJfQllURVMKLWV4dGVy
biB1bnNpZ25lZCBsb25nIGZsYWdnOwotCi0KLXR5cGVkZWYgVUNIQVIgQUREUkVTU1tNQUNfQURE
UkVTU19MRU5HVEhdOwotCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLyBORElTIHJlbGF0ZWQgZGVm
aW5pdGlvbnMKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLSNkZWZpbmUgTUFYX01VTFRJQ0FTVF9BRERS
RVNTRVMgICAgICAgICAzMgotI2RlZmluZSBNQVhfTE9PS0FIRUFEX1NJWkUgICAgICAgICAgICAg
IE1BWElNVU1fUEFDS0VUX1NJWkUgKyBIRUFERVJfU0laRQotI2RlZmluZSBUUkFOU01JVF9CVUZG
RVJfU1BBQ0UgICAgICAgICAgIDB4MzAwMAotI2RlZmluZSBSRUNFSVZFX0JVRkZFUl9TUEFDRSAg
ICAgICAgICAgIDB4NDAwMAotI2RlZmluZSBNQVhJTVVNX1NFTkRfUEFDS0VUUyAgICAgICAgICAg
IDgKLQotI2RlZmluZSBPUEVSX1JBVEVfU0laRSAgICAgICAgICAgICAgICAgIDQKLQotI2RlZmlu
ZSBTVVBQT1JURURfUkFURVNfU0VUXzEgICAgICAgICAgIDAKLSNkZWZpbmUgU1VQUE9SVEVEX1JB
VEVTX1NFVF8yICAgICAgICAgICAxCi0KLQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8gTWVtb3J5
IE1hY3JvcwotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotI2RlZmluZSBGcmVlTWVtb3J5KF9idWZmZXIp
IGtmcmVlKF9idWZmZXIpCi0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vIDgwMiwxMSByZWxhdGVk
IGRlZmluaXRpb25zCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0jZGVmaW5lIEVTU19JRF9TSVpFICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAzMgotI2RlZmluZSBBRF9IT0NfTU9ERSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSBJTkZSQVNUUlVDVFVSRV9NT0RFICAgICAg
ICAgICAgICAgICAgICAgMgotI2RlZmluZSBXRVBfS0VZX1NJWkUgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMTMgLy8xMjgtYml0IGVuY3J5cHRpb24KLSNkZWZpbmUgUFJFQU1CTEVfVFlQRV9M
T05HICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUFJFQU1CTEVfVFlQRV9TSE9SVCAg
ICAgICAgICAgICAgICAgICAgIDEKLQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8gdXNlZCB0byB0
cmFjayBpbmZvcm1hdGlvbiBvbiB1c2IgcGlwZXMgaW4gdXNlCi0vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ci10eXBlZGVmIHN0cnVjdCBfX0JVTEtVU0JfUElQRUlORk8gewotICAgIEJPT0xFQU4gZlBpcGVP
cGVuZWQ7Ci19IEJVTEtVU0JfUElQRUlORk8sICpQQlVMS1VTQl9QSVBFSU5GTzsKLQotCi0vLyNw
cmFnbWEgcGFjayAocHVzaCwgMSkKLQotCi0jZGVmaW5lIFJUVVNCX0RFVklDRVMgeyBcCi0JeyBV
U0JfREVWSUNFKDB4MDQxMSwgMHgwMDY2KX0sCS8qIE1lbGNvICovCQlcCi0JeyBVU0JfREVWSUNF
KDB4MDQxMSwgMHgwMDY3KX0sCS8qIE1lbGNvICovCQlcCi0JeyBVU0JfREVWSUNFKDB4MDUwZCwg
MHg3MDUwKX0sCS8qIEJlbGtpbiAqLwkJXAotCXsgVVNCX0RFVklDRSgweDA3MDcsIDB4ZWUxMyl9
LAkvKiBTTUMgKi8JCVwKLQl7IFVTQl9ERVZJQ0UoMHgwYjA1LCAweDE3MDYpfSwJLyogQVNVUyAq
LwkJXAotCXsgVVNCX0RFVklDRSgweDBiMDUsIDB4MTcwNyl9LAkvKiBBU1VTICovCQlcCi0JeyBV
U0JfREVWSUNFKDB4MGRiMCwgMHg2ODYxKX0sCS8qIE1TSSAqLwkJXAotCXsgVVNCX0RFVklDRSgw
eDBkYjAsIDB4Njg2NSl9LAkvKiBNU0kgKi8JCVwKLQl7IFVTQl9ERVZJQ0UoMHgwZGIwLCAweDY4
NjkpfSwJLyogTVNJICovCQlcCi0JeyBVU0JfREVWSUNFKDB4MTA0NCwgMHg4MDAxKX0sCS8qIEdp
Z2FieXRlICovCQlcCi0JeyBVU0JfREVWSUNFKDB4MTA0NCwgMHg4MDA3KX0sCS8qIEdpZ2FieXRl
ICovCQlcCi0JeyBVU0JfREVWSUNFKDB4MTE0YiwgMHgwMTEwKX0sCS8qIFNwYWlyb24gKi8JCVwK
LQl7IFVTQl9ERVZJQ0UoMHgxM2IxLCAweDAwMGQpfSwJLyogQ2lzY28gU3lzdGVtcyAqLwlcCi0J
eyBVU0JfREVWSUNFKDB4MTNiMSwgMHgwMDExKX0sCS8qIENpc2NvIFN5c3RlbXMgKi8JXAotCXsg
VVNCX0RFVklDRSgweDE0OGYsIDB4MTcwNil9LAkvKiBSYWxpbmsgKi8JCVwKLQl7IFVTQl9ERVZJ
Q0UoMHgxNDhmLCAweDI1NzApfSwJLyogUmFsaW5rICovCQlcCi0JeyBVU0JfREVWSUNFKDB4MTQ4
ZiwgMHg5MDIwKX0sCS8qIFJhbGluayAqLwkJXAotCXsgVVNCX0RFVklDRSgweDE0YjIsIDB4M2Mw
Mil9LAkvKiBDb25jZXB0cm9uaWMgKi8JXAotCXsgVVNCX0RFVklDRSgweDE0ZjgsIDB4MjU3MCl9
LAkvKiBFbWluZW50ICovCQlcCi0JeyBVU0JfREVWSUNFKDB4MjAwMSwgMHgzYzAwKX0sCS8qIEQt
TElOSyAqLwkJXAotCXswLH0JCQkJCQkJXAotfQotCi0KLXR5cGVkZWYgc3RydWN0IHVyYiAqcHVy
YmJfdDsKLXR5cGVkZWYgc3RydWN0IHVzYl9jdHJscmVxdWVzdCBkZXZjdHJscmVxdWVzdDsKLS8v
IGZvciB2ZW5kb3Itc3BlY2lmaWMgY29udHJvbCBvcGVyYXRpb25zCi0jZGVmaW5lIENPTlRST0xf
VElNRU9VVF9NUwkoNTAwKQkJCS8qIG1zZWMgKi8KLSNkZWZpbmUgQ09OVFJPTF9USU1FT1VUX0pJ
RkZJRVMgKChDT05UUk9MX1RJTUVPVVRfTVMgKiBIWikvMTAwMCkKLS8qIG1hcCBkZXZyZXF1ZXN0
IGZpZWxkcyBvbnRvIHVzYl9jdHJscmVxdWVzdCdzICovCi0jZGVmaW5lIERFVlJFUV9SRVFVRVNU
KHgpICgoeCktPmJSZXF1ZXN0KQotI2RlZmluZSBERVZSRVFfUkVRVUVTVFRZUEUoeCkgKCh4KS0+
YlJlcXVlc3RUeXBlKQotI2RlZmluZSBERVZSRVFfVkFMVUUoeCkgKCh4KS0+d1ZhbHVlKQotI2Rl
ZmluZSBERVZSRVFfSU5ERVgoeCkgKCh4KS0+d0luZGV4KQotI2RlZmluZSBERVZSRVFfTEVOR1RI
KHgpICgoeCktPndMZW5ndGgpCi0jZGVmaW5lIFBVUkIJcHVyYmJfdAotI2RlZmluZSBQSVJQCVBW
T0lECi0jZGVmaW5lIFBNREwgUFZPSUQKLQotI2RlZmluZSBORElTX09JRCBVSU5UICAgICAgIAot
Ci0vLwotLy8gIE1BQ1JPIGZvciBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24KLS8vCi0jaWYgUlQyNTAw
X0RCRwotZXh0ZXJuIFVMT05HICAgIGRlYnVnOwotCi0jZGVmaW5lIERCR1BSSU5UKExldmVsLCBm
bXQsIGFyZ3MuLi4pIAkJCQkJXAotewkJCQkJCQkJCVwKLQlpZiAoTGV2ZWwgPD0gZGVidWcpICAg
ICAgCQkJCVwKLQl7CQkJCQkJCQlcCi0JCXByaW50ayhOSUNfREJHX1NUUklORyk7CQkJCQlcCi0J
CXByaW50ayhLRVJOX0RFQlVHIGZtdCwgIyMgYXJncyk7CQkJXAotCX0JCQkJCQkJCVwKLX0KLQot
I2RlZmluZSBEQkdQUklOVF9SQVcoTGV2ZWwsIGZtdCwgYXJncy4uLikgCQkJCQlcCi17CQkJCQkJ
CQkJXAotCWlmIChMZXZlbCA8PSBkZWJ1ZykgICAgICAJCQkJXAotCXsJCQkJCQkJCVwKLQkJcHJp
bnRrKCIgIik7CQkJCQlcCi0JCXByaW50ayhLRVJOX0RFQlVHIGZtdCwgIyMgYXJncyk7CQkJXAot
CX0JCQkJCQkJCVwKLX0KLQotI2Vsc2UgLyogUlQyNTAwX0RCRyAqLwotI2RlZmluZSBEQkdQUklO
VChMZXZlbCwgZm10LCBhcmdzLi4uKQotI2RlZmluZSBEQkdQUklOVF9SQVcoTGV2ZWwsIGZtdCwg
YXJncy4uLikKLSNlbmRpZiAvKiBSVDI1MDBfREJHICovCi0KLQotIyAgZGVmaW5lIGFzc2VydChl
eHByKSBcCi0gICAgICAgIGlmKHVubGlrZWx5KCEoZXhwcikpKSB7CQkJCSAgICAgICAgXAotICAg
ICAgICBwcmludGsoS0VSTl9FUlIgIkFzc2VydGlvbiBmYWlsZWQhICVzLCVzLCVzLGxpbmU9JWRc
biIsCVwKLSAgICAgICAgI2V4cHIsX19GSUxFX18sX19GVU5DVElPTl9fLF9fTElORV9fKTsJCSAg
ICAgICAgXAotICAgICAgICB9Ci0KLQotLy8KLS8vIERlZmluZXMgdGhlIHN0YXRlIG9mIHRoZSBM
QU4gbWVkaWEKLS8vCi10eXBlZGVmIGVudW0gX05ESVNfTUVESUFfU1RBVEUKLXsKLSAgICBOZGlz
TWVkaWFTdGF0ZUNvbm5lY3RlZCwKLSAgICBOZGlzTWVkaWFTdGF0ZURpc2Nvbm5lY3RlZAotfSBO
RElTX01FRElBX1NUQVRFLCAqUE5ESVNfTUVESUFfU1RBVEU7Ci0KLQotI2RlZmluZSBOZGlzTVNl
dEluZm9ybWF0aW9uQ29tcGxldGUoaGFuZGxlLCBzdGF0dXMpCQlcCi17CQkJCQlcCi19Ci0KLSNk
ZWZpbmUgTmRpc01JbmRpY2F0ZVN0YXR1c0NvbXBsZXRlKGhhbmRsZSkJCVwKLXsJCQkJCVwKLX0K
LQotI2RlZmluZSBOZGlzTUluZGljYXRlU3RhdHVzKF9NLCBfRywgX1NCLCBfQlMpCQlcCi17CQkJ
CQkJXAotfQotCi0KLQotLy8KLS8vCVRoZSBmb2xsb3dpbmcgc3RydWN0dXJlIGRlZmluZXMgdGhl
IGRldmljZSBwb3dlciBzdGF0ZXMuCi0vLwotdHlwZWRlZiBlbnVtIF9ORElTX0RFVklDRV9QT1dF
Ul9TVEFURQotewotCU5kaXNEZXZpY2VTdGF0ZVVuc3BlY2lmaWVkID0gMCwKLQlOZGlzRGV2aWNl
U3RhdGVEMCwKLQlOZGlzRGV2aWNlU3RhdGVEMSwKLQlOZGlzRGV2aWNlU3RhdGVEMiwKLQlOZGlz
RGV2aWNlU3RhdGVEMywKLQlOZGlzRGV2aWNlU3RhdGVNYXhpbXVtCi19IE5ESVNfREVWSUNFX1BP
V0VSX1NUQVRFLCAqUE5ESVNfREVWSUNFX1BPV0VSX1NUQVRFOwotCi0KLSNkZWZpbmUgRVRIX0xF
TkdUSF9PRl9BRERSRVNTCTYKLQotCi0jZGVmaW5lIFNUQVRVU19TVUNDRVNTCTB4MDAKLSNkZWZp
bmUgU1RBVFVTX1VOU1VDQ0VTU0ZVTCAweDAxCi0KLXR5cGVkZWYgTE9ORyBOVFNUQVRVUzsKLXR5
cGVkZWYgTlRTVEFUVVMgKlBOVFNUQVRVUzsKLQotLy8KLS8vCXNwaW5fbG9jayBlbmhhbmNlZCBm
b3IgTmVzdGVkIHNwaW4gbG9jawotLy8KLSNkZWZpbmUJTmRpc0FsbG9jYXRlU3BpbkxvY2sobG9j
aykJCVwKLXsJCQkJCQkJCQlcCi0Jc3Bpbl9sb2NrX2luaXQobG9jayk7CQkJCVwKLX0KLQotI2Rl
ZmluZSBOZGlzUmVsZWFzZVNwaW5Mb2NrKGxvY2spCQkJCQkJXAotewkJCQkJCQkJCQlcCi0JaWYg
KGluX2ludGVycnVwdCgpKQkJCQlcCi17CQkJCQkJCQkJCVwKLQkJc3Bpbl91bmxvY2tfaXJxcmVz
dG9yZShsb2NrLCBmbGFnZyk7CQkJXAotfQlcCi0JZWxzZQkJCQkJCVwKLXsJCQkJCQkJCQkJXAot
CQlzcGluX3VubG9jayhsb2NrKTsJCQlcCi19CVwKLX0KLQotI2RlZmluZSBOZGlzQWNxdWlyZVNw
aW5Mb2NrKGxvY2spCQkJXAotewkJCQkJCQlcCi0JaWYgKGluX2ludGVycnVwdCgpKQkJCQlcCi0J
CXNwaW5fbG9ja19pcnFzYXZlKGxvY2ssIGZsYWdnKTsJCQlcCi0JZWxzZQkJCQkJCVwKLQkJc3Bp
bl9sb2NrKGxvY2spOwkJCVwKLX0KLQotCi0jZGVmaW5lIFJUVVNCRnJlZVNrYkJ1ZmZlcihza2Ip
CQkJCVwKLXsJCQkJCQkJCQkJCVwKLQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwkJCQkJXAotfQot
Ci0jZGVmaW5lIFJUVVNCVXAocEFkLCBzZW1hcGhvcmUpCVwKLXsJXAotCWlmKHBBZC0+TUxNRVRo
cl9waWQ+MCkJXAotCXVwKHNlbWFwaG9yZSk7CVwKLX0KLQotI2RlZmluZSBSVFVTQkNNRFVwKHBB
ZCwgc2VtYXBob3JlKQlcCi17CVwKLQlpZihwQWQtPlJUVVNCQ21kVGhyX3BpZD4wKQlcCi0JdXAo
c2VtYXBob3JlKTsJXAotfQotCi0KLS8vU2V0dXAgUGFja2V0IHVzZWQgaW4gQ3RybCB1cmIncyBm
aWxsZXIuLi4uCi0KLSNkZWZpbmUgRklMTF9SRVFVRVNUKGEsYWEsYWIsYWMsYWQsYWUpXAotICBk
byB7XAotICAgICAgKGEpLT5kZXZyZXEtPnJlcXVlc3QgPSBhYTtcCi0gICAgICAoYSktPmRldnJl
cS0+cmVxdWVzdHR5cGUgPSBhYjtcCi0gICAgICAoYSktPmRldnJlcS0+dmFsdWUgPSBjcHVfdG9f
bGUxNihhYyk7XAotICAgICAgKGEpLT5kZXZyZXEtPmluZGV4ID0gY3B1X3RvX2xlMTYoYWQpO1wK
LSAgICAgIChhKS0+ZGV2cmVxLT5sZW5ndGggPSBjcHVfdG9fbGUxNihhZSk7XAotICB9d2hpbGUo
MCk7Ci0KLQotCi0vLyBkaXJlY3Rpb24gaXMgc3BlY2lmaWVkIGluIFRyYW5zZmVyRmxhZ3MKLQot
I2RlZmluZSBVUkJfRlVOQ1RJT05fUkVTRVJWRUQwICAgICAgICAgICAgICAgICAgICAgIDB4MDAx
NgotCi0vLwotLy8gVGhlc2UgYXJlIGZvciBzZW5kaW5nIHZlbmRvciBhbmQgY2xhc3MgY29tbWFu
ZHMKLS8vIG9uIHRoZSBkZWZhdWx0IHBpcGUKLS8vCi0vLyBkaXJlY3Rpb24gaXMgc3BlY2lmaWVk
IGluIFRyYW5zZmVyRmxhZ3MKLS8vCi0KLSNkZWZpbmUgVVJCX0ZVTkNUSU9OX1ZFTkRPUl9ERVZJ
Q0UgICAgICAgICAgICAgICAgICAgMHgwMDE3Ci0jZGVmaW5lIFVSQl9GVU5DVElPTl9WRU5ET1Jf
SU5URVJGQUNFICAgICAgICAgICAgICAgIDB4MDAxOAotI2RlZmluZSBVUkJfRlVOQ1RJT05fVkVO
RE9SX0VORFBPSU5UICAgICAgICAgICAgICAgICAweDAwMTkKLSNkZWZpbmUgVVJCX0ZVTkNUSU9O
X1ZFTkRPUl9PVEhFUiAgICAgICAgICAgICAgICAgICAgMHgwMDIwCi0KLSNkZWZpbmUgVVJCX0ZV
TkNUSU9OX0NMQVNTX0RFVklDRSAgICAgICAgICAgICAgICAgICAgMHgwMDFBCi0jZGVmaW5lIFVS
Ql9GVU5DVElPTl9DTEFTU19JTlRFUkZBQ0UgICAgICAgICAgICAgICAgIDB4MDAxQgotI2RlZmlu
ZSBVUkJfRlVOQ1RJT05fQ0xBU1NfRU5EUE9JTlQgICAgICAgICAgICAgICAgICAweDAwMUMKLSNk
ZWZpbmUgVVJCX0ZVTkNUSU9OX0NMQVNTX09USEVSICAgICAgICAgICAgICAgICAgICAgMHgwMDFG
Ci0KLS8vCi0vLyBSZXNlcnZlZCBmdW5jdGlvbiBjb2RlcwotLy8gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotI2RlZmluZSBVUkJfRlVOQ1RJT05fUkVTRVJW
RUQgICAgICAgICAgICAgICAgICAgICAgICAweDAwMUQKLQotI2RlZmluZSBVUkJfRlVOQ1RJT05f
R0VUX0NPTkZJR1VSQVRJT04gICAgICAgICAgICAgICAweDAwMjYKLSNkZWZpbmUgVVJCX0ZVTkNU
SU9OX0dFVF9JTlRFUkZBQ0UgICAgICAgICAgICAgICAgICAgMHgwMDI3Ci0gICAgICAgICAgICAg
ICAgICAgIAotI2RlZmluZSBVUkJfRlVOQ1RJT05fTEFTVCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDAwMjkKLQotCi0vL2RlZmluZSBWZW5kb3IgQ29tbWFuZCBDb25zdGFudAotI2RlZmlu
ZSBDTURfVmVuZG9yUmVzZXQJMHgwMQotI2RlZmluZSBDTURfRGlzY29ubmVjdAkweDAyCi0jZGVm
aW5lIENNRF9GdW5jdGlvblN3aXRjaCAweDAzCi0jZGVmaW5lIENNRF9TZXRUZXN0TW9kZQkweDA0
Ci0jZGVmaW5lIENNRF9DbGVhclRlc3RNb2RlIDB4MDUKLSNkZWZpbmUgQ01EX1dyaXRlTWFjUmVn
aXN0ZXIgMHgwNgotI2RlZmluZSBDTURfUmVhZE1hY1JlZ2lzdGVyIDB4MDcKLSNkZWZpbmUgQ01E
X0VFUFJPTVdyaXRlIDB4MDgKLSNkZWZpbmUgQ01EX0VFUFJPTVJlYWQgMHgwOQotI2RlZmluZSBD
TURfTXVsdGlwbGVSZWFkIDB4MEEKLSNkZWZpbmUgQ01EX011bHRpcGxlV3JpdGUgMHgwQgotI2Rl
ZmluZSBDTURfU2luZ2xlUmVhZCAweDBDCi0jZGVmaW5lIENNRF9TaW5nbGVXcml0ZSAweDBECi0K
LSNkZWZpbmUgTmRpc01TbGVlcAltZGVsYXkKLQotCi0vLyAgQXNzZXJ0IE1BQ1JPIHRvIG1ha2Ug
c3VyZSBwcm9ncmFtIHJ1bm5pbmcKLS8vCi0jdW5kZWYgIEFTU0VSVAotI2RlZmluZSBBU1NFUlQo
eCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLXsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg
aWYgKCEoeCkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgICAgICAgcHJpbnRrKEtFUk5fV0FSTklORyBfX0ZJTEVfXyAiOiVkIGFzc2VydCAi
ICN4ICJmYWlsZWRcbiIsIF9fTElORV9fKTsJCVwKLSAgICB9ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi19Ci0KLSNpZiAwCi0jdW5kZWYgTU9EX0lOQ19VU0VfQ09VTlQKLSNkZWZpbmUgTU9E
X0lOQ19VU0VfQ09VTlQJZG8geyB9IHdoaWxlICgwKQotCi0jdW5kZWYgTU9EX0RFQ19VU0VfQ09V
TlQKLSNkZWZpbmUgTU9EX0RFQ19VU0VfQ09VTlQJZG8geyB9IHdoaWxlICgwKQotI2VuZGlmCi0K
LQotLy9hZGQgYnkgamFtZXMKLQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8gVkVSU0lPTl9JTkZP
IGV4Y2hhbmdlZCBiZXR3ZWVuIGRyaXZlci9hcHBsaWNhdGlvbgotLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
LwotdHlwZWRlZiBzdHJ1Y3QgX19WRVJTSU9OX0lORk97Ci0gICAgVUNIQVIgICBEcml2ZXJNYWpv
clZlcnNpb247Ci0gICAgVUNIQVIgICBEcml2ZXJNaW5vclZlcnNpb247Ci0gICAgVUNIQVIgICBE
cml2ZXJTdWJWZXJzaW9uOwotICAgIFVTSE9SVCAgRHJpdmVyQnVpbGQ7Ci0KLSAgICBVU0hPUlQg
IEZ3TWFqb3JWZXJzaW9uOwotICAgIFVTSE9SVCAgRndNaW5vclZlcnNpb247Ci0gICAgVVNIT1JU
ICBGd1N1YlZlcnNpb247Ci0gICAgVVNIT1JUICBGd0J1aWxkOwotfVZFUlNJT05fSU5GTywgKlBW
RVJTSU9OX0lORk87Ci0KLSNpZiAwCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLyBUaGUgUlhfQlVG
RkVSIHN0cnVjdHVyZSBmb3JtcyB0aGUgUmVjZWl2ZWQgVVNCIHBhY2tldCBmcm9tIHRoZSBkZXZp
Y2UKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLXR5cGVkZWYgc3RydWN0IF9fUlhfQlVGRkVSewotICAg
IFVTSE9SVCAgICAgIFdMZW5ndGg7Ci0gICAgVUNIQVIgICAgICAgUnhSYXRlOyAgICAgICAvL1Ro
aXMgZmllbGQgaXMgbm90IHVzZWQgaW4gdGhpcyB2ZXJzaW9uIG9mIERydi9GVwotICAgIFVDSEFS
ICAgICAgIENoYW5nZUJTU0lEOwotICAgIFVDSEFSICAgICAgIEZyYWdtZW50YXRpb247Ly9UaGlz
IGZpZWxkIGlzIG5vdCB1c2VkIGluIHRoaXMgdmVyc2lvbiBvZiBEcnYvRlcKLSAgICBVQ0hBUiAg
ICAgICBSU1NJOwotICAgIFVDSEFSICAgICAgIExpbmtRdWFsaXR5OwotICAgIFVDSEFSICAgICAg
IE5vaXNlTGV2ZWw7ICAgLy9UaGlzIGZpZWxkIGlzIG5vdCB1c2VkIGluIHRoaXMgdmVyc2lvbiBv
ZiBEcnYvRlcKLSAgICBVQ0hBUiAgICAgICBSeFRpbWVbNF07ICAgIC8vVGhpcyBmaWVsZCBpcyBu
b3QgdXNlZCBpbiB0aGlzIHZlcnNpb24gb2YgRHJ2L0ZXCi0gICAgVUNIQVIgICAgICAgV2lyZWxl
c3NQYWNrZXRbTUFYX1dJUkVMRVNTX1NJWkVdOwotfSBSWF9CVUZGRVIsICpQUlhfQlVGRkVSOwot
I2VuZGlmCi0KLQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8gVGhlIFRYX0JVRkZFUiBzdHJ1Y3R1
cmUgZm9ybXMgdGhlIHRyYW5zbWl0dGVkIFVTQiBwYWNrZXQgdG8gdGhlIGRldmljZQotLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLwotdHlwZWRlZiBzdHJ1Y3QgX1RYX0JVRkZFUnsKLS8vCVVJTlQJCQlCdWxr
T3V0U2l6ZTsKLSAgICBUWERfU1RSVUMJCVR4RGVzYzsKLSAgICBVQ0hBUgkJCVdpcmVsZXNzUGFj
a2V0WzIzNDJdOwotfSBUWF9CVUZGRVIsICpQVFhfQlVGRkVSOwotCi0KLS8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8KLS8vIFRoZSBSVFNfQlVGRkVSIHN0cnVjdHVyZSBmb3JtcyB0aGUgdHJhbnNtaXR0ZWQg
VVNCIHBhY2tldCB0byB0aGUgZGV2aWNlCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi10eXBlZGVmIHN0
cnVjdCBfX1JUU19CVUZGRVJ7Ci0gICAgVFhEX1NUUlVDICAgICAgVHhEZXNjOwotICAgIFVDSEFS
CSAgICAgICBSVFNQYWNrZXRbMTZdOwotfSBSVFNfQlVGRkVSLCAqUFJUU19CVUZGRVI7Ci0KLS8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8KLS8vIFRoZSBVU0JfQ0FSRF9DT05GSUcgc3RydWN0dXJlIGlzIHVz
ZWQgb25seSBkdXJpbmcgZGV2aWNlIGluaXRpYWxpemF0aW9uCi0vLyB0byBwYXNzIHRoZSBpbml0
aWFsIG9wZXJhdGlvbmcgcGFyYW1ldGVycyB0byBkZXZpY2UKLS8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8K
LXR5cGVkZWYgc3RydWN0IF9fVVNCX0NBUkRfQ09ORklHewotICAgIFVDSEFSICAgICAgIEV4Y2x1
ZGVVbmVuY3J5cHRlZDsKLSAgICBVQ0hBUiAgICAgICBQcm9taXNjdW91c01vZGU7Ci0gICAgVUNI
QVIgICAgICAgU2hvcnRSZXRyeUxpbWl0OwotICAgIFVDSEFSICAgICAgIEVuY3J5cHRpb25UeXBl
OwotICAgIFVTSE9SVCAgICAgIFJ0c1RocmVzaG9sZDsKLSAgICBVU0hPUlQgICAgICBGcmFnbWVu
dGF0aW9uVGhyZXNob2xkOyAgICAgLy8gMjU2Li4yMzQ2Ci0gICAgVUNIQVIgICAgICAgQmFzaWNS
YXRlU2V0WzRdOwotICAgIEJPT0xFQU4gICAgIEF1dG9SYXRlRmFsbEJhY2s7ICAgICAgICAgICAv
LzAsMQotICAgIFVDSEFSICAgICAgIENoYW5uZWw7Ci0gICAgQk9PTEVBTiAgICAgUHJpdmFjeUlu
dm9rZWQ7Ci0gICAgVUNIQVIgICAgICAgV0VQRGVmYXVsdEtleUlEOyAgICAgICAgICAgIC8vIDAu
LjMKLSAgICBVQ0hBUiAgICAgICBDdXJyZW50U1NJRFszMl07Ci0gICAgVUNIQVIgICAgICAgV0VQ
RGVmYXVsdEtleVZhbHVlWzRdW1dFUF9LRVlfU0laRV07Ci0gICAgVUNIQVIgICAgICAgU1NJRExl
bjsKLSAgICBVQ0hBUiAgICAgICBTaG9ydFByZWFtYmxlOwotICAgIFVTSE9SVCAgICAgIEJlYWNv
blBlcmlvZDsKLX0gVVNCX0NBUkRfQ09ORklHLCAqUFVTQl9DQVJEX0NPTkZJRzsKLQotCi0vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vCi0vLyBJbiBXRVBfSU5GTyBhcmUga2VwdCBhbGwgdGhlIFdFUCByZWxh
dGVkIHBhcmFtZXRlcnMuIFRoaXMgc3RydWN0dXJlIGlzCi0vLyBhbHNvIGV4Y2hhbmdlZCBiZXR3
ZWVuIGRyaXZlciBhbmQgYXBwbGljYXRpb24uCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi10eXBlZGVm
IHN0cnVjdCBfX1dFUF9JTkZPewotICAgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgICBXZXBL
ZXlUb1VzZTsKLSAgICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICAgV2VwTW9kZTsKLSAgICBV
U0hPUlQgICAgICAgICAgICAgICAgICAgICAgQXV0aGVudGljYXRpb25UeXBlOwotICAgIFVDSEFS
ICAgICAgICAgICAgICAgICAgICAgICBFbmNyeXB0aW9uTGV2ZWw7Ci0gICAgVUNIQVIgICAgICAg
ICAgICAgICAgICAgICAgIFdlcEtleTFbV0VQX0tFWV9TSVpFXTsKLSAgICBVQ0hBUiAgICAgICAg
ICAgICAgICAgICAgICAgV2VwS2V5MltXRVBfS0VZX1NJWkVdOwotICAgIFVDSEFSICAgICAgICAg
ICAgICAgICAgICAgICBXZXBLZXkzW1dFUF9LRVlfU0laRV07Ci0gICAgVUNIQVIgICAgICAgICAg
ICAgICAgICAgICAgIFdlcEtleTRbV0VQX0tFWV9TSVpFXTsKLX0gV0VQX0lORk8sICpQV0VQX0lO
Rk87Ci0KLQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8gSW4gdGhlIFNUQVRJU1RJQ1Mgc3RydWN0
dXJlIGFyZSBrZXB0IGFsbCB0aGUgZGV2aWNlJ3Mgc3RhdGl0cmljcy4KLS8vIFRoaXMgc3RydWN0
dXJlIGlzIGFsc28gZXhjaGFuZ2VkIGJldHdlZW4gZHJpdmVyIGFuZCBhcHBsaWNhdGlvbi4KLS8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8KLXR5cGVkZWYgc3RydWN0IF9fU1RBVElTVElDU3sKLSAgICBVTE9O
RyAgIFR4RGF0YVBhY2tldHNPazsKLSAgICBVTE9ORyAgIFR4RGF0YVBhY2tldHNFcnJvcjsKLSAg
ICBVTE9ORyAgIFR4TWdtdFBhY2tldHNPazsKLSAgICBVTE9ORyAgIFR4TWdtdFBhY2tldHNFcnJv
cjsKLQotICAgIFVMT05HICAgUnhEYXRhUGFja2V0c09rOwotICAgIFVMT05HICAgUnhEYXRhUGFj
a2V0c0Vycm9yOwotICAgIFVMT05HICAgUnhNZ210UGFja2V0c09rOwotICAgIFVMT05HICAgUnhN
Z210UGFja2V0c0Vycm9yOwotCi0gICAgVUxPTkcgICBSeExvc3Q7Ci0gICAgVUxPTkcgICBUeFBh
Y2tldHNSZWplY3RlZE5vdFJlYWR5OwotICAgIFVMT05HICAgVHhQYWNrZXRzUmVqZWN0ZWRSZXNv
dXJjZXM7Ci0gICAgVUxPTkcgICBNYXRjaGluZ0JlYWNvbnM7Ci19U1RBVElTVElDUywgKlBTVEFU
SVNUSUNTOwotCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLyBUaGUgQlNTX0lORk8gYW5kIFNJVEVf
U1VSVkVZX0lORk8gc3RydWN0dXJlcyBhcmUgdXNlZCB0byBmb3JtIGEgY3VzdG9tCi0vLyBsaXN0
IG9mIDEyIG1heGltdW0gQlNTcyBhbmQga2VldCB0aGVyZSBjaGFyYWN0ZXJpc3RpY3MuCi0vLyBU
aGlzIGxpc3QgaXMgdGhlIG9uZSB0aGF0IGFwcGxpY2F0aW9uIGRpc3BsYXlzIGluIFNpdGUgU3Vy
dmV5IFRhYi4KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLXR5cGVkZWYgc3RydWN0IF9fQlNTX0lORk97
Ci0gICAgVUNIQVIgICBDaGFubmVsOwotICAgIFVDSEFSICAgU1NJRFtFU1NfSURfU0laRV07Ci0g
ICAgVUNIQVIgICBTU0lEc2l6ZTsKLSAgICBVQ0hBUiAgIEJTU0lEWzZdOwotICAgIFVDSEFSICAg
UlNTSTsKLSAgICBVQ0hBUiAgIFVzaW5nV0VQOwotICAgIFVDSEFSICAgUHJlYW1ibGVUeXBlOwot
ICAgIFVTSE9SVCAgQmVhY29uUGVyaW9kOwotICAgIFVDSEFSICAgQlNTVHlwZTsgIC8vMTEtPkFk
LUhvYywgMi0+SW5mcmFzdHJ1Y3R1cmUKLX1CU1NfSU5GTywgKlBCU1NfSU5GTzsKLQotI2RlZmlu
ZSBNQVhfQVBfRU5UUklFUyAgMzAKLQotdHlwZWRlZiBzdHJ1Y3QgX19TSVRFX1NVUlZFWV9JTkZP
ewotICAgIEJTU19JTkZPICAgICAgICBCU1NpbmZvW01BWF9BUF9FTlRSSUVTXTsKLSAgICBVQ0hB
UiAgICAgICAgICAgQlNTc0luTGlzdDsKLSAgICBVQ0hBUiAgICAgICAgICAgVXNlclNlbGVjdGVk
SW5kZXg7Ci0gICAgVUNIQVIgICAgICAgICAgIFNpdGVTdXJ2ZXlTdGF0ZTsKLX1TSVRFX1NVUlZF
WV9JTkZPLCAqUFNJVEVfU1VSVkVZX0lORk87Ci0KLSNpZmRlZiBXSU5YUAotdHlwZWRlZiBzdHJ1
Y3QgX19YUF9CU1NJRF9MSVNUewotICAgIFVMT05HICAgICAgICAgICAgICAgICAgIE51bWJlck9m
RW50cmllczsKLSAgICBORElTX1dMQU5fQlNTSUQgICAgICAgICBOZGlzQlNTSURFbnRyeVtNQVhf
QVBfRU5UUklFU107Ci19WFBfQlNTSURfTElTVDsKLSNlbmRpZgotCi0vLyNwcmFnbWEgcGFjayhw
b3ApCi0KLQotCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLyBUaGUgRlJBR01FTlRFRF9QQUNLRVQg
c3RydWN0dXJlIGlzIHVzZWQgZm9yIHRoZSByZWFzc2VtYmx5IG9mIHRoZQotLy8gZnJhZ21lbnRl
ZCA4MDIuMTEgcGFja2V0cyBpbiB0aGUgZHJpdmVyCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi10eXBl
ZGVmIHN0cnVjdCBfX0ZSQUdNRU5URURfUEFDS0VUewotICAgIFVTSE9SVCAgU2VxdWVuY2U7Ci0g
ICAgVVNIT1JUICBDdXJyZW50TGVuOwotICAgIFVDSEFSICAgU291cmNlQWRkcmVzc1s2XTsKLSAg
ICBVQ0hBUiAgIEZyYWdtZW50TnVtYmVyOy8vbmV4dCBmcmFnbWVudCBleHBlY3RlZAotICAgIFVD
SEFSICAgV2lyZWxlc3NQYWNrZXRbTUFYX1dJUkVMRVNTX1NJWkVdOwotfUZSQUdNRU5URURfUEFD
S0VULCAqUEZSQUdNRU5URURfUEFDS0VUOwotCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLyBUaGUg
QVNZTkNfT0lEIHN0cnVjdHVyZSBpcyB1c2VkIGZvciBob2xkaW5nIHRoZSBjb250ZXh0IG9mIGFu
IE9JRCBjYWxsCi0vLyB0aGF0IHRoZSBkcml2ZXIgd2lsbCBjb21wbGV0ZSBhc3luY2hyb25vdXNs
eQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLwotdHlwZWRlZiBzdHJ1Y3QgX19BU1lOQ19PSUR7Ci0gICAg
UFZPSUQgICBJbmZvcm1hdGlvbkJ1ZmZlcjsKLSAgICBVTE9ORyAgIEluZm9ybWF0aW9uQnVmZmVy
TGVuZ3RoOwotICAgIFBVTE9ORyAgQnl0ZXM7Ci0gICAgUFVMT05HICBCeXRlc05lZWRlZDsKLX1B
U1lOQ19PSUQsICpQQVNZTkNfT0lEOwotCi0jaWYgMS8vUlQyNDYwCi0vLwotLy8gIFNvbWUgdXRp
bGl0eSBtYWNyb3MKLS8vCi0jaWZuZGVmIG1pbgotI2RlZmluZSBtaW4oX2EsIF9iKSAgICAgKCgo
X2EpIDwgKF9iKSkgPyAoX2EpIDogKF9iKSkKLSNlbmRpZgotCi0jaWZuZGVmIG1heAotI2RlZmlu
ZSBtYXgoX2EsIF9iKSAgICAgKCgoX2EpID4gKF9iKSkgPyAoX2EpIDogKF9iKSkKLSNlbmRpZgot
Ci0jZGVmaW5lIElOQ19DT1VOVEVSKFZhbCkgICAgKFZhbC5RdWFkUGFydCsrKQotCi0jZGVmaW5l
CUlORlJBX09OKF9wKQkJICAgICAgICAoKChfcCktPlBvcnRDZmcuTWFzc29jKSA9PSBUUlVFKQkv
LyBDaGVjayBNYXNzb2MKLSNkZWZpbmUgQURIT0NfT04oX3ApICAgICAgICAgICAgICAgICgoKF9w
KS0+UG9ydENmZy5NaWJzcykgPT0gVFJVRSkgICAgLy8gY2hlY2sgTWlic3MKLQotI2RlZmluZQlS
VE1QX1NFVF9QQUNLRVRfRlJBR01FTlRTKF9wLCBudW1iZXIpCSgoX3ApLT5jYlsxMF0gPSBudW1i
ZXIpCi0jZGVmaW5lIFJUTVBfR0VUX1BBQ0tFVF9GUkFHTUVOVFMoX3ApCQkJKChfcCktPmNiWzEw
XSkKLSNkZWZpbmUJUlRNUF9TRVRfUEFDS0VUX1JUUyhfcCwgbnVtYmVyKQkJCSgoX3ApLT5jYlsx
MV0gPSBudW1iZXIpCi0jZGVmaW5lIFJUTVBfR0VUX1BBQ0tFVF9SVFMoX3ApCQkJCQkoKF9wKS0+
Y2JbMTFdKQotI2RlZmluZQlSVE1QX1NFVF9QQUNLRVRfRklSU1RfQ09OVEVYVChfcCwgbnVtYmVy
KQkoKF9wKS0+Y2JbMTJdID0gbnVtYmVyKQotI2RlZmluZSBSVE1QX0dFVF9QQUNLRVRfRklSU1Rf
Q09OVEVYVChfcCkJCQkoKF9wKS0+Y2JbMTJdKQotLy9ibHVlLCNkZWZpbmUJUlRNUF9TRVRfUEFD
S0VUX0NPTlRFWFRTX1JFUVVJUkVEKF9wLCBudW1iZXIpCSgoX3ApLT5jYlsxM10gPSBudW1iZXIp
Ci0vL2JsdWUsI2RlZmluZSBSVE1QX0dFVF9QQUNLRVRfQ09OVEVYVFNfUkVRVUlSRUQoX3ApCQkJ
KChfcCktPmNiWzEzXSkKLSNkZWZpbmUgR0VUX05FWFRfUEFDS0VUX0lOX0JVTEtPVVRfUVVFVUUo
X3ApCQkJKChzdHJ1Y3Qgc2tfYnVmZiAqKikmKChfcCktPmNiWzE0XSkpCi0KLQotI2RlZmluZQlN
QUtFXzgwMl8zX0hFQURFUihfcCwgX3BNYWMxLCBfcE1hYzIsIF9wVHlwZSkJCQkJCQkJCVwKLXsJ
CQkJCQkJCQkJCQkJCQkJCQkJCQlcCi0JbWVtY3B5KF9wLCBfcE1hYzEsIEVUSF9MRU5HVEhfT0Zf
QUREUkVTUyk7CQkJCQkJCQlcCi0JbWVtY3B5KChfcCArIEVUSF9MRU5HVEhfT0ZfQUREUkVTUyks
IF9wTWFjMiwgRVRIX0xFTkdUSF9PRl9BRERSRVNTKTsJXAotCW1lbWNweSgoX3AgKyBFVEhfTEVO
R1RIX09GX0FERFJFU1MgKiAyKSwgX3BUeXBlLCBMRU5HVEhfODAyXzNfVFlQRSk7CVwKLX0KLQot
Ly8KLS8vIFJlZ2lzdGVyIHNldCBwYWlyIGZvciBpbml0aWFsemF0aW9uIHJlZ2lzdGVyIHNldCBk
ZWZpbml0aW9uCi0vLwotdHlwZWRlZglzdHJ1Y3QJX1JUTVBfUkVHX1BBSVIKLXsKLQlVTE9ORwlS
ZWdpc3RlcjsKLQlVTE9ORwlWYWx1ZTsKLX0JUlRNUF9SRUdfUEFJUiwgKlBSVE1QX1JFR19QQUlS
OwotCi0vLwotLy8gUmVnaXN0ZXIgc2V0IHBhaXIgZm9yIGluaXRpYWx6YXRpb24gcmVnaXN0ZXIg
c2V0IGRlZmluaXRpb24KLS8vCi10eXBlZGVmCXN0cnVjdAlfUlRNUF9SRl9SRUdTCi17Ci0JVUNI
QVIgICBDaGFubmVsOwotCVVMT05HCVIxOwotCVVMT05HICAgUjI7Ci0JVUxPTkcgICBSMzsKLQlV
TE9ORyAgIFI0OwotfQlSVE1QX1JGX1JFR1MsICpQUlRNUF9SRl9SRUdTOwotCi10eXBlZGVmCXN0
cnVjdAlfUlRNUF9SRl9SRUdTXzEKLXsKLQlVQ0hBUiAgIENoYW5uZWw7Ci0JVUxPTkcJVGVtcFIy
OwotCVVMT05HCVIxOwotCVVMT05HICAgUjI7Ci0JVUxPTkcgICBSMzsKLQlVTE9ORyAgIFI0Owot
fQlSVE1QX1JGX1JFR1NfMSwgKlBSVE1QX1JGX1JFR1NfMTsKLS8vCi0vLyAgUXVldWUgc3RydWN0
dXJlIGFuZCBtYWNyb3MKLS8vCi10eXBlZGVmIHN0cnVjdCAgX1FVRVVFX0VOVFJZICAgIHsKLSAg
ICBzdHJ1Y3QgX1FVRVVFX0VOVFJZICAgICAqTmV4dDsKLX0gICBRVUVVRV9FTlRSWSwgKlBRVUVV
RV9FTlRSWTsKLQotLy8gUXVldWUgc3RydWN0dXJlCi10eXBlZGVmIHN0cnVjdCAgX1FVRVVFX0hF
QURFUiAgIHsKLSAgICBQUVVFVUVfRU5UUlkgICAgSGVhZDsKLSAgICBQUVVFVUVfRU5UUlkgICAg
VGFpbDsKLSAgICBVTE9ORwkJCU51bWJlcjsKLX0gICBRVUVVRV9IRUFERVIsICpQUVVFVUVfSEVB
REVSOwotCi0jZGVmaW5lIEluaXRpYWxpemVRdWV1ZUhlYWRlcihRdWV1ZUhlYWRlcikgICAgICAg
ICAgICAgIFwKLXsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgIChRdWV1ZUhlYWRlciktPkhlYWQgPSAoUXVldWVIZWFkZXIpLT5UYWls
ID0gTlVMTDsgICBcCi0gICAgKFF1ZXVlSGVhZGVyKS0+TnVtYmVyID0gMDsJCQkJCQkJXAotfQot
Ci0jZGVmaW5lIFJlbW92ZUhlYWRRdWV1ZShRdWV1ZUhlYWRlcikgICAgICAgICAgICAgICAgXAot
KFF1ZXVlSGVhZGVyKS0+SGVhZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLXsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg
UFFVRVVFX0VOVFJZIHBOZXh0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIEFT
U0VSVCgoUXVldWVIZWFkZXIpLT5IZWFkKTsgICAgICAgICAgICAgICAgICAgIFwKLSAgICBwTmV4
dCA9IChRdWV1ZUhlYWRlciktPkhlYWQtPk5leHQ7ICAgICAgICAgICAgICBcCi0gICAgKFF1ZXVl
SGVhZGVyKS0+SGVhZCA9IHBOZXh0OyAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmIChwTmV4
dCA9PSBOVUxMKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgKFF1ZXVl
SGVhZGVyKS0+VGFpbCA9IE5VTEw7ICAgICAgICAgICAgICAgICBcCi0gICAgKFF1ZXVlSGVhZGVy
KS0+TnVtYmVyLS07CQkJCQkJXAotfQotCi0jZGVmaW5lIEluc2VydEhlYWRRdWV1ZShRdWV1ZUhl
YWRlciwgUXVldWVFbnRyeSkgICAgICAgICAgICBcCi17ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgKChQUVVFVUVfRU5UUlkp
UXVldWVFbnRyeSktPk5leHQgPSAoUXVldWVIZWFkZXIpLT5IZWFkOyBcCi0gICAgKFF1ZXVlSGVh
ZGVyKS0+SGVhZCA9IChQUVVFVUVfRU5UUlkpKFF1ZXVlRW50cnkpOyAgICAgICBcCi0gICAgaWYg
KChRdWV1ZUhlYWRlciktPlRhaWwgPT0gTlVMTCkgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
ICAgICAgIChRdWV1ZUhlYWRlciktPlRhaWwgPSAoUFFVRVVFX0VOVFJZKShRdWV1ZUVudHJ5KTsg
ICBcCi0gICAgKFF1ZXVlSGVhZGVyKS0+TnVtYmVyKys7CQkJCQkJCQlcCi19Ci0KLSNkZWZpbmUg
SW5zZXJ0VGFpbFF1ZXVlKFF1ZXVlSGVhZGVyLCBRdWV1ZUVudHJ5KSAgICAgICAgICAgICAgICBc
Ci17ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgICgoUFFVRVVFX0VOVFJZKVF1ZXVlRW50cnkpLT5OZXh0ID0gTlVMTDsg
ICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoKFF1ZXVlSGVhZGVyKS0+VGFpbCkgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIChRdWV1ZUhlYWRlciktPlRh
aWwtPk5leHQgPSAoUFFVRVVFX0VOVFJZKShRdWV1ZUVudHJ5KTsgXAotICAgIGVsc2UgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAg
ICAgKFF1ZXVlSGVhZGVyKS0+SGVhZCA9IChQUVVFVUVfRU5UUlkpKFF1ZXVlRW50cnkpOyAgICAg
ICBcCi0gICAgKFF1ZXVlSGVhZGVyKS0+VGFpbCA9IChQUVVFVUVfRU5UUlkpKFF1ZXVlRW50cnkp
OyAgICAgICAgICAgXAotICAgIChRdWV1ZUhlYWRlciktPk51bWJlcisrOwkJCQkJCQkJCVwKLX0K
LQotLy8KLS8vICBNYWNyb3MgZm9yIGZsYWcgYW5kIHJlZiBjb3VudCBvcGVyYXRpb25zCi0vLwot
I2RlZmluZSBSVE1QX1NFVF9GTEFHKF9NLCBfRikgICAgICAgKChfTSktPkZsYWdzIHw9IChfRikp
Ci0jZGVmaW5lIFJUTVBfQ0xFQVJfRkxBRyhfTSwgX0YpICAgICAoKF9NKS0+RmxhZ3MgJj0gfihf
RikpCi0jZGVmaW5lIFJUTVBfQ0xFQVJfRkxBR1MoX00pICAgICAgICAoKF9NKS0+RmxhZ3MgPSAw
KQotI2RlZmluZSBSVE1QX1RFU1RfRkxBRyhfTSwgX0YpICAgICAgKCgoX00pLT5GbGFncyAmIChf
RikpICE9IDApCi0jZGVmaW5lIFJUTVBfVEVTVF9GTEFHUyhfTSwgX0YpICAgICAoKChfTSktPkZs
YWdzICYgKF9GKSkgPT0gKF9GKSkKLQotI2RlZmluZSBSVE1QX0lOQ19SRUYoX0EpICAgICAgICAg
ICAgTmRpc0ludGVybG9ja2VkSW5jcmVtZW50KCYoX0EpLT5SZWZDb3VudCkKLSNkZWZpbmUgUlRN
UF9ERUNfUkVGKF9BKSAgICAgICAgICAgIE5kaXNJbnRlcmxvY2tlZERlY3JlbWVudCgmKF9BKS0+
UmVmQ291bnQpOyBBU1NFUlQoX0EtPlJlZkNvdW50ID49IDApCi0jZGVmaW5lIFJUTVBfR0VUX1JF
RihfQSkgICAgICAgICAgICAoKF9BKS0+UmVmQ291bnQpCi0KLSNkZWZpbmUgUlRNUF9JTkNfUkNW
X1JFRihfQSkgICAgICAgICgoX0EpLT5SY3ZSZWZDb3VudCsrKQotI2RlZmluZSBSVE1QX0RFQ19S
Q1ZfUkVGKF9BKSAgICAgICAgKChfQSktPlJjdlJlZkNvdW50LS0pCi0jZGVmaW5lIFJUTVBfR0VU
X1JDVl9SRUYoX0EpICAgICAgICAoKF9BKS0+UmN2UmVmQ291bnQpCi0KLSNkZWZpbmUgUlRNUF9J
TkNfU0VORF9SRUYoX0EpICAgICAgICgoX0EpLT5TZW5kUmVmQ291bnQrKykKLSNkZWZpbmUgUlRN
UF9ERUNfU0VORF9SRUYoX0EpICAgICAgICgoX0EpLT5TZW5kUmVmQ291bnQtLSkKLSNkZWZpbmUg
UlRNUF9HRVRfU0VORF9SRUYoX0EpICAgICAgICgoX0EpLT5TZW5kUmVmQ291bnQpCi0KLSNkZWZp
bmUgUlRNUF9PRkZTRVQoZmllbGQpICAgICAgICAgICgoVUlOVClGSUVMRF9PRkZTRVQoUlRNUF9B
REFQVEVSLCBmaWVsZCkpCi0jZGVmaW5lIFJUTVBfU0laRShmaWVsZCkgICAgICAgICAgICBzaXpl
b2YoKChQUlQyNTcwQURBUFRFUikwKS0+ZmllbGQpCi0jZGVmaW5lIFBPUlRfT0ZGU0VUKGZpZWxk
KSAgICAgICAgICAoKFVJTlQpRklFTERfT0ZGU0VUKFBPUlRfQ09ORklHLCBmaWVsZCkpCi0jZGVm
aW5lIFBPUlRfU0laRShmaWVsZCkgICAgICAgICAgICBzaXplb2YoKChQUE9SVF9DT05GSUcpMCkt
PmZpZWxkKQotCi0vL2JsdWUsI2RlZmluZSBSVE1QX0lPX1JFQUQzMihfQSwgX1IsIF9wVikgUlRV
U0JSZWFkTUFDUmVnaXN0ZXIoKF9BKSwgKF9SKSwgKF9wVikpCi0vL2JsdWUsI2RlZmluZSBSVE1Q
X0lPX1dSSVRFMzIoX0EsIF9SLCBfVikgUlRVU0JSZWFkTUFDUmVnaXN0ZXIoKF9BKSwgKF9SKSwg
KF9WKSkKLS8vCi0vLyAgU3RhdGlzdGljIGNvdW50ZXIgc3RydWN0dXJlCi0vLwotLy9tYW5kYXRv
cnkgY291bnRlcnMgZnJvbSBnZW5lcmFsIGFuZCBFdGhlcm5ldCBzdGF0aXN0aWNzIG9iamVjdHMK
LXR5cGVkZWYgc3RydWN0IF9DT1VOVEVSXzgwMl8zCi17Ci0gICAgLy8gR2VuZXJhbCBTdGF0cwot
CVVMT05HCQlHb29kVHJhbnNtaXRzOwotCVVMT05HCQlHb29kUmVjZWl2ZXM7Ci0JVUxPTkcJCVR4
RXJyb3JzOwotCVVMT05HCQlSeEVycm9yczsKLQlVTE9ORwkJUnhOb0J1ZmZlcjsKLQotICAgIC8v
IEV0aGVybmV0IFN0YXRzCi0JVUxPTkcJCVJjdkFsaWdubWVudEVycm9yczsKLQlVTE9ORwkJT25l
Q29sbGlzaW9uOwotCVVMT05HCQlNb3JlQ29sbGlzaW9uczsKLQotfSAgIENPVU5URVJfODAyXzMs
ICpQQ09VTlRFUl84MDJfMzsKLS8vT0lEXzgwMl8xMV9TVEFUSVNUSUNTCi10eXBlZGVmIHN0cnVj
dCBfQ09VTlRFUl84MDJfMTEgewotICAgIFVMT05HICAgICAgICAgICBMZW5ndGg7Ci0gICAgTEFS
R0VfSU5URUdFUiAgIFRyYW5zbWl0dGVkRnJhZ21lbnRDb3VudDsKLSAgICBMQVJHRV9JTlRFR0VS
ICAgTXVsdGljYXN0VHJhbnNtaXR0ZWRGcmFtZUNvdW50OwotICAgIExBUkdFX0lOVEVHRVIgICBG
YWlsZWRDb3VudDsKLSAgICBMQVJHRV9JTlRFR0VSICAgTm9SZXRyeUNvdW50OwotICAgIExBUkdF
X0lOVEVHRVIgICBSZXRyeUNvdW50OwotICAgIExBUkdFX0lOVEVHRVIgICBNdWx0aXBsZVJldHJ5
Q291bnQ7Ci0gICAgTEFSR0VfSU5URUdFUiAgIFJUU1N1Y2Nlc3NDb3VudDsKLSAgICBMQVJHRV9J
TlRFR0VSICAgUlRTRmFpbHVyZUNvdW50OwotICAgIExBUkdFX0lOVEVHRVIgICBBQ0tGYWlsdXJl
Q291bnQ7Ci0gICAgTEFSR0VfSU5URUdFUiAgIEZyYW1lRHVwbGljYXRlQ291bnQ7Ci0gICAgTEFS
R0VfSU5URUdFUiAgIFJlY2VpdmVkRnJhZ21lbnRDb3VudDsKLSAgICBMQVJHRV9JTlRFR0VSICAg
TXVsdGljYXN0UmVjZWl2ZWRGcmFtZUNvdW50OwotICAgIExBUkdFX0lOVEVHRVIgICBGQ1NFcnJv
ckNvdW50OwotfSBDT1VOVEVSXzgwMl8xMSwgKlBDT1VOVEVSXzgwMl8xMTsKLS8vcHJvcHJpZXRh
cnkgY291bnRlcnMKLXR5cGVkZWYgc3RydWN0IF9DT1VOVEVSX1JBTElOSyB7Ci0gICAgVUxPTkcg
ICAgICAgICAgIFRyYW5zbWl0dGVkQnl0ZUNvdW50OyAgIC8vIGJvdGggc3VjY2Vzc2Z1bCBhbmQg
ZmFpbHVyZSwgdXNlZCB0byBjYWxjdWxhdGUgVFggdGhyb3VnaHB1dAotICAgIFVMT05HICAgICAg
ICAgICBSZWNlaXZlZEJ5dGVDb3VudDsgICAgICAvLyBib3RoIENSQyBva2F5IGFuZCBDUkMgZXJy
b3IsIHVzZWQgdG8gY2FsY3VsYXRlIFJYIHRocm91Z2hwdXQKLSAgICBVTE9ORyAgICAgICAgICAg
QmVlbkRpc2Fzc29jaWF0ZWRDb3VudDsKLSAgICBVTE9ORyAgICAgICAgICAgQmFkQ1FJQXV0b1Jl
Y292ZXJ5Q291bnQ7Ci0gICAgVUxPTkcgICAgICAgICAgIFBvb3JDUUlSb2FtaW5nQ291bnQ7Ci0g
ICAgVUxPTkcgICAgICAgICAgIE1nbXRSaW5nRnVsbENvdW50OwotICAgIFVMT05HICAgICAgICAg
ICBSeENvdW50OwotICAgIFVMT05HICAgICAgICAgICBEZWNyeXB0Q291bnQ7Ci0gICAgVUxPTkcg
ICAgICAgICAgIFJ4UmluZ0VyckNvdW50OwotICAgIFVMT05HICAgICAgICAgICBFbmNyeXB0Q291
bnQ7Ci0gICAgVUxPTkcgICAgICAgICAgIEtpY2tUeENvdW50OwotICAgIFVMT05HICAgICAgICAg
ICBUeFJpbmdFcnJDb3VudDsJCi19IENPVU5URVJfUkFMSU5LLCAqUENPVU5URVJfUkFMSU5LOwot
Ci10eXBlZGVmIHN0cnVjdCBfQ09VTlRFUl9EUlMgewotICAgIFVTSE9SVCAgICAgICAgICBUeFF1
YWxpdHlbTUFYX0xFTl9PRl9TVVBQT1JURURfUkFURVNdOwotICAgIFVDSEFSICAgICAgICAgICBQ
RVJbTUFYX0xFTl9PRl9TVVBQT1JURURfUkFURVNdOwotICAgIFVDSEFSICAgICAgICAgICBUeFJh
dGVVcFBlbmFsdHk7ICAgICAgLy8gZXh0cmEgIyBvZiBzZWNvbmQgcGVuYWx0eSBkdWUgdG8gbGFz
dCB1bnN0YWJsZSBjb25kaXRpb24KLSAgICBVTE9ORyAgICAgICAgICAgQ3VyclR4UmF0ZVN0YWJs
ZVRpbWU7IC8vICMgb2Ygc2Vjb25kIGluIGN1cnJlbnQgVFggcmF0ZQotICAgIEJPT0xFQU4gICAg
ICAgICBmTm9pc3lFbnZpcm9ubWVudDsKLSAgICBVQ0hBUiAgICAgICAgICAgTGFzdFNlY1R4UmF0
ZUNoYW5nZUFjdGlvbjsgLy8gMDogbm8gY2hhbmdlLCAxOnJhdGUgVVAsIDI6cmF0ZSBkb3duCi19
IENPVU5URVJfRFJTLCAqUENPVU5URVJfRFJTOwotCi10eXBlZGVmIHN0cnVjdCBfQ09VTlRFUl9R
QSB7Ci0JTEFSR0VfSU5URUdFUiAgIENSQ0Vycm9yQ291bnQ7Ci0JTEFSR0VfSU5URUdFUiAgIFJY
T3ZlckZsb3dDb3VudDsKLQlMQVJHRV9JTlRFR0VSICAgUEhZRXJyb3JDb3VudDsKLQlMQVJHRV9J
TlRFR0VSICAgRmFsc2VDQ0FDb3VudDsKLQlMQVJHRV9JTlRFR0VSICAgVTJNRGF0YUNvdW50Owot
CUxBUkdFX0lOVEVHRVIgICBPdGhlckRhdGFDb3VudDsKLQlMQVJHRV9JTlRFR0VSICAgQmVhY29u
Q291bnQ7Ci0JTEFSR0VfSU5URUdFUiAgIG90aGVyc0NvdW50OwkKLX0gQ09VTlRFUl9RQSwgKlBD
T1VOVEVSX1FBOwotCi0KLS8vCi0vLyAgQXJjZm91ciBTdHJ1Y3R1cmUgQWRkZWQgYnkgUGF1bFd1
Ci0vLwotdHlwZWRlZiBzdHJ1Y3QgIF9BUkNGT1VSCi17Ci0JVUlOVAkJCVg7Ci0JVUlOVAkJCVk7
Ci0JVUNIQVIJCQlTVEFURVsyNTZdOwotfSAgIEFSQ0ZPVVJDT05URVhULCAqUEFSQ0ZPVVJDT05U
RVhUOwotCi0vLyBTaGFyZWQga2V5IGRhdGEgc3RydWN0dXJlCi10eXBlZGVmCXN0cnVjdAlfV0VQ
X0tFWSB7Ci0JVUNIQVIJS2V5TGVuOwkJCQkJCS8vIEtleSBsZW5ndGggZm9yIGVhY2gga2V5LCAw
OiBlbnRyeSBpcyBpbnZhbGlkCi0JVUNIQVIJS2V5W01BWF9MRU5fT0ZfS0VZXTsJCS8vIHJpZ2h0
IG5vdyB3ZSBpbXBsZW1lbnQgNCBrZXlzLCAxMjggYml0cyBtYXgKLX0JV0VQX0tFWSwgKlBXRVBf
S0VZOwotCi0vLyBTaGFyZWQga2V5IGRhdGEgc3RydWN0dXJlCi10eXBlZGVmCXN0cnVjdAlfV1BB
X0tFWSB7Ci0JVUNIQVIJS2V5TGVuOwkJCQkvLyBLZXkgbGVuZ3RoIGZvciBlYWNoIGtleSwgMDog
ZW50cnkgaXMgaW52YWxpZAotCVVDSEFSCUtleVsxNl07CQkJLy8gcmlnaHQgbm93IHdlIGltcGxl
bWVudCA0IGtleXMsIDEyOCBiaXRzIG1heAotCVVDSEFSCVJ4TWljWzhdOwotCVVDSEFSCVR4TWlj
WzhdOwotCU5ESVNfODAyXzExX01BQ19BRERSRVNTCUJzc0lkOwkvLyBGb3IgcGFpcndpc2Uga2V5
IG9ubHkKLQlVQ0hBUglUeFRzY1s2XTsJCQkvLyA0OGJpdCBUU0MgdmFsdWUKLQlVQ0hBUglSeFRz
Y1s2XTsJCQkvLyA0OGJpdCBUU0MgdmFsdWUKLQlVQ0hBUglUeXBlOwkJCQkvLyBJbmRpY2F0ZSBQ
YWlyd2lzZSAvIEdyb3VwCi19CVdQQV9LRVksICpQV1BBX0tFWTsKLQotLy8gY29uZmlndXJhdGlv
biB0byBiZSB1c2VkIHdoZW4gdGhpcyBTVEEgc3RhcnRzIGEgbmV3IEFESE9DIG5ldHdvcmsKLXR5
cGVkZWYgc3RydWN0IF9JQlNTX0NPTkZJRyB7Ci0gICAgVVNIT1JUICAgIEJlYWNvblBlcmlvZDsK
LSAgICBVU0hPUlQgICAgQXRpbVdpbjsKLSAgICBVQ0hBUiAgICAgQ2hhbm5lbDsKLSAgICBVQ0hB
UiAgICAgU3VwcG9ydGVkUmF0ZXNbTUFYX0xFTl9PRl9TVVBQT1JURURfUkFURVNdOyAgICAvLyBT
dXBwb3J0ZWQgcmF0ZXMKLSAgICBVQ0hBUiAgICAgU3VwcG9ydGVkUmF0ZXNMZW47Ci19ICAgSUJT
U19DT05GSUcsICpQSUJTU19DT05GSUc7Ci0KLXR5cGVkZWYgc3RydWN0IF9MRURfQ09OVFJPTCB7
Ci0gICAgQk9PTEVBTiAgICAgZk9kZDsKLSAgICBCT09MRUFOICAgICBmUnhBY3Rpdml0eTsKLSAg
ICBCT09MRUFOICAgICBmU2l0ZVN1cnZleTsKLSAgICBCT09MRUFOICAgICBmTGlua1VwOwotICAg
ICBSQUxJTktfVElNRVJfU1RSVUNUIEJsaW5rVGltZXI7IC8vIDUwIG1zIHBlcmlvZGljIHRpbWVy
Ci0vLyAgICBVTE9ORyAgICAgICBMYXN0TGVkQ3NyOwotICAgIFVTSE9SVCAgICAgICBMYXN0TGVk
Q3NyOwotfSBMRURfQ09OVFJPTDsKLQotCi10eXBlZGVmIHN0cnVjdCBfQkJQX1RVTklOR19TVFJV
Q1QgewotICAgIEJPT0xFQU4gICAgIEVuYWJsZTsKLSAgICBVQ0hBUiAgICAgICBGYWxzZUNjYUNv
dW50VXBwZXJCb3VuZDsgIC8vIDEwMCBwZXIgc2VjCi0gICAgVUNIQVIgICAgICAgRmFsc2VDY2FD
b3VudExvd2VyQm91bmQ7ICAvLyAxMCBwZXIgc2VjCi0gICAgVUNIQVIgICAgICAgUjE3TG93ZXJC
b3VuZDsgICAgICAgICAgICAvLyBzcGVjaWZpZWQgaW4gRTJQUk9NCi0gICAgVUNIQVIgICAgICAg
UjE3VXBwZXJCb3VuZDsgICAgICAgICAgICAvLyAweDY4IGFjY29yZGluZyB0byBEYXZpZCBUdW5n
Ci0gICAgVUNIQVIgICAgICAgQ3VycmVudFIxN1ZhbHVlOwotfSBCQlBfVFVOSU5HLCAqUEJCUF9U
VU5JTkc7Ci0KLXR5cGVkZWYgc3RydWN0IF9TT0ZUX1JYX0FOVF9ESVZFUlNJVFlfU1RSVUNUIHsK
LSAgICBCT09MRUFOICAgUHJpbWFyeUluVXNlZDsKLSAgICBVQ0hBUiAgICAgUHJpbWFyeVJ4QW50
OyAgICAgLy8gMDpBbnQtQSwgMTpBbnQtQgotICAgIFVDSEFSICAgICBTZWNvbmRhcnlSeEFudDsg
ICAvLyAwOkFudC1BLCAxOkFudC1CCi0gICAgVVNIT1JUICAgIEF2Z1Jzc2lbMl07ICAgICAgIC8v
IEF2Z1Jzc2lbMF06QW50LUEsIEF2Z1Jzc2lbMV06QW50LUIKLSAgICAgUkFMSU5LX1RJTUVSX1NU
UlVDVCAgICBSeEFudERpdmVyc2l0eVRpbWVyOwotfSBTT0ZUX1JYX0FOVF9ESVZFUlNJVFksICpQ
U09GVF9SWF9BTlRfRElWRVJTSVRZOwotCi0KLQotLy8gUG9ydENvbmZpZwotdHlwZWRlZiBzdHJ1
Y3QgX1BPUlRfQ09ORklHIHsKLQotICAgIC8vIE1JQjppZWVlODAyZG90MTEuZG90MTFzbXQoMSku
ZG90MTFTdGF0aW9uQ29uZmlnVGFibGUoMSkKLSAgICBVU0hPUlQgICAgQ2FwYWJpbGl0eUluZm87
Ci0gICAgVVNIT1JUICAgIFBzbTsgICAgICAgICAgICAgICAgICAvLyBwb3dlciBtYW5hZ2VtZW50
IG1vZGUgICAoUFdSX0FDVElWRXxQV1JfU0FWRSkKLSAgICBVU0hPUlQgICAgQmVhY29uUGVyaW9k
OyAgICAgICAgIC8vIGluIHVuaXRzIG9mIFRVCi0KLSAgICBVU0hPUlQgICAgQ2ZwTWF4RHVyYXRp
b247Ci0gICAgVVNIT1JUICAgIENmcER1clJlbWFpbjsKLSAgICBVU0hPUlQgICAgQ2ZwQ291bnQ7
Ci0gICAgVVNIT1JUICAgIENmcFBlcmlvZDsKLQotICAgIFVTSE9SVCAgICBEaXNhc3NvY1JlYXNv
bjsKLSAgICBNQUNBRERSICAgRGlzYXNzb2NTdGE7Ci0gICAgVVNIT1JUICAgIERlYXV0aFJlYXNv
bjsKLSAgICBNQUNBRERSICAgRGVhdXRoU3RhOwotICAgIFVTSE9SVCAgICBBdXRoRmFpbFJlYXNv
bjsKLSAgICBNQUNBRERSICAgQXV0aEZhaWxTdGE7Ci0KLQlORElTXzgwMl8xMV9BVVRIRU5USUNB
VElPTl9NT0RFCQlBdXRoTW9kZTsvL3NldCBieSBPSURfODAyXzExX0FVVEhFTlRJQ0FUSU9OX01P
REUuIFRoaXMgc2hvdWxkIG1hdGNoIHRvIHdoYXRldmVyIG1pY3Jvc29mdCBkZWZpbmVkCi0JTkRJ
U184MDJfMTFfV0VQX1NUQVRVUwkJCQlXZXBTdGF0dXM7Ly9zZXQgYnkgT0lEXzgwMl8xMV9XRVBf
U1RBVFVTCi0JTkRJU184MDJfMTFfV0VQX1NUQVRVUwkJCQlPcmlnV2VwU3RhdHVzOwkvLyBPcmln
aW5hbCB3ZXAgc3RhdHVzIHNldCBmcm9tIE9JRAotCi0JLy8gQWRkIHRvIHN1cHBvcnQgZGlmZmVy
ZW50IGNpcGhlciBzdWl0ZSBmb3IgV1BBMi9XUEEgbW9kZQotCU5ESVNfODAyXzExX0VOQ1JZUFRJ
T05fU1RBVFVTCQlHcm91cENpcGhlcjsJCS8vIE11bHRpY2FzdCBjaXBoZXIgc3VpdGUKLQlORElT
XzgwMl8xMV9FTkNSWVBUSU9OX1NUQVRVUwkJUGFpckNpcGhlcjsJCQkvLyBVbmljYXN0IGNpcGhl
ciBzdWl0ZQotICAgIEJPT0xFQU4JCQkJCQkJCWJNaXhDaXBoZXI7CQkJLy8gSW5kaWNhdGUgY3Vy
cmVudCBQYWlyICYgR3JvdXAgdXNlIGRpZmZlcmVudCBjaXBoZXIgc3VpdGVzCi0gICAgVVNIT1JU
CQkJCQkJCQlSc25DYXBhYmlsaXR5OwotICAgIAotI2lmIDEgIAotICAgIC8vIE1JQjppZWVlODAy
ZG90MTEuZG90MTFzbXQoMSkuZG90MTFXRVBEZWZhdWx0S2V5c1RhYmxlKDMpCi0gICAgV0VQX0tF
WQkgIFNoYXJlZEtleVtTSEFSRV9LRVlfTk9dOy8vc2V0IGJ5IE9JRF84MDJfMTFfQUREX0tFWSBv
ciBPSURfODAyXzExX0FERF9XRVAuIEtlZXAgZm9yIGJhY2t3YXJkIGNvbXBhdGlhYmxlCi0JV1BB
X0tFWSAgIFBhaXJ3aXNlS2V5W1BBSVJXSVNFX0tFWV9OT107Ly9zZXQgYnkgT0lEXzgwMl8xMV9B
RERfS0VZCi0JV1BBX0tFWSAgIEdyb3VwS2V5W0dST1VQX0tFWV9OT107Ly9zZXQgYnkgT0lEXzgw
Ml8xMV9BRERfS0VZCi0JV1BBX0tFWSAgIFBza0tleTsgICAgICAgICAgICAgICAgICAgLy8gV1BB
IFBTSyBtb2RlIFBNSwotCUJTU0lEX0lORk8JU2F2ZWRQTUtbUE1LSURfTk9dOwotCVVMT05HCQlT
YXZlZFBNS051bTsJCQkvLyBTYXZlZCBQTUtJRCBudW1iZXIKLSAgICBVQ0hBUiAgICAgUFRLWzY0
XTsKLSNlbmRpZgotCS8vIFdQQSA4MDIuMXggcG9ydCBjb250cm9sLCBXUEFfODAyXzFYX1BPUlRf
U0VDVVJFRCwgV1BBXzgwMl8xWF9QT1JUX05PVF9TRUNVUkVECi0JVUNIQVIgICAgIFBvcnRTZWN1
cmVkOwotCi0JLy8gRm9yIFdQQSBjb3VudGVybWVhc3VyZXMKLQlVTE9ORwkJTGFzdE1pY0Vycm9y
VGltZTsJLy8gcmVjb3JkIGxhc3QgTUlDIGVycm9yIHRpbWUKLQlVTE9ORwkJTWljRXJyQ250OwkJ
CS8vIFNob3VsZCBiZSAwLCAxLCAyLCB0aGVuIHJlc2V0IHRvIHplcm8gKGFmdGVyIGRpc2Fzc29p
Y2lhdGlvbikuCi0JQk9PTEVBTgkJYkJsb2NrQXNzb2M7CQkvLyBCbG9jayBhc3NvY2lhdGUgYXR0
ZW1wdCBmb3IgNjAgc2Vjb25kcyBhZnRlciBjb3VudGVyIG1lYXN1cmUgb2NjdXJyZWQuCi0KLQkv
LyBGb3IgV1BBLVBTSyBzdXBwbGljYW50IHN0YXRlLHJlZCwgYWRkIGZvciBXUEEtUFNLCi0gICAg
ICBXUEFfU1RBVEUgICBXcGFTdGF0ZTsgICAgICAgICAgIC8vIERlZmF1bHQgaXMgU1NfTk9UVVNF
IGFuZCBoYW5kbGVkIGJ5IG1pY3Jvc29mdCA4MDIuMXgKLSAgICAgIFVDSEFSICAgICAgIFJlcGxh
eUNvdW50ZXJbOF07Ci0gICAgICBVQ0hBUiAgICAgICBBTm9uY2VbMzJdOyAgICAgICAgIC8vIEFO
b25jZSBmb3IgV1BBLVBTSyBmcm9tIGF1cmhlbnRpY2F0b3IKLSAgICAgIFVDSEFSICAgICAgIFNO
b25jZVszMl07ICAgICAgICAgLy8gU05vbmNlIGZvciBXUEEtUFNLCi0KLSAgICAvLyBNSUI6aWVl
ZTgwMmRvdDExLmRvdDExc210KDEpLmRvdDExV0VQS2V5TWFwcGluZ3NUYWJsZSg0KQotICAgIC8v
IG5vdCBpbXBsZW1lbnRlZCB5ZXQKLQotICAgIC8vIE1JQjppZWVlODAyZG90MTEuZG90MTFzbXQo
MSkuZG90MTFQcml2YWN5VGFibGUoNSkKLSAgICBVQ0hBUiAgICAgRGVmYXVsdEtleUlkOy8vc2V0
IGJ5IE9JRF84MDJfMTFfQUREX0tFWSBvciBPSURfODAyXzExX0FERF9XRVAKLQlORElTXzgwMl8x
MV9QUklWQUNZX0ZJTFRFUglQcml2YWN5RmlsdGVyOwkJLy8gUHJpdmFjeUZpbHRlciBlbnVtIGZv
ciA4MDIuMVgKLQotICAgIC8vIE1JQjppZWVlODAyZG90MTEuZG90MTFtYWMoMikuZG90MTFPcGVy
YXRpb25UYWJsZSgxKQotICAgIFVTSE9SVCAgICBSdHNUaHJlc2hvbGQ7ICAgICAgIC8vIGluIHVu
aXRzIG9mIEJZVEUKLSAgICBVU0hPUlQgICAgRnJhZ21lbnRUaHJlc2hvbGQ7Ci0gICAgQk9PTEVB
TiAgIGJGcmFnbWVudFplcm9EaXNhYmxlOwkJLy8gTWljcm9zb2Z0IHVzZSAwIGFzIGRpc2FibGUg
Ci0gICAgCi0gICAgLy8gTUlCOmllZWU4MDJkb3QxMS5kb3QxMXBoeSg0KS5kb3QxMVBoeUFudGVu
bmFUYWJsZSgyKQotICAgIFVDSEFSICAgICBDdXJyZW50VHhBbnRlbm5hOwotICAgIFVDSEFSICAg
ICBDdXJyZW50UnhBbnRlbm5hOwotICAgIFVDSEFSICAgICBOdW1iZXJPZkFudGVubmE7Ci0KLSAg
ICAvLyBNSUI6aWVlZTgwMmRvdDExLmRvdDExcGh5KDQpLmRvdDExUGh5VHhQb3dlclRhYmxlKDMp
Ci0gICAgVUNIQVIgICAgIEN1cnJlbnRUeFBvd2VyTGV2ZWxJbmRleDsgLy9kZWZhdWx0Jm90aGVy
IHZhbHVlPU1heFBvd2VyLDE9TWluUG93ZXIsMj0xKk1heFBvd2VyLzQsMz0yKk1heFBvd2VyLzQs
ND0zKk1heFBvd2VyLzQsCi0gICAgVUNIQVIgICAgIFR4UG93ZXI7Ci0gICAgVUNIQVIgICAgIFR4
UmF0ZTsgICAgICAgLy8gUkFURV8xLCBSQVRFXzIsIFJBVEVfNV81LCBSQVRFXzExLCAuLi4KLSAg
ICBCT09MRUFOICAgRW5hYmxlQXV0b1JhdGVTd2l0Y2hpbmc7ICAvLyAxIC0gZW5hYmxlIGF1dG8g
cmF0ZSBzd2l0Y2hpbmc7IDAgLSBkaXNhYmxlCi0gICAgVUxPTkcgICAgIFR4UG93ZXJQZXJjZW50
YWdlOyAgICAgICAgLy8gMH4xMDAgJSxibHVlCi0gICAgCi0gICAgLy8gTUlCOmllZWU4MDJkb3Qx
MS5kb3QxMXBoeSg0KS5kb3QxMVBoeURTU1NUYWJsZSg1KQotICAgIFVDSEFSICAgICBDaGFubmVs
OyAgICAgICAgLy8gY3VycmVudCAoSSlCU1MgY2hhbm5lbCB1c2VkIGluIHRoZSBzdGF0aW9uCi0g
ICAgVUNIQVIgICAgIENvdW50cnlSZWdpb247CS8vIEVudW0gb2YgY291bnRyeSByZWdpb24sIDA6
RkNDLCAxOklDLCAyOkVUU0ksIDM6U1BBSU4sIDQ6RnJhbmNlLCA1Ok1LSywgNjpNS0sxLCA3Oklz
cmFlbAotICAgIAotICAgIC8vIE1JQjppZWVlODAyZG90MTEuZG90MTFwaHkoNCkuZG90MTFBbnRl
bm5hc0xpc3RUYWJsZSg4KQotICAgIEJPT0xFQU4gQW50ZW5uYVN1cHBvcnRUeDsKLSAgICBCT09M
RUFOIEFudGVubmFTdXBwb3J0Ung7Ci0gICAgQk9PTEVBTiBBbnRlbm5hU3VwcG9ydERpdmVyc2l0
eVJ4OwotCi0JLy8gVXNlIHVzZXIgY2hhbmdlZCBNQUMKLSAgICBCT09MRUFOIGJMb2NhbEFkbWlu
TUFDOyAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgIAotICAgIC8vIE1JQjppZWVlODAy
ZG90MTEuZG90MTFwaHkoNCkuZG90MTFTdXBwb3J0ZWREYXRhUmF0ZXNUeFRhYmxlKDkpCi0gICAg
Ly8gTUlCOmllZWU4MDJkb3QxMS5kb3QxMXBoeSg0KS5kb3QxMVN1cHBvcnRlZERhdGFSYXRlc1J4
VGFibGUoMTApCi0gICAgVUNIQVIgICAgIFN1cHBvcnRlZFJhdGVzW01BWF9MRU5fT0ZfU1VQUE9S
VEVEX1JBVEVTXTsgICAgLy8gU3VwcG9ydGVkIHJhdGVzCi0gICAgVUNIQVIgICAgIFN1cHBvcnRl
ZFJhdGVzTGVuOwotICAgIFVDSEFSICAgICBFeHBlY3RlZEFDS1JhdGVbTUFYX0xFTl9PRl9TVVBQ
T1JURURfUkFURVNdOwotCi0gICAgLy9ibHVlCi0gICAgLy8gQ29weSBzdXBwb3J0ZWQgcmF0ZSBm
cm9tIGRlc2lyZWQgQVAncyBiZWFjb24uIFdlIGFyZSB0cnlpbmcgdG8gbWF0Y2gKLQkvLyBBUCdz
IHN1cHBvcnRlZCBhbmQgZXh0ZW5kZWQgcmF0ZSBzZXR0aW5ncy4KLQlVQ0hBUgkJU3VwUmF0ZVtN
QVhfTEVOX09GX1NVUFBPUlRFRF9SQVRFU107Ci0JVUNIQVIJCUV4dFJhdGVbTUFYX0xFTl9PRl9T
VVBQT1JURURfUkFURVNdOwotCVVDSEFSCQlTdXBSYXRlTGVuOwotCVVDSEFSCQlFeHRSYXRlTGVu
OwotCi0gICAgLy8KLSAgICAvLyBvdGhlciBwYXJhbWV0ZXJzIG5vdCBkZWZpbmVkIGluIHN0YW5k
YXJkIE1JQgotICAgIC8vCi0gICAgVUNIQVIgICAgIERlc2lyZWRSYXRlc1tNQVhfTEVOX09GX1NV
UFBPUlRFRF9SQVRFU107ICAgICAgLy8gT0lEXzgwMl8xMV9ERVNJUkVEX1JBVEVTCi0gICAgVUNI
QVIgICAgIE1heERlc2lyZWRSYXRlOwotICAgIFVTSE9SVCAgICBSZWN2RHRpbTsKLSAgICBNQUNB
RERSICAgQnNzaWQ7Ci0gICAgTUFDQUREUiAgIEJyb2FkY2FzdDsgICAgICAgICAgICAvLyBGRjpG
RjpGRjpGRjpGRjpGRgotICAgIFVTSE9SVCAgICBQc3M7ICAgICAgICAgICAgICAgICAgLy8gY3Vy
cmVudCBwb3dlciBzYXZpbmcgc3RhdHVzIChQV1JfU0FWRXxQV1JfQUNUSVZFKQotICAgIFVDSEFS
ICAgICBSc3NpVHJpZ2dlcjsKLSAgICBVQ0hBUiAgICAgUnNzaVRyaWdnZXJNb2RlOyAgICAgIC8v
IFJTU0lfVFJJR0dFUkVEX1VQT05fQkVMT1dfVEhSRVNIT0xEIG9yIFJTU0lfVFJJR0dFUkVEX1VQ
T05fRVhDQ0VFRF9USFJFU0hPTEQKLSAgICBVQ0hBUiAgICAgTGFzdFJzc2k7ICAgICAgICAgICAg
IC8vIGxhc3QgcmVjZWl2ZWQgQkVBQ09OJ3MgUlNTSQotICAgIFVTSE9SVCAgICBBdmdSc3NpOyAg
ICAgICAgICAgICAgLy8gbGFzdCA4IEJFQUNPTidzIGF2ZXJhZ2UgUlNTSSxibHVlCi0gICAgVVNI
T1JUICAgIEF0aW1XaW47ICAgICAgICAgICAgICAvLyBpbiBrdXNlYzsgSUJTUyBwYXJhbWV0ZXIg
c2V0IGVsZW1lbnQKLSAgICBVU0hPUlQgICAgQWlkOyAgICAgICAgICAgICAgICAgIC8vIGFzc29j
aWF0aW9uIElECi0gICAgVUNIQVIgICAgIFJ0c1JhdGU7ICAgICAgICAgICAgICAvLyBSQVRFX3h4
eAotICAgIFVDSEFSICAgICBNbG1lUmF0ZTsgICAgICAgICAgICAgICAvLyBSQVRFX3h4eCwgdXNl
ZCB0byBzZW5kIE1MTUUgZnJhbWVzCi0gICAgVUNIQVIgICAgIE1heFR4UmF0ZTsgICAgICAgICAg
ICAvLyBSQVRFX3h4eAotICAgIFVTSE9SVCAgICBEZWZhdWx0TGlzdGVuQ291bnQ7ICAgLy8gZGVm
YXVsdCBsaXN0ZW4gY291bnQ7Ci0gICAgVUNIQVIgICAgIEJzc1R5cGU7ICAgICAgICAgICAgICAv
LyBCU1NfSU5GUkEgb3IgQlNTX0lOREVQCi0KLSAgICBVQ0hBUiAgICAgU3NpZExlbjsgICAgICAg
ICAgICAgICAvLyB0aGUgYWN0dWFsIHNzaWQgbGVuZ3RoIGluIHVzZWQKLSAgICBDSEFSICAgICAg
U3NpZFtNQVhfTEVOX09GX1NTSURdOyAvLyBOT1QgTlVMTC10ZXJtaW5hdGVkCi0KLSAgICBCU1Nf
VEFCTEUgQnNzVGFiOyAgICAgLy8gQlNTIFRhYmxlCi0KLSAgICAvLyBnbG9iYWwgdmFyaWFibGVz
IG1YWFhYIHVzZWQgaW4gTUFDIHByb3RvY29sIHN0YXRlIG1hY2hpbmVzCi0gICAgQk9PTEVBTiAg
IE1pYnNzOwotICAgIEJPT0xFQU4gICBNYXNzb2M7Ci0gICAgQk9PTEVBTiAgIE1hdXRoOwotCi0g
ICAgLy8gUEhZIHNwZWNpZmljYXRpb24KLSAgICBVQ0hBUiAgICAgUGh5TW9kZTsgICAgLy8gUEhZ
XzExQSwgUEhZXzExQiwgUEhZXzExQkdfTUlYRUQsIFBIWV9BQkdfTUlYRUQKLSAgICBVU0hPUlQg
ICAgRHNpZnM7ICAgICAgLy8gaW4gdW5pdHMgb2YgdXNlYwotCi0gICAgVUxPTkcgICAgIFdpbmRv
d3NQb3dlck1vZGU7CQkJLy8gUG93ZXIgbW9kZSBmb3IgQUMgcG93ZXIKLSAgICAvL1VMT05HICAg
ICBXaW5kb3dzQmF0dGVyeVBvd2VyTW9kZTsJLy8gUG93ZXIgbW9kZSBmb3IgYmF0dGVyeSBpZiBl
eGlzdHMKLSAgICAvL0JPT0xFQU4gICBXaW5kb3dzQUNDQU1FbmFibGU7CQkvLyBFbmFibGUgQ0FN
IHBvd2VyIG1vZGUgd2hlbiBBQyBvbgotICAgIFVMT05HICAgICBQYWNrZXRGaWx0ZXI7CQkJCS8v
IFBhY2tldCBmaWx0ZXIgZm9yIHJlY2VpdmluZwotICAgIEJPT0xFQU4gICBBdXRvUmVjb25uZWN0
OwkJCS8vIFNldCB0byBUUlVFIHdoZW4gc2V0dGluZyBPSURfODAyXzExX1NTSUQgd2l0aCBubyBt
YXRjaGluZyBCU1NJRAotI2lmZGVmIE5ESVM1MV9NSU5JUE9SVCAgIAotICAgIFVMT05HICAgICBX
aW5kb3dzUG93ZXJQcm9maWxlOwkvLyBXaW5kb3dzIHBvd2VyIHByb2ZpbGUsIGZvciBORElTNS4x
IFBuUAotI2VuZGlmCi0gICAgVUxPTkcgICAgIFdpbmRvd3NUeFByZWFtYmxlOyAvLyBSdDgwMl8x
MVByZWFtYmxlTG9uZywgUnQ4MDJfMTFQcmVhbWJsZVNob3J0LCBSdDgwMl8xMVByZWFtYmxlQXV0
bwotCi0JVUNIQVIJICBDaGFubmVsVHhQb3dlcltNQVhfTEVOX09GX0NIQU5ORUxTXTsJCS8vIFN0
b3JlIFR4IHBvd2VyIHZhbHVlIGZvciBhbGwgY2hhbm5lbHMuCi0KLQkvL2JsdWUKLQlVQ0hBUgkg
IENoYW5uZWxUc3NpUmVmW01BWF9MRU5fT0ZfQ0hBTk5FTFNdOwkJLy8gU3RvcmUgVHNzaSBSZWZl
cmVuY2UgdmFsdWUgZm9yIGFsbCBjaGFubmVscy4KLQlVQ0hBUgkgIENoYW5uZWxUc3NpRGVsdGE7
CQkJCQkJCS8vIFN0b3JlIFR4IFRTU0kgZGVsdGEgaW5jcmVtZW50IC8gZGVjcmVtZW50IHZhbHVl
Ci0JQk9PTEVBTiAgIGJBdXRvVHhBZ2M7Ci0JCi0JVUNIQVIgICAgIENoYW5uZWxMaXN0W01BWF9M
RU5fT0ZfQ0hBTk5FTFNdOyAgICAgICAgIC8vIGxpc3QgYWxsIHN1cHBvcnRlZCBjaGFubmVscyBm
b3Igc2l0ZSBzdXJ2ZXkKLQlVQ0hBUiAgICAgQ2hhbm5lbExpc3ROdW07ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gbnVtYmVyIG9mIGNoYW5uZWwgaW4gQ2hhbm5lbExpc3RbXQotCUJPT0xF
QU4gICBiU2hvd0hpZGRlblNTSUQ7Ly9ibHVlCi0JCi0gICAgLy8gY29uZmlndXJhdGlvbiB0byBi
ZSB1c2VkIHdoZW4gdGhpcyBTVEEgc3RhcnRzIGEgbmV3IEFESE9DIG5ldHdvcmsKLSAgICBJQlNT
X0NPTkZJRyBJYnNzQ29uZmlnOwotCi0gICAgVUxPTkcgICAgIExhc3RCZWFjb25SeFRpbWU7ICAg
ICAvLyBPUydzIHRpbWVzdGFtcCBvZiB0aGUgbGFzdCBCRUFDT04gUlggdGltZQotICAgIGF0b21p
Y190ICAgICBEYXRhUGFja2V0c0Zyb21BUDsgICAgIC8vICMgb2YgZGF0YSBwYWNrZXRzIHJlY2Vp
dmVkIGZyb20gQVAgc2luY2Ugd2UgcmVjZWl2ZSBsYXN0IEJlYWNvbiBmcm9tIEFQCi0gICAgVUxP
TkcgICAgIExhc3QxMWJCZWFjb25SeFRpbWU7ICAvLyBPUydzIHRpbWVzdGFtcCBvZiB0aGUgbGFz
dCAxMUIgQkVBQ09OIFJYIHRpbWUKLSAgICBVTE9ORyAgICAgTGFzdFNjYW5UaW1lOwkJLy8gUmVj
b3JkIGxhc3Qgc2NhbiB0aW1lIGZvciBpc3N1ZSBCU1NJRF9TQ0FOX0xJU1QKLSAgICBVTE9ORyAg
ICAgSWdub3JlZFNjYW5OdW1iZXI7CS8vIElnbm9yZWQgQlNTSURfU0NBTl9MSVNUIHJlcXVlc3Rz
Ci0gICAgQk9PTEVBTgkgIGJTd1JhZGlvOwkJCS8vIFNvZnR3YXJlIGNvbnRyb2xsZWQgUmFkaW8g
T24vT2ZmLCBUUlVFOiBPbgotICAgIEJPT0xFQU4JICBiSHdSYWRpbzsJCQkvLyBIYXJkd2FyZSBj
b250cm9sbGVkIFJhZGlvIE9uL09mZiwgVFJVRTogT24KLSAgICBCT09MRUFOCSAgYlJhZGlvOwkJ
CS8vIFJhZGlvIHN0YXRlLCBBbmQgb2YgU3cgJiBIdyByYWRpbyBzdGF0ZQotICAgIEJPT0xFQU4g
ICBiSGFyZHdhcmVSYWRpbzsJLy8gSGFyZHdhcmUtY29udHJvbGxlZCBSYWRpbyBlbmFibGVkCi0K
LSAgICBMRURfQ09OVFJPTCAgICAgICAgICAgICBMZWRDbnRsOwotICAgIFVDSEFSICAgICAgICAg
ICAgICAgICAgIFJmVHlwZTsKLSAgICBVQ0hBUiAgICAgICAgICAgICAgICAgICBMZWRNb2RlOwot
ICAgIAotCS8vIE5ldyBmb3IgV1BBLCB3aW5kb3dzIHdhbnQgdXMgdG8gdG8ga2VlcCBhc3NvY2lh
dGlvbiBpbmZvcm1hdGlvbiBhbmQKLQkvLyBGaXhlZCBJRXMgZnJvbSBsYXN0IGFzc29jaWF0aW9u
IHJlc3BvbnNlCi0JTkRJU184MDJfMTFfQVNTT0NJQVRJT05fSU5GT1JNQVRJT04JCUFzc29jSW5m
bzsKLS8vCU5ESVNfODAyXzExX0ZJWEVEX0lFcwkJCQkJRml4SUVzOwotCVVDSEFSCQkJCQlSZXFW
YXJJRUxlbjsJCQkJLy8gTGVuZ3RoIG9mIG5leHQgVklFIGluY2x1ZGUgRUlEICYgTGVuZ3RoCi0J
VUNIQVIJCQkJCVJlcVZhcklFc1tNQVhfVklFX0xFTl07Ci0JVUNIQVIJCQkJCVJlc1ZhcklFTGVu
OwkJCQkvLyBMZW5ndGggb2YgbmV4dCBWSUUgaW5jbHVkZSBFSUQgJiBMZW5ndGgKLQlVQ0hBUgkJ
CQkJUmVzVmFySUVzW01BWF9WSUVfTEVOXTsKLQotICAgIC8vIHRoZSBmb2xsb3dpbmcgZmllbGRz
IGFyZSB1c2VyIHNldHRpbmcgZnJvbSBVSQotICAgIFVMT05HICAgICBFbmFibGVUdXJib1JhdGU7
ICAgICAgLy8gMDogZGlzYWJsZSwgMTogZW5hYmxlIDcyLzEwMCBNYnBzIHdoZW5ldmVyIGFwcGxp
Y2FibGUKLSAgICBVTE9ORyAgICAgRW5hYmxlVHhCdXJzdDsgICAgICAgIC8vIDA6IGRpc2FibGUs
IDE6IGVuYWJsZSBUWCBQQUNLRVQgQlVSU1QKLSAgICBVTE9ORyAgICAgVXNlQkdQcm90ZWN0aW9u
OyAgICAgIC8vIDA6IGF1dG8sIDE6IGFsd2F5cyB1c2UsIDI6IGFsd2F5cyBub3QgdXNlCi0gICAg
VUxPTkcgICAgIFVzZVNob3J0U2xvdFRpbWU7ICAgICAvLyAwOiBkaXNhYmxlLCAxOiBlbmFibGUg
OXVzIHNob3J0IHNsb3QgdGltZSBpZiBBUCBzdXBwb3J0cwotICAgIC8vYmx1ZSxVTE9ORyAgICAg
VXNlT2ZkbVJhdGVzSW4xMWdBZGhvYzsgLy8gMDpXSUZJIG1vZGUgKDExYiByYXRlcyBvbmx5KSwg
MTphbGxvdyBPRkRNIHJhdGVzCi0gICAgVUxPTkcgICAgIEFkaG9jTW9kZTsgCQkJLy8gMDpXSUZJ
IG1vZGUgKDExYiByYXRlcyBvbmx5KSwgMTogYi9nIG1peGVkLCAyOiAxMWcgb25seSxibHVlCi0K
LSAgICAvLyB0aGlzIGZsYWcgaXMgdGhlIHJlc3VsdCBjYWxjdWxhdGVkIGZyb20gVUkgc2V0dGlu
Z3MgYW5kIEFQJ3MgRVJQL0NhcGFiaWxpdHkKLSAgICBVTE9ORyAgICAgQkdQcm90ZWN0aW9uSW5V
c2VkOyAgIC8vIDA6IG5vdCBpbi11c2VkLCAxOiBpbi11c2VkCi0gICAgVUxPTkcgICAgIFNob3J0
U2xvdEluVXNlZDsgICAgICAvLyAwOiBub3QgaW4tdXNlZCwgMTogaW4tdXNlZAotICAgIFVTSE9S
VCAgICBUeFByZWFtYmxlSW5Vc2VkOyAgICAgLy8gUnQ4MDJfMTFQcmVhbWJsZUxvbmcsIFJ0ODAy
XzExUHJlYW1ibGVTaG9ydAotCVVDSEFSCQlDaXBoZXJBbGc7Ci0KLSAgICAvLyBsYXRjaCB0aCBs
YXRlc3QgUkYgcHJvZ3JhbW1pbmcgdmFsdWUgaGVyZSBzaW5jZSBSRiBJQyBkb2Vzbid0IHN1cHBv
cnQgUkVBRCBvcGVyYXRpb24KLSAgICBSVE1QX1JGX1JFR1MgICAgTGF0Y2hSZlJlZ3M7Ci0KLSAg
ICAvL2JsdWUKLSAgICBCT09MRUFOICAgICAgICAgICAgICAgICAgICAgICBCYnBUdW5pbmdFbmFi
bGU7Ci0gICAgVUNIQVIgICAgICAgICAgICAgICAgICAgICAgICAgVmdjTG93ZXJCb3VuZDsKLSAg
ICBSVF84MDJfMTFfUlhfQUdDX1ZHQ19UVU5JTkcgICBCYnBUdW5pbmc7Ci0gICAgVUNIQVIgICAg
ICAgICAgICAgICAgICAgICAgICAgTGFzdFIxN1ZhbHVlOwotCi0gICAgVUxPTkcgICAgICAgICAg
ICAgICAgICAgICAgICAgU3lzdGVtRXJyb3JCaXRtYXA7ICAvLyBiMDogRTJQUk9NIHZlcnNpb24g
ZXJyb3IKLQotICAgIC8vYmx1ZQotICAgIFVDSEFSICAgICAgICAgICAgICAgICAgIEJicFdyaXRl
TGF0Y2hbMTAwXTsgICAvLyByZWNvcmQgbGFzdCBCQlAgcmVnaXN0ZXIgdmFsdWUgd3JpdHRlbiB2
aWEgQkJQX0lPX1dSSVRFCi0gICAgVUxPTkcgICAgICAgICAgICAgICAgICAgQ3VyclR4UmF0ZVN0
YWJsZVRpbWU7IC8vICMgb2Ygc2Vjb25kIGluIGN1cnJlbnQgVFggcmF0ZQotICAgIFVDSEFSICAg
ICAgICAgICAgICAgICAgIFR4UmF0ZVVwUGVuYWx0eTsgICAgICAvLyBleHRyYSAjIG9mIHNlY29u
ZCBwZW5hbHR5IGR1ZSB0byBsYXN0IHVuc3RhYmxlIGNvbmRpdGlvbgotCi0gICAgLy8gRm9yIFdQ
QS1QU0sgc3VwcGxpY2FudCBzdGF0ZQotICAgIC8vcmVkLFdQQV9TVEFURSAgIFdwYVN0YXRlOyAg
ICAgICAgICAgLy8gRGVmYXVsdCBpcyBTU19OT1RVU0UgYW5kIGhhbmRsZWQgYnkgbWljcm9zb2Z0
IDgwMi4xeAotCQotICAgIAotfSBQT1JUX0NPTkZJRywgKlBQT1JUX0NPTkZJRzsKLQotdHlwZWRl
ZiBzdHJ1Y3QgX01MTUVfTUVNT1JZX1NUUlVDVCB7Ci0gICAgUFZPSUQgICAgICAgICAgICAgICAg
ICAgICAgICAgICBBbGxvY1ZhOyAgICAvL1BvaW50ZXIgdG8gdGhlIGJhc2UgdmlydHVhbCBhZGRy
ZXNzIG9mIHRoZSBhbGxvY2F0ZWQgbWVtb3J5Ci0gICAgc3RydWN0IF9NTE1FX01FTU9SWV9TVFJV
Q1QgICAgICAqTmV4dDsgICAgICAvL1BvaW50ZXIgdG8gdGhlIG5leHQgdmlydHVhbCBhZGRyZXNz
IG9mIHRoZSBhbGxvY2F0ZWQgbWVtb3J5Ci19IE1MTUVfTUVNT1JZX1NUUlVDVCwgKlBNTE1FX01F
TU9SWV9TVFJVQ1Q7Ci0KLXR5cGVkZWYgc3RydWN0ICBfTUxNRV9NRU1PUllfSEFORExFUiB7Ci0g
ICAgQk9PTEVBTiAgICAgICAgICAgICAgICAgTWVtUnVubmluZzsgICAgICAgICAvL1RoZSBmbGFn
IG9mIHRoZSBNbG1lIG1lbW9yeSBoYW5kbGVyJ3Mgc3RhdHVzCi0gICAgVUlOVCAgICAgICAgICAg
ICAgICAgICAgTWVtb3J5Q291bnQ7ICAgICAgICAvL1RvdGFsIG5vbnBhZ2VkIHN5c3RlbS1zcGFj
ZSBtZW1vcnkgbm90IHNpemUKLSAgICBVSU5UICAgICAgICAgICAgICAgICAgICBJblVzZUNvdW50
OyAgICAgICAgIC8vTm9ucGFnZWQgc3lzdGVtLXNwYWNlIG1lbW9yeSBpbiB1c2VkIGNvdW50cwot
ICAgIFVJTlQgICAgICAgICAgICAgICAgICAgIFVuVXNlQ291bnQ7ICAgICAgICAgLy9Ob25wYWdl
ZCBzeXN0ZW0tc3BhY2UgbWVtb3J5IGF2YWlsYWJsZSBjb3VudHMKLSAgICBVSU5UICAgICAgICAg
ICAgICAgICAgICBQZW5kaW5nQ291bnQ7ICAgICAgIC8vTm9ucGFnZWQgc3lzdGVtLXNwYWNlIG1l
bW9yeSBmb3IgZnJlZSBjb3VudHMKLSAgICBQTUxNRV9NRU1PUllfU1RSVUNUICAgICBwSW5Vc2VI
ZWFkOyAgICAgICAgIC8vUG9pbnRlciB0byB0aGUgZmlyc3Qgbm9ucGFlZCBtZW1vcnkgbm90IHVz
ZWQKLSAgICBQTUxNRV9NRU1PUllfU1RSVUNUICAgICBwSW5Vc2VUYWlsOyAgICAgICAgIC8vUG9p
bnRlciB0byB0aGUgbGFzdCBub25wYWdlZCBtZW1vcnkgbm90IHVzZWQKLSAgICBQTUxNRV9NRU1P
UllfU1RSVUNUICAgICBwVW5Vc2VIZWFkOyAgICAgICAgIC8vUG9pbnRlciB0byB0aGUgZmlyc3Qg
bm9ucGFnZWQgbWVtb3J5IGluIHVzZWQKLSAgICBQTUxNRV9NRU1PUllfU1RSVUNUICAgICBwVW5V
c2VUYWlsOyAgICAgICAgIC8vUG9pbnRlciB0byB0aGUgbGFzdCBub25wYWdlZCBtZW1vcnkgaW4g
dXNlZAotICAgIFBVTE9ORyAgICAgICAgICAgICAgICAgIE1lbUZyZWVQZW5kaW5nW01BWF9NTE1F
X0hBTkRMRVJfTUVNT1JZXTsgICAvL2FuIGFycmF5IHRvIGtlZXAgcGVuZGluZyBmcmVlLW1lbW9y
eSdzIHBvaW50ZXIgKDMyYml0cykKLX0gTUxNRV9NRU1PUllfSEFORExFUiwgKlBNTE1FX01FTU9S
WV9IQU5ETEVSOwotCi10eXBlZGVmIHN0cnVjdCBfTUxNRV9TVFJVQ1QgewotICAgIFNUQVRFX01B
Q0hJTkUgICAgICAgICAgIENudGxNYWNoaW5lLCBBc3NvY01hY2hpbmUsIEF1dGhNYWNoaW5lLCBB
dXRoUnNwTWFjaGluZSwgU3luY01hY2hpbmUsV3BhUHNrTWFjaGluZTsKLSAgICBTVEFURV9NQUNI
SU5FX0ZVTkMgICAgICBDbnRsRnVuY1tDTlRMX0ZVTkNfU0laRV0sIEFzc29jRnVuY1tBU1NPQ19G
VU5DX1NJWkVdOwotICAgIFNUQVRFX01BQ0hJTkVfRlVOQyAgICAgIEF1dGhGdW5jW0FVVEhfRlVO
Q19TSVpFXSwgQXV0aFJzcEZ1bmNbQVVUSF9SU1BfRlVOQ19TSVpFXTsKLSAgICBTVEFURV9NQUNI
SU5FX0ZVTkMgICAgICBTeW5jRnVuY1tTWU5DX0ZVTkNfU0laRV0sV3BhUHNrRnVuY1tXUEFfUFNL
X0ZVTkNfU0laRV07Ci0gICAgCi0gICAgQVNTT0NfQVVYICAgICAgICAgICAgICAgQXNzb2NBdXg7
Ci0gICAgQVVUSF9BVVggICAgICAgICAgICAgICAgQXV0aEF1eDsKLSAgICBBVVRIX1JTUF9BVVgg
ICAgICAgICAgICBBdXRoUnNwQXV4OwotICAgIFNZTkNfQVVYICAgICAgICAgICAgICAgIFN5bmNB
dXg7Ci0gICAgQ05UTF9BVVggICAgICAgICAgICAgICAgQ250bEF1eDsKLSAgICAKLSAgICBDT1VO
VEVSXzgwMl8xMSAgICAgICAgICBQcmV2V2xhbkNvdW50ZXJzOwotICAgIFVMT05HICAgICAgICAg
ICAgICAgICAgIENoYW5uZWxRdWFsaXR5OyAgLy8gMC4uMTAwLCBDaGFubmVsIFF1YWxpdHkgSW5k
aWNhdGlvbiBmb3IgUm9hbWluZwotCi0gICAgQk9PTEVBTiAgICAgICAgICAgICAgICAgUnVubmlu
ZzsKLSAgICBzcGlubG9ja190ICAgICAgICAgIFRhc2tMb2NrOwotICAgIE1MTUVfUVVFVUUgICAg
ICAgICAgICAgIFF1ZXVlOwotCi0gICAgVUlOVCAgICAgICAgICAgICAgICAgICAgU2hpZnRSZWc7
Ci0vLyAgICBQU1BPTExfRlJBTUUgICAgICAgICAgICBQc0ZyOwotLy8gICAgTUFDSERSICAgICAg
ICAgICAgICAgICAgTnVsbEZyOwotICAgIAotICAgIFJBTElOS19USU1FUl9TVFJVQ1QJUGVyaW9k
aWNUaW1lcjsKLSAgICBVTE9ORyAgICAgICAgICAgICAgICAgICBQZXJpb2RpY1JvdW5kOwotICAg
IFVMT05HICAgICAgICAgICAgICAgICAgIFByZXZUeENudDsKLQotICAgIE1MTUVfTUVNT1JZX0hB
TkRMRVIgICAgIE1lbUhhbmRsZXI7ICAgICAgICAgLy9UaGUgaGFuZGxlciBvZiB0aGUgbm9ucGFn
ZWQgbWVtb3J5IGluc2lkZSBNTE1FCi0KLX0gTUxNRV9TVFJVQ1QsICpQTUxNRV9TVFJVQ1Q7Ci0K
LS8vCi0vLyBNYW5hZ2VtZW50IHJpbmcgYnVmZmVyIGZvcm1hdAotLy8KLXR5cGVkZWYJc3RydWN0
CV9NR01UX1NUUlVDCXsKLQlCT09MRUFOCQlWYWxpZDsKLQlQVUNIQVIJCXBCdWZmZXI7Ci0JVUxP
TkcJCUxlbmd0aDsKLQlVQ0hBUgkJRmlyc3RJbmRleDsKLQlVQ0hBUgkJQ29udGV4dHNSZXF1aXJl
ZDsKLQlzdHJ1Y3QJX01HTVRfU1RSVUMgKm5leHQ7Ly9ibHVlCi19CU1HTVRfU1RSVUMsICpQTUdN
VF9TVFJVQzsKLQotLy8KLS8vIFA4MDIuMTEgRnJhbWUgY29udHJvbCBmaWVsZCwgMTYgYml0Ci0v
LwotdHlwZWRlZglzdHJ1Y3QJX0ZSQU1FX0NPTlRST0wJewotCVVTSE9SVAkJVmVyOjI7CQkJCS8v
IFByb3RvY29sIHZlcnNpb24KLQlVU0hPUlQJCVR5cGU6MjsJCQkJLy8gTVNEVSB0eXBlCi0JVVNI
T1JUCQlTdWJ0eXBlOjQ7CQkJLy8gTVNEVSBzdWJ0eXBlCi0JVVNIT1JUCQlUb0RzOjE7CQkJCS8v
IFRvIERTIGluZGljYXRpb24KLQlVU0hPUlQJCUZyRHM6MTsJCQkJLy8gRnJvbSBEUyBpbmRpY2F0
aW9uCi0JVVNIT1JUCQlNb3JlRnJhZzoxOwkJCS8vIE1vcmUgZnJhZ21lbnQgYml0Ci0JVVNIT1JU
CQlSZXRyeToxOwkJCS8vIFJldHJ5IHN0YXR1cyBiaXQKLQlVU0hPUlQJCVB3ck1ndDoxOwkJCS8v
IFBvd2VyIG1hbmFnZW1lbnQgYml0Ci0JVVNIT1JUCQlNb3JlRGF0YToxOwkJCS8vIE1vcmUgZGF0
YSBiaXQKLQlVU0hPUlQJCVdlcDoxOwkJCQkvLyBXZXAgZGF0YQotCVVTSE9SVAkJT3JkZXI6MTsJ
CQkvLyBTdHJpY3Qgb3JkZXIgZXhwZWN0ZWQKLX0JRlJBTUVfQ09OVFJPTCwgKlBGUkFNRV9DT05U
Uk9MOwotCi0vLwotLy8gUDgwMi4xMSBpbnRlcm1lZGlhdGUgaGVhZGVyIGZvcm1hdAotLy8KLXR5
cGVkZWYJc3RydWN0CV9DT05UUk9MX0hFQURFUgl7Ci0JRlJBTUVfQ09OVFJPTAlGcmFtZTsJCQkJ
Ly8gRnJhbWUgY29udHJvbCBzdHJ1Y3R1cmUKLQlVU0hPUlQJCQlEdXJhdGlvbjsJCQkvLyBEdXJh
dGlvbiB2YWx1ZQotCU1BQ0FERFIJCQlBZGRyMTsJCQkJLy8gQWRkcmVzcyAxIGZpZWxkCi0JTUFD
QUREUgkJCUFkZHIyOwkJCQkvLyBBZGRyZXNzIDIgZmllbGQKLX0JQ09OVFJPTF9IRUFERVIsICpQ
Q09OVFJPTF9IRUFERVI7Ci0KLXR5cGVkZWYJc3RydWN0CV9QU19QT0xMX0JVRkZFUgl7Ci0gICAg
VFhEX1NUUlVDCQlUeERlc2M7Ci0JUFNQT0xMX0ZSQU1FCVBzUG9sbFBhY2tldDsKLX0JUFNfUE9M
TF9CVUZGRVIsICpQUFNfUE9MTF9CVUZGRVI7Ci0KLS8vCi0vLyBQODAyLjExIGhlYWRlciBmb3Jt
YXQKLS8vCi10eXBlZGVmCXN0cnVjdAlfSEVBREVSXzgwMl8xMQl7Ci0JQ09OVFJPTF9IRUFERVIJ
Q29udHJvbGhlYWQ7Ci0JTUFDQUREUgkJCUFkZHIzOwkJCQkvLyBBZGRyZXNzIDMgZmllbGQKLQlV
U0hPUlQJCQlGcmFnOjQ7CQkJCS8vIEZyYWdtZW50IG51bWJlcgotCVVTSE9SVAkJCVNlcXVlbmNl
OjEyOwkJLy8gU2VxdWVuY2UgbnVtYmVyCi19CUhFQURFUl84MDJfMTEsICpQSEVBREVSXzgwMl8x
MTsKLQotdHlwZWRlZglzdHJ1Y3QJX05VTExfRlJBTUVfQlVGRkVSCXsKLSAgICBUWERfU1RSVUMJ
CVR4RGVzYzsKLQlIRUFERVJfODAyXzExCU51bGxGcmFtZTsKLX0JTlVMTF9GUkFNRV9CVUZGRVIs
ICpQTlVMTF9GUkFNRV9CVUZGRVI7Ci0KLXR5cGVkZWYJc3RydWN0CV9XUEFQU0tfQlVGRkVSCXsK
LSAgICBUWERfU1RSVUMJCVR4RGVzYzsKLQlVQ0hBUglXcGFQc2tGcmFtZVs1MTJdOwotfQlXUEFQ
U0tfQlVGRkVSLCAqUFdQQVBTS19CVUZGRVI7Ci0KLQotCi10eXBlZGVmCXN0cnVjdAlfU1RVRkZf
QlVGRkVSCXsKLQlOVUxMX0ZSQU1FX0JVRkZFUglOdWxsRnJhbWVCdWZmZXI7Ci0gICAgVUNIQVIJ
U3R1ZmZCdWZmZXJbNTEyXTsKLX0JU1RVRkZfQlVGRkVSLCAqUFNUVUZGX0JVRkZFUjsKLQotLy8K
LS8vIFJlY2VpdmUgVHVwbGUgQ2FjaGUgRm9ybWF0Ci0vLwotdHlwZWRlZglzdHJ1Y3QJX1RVUExF
X0NBQ0hFCXsKLQlCT09MRUFOCQkJVmFsaWQ7Ci0JTUFDQUREUgkJCU1BQzsKLQlVU0hPUlQJCQlT
ZXF1ZW5jZTsgCi0JVVNIT1JUCQkJRnJhZzsKLX0JVFVQTEVfQ0FDSEUsICpQVFVQTEVfQ0FDSEU7
Ci0KLS8vCi0vLyBGcmFnbWVudCBGcmFtZSBzdHJ1Y3R1cmUKLS8vCi10eXBlZGVmCXN0cnVjdAlf
RlJBR01FTlRfRlJBTUUJewotCVVDSEFSCQlIZWFkZXI4MDJfM1sxNF07Ci0JVUNIQVIJCUhlYWRl
cl9MTENbOF07Ci0JVUNIQVIJCUJ1ZmZlcltNQVhfRlJBTUVfU0laRV07Ci0JVUxPTkcJCVJ4U2l6
ZTsKLQlVU0hPUlQJCVNlcXVlbmNlOwotCVVTSE9SVAkJTGFzdEZyYWc7Ci0JVUxPTkcJCUZsYWdz
OwkJCS8vIFNvbWUgZXh0cmEgZnJhbWUgaW5mb3JtYXRpb24uIGJpdCAwOiBMTEMgcHJlc2VudGVk
Ci19CUZSQUdNRU5UX0ZSQU1FLCAqUEZSQUdNRU5UX0ZSQU1FOwotCi0vLwotLy8gUGFja2V0IGlu
Zm9ybWF0aW9uIGZvciBOZGlzUXVlcnlQYWNrZXQKLS8vCi10eXBlZGVmCXN0cnVjdAlfUEFDS0VU
X0lORk8JewotCVVJTlQJCQlQaHlzaWNhbEJ1ZmZlckNvdW50OwkvLyBQaHlzaWNhbCBicmVha3Mg
b2YgYnVmZmVyIGRlc2NyaXBvciBjaGFpbmVkCi0JVUlOVAkJCUJ1ZmZlckNvdW50IDsJCQkvLyBO
dW1iZXIgb2YgQnVmZmVyIGRlc2NyaXB0b3IgY2hhaW5lZAotCVVJTlQJCQlUb3RhbFBhY2tldExl
bmd0aCA7ICAJLy8gU2VsZiBleHBsYWluZWQKLQkvL1BORElTX0JVRkZFUglwRmlyc3RCdWZmZXI7
CQkJLy8gUG9pbnRlciB0byBmaXJzdCBidWZmZXIgZGVzY3JpcHRvcgotfQlQQUNLRVRfSU5GTywg
KlBQQUNLRVRfSU5GTzsKLQotLy8KLS8vIFRraXAgS2V5IHN0cnVjdHVyZSB3aGljaCBSQzQga2V5
ICYgTUlDIGNhbGN1bGF0aW9uCi0vLwotdHlwZWRlZglzdHJ1Y3QJX1RLSVBfS0VZX0lORk8Jewot
CVVJTlQJCW5CeXRlc0luTTsJLy8gIyBieXRlcyBpbiBNIGZvciBNSUNLRVkKLQlVTE9ORwkJSVYx
NjsKLQlVTE9ORwkJSVYzMjsJCi0JVUxPTkcJCUswOwkJCS8vIGZvciBNSUNLRVkgTG93Ci0JVUxP
TkcJCUsxOwkJCS8vIGZvciBNSUNLRVkgSGlnCi0JVUxPTkcJCUw7CQkJLy8gQ3VycmVudCBzdGF0
ZSBmb3IgTUlDS0VZCi0JVUxPTkcJCVI7CQkJLy8gQ3VycmVudCBzdGF0ZSBmb3IgTUlDS0VZCi0J
VUxPTkcJCU07CQkJLy8gTWVzc2FnZSBhY2N1bXVsYXRvciBmb3IgTUlDS0VZCi0JVUNIQVIJCVJD
NEtFWVsxNl07Ci0JVUNIQVIJCU1JQ1s4XTsKLX0JVEtJUF9LRVlfSU5GTywgKlBUS0lQX0tFWV9J
TkZPOwotCi0vLwotLy8gUHJpdmF0ZSAvIE1pc2MgZGF0YSwgY291bnRlcnMgZm9yIGRyaXZlciBp
bnRlcm5hbCB1c2UKLS8vCi10eXBlZGVmCXN0cnVjdAlfX1BSSVZBVEVfU1RSVUMJewotCVVMT05H
CQlTeXN0ZW1SZXNldENudDsJCQkvLyBTeXN0ZW0gcmVzZXQgY291bnRlcgotCVVMT05HCQlSZXNl
dENvdW50RG93bjsJCQkvLyBDb3VudCBkb3duIGJlZm9yZSBpc3N1ZSByZXNldCwgcGF0Y2ggZm9y
IFJUMjQzMAotLy8JVUxPTkcJCUNDQUVyckNudDsJCQkJLy8gQ0NBIGVycm9yIGNvdW50LCBmb3Ig
ZGVidWcgcHVycG9zZSwgbWlnaHQgbW92ZSB0byBnbG9iYWwgY291bnRlcgotCVVMT05HCQlQaHlS
eEVyckNudDsJCQkvLyBQSFkgUnggZXJyb3IgY291bnQsIGZvciBkZWJ1ZyBwdXJwb3NlLCBtaWdo
dCBtb3ZlIHRvIGdsb2JhbCBjb3VudGVyCi0JVUxPTkcJCVBoeVR4RXJyQ250OwkJCS8vIFBIWSBU
eCBlcnJvciBjb3VudCwgZm9yIGRlYnVnIHB1cnBvc2UsIG1pZ2h0IG1vdmUgdG8gZ2xvYmFsIGNv
dW50ZXIKLQkvLyBWYXJpYWJsZXMgZm9yIFdFUCBlbmNyeXB0aW9uIC8gZGVjcnlwdGlvbiBpbiBy
dG1wX3dlcC5jCi0JVUxPTkcJCQlGQ1NDUkMzMjsKLQlVTE9ORwkJCVJ4U2V0Q250OwotCVVMT05H
CQkJRGVjcnlwdENudDsKLQlBUkNGT1VSQ09OVEVYVAlXRVBDT05URVhUOwotCS8vIFRraXAgc3R1
ZmYKLQlUS0lQX0tFWV9JTkZPCVR4OwotCVRLSVBfS0VZX0lORk8JUng7Ci19CVBSSVZBVEVfU1RS
VUMsICpQUFJJVkFURV9TVFJVQzsKLQotCi0KLS8vLy8vLy8vLy8vLy8vLy8vCi0vL1ZlbmRvciBD
b21tYW5kcwotLy8vLy8vLy8vLy8vLy8vLy8KLSNkZWZpbmUgQ09NTUFORF9RVUVVRV9TSVpFICAx
MQotCi10eXBlZGVmCXN0cnVjdCBfQ21kUUVsbXQJewotCVVJTlQJCQkJY29tbWFuZDsKLQlQVk9J
RAkJCQlidWZmZXI7Ci0JVUxPTkcJCQkJYnVmZmVybGVuZ3RoOwotCUJPT0xFQU4JCQkJQ21kRnJv
bU5kaXM7Ci0JQk9PTEVBTgkJCQlTZXRPcGVyYXRpb247Ci0JQk9PTEVBTgkJCQlJblVzZTsvL2Js
dWUKLQlzdHJ1Y3QgX0NtZFFFbG10CSpuZXh0OwotfQlDbWRRRWxtdCwgKlBDbWRRRWxtdDsKLQot
dHlwZWRlZglzdHJ1Y3QJX0NtZFEJewotCVVJTlQJCXNpemU7Ci0JQ21kUUVsbXQJKmhlYWQ7Ci0J
Q21kUUVsbXQJKnRhaWw7Ci19CUNtZFEsICpQQ21kUTsKLQotdHlwZWRlZiBlbnVtIF9CVUxLX09V
VF9UWVBFIHsKLSAgICBEQVRBLAotICAgIE1MTUUsCi0JQkVBQ09OLAotCVBTX1BPTEwsCi0gICAg
QUxMCi19IEJVTEtfT1VUX1RZUEU7Ci0KLSNpZiAwCi10eXBlZGVmCXN0cnVjdCBfQlVMS19PVVRf
UVVFVUVfRUxFTUVOVAl7Ci0JQlVMS19PVVRfVFlQRQkJCUJ1bGtPdXRUeXBlOwotCVBWT0lECQkJ
CWJ1ZmZlcjsKLQlzdHJ1Y3QgX0JVTEtfT1VUX1FVRVVFX0VMRU1FTlQJKm5leHQ7Ci19CUJVTEtf
T1VUX1FVRVVFX0VMRU1FTlQsICpQQlVMS19PVVRfUVVFVUVfRUxFTUVOVDsKLQotdHlwZWRlZglz
dHJ1Y3QJX0JVTEtfT1VUX1FVRVVFCXsKLQlVSU5UCQlzaXplOwotCUJVTEtfT1VUX1FVRVVFX0VM
RU1FTlQJKmhlYWQ7Ci0JQlVMS19PVVRfUVVFVUVfRUxFTUVOVAkqdGFpbDsKLX0JQlVMS19PVVRf
UVVFVUUsICpQQlVMS19PVVRfUVVFVUU7Ci0KLXR5cGVkZWYJc3RydWN0IF9CVUxLX09VVF9RVUVV
RV9FTEVNRU5UCXsKLQlQVk9JRAkJCQlidWZmZXI7Ci0Jc3RydWN0IF9CVUxLX09VVF9RVUVVRV9F
TEVNRU5UCSpuZXh0OwotfQlCVUxLX09VVF9RVUVVRV9FTEVNRU5ULCAqUEJVTEtfT1VUX1FVRVVF
X0VMRU1FTlQ7Ci0KLXR5cGVkZWYJc3RydWN0CV9CVUxLX09VVF9RVUVVRQl7Ci0JVUlOVAkJc2l6
ZTsKLQlCVUxLX09VVF9RVUVVRV9FTEVNRU5UCSpoZWFkOwotCUJVTEtfT1VUX1FVRVVFX0VMRU1F
TlQJKnRhaWw7Ci19CUJVTEtfT1VUX1FVRVVFLCAqUEJVTEtfT1VUX1FVRVVFOwotI2VuZGlmCi0K
LS8vYmx1ZQotdHlwZWRlZglzdHJ1Y3QJX0RBVEFfQlVMS09VVF9RVUVVRQl7Ci0JVUlOVAkJc2l6
ZTsKLQlzdHJ1Y3Qgc2tfYnVmZiAJKmhlYWQ7Ci0Jc3RydWN0IHNrX2J1ZmYJKnRhaWw7Ci19CURB
VEFfQlVMS09VVF9RVUVVRSwgKlBEQVRBX0JVTEtPVVRfUVVFVUU7Ci0KLXR5cGVkZWYJc3RydWN0
CV9NTE1FX0JVTEtPVVRfUVVFVUUJewotCVVJTlQJCXNpemU7Ci0JUE1HTVRfU1RSVUMJaGVhZDsK
LQlQTUdNVF9TVFJVQwl0YWlsOwotfQlNTE1FX0JVTEtPVVRfUVVFVUUsICpQTUxNRV9CVUxLT1VU
X1FVRVVFOwotCi0jaWYgMAotdHlwZWRlZiBlbnVtIGJ1ZmZlclN0YXRlcyB7Ci0gICAgRlJFRSwK
LSAgICBVU0VELAotCUNPTVBMRVRFRCwKLSAgICBQRU5ESU5HCi19IEJ1ZmZlclN0YXRlOwotI2Vu
ZGlmCi0KLS8vIHVzZWQgdG8gdHJhY2sgZHJpdmVyLWdlbmVyYXRlZCB3cml0ZSBpcnBzIAotdHlw
ZWRlZiBzdHJ1Y3QgX1RYX0NPTlRFWFQKLXsKLQotCVBWT0lECQkJCXBBZGFwdGVyOy8vSW5pdGlh
bGl6ZWQgaW4gTWluaXBvcnRJbml0aWFsaXplCi0JLy8gICAgc3RydWN0IHNrX2J1ZmYgKnNrYjsK
LQlQVVJCCQkJCXBVcmI7Ly9Jbml0aWFsaXplZCBpbiBNaW5pcG9ydEluaXRpYWxpemUKLQlQSVJQ
CSAgICAgICAgICAgIHBJcnA7Ly91c2VkIHRvIGNhbmNlbCBwZW5kaW5nIGJ1bGsgb3V0Li8vSW5p
dGlhbGl6ZWQgaW4gTWluaXBvcnRJbml0aWFsaXplCi0JUFRYX0JVRkZFUiAgICAgICAgICBUcmFu
c2ZlckJ1ZmZlcjsvL0luaXRpYWxpemVkIGluIE1pbmlwb3J0SW5pdGlhbGl6ZQotCVVMT05HCQkJ
QnVsa091dFNpemU7Ci0JQk9PTEVBTgkJCQlJblVzZTsKLQlCT09MRUFOCQkJCUlSUFBlbmRpbmc7
Ci0JQk9PTEVBTgkJCQlMYXN0T25lOwotfQotVFhfQ09OVEVYVCwgKlBUWF9DT05URVhULCAqKlBQ
VFhfQ09OVEVYVDsKLQotLy8gdXNlZCB0byB0cmFjayBkcml2ZXItZ2VuZXJhdGVkIHdyaXRlIGly
cHMgCi10eXBlZGVmIHN0cnVjdCBfTUxNRV9DT05URVhUCi17Ci0gICAgUFZPSUQJCQkJcEFkYXB0
ZXI7Ly9Jbml0aWFsaXplZCBpbiBNaW5pcG9ydEluaXRpYWxpemUKLSAgICBQTUdNVF9TVFJVQwkJ
CXBNZ210OwotICAgIFBVUkIJCQkJcFVyYjsvL0luaXRpYWxpemVkIGluIE1pbmlwb3J0SW5pdGlh
bGl6ZQotICAgIFBJUlAJICAgICAgICAgICAgcElycDsvL3VzZWQgdG8gY2FuY2VsIHBlbmRpbmcg
YnVsayBvdXQuLy9Jbml0aWFsaXplZCBpbiBNaW5pcG9ydEluaXRpYWxpemUKLSAgICBQVFhfQlVG
RkVSICAgICAgICAgIFRyYW5zZmVyQnVmZmVyOy8vSW5pdGlhbGl6ZWQgaW4gTWluaXBvcnRJbml0
aWFsaXplCi0vLyAgICBVSU5UCSAgICAgICAgICAgIFRyYW5zZmVyQnVmZmVyTGVuZ3RoOy8vVHJh
bnNmZXJCdWZmZXJMZW5ndGgKLS8vICAgIENPTlRFWFRfVFlQRSAgICBUeXBlOwotLy8gICAgQnVm
ZmVyU3RhdGUJICAgICAgICAgICAgZkluVXNlOyAvLyBEZWNsYXJlZCBhcyBVTE9ORyBzbyBjYW4g
dXNlIHdpdGggSW50ZXJsb2NrZWRFeGNoYW5nZSgpCi0JQk9PTEVBTgkJCQlJblVzZTsKLQlCT09M
RUFOCQkJCUlSUFBlbmRpbmc7Ci0JQk9PTEVBTgkJCQlMYXN0T25lOwotCVVDSEFSCQkJCUluZGV4
OwotfQotTUxNRV9DT05URVhULCAqUE1MTUVfQ09OVEVYVCwgKipQUE1MTUVfQ09OVEVYVDsKLQot
Ci10eXBlZGVmIHN0cnVjdCBfTlVMTF9DT05URVhUCi17Ci0gICAgUFZPSUQJCQkJcEFkYXB0ZXI7
Ly9Jbml0aWFsaXplZCBpbiBNaW5pcG9ydEluaXRpYWxpemUKLSAgICBQVVJCCQkJCXBVcmI7Ly9J
bml0aWFsaXplZCBpbiBNaW5pcG9ydEluaXRpYWxpemUKLSAgICBQSVJQCSAgICAgICAgICAgIHBJ
cnA7Ly91c2VkIHRvIGNhbmNlbCBwZW5kaW5nIGJ1bGsgb3V0LgotICAgIFBOVUxMX0ZSQU1FX0JV
RkZFUiAgICAgICAgICBUcmFuc2ZlckJ1ZmZlcjsvL0luaXRpYWxpemVkIGluIE1pbmlwb3J0SW5p
dGlhbGl6ZQotLy8gICAgVUlOVAkgICAgICAgICAgICBUcmFuc2ZlckJ1ZmZlckxlbmd0aDsvL1Ry
YW5zZmVyQnVmZmVyTGVuZ3RoCi0vLyAgICBCdWZmZXJTdGF0ZQkgICAgICAgICAgICBmSW5Vc2U7
IC8vIERlY2xhcmVkIGFzIFVMT05HIHNvIGNhbiB1c2Ugd2l0aCBJbnRlcmxvY2tlZEV4Y2hhbmdl
KCkKLQlCT09MRUFOCQkJCUluVXNlOwotCUJPT0xFQU4JCQkJSVJQUGVuZGluZzsKLX0KLU5VTExf
Q09OVEVYVCwgKlBOVUxMX0NPTlRFWFQ7Ci0KLQotdHlwZWRlZiBzdHJ1Y3QgX1dQQVBTS19DT05U
RVhUCi17Ci0gICAgUFZPSUQJCQkJcEFkYXB0ZXI7Ly9Jbml0aWFsaXplZCBpbiBNaW5pcG9ydElu
aXRpYWxpemUKLSAgICBQVVJCCQkJCXBVcmI7Ly9Jbml0aWFsaXplZCBpbiBNaW5pcG9ydEluaXRp
YWxpemUKLSAgICBQSVJQCSAgICAgICAgICAgIHBJcnA7Ly91c2VkIHRvIGNhbmNlbCBwZW5kaW5n
IGJ1bGsgb3V0LgotICAgIFBXUEFQU0tfQlVGRkVSICAgICAgICAgIFRyYW5zZmVyQnVmZmVyOy8v
SW5pdGlhbGl6ZWQgaW4gTWluaXBvcnRJbml0aWFsaXplCi0vLyAgICBVSU5UCSAgICAgICAgICAg
IFRyYW5zZmVyQnVmZmVyTGVuZ3RoOy8vVHJhbnNmZXJCdWZmZXJMZW5ndGgKLS8vICAgIEJ1ZmZl
clN0YXRlCSAgICAgICAgICAgIGZJblVzZTsgLy8gRGVjbGFyZWQgYXMgVUxPTkcgc28gY2FuIHVz
ZSB3aXRoIEludGVybG9ja2VkRXhjaGFuZ2UoKQotCUJPT0xFQU4JCQkJSW5Vc2U7Ci0JQk9PTEVB
TgkJCQlSZWFkeTsKLQlCT09MRUFOCQkJCUlSUFBlbmRpbmc7Ci19Ci1XUEFQU0tfQ09OVEVYVCwg
KlBXUEFQU0tfQ09OVEVYVDsKLQotdHlwZWRlZiBzdHJ1Y3QgX1BTX1BPTExfQ09OVEVYVAotewot
ICAgIFBWT0lECQkJCXBBZGFwdGVyOy8vSW5pdGlhbGl6ZWQgaW4gTWluaXBvcnRJbml0aWFsaXpl
Ci0gICAgUFVSQgkJCQlwVXJiOy8vSW5pdGlhbGl6ZWQgaW4gTWluaXBvcnRJbml0aWFsaXplCi0g
ICAgUElSUAkgICAgICAgICAgICBwSXJwOy8vdXNlZCB0byBjYW5jZWwgcGVuZGluZyBidWxrIG91
dC4KLSAgICBQUFNfUE9MTF9CVUZGRVIgICAgICAgICAgVHJhbnNmZXJCdWZmZXI7Ly9Jbml0aWFs
aXplZCBpbiBNaW5pcG9ydEluaXRpYWxpemUKLS8vICAgIFVJTlQJICAgICAgICAgICAgVHJhbnNm
ZXJCdWZmZXJMZW5ndGg7Ly9UcmFuc2ZlckJ1ZmZlckxlbmd0aAotLy8gICAgQnVmZmVyU3RhdGUJ
ICAgICAgICAgICAgZkluVXNlOyAvLyBEZWNsYXJlZCBhcyBVTE9ORyBzbyBjYW4gdXNlIHdpdGgg
SW50ZXJsb2NrZWRFeGNoYW5nZSgpCi0JQk9PTEVBTgkJCQlJblVzZTsKLQlCT09MRUFOCQkJCVJl
YWR5OwotCUJPT0xFQU4JCQkJSVJQUGVuZGluZzsKLX0KLVBTX1BPTExfQ09OVEVYVCwgKlBQU19Q
T0xMX0NPTlRFWFQ7Ci0KLXR5cGVkZWYgc3RydWN0IF9TVFVGRl9DT05URVhUCi17Ci0gICAgUFZP
SUQJCQkJcEFkYXB0ZXI7Ly9Jbml0aWFsaXplZCBpbiBNaW5pcG9ydEluaXRpYWxpemUKLSAgICBQ
VVJCCQkJCXBVcmI7Ly9Jbml0aWFsaXplZCBpbiBNaW5pcG9ydEluaXRpYWxpemUKLSAgICBQSVJQ
CSAgICAgICAgICAgIHBJcnA7Ly91c2VkIHRvIGNhbmNlbCBwZW5kaW5nIGJ1bGsgb3V0LgotICAg
IFBTVFVGRl9CVUZGRVIgICAgICAgICAgVHJhbnNmZXJCdWZmZXI7Ly9Jbml0aWFsaXplZCBpbiBN
aW5pcG9ydEluaXRpYWxpemUKLS8vICAgIFVJTlQJICAgICAgICAgICAgVHJhbnNmZXJCdWZmZXJM
ZW5ndGg7Ly9UcmFuc2ZlckJ1ZmZlckxlbmd0aAotLy8gICAgQnVmZmVyU3RhdGUJICAgICAgICAg
ICAgZkluVXNlOyAvLyBEZWNsYXJlZCBhcyBVTE9ORyBzbyBjYW4gdXNlIHdpdGggSW50ZXJsb2Nr
ZWRFeGNoYW5nZSgpCi0JQk9PTEVBTgkJCQlJblVzZTsKLQlCT09MRUFOCQkJCVJlYWR5OwotCUJP
T0xFQU4JCQkJSVJQUGVuZGluZzsKLX0KLVNUVUZGX0NPTlRFWFQsICpQU1RVRkZfQ09OVEVYVDsK
LQotLy8KLS8vIFN0cnVjdHVyZSB0byBrZWVwIHRyYWNrIG9mIHJlY2VpdmUgcGFja2V0cyBhbmQg
YnVmZmVycyB0byBpbmRpY2F0ZQotLy8gcmVjZWl2ZSBkYXRhIHRvIHRoZSBwcm90b2NvbC4KLS8v
Ci0jZGVmaW5lICAgSVJQTE9DS19DT01QTEVURUQgICAgIDAKLSNkZWZpbmUgICBJUlBMT0NLX0NB
TkNFTEFCTEUgICAgMQotI2RlZmluZSAgIElSUExPQ0tfQ0FOQ0VfU1RBUlQgICAyCi0jZGVmaW5l
ICAgSVJQTE9DS19DQU5DRV9DT01QTEVURSAgICAzCi0KLXR5cGVkZWYgc3RydWN0IF9SWF9DT05U
RVhUCi17Ci0JUFZPSUQJCQkJcEFkYXB0ZXI7Ci0JUElSUAkJCQkJcElycDsgLy91c2VkIHRvIGNh
bmNlbCBwZW5kaW5nIGJ1bGsgaW4uCi0JUFVSQgkJCQlwVXJiOwotCUJPT0xFQU4JCQkJSW5Vc2U7
Ci0JYXRvbWljX3QJCQkJSXJwTG9jazsKLQlQVUNIQVIJCQkJVHJhbnNmZXJCdWZmZXI7IAotfQot
UlhfQ09OVEVYVCwgKlBSWF9DT05URVhUOwotI2lmIDAKLS8vIE5ESVMKLXR5cGVkZWYgc3RydWN0
IF9SWF9DT05URVhUCi17Ci0gICAgUFVDSEFSCQkJCVRyYW5zZmVyQnVmZmVyOyAKLSAgICBQVk9J
RAkJCQlwQWRhcHRlcjsKLSAgICBQSVJQCQkJCXBJcnA7Ly91c2VkIHRvIGNhbmNlbCBwZW5kaW5n
IGJ1bGsgaW4uCi0gICAgUFVSQgkJCQlwVXJiOwotCUJPT0xFQU4JCQkJSW5Vc2U7Ci0JSVJQTE9D
SwkJCQlJcnBMb2NrOwotfQlSWF9DT05URVhULCAqUFJYX0NPTlRFWFQ7Ci0jZW5kaWYKLXR5cGVk
ZWYgc3RydWN0IF9WRU5ET1JfUkVRVUVTVF9VUkIKLXsKLSAgICBQVVJCCQkJCXBVcmI7Ci0vLyAg
ICBCT09MRUFOCSAgICAgICAgICAgIEluVXNlOwotICAgIFBJUlAJCQkJcElycDsvL3VzZWQgdG8g
Y2FuY2VsIHBlbmRpbmcgSVJQCi0JQk9PTEVBTgkJCQlJUlBQZW5kaW5nOwotfQotVkVORE9SX1JF
UVVFU1RfVVJCOwotCi0KLXR5cGVkZWYgc3RydWN0IF9UWF9SQVRFX1NXSVRDSElOR19TVFJVQwot
ewotCVVMT05HCQkJTGFzdFN0YWJsZVRpbWU7Ci0JVUNIQVIJCQlEb3duUmF0ZTFSYXRpbzsKLQlV
Q0hBUgkJCURvd25SYXRlMlJhdGlvOwotCVVDSEFSCQkJVXBSYXRlUmF0aW87Ci0JVUNIQVIJCQlT
dGFibGVUaW1lUmVxdWlyZWQ7Ci0JVUNIQVIJCQlQZW5hbHR5UGVyaW9kOwotCVVDSEFSCQkJRG93
bldhaXRpbmdUaW1lOwotfQotVFhfUkFURV9TV0lUQ0hJTkdfU1RSVUMsICpQVFhfUkFURV9TV0lU
Q0hJTkdfU1RSVUM7Ci0KLXR5cGVkZWYgc3RydWN0IF9UWF9SQVRFX1NXSVRDSElOR19DT1VOVEVS
UwotewotCVVTSE9SVAkJCU5vUmV0cnlPS0NudDsKLQlVU0hPUlQJCQlPbmVSZXRyeU9LQ250Owot
CVVTSE9SVAkJCU1SZXRyeU9LQ250OwotCVVTSE9SVAkJCUZhaWxDbnQ7Ci19Ci1UWF9SQVRFX1NX
SVRDSElOR19DT1VOVEVSUywgKlBUWF9SQVRFX1NXSVRDSElOR19DT1VOVEVSUzsKLQotdHlwZWRl
ZiBzdHJ1Y3QgX0JCUF9UVU5JTkdfUEFSQU1FVEVSU19TVFJVQwotewotCVVDSEFSCQkJQkJQVHVu
aW5nVGhyZXNob2xkOwotCVVDSEFSCQkJUjI0TG93ZXJWYWx1ZTsKLQlVQ0hBUgkJCVIyNEhpZ2hl
clZhbHVlOwotCVVDSEFSCQkJUjI1TG93ZXJWYWx1ZTsKLQlVQ0hBUgkJCVIyNUhpZ2hlclZhbHVl
OwotCVVDSEFSCQkJUjYxTG93ZXJWYWx1ZTsKLQlVQ0hBUgkJCVI2MUhpZ2hlclZhbHVlOwotCVVD
SEFSCQkJQkJQUjE3TG93U2Vuc2l0aXZpdHk7Ci0JVUNIQVIJCQlCQlBSMTdNaWRTZW5zaXRpdml0
eTsKLQlVQ0hBUgkJCVJTU0lUb0RibU9mZnNldDsKLQlCT09MRUFOCQkJTGFyZ2VDdXJyZW50UlNT
STsKLX0KLUJCUF9UVU5JTkdfUEFSQU1FVEVSU19TVFJVQywgKlBCQlBfVFVOSU5HX1BBUkFNRVRF
UlNfU1RSVUM7Ci0KLSNkZWZpbmUJSUVFRTgwMjExX05XSURfTEVOCQkJMzIKLQotCi0jZGVmaW5l
IFVOTElOS19USU1FT1VUX01TCQkzCi0vLwotLy8gIFRoZSBtaW5pcG9ydCBhZGFwdGVyIHN0cnVj
dHVyZQotLy8KLXR5cGVkZWYgc3RydWN0IF9SVDI1NzBfQURBUFRFUgotewotCWludAkJCW5pY2tu
YW1lbGVuOwotCWNoYXIgbmlja25bSUVFRTgwMjExX05XSURfTEVOKzFdOyAvLyBuaWNrbmFtZSwg
b25seSB1c2VkIGluIHRoZSBpd2NvbmZpZyBpL2YgCi0Jc3RydWN0IHRhc2tsZXRfc3RydWN0CXJ4
X2JoOwkJCi0Jc3RydWN0IHVzYl9kZXZpY2UgKnVzYjsKLQkvL0tFUk5FTDI2NgotCXN0cnVjdCB1
c2JfY29uZmlnX2Rlc2NyaXB0b3IgKmNvbmZpZzsKLQkvL3N0cnVjdCB1c2JfaG9zdF9jb25maWcg
KmNvbmZpZzsKLQlkZXZjdHJscmVxdWVzdCAqZGV2cmVxOwotCS8qIFRoZSBkZXZpY2Ugd2UncmUg
d29ya2luZyB3aXRoCi0JICogSXQncyBpbXBvcnRhbnQgdG8gbm90ZToKLQkgKiAgICAobykgeW91
IG11c3QgaG9sZCBkZXZfc2VtYXBob3JlIHRvIGNoYW5nZSBwdXNiX2RldgotCSAqLwotCXN0cnVj
dCBzZW1hcGhvcmUJdXNiZGV2X3NlbWFwaG9yZTsJIC8qIHByb3RlY3QgIHVzYiAqLwotCS8vIFRo
cmVhZAotCXN0cnVjdCBzZW1hcGhvcmUJbWxtZV9zZW1hcGhvcmU7CSAvKiB0byBzbGVlcCB0aHJl
YWQgb24gICAqLwotCXN0cnVjdCBzZW1hcGhvcmUJUlRVU0JDbWRfc2VtYXBob3JlOwkgLyogdG8g
c2xlZXAgdGhyZWFkIG9uICAgKi8KLQlzdHJ1Y3QgY29tcGxldGlvbiAJbm90aWZ5OwkJIC8qIHRo
cmVhZCBiZWdpbi9lbmQJICovCi0JcGlkX3QgCQkJTUxNRVRocl9waWQ7Ci0JcGlkX3QgCQkJUlRV
U0JDbWRUaHJfcGlkOwotCXdhaXRfcXVldWVfaGVhZF90CSp3YWl0OwotCQotCXNwaW5sb2NrX3Qg
KmxvY2s7Ci0jaWYgMQotCVVJTlQJCQkJCVNFVF9SMTdfRkxBRzsKLQlVQ0hBUgkJCQkJQkJQUjE3
SW5pdFZhbHVlOwotCVVDSEFSCQkJCQlSZXNldFJlcXVlc3Q7Ci0JVUNIQVIJCQkJCUJ1bGtBY3Rp
b247Ci0jZW5kaWYKLQotCXN0cnVjdCBuZXRfZGV2aWNlICpuZXQ7Ci0JQk9PTEVBTiAgICAgICAg
ICAgICAgICAgYk5ldERldmljZVN0b3BRdWV1ZTsKLQotI2lmIFdJUkVMRVNTX0VYVCA+PSAxMgot
ICAgIHN0cnVjdCBpd19zdGF0aXN0aWNzIGl3X3N0YXRzOwotI2VuZGlmCi0JCi0Jc3RydWN0IG5l
dF9kZXZpY2Vfc3RhdHMgbmV0c3RhdHM7Ci0KLQkvLyBjb25maWd1cmF0aW9uCi0JVUNIQVIgICAg
ICAgICAgICAgICAgICAgUGVybWFuZW50QWRkcmVzc1tFVEhfTEVOR1RIX09GX0FERFJFU1NdOyAg
ICAvLyBGYWN0b3J5IGRlZmF1bHQgTUFDIGFkZHJlc3MKLQlVQ0hBUiAgICAgICAgICAgICAgICAg
ICBDdXJyZW50QWRkcmVzc1tFVEhfTEVOR1RIX09GX0FERFJFU1NdOyAgICAgIC8vIFVzZXIgY2hh
bmdlZCBNQUMgYWRkcmVzcwotCi0JVVNIT1JUCQkJRUVQUk9NRGVmYXVsdFZhbHVlW05VTV9FRVBS
T01fQkJQX1BBUk1TXTsKLQlVU0hPUlQJCQlFRVBST01CQlBUdW5pbmdQYXJhbWV0ZXJzW05VTV9F
RVBST01fQkJQX1RVTklOR19QQVJNU107Ci0KLSAgICAvLwotICAgIC8vIEhhbmRsZSBnaXZlbiBi
eSBORElTIHdoZW4gdGhlIEFkYXB0ZXIgcmVnaXN0ZXJlZCBpdHNlbGYuCi0gICAgLy8gVmFyaW91
cyBORElTIGhhbmRsZSBmdW5jdGlvbgotICAgIC8vCi0KLQlNR01UX1NUUlVDCQkJCU1nbXRSaW5n
W01HTVRfUklOR19TSVpFXTsJLy8gbWFuYWdlbWVudCByaW5nIHNpemUKLQkKLQlVQ0hBUgkJCQkJ
TmV4dFR4SW5kZXg7CQkJCQkvLyBOZXh0IFR4RCB3cml0ZSBwb2ludGVyCi0JVUNIQVIJCQkJCU5l
eHRNTE1FSW5kZXg7CQkJCS8vIE5leHQgUHJpb0Qgd3JpdGUgcG9pbnRlcgotCVVDSEFSCQkJCQlQ
dXNoTWdtdEluZGV4OwkJCQkvLyBOZXh0IFNXIG1hbmFnZW1lbnQgcmluZyBpbmRleAotCVVDSEFS
CQkJCQlQb3BNZ210SW5kZXg7CQkJCS8vIE5leHQgU1cgbWFuYWdlbWVudCByaW5nIGluZGV4Ci0J
YXRvbWljX3QJCQkJCU1nbXRRdWV1ZVNpemU7CQkJCS8vIE51bWJlciBvZiBNZ210IHJlcXVlc3Qg
c3RvcmVkIGluIE1nbXRSaW5nCi0JVUNIQVIJCQkJCU5leHRSeEJ1bGtJbkluZGV4OwotCVVDSEFS
CQkJCQlOZXh0QnVsa091dEluZGV4OwotCUJPT0xFQU4JCQkJCUJ1bGtPdXRQZW5kaW5nOwotCUJP
T0xFQU4JCQkJCUNvbnRyb2xQZW5kaW5nOwotCVVMT05HCQkJCQlQcmlvUmluZ1R4Q250OwotCVVD
SEFSCQkJCQlQcmlvUmluZ0ZpcnN0SW5kZXg7Ci0KLSAJLy8gODAyLjMgbXVsdGljYXN0IHN1cHBv
cnQKLQlVTE9ORwkJCQkJTnVtYmVyT2ZNY0FkZHJlc3NlczsJCS8vIE51bWJlciBvZiBtY2FzdCBl
bnRyeSBleGlzdHMKLQlVQ0hBUgkJCQkJTWNhc3RUYWJsZVtNQVhfTUNBU1RfTElTVF9TSVpFXVtF
VEhfTEVOR1RIX09GX0FERFJFU1NdOwkJLy8gTWNhc3QgbGlzdAotCVVMT05HICAgICAgICAgICAg
ICAgICAgIEZsYWdzOyAgICAgICAgICAgICAgICAgICAgICAvLyBSZXByZXNlbnQgY3VycmVudCBk
ZXZpY2Ugc3RhdHVzCi0KLQkvLyBGbGFncyBmb3IgYnVsayBvdXQgZGF0YSBwcmlvcml0eQotCVVM
T05HCQkJCQlCdWxrRmxhZ3M7Ci0JLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0JLy8gVHJhbnNtaXQg
UGF0aAotCS8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCWF0b21pY190CQkJCQkJCQlUeENvdW50OwkJ
Ly8gTnVtYmVyIG9mIEJ1bGtvdXQgd2FpdGluZyB0byBiZSBzZW5kLgotCVRYX0NPTlRFWFQJCQkJ
CQkJVHhDb250ZXh0W1RYX1JJTkdfU0laRV07Ci0JVFhfQ09OVEVYVAkJCQkJCQlNTE1FQ29udGV4
dFtQUklPX1JJTkdfU0laRV07Ci0JVFhfQ09OVEVYVAkJCQkJCQlCZWFjb25Db250ZXh0W0JFQUNP
Tl9SSU5HX1NJWkVdOwotCVRYX0NPTlRFWFQJCQkJCQkJTnVsbENvbnRleHQ7Ci0JVFhfQ09OVEVY
VAkJCQkJCQlQc1BvbGxDb250ZXh0OwotCVJUU19CVUZGRVIJCQkJCQkJUlRTQnVmZmVyOwotCi0J
V1BBUFNLX0NPTlRFWFQJCQkJCSAgICAgICBXcGFQc2tDb250ZXh0OwotCVBVQ0hBUgkJCQkJCQkJ
VHhCdWZmZXI7Ci0JVFhfQlVGRkVSICAgICAgICAgICAgICAgICAgICAgICAgICAgVHhNZ210QnVm
OwotCi0JLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0JLy8gUmVjZWl2ZSBQYXRoCi0JLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vCi0JUlhfQ09OVEVYVAkJCQkJCQlSeENvbnRleHRbUlhfUklOR19TSVpFXTsK
LQlQVVJCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwUnhVcmI7Ly9yZWQ6IHRlc3Qg
bW9kZSBvbmx5Ci0JUElSUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcFJ4SXJwOwot
CVBVQ0hBUgkJCQkJCQkJUnhCdWZmZXI7Ci0gICAgLy8gU0VORCBxdWV1ZSBsaXN0Ci0JUVVFVUVf
SEVBREVSICAgICAgICAgICAgU2VuZFR4V2FpdFF1ZXVlOwotCi0JVVNIT1JUCQkJCQlTZXF1ZW5j
ZTsJCQkJCS8vIEN1cnJlbnQgc2VxdWVuY2UgbnVtYmVyCi0KLQlUVVBMRV9DQUNIRQkJCQlUdXBs
ZUNhY2hlW01BWF9DTElFTlRdOwkJLy8gTWF4aW11bSBudW1iZXIgb2YgdHVwbGUgY2FjaGVzLCBv
bmx5IHVzZWZ1bCBpbiBBZC1Ib2MKLQlVQ0hBUiAgICAgICAgICAgICAgICAgICBUdXBsZUNhY2hl
TGFzdFVwZGF0ZUluZGV4OyAgLy8gMC4uTUFYX0NMSUVOVC0xCi0JRlJBR01FTlRfRlJBTUUJCQlG
cmFnRnJhbWU7CQkJCQkvLyBGcmFtZSBzdG9yYWdlIGZvciBmcmFnbWVudCBmcmFtZQotCQotCS8v
IEZvciBNaW5pcG9ydFRyYW5zZmVyRGF0YQotCVBVQ0hBUgkJCQkJcFJ4RGF0YTsJCQkJCS8vIFBv
aW50ZXIgdG8gY3VycmVudCBSeFJpbmcgb2Zmc2V0IC8gZnJhZ21lbnQgZnJhbWUgb2Zmc2V0Ci0J
Ci0JLy8gQ291bnRlcnMgZm9yIDgwMi4zICYgZ2VuZXJpYy4KLQkvLyBBZGQgODAyLjExIHNwZWNp
ZmljIGNvdW50ZXJzIGxhdGVyCi0JQ09VTlRFUl84MDJfMyAgICAgICAgICAgQ291bnRlcnM7ICAg
ICAgICAgICAgICAgICAgIC8vIDgwMi4zIGNvdW50ZXJzCi0JQ09VTlRFUl84MDJfMTEgICAgICAg
ICAgV2xhbkNvdW50ZXJzOwkJCQkvLyA4MDIuMTEgTUlCIGNvdW50ZXJzCi0JQ09VTlRFUl9SQUxJ
TksgICAgICAgICAgUmFsaW5rQ291bnRlcnM7CQkJCS8vIFJhbGluayBwcm9wcmlldHkgY291bnRl
cnMKLQlDT1VOVEVSX0RSUyAgICAgICAgICAgICBEcnNDb3VudGVyczsgICAgICAgICAgICAgICAg
Ly8gY291bnRlcnMgZm9yIER5bmFtaWMgUmF0ZSBTd2l0Y2hpbmcKLQlDT1VOVEVSX1FBCQkJCVFB
Q291bnRlcnM7CQkJCS8vIFJhbGluayBwcm9wcmlldHkgY291bnRlcnMKLQotCU5ESVNfTUVESUFf
U1RBVEUgICAgICAgIE1lZGlhU3RhdGU7Ci0JVUNIQVIgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgU3RhdGlvblN0YXRlOwotCi0JTkRJU19ERVZJQ0VfUE9XRVJfU1RBVEUgQ3VycmVudFBv
d2VyU3RhdGU7ICAgICAgICAgIC8vIEN1cnJlbnQgZGV2aWNlIHBvd2VyIHN0YXRlCi0JTkRJU19E
RVZJQ0VfUE9XRVJfU1RBVEUgTmV4dFBvd2VyU3RhdGU7ICAgICAgICAgICAgIC8vIE5leHQgZGV2
aWNlIHBvd2VyIHN0YXRlCi0KLQlQUklWQVRFX1NUUlVDCQkJUHJpdmF0ZUluZm87CQkJCS8vIFBy
aXZhdGUgaW5mb3JtYXRpb24gJiBjb3VudGVycwotCi0JLy8gU3BpbkxvY2tzCi0Jc3BpbmxvY2tf
dAkJCVNlbmRUeFdhaXRRdWV1ZUxvY2s7CQkvLyBTZW5kVHhXYWl0UXVldWUgc3BpbmxvY2sKLQlz
cGlubG9ja190CQkJTUxNRVdhaXRRdWV1ZUxvY2s7CQkvLyBTZW5kVHhXYWl0UXVldWUgc3Bpbmxv
Y2sKLQlzcGlubG9ja190CQkJQ21kUUxvY2s7CQkvLyBTZW5kVHhXYWl0UXVldWUgc3BpbmxvY2sK
LQlzcGlubG9ja190CQkJQnVsa091dExvY2s7CQkvLyBTZW5kVHhXYWl0UXVldWUgc3BpbmxvY2sK
LQlzcGlubG9ja190CQkJQ29udHJvbExvY2s7CQkvLyBTZW5kVHhXYWl0UXVldWUgc3BpbmxvY2sK
LQlzcGlubG9ja190CQkJTUxNRVFMb2NrOwkJLy8gU2VuZFR4V2FpdFF1ZXVlIHNwaW5sb2NrCi0J
c3BpbmxvY2tfdAkJCUdlbmVyaWNMb2NrOwkJLy8gU2VuZFR4V2FpdFF1ZXVlIHNwaW5sb2NrCi0J
c3BpbmxvY2tfdCAgICAgICAgICAgICAgICAgIE1lbUxvY2s7ICAgICAgICAgICAgLy8gbmVlZCB0
byBjaGVjawotCi0JLy8gUmVmZXJlbmNlIGNvdW50Ci0JTE9ORyAgICAgICAgICAgICAgICAgICAg
UmVmQ291bnQ7ICAgICAgICAgICAvLyBLZWVwIGFkYXB0ZXIgcmVmZXIgY291bnQgZm9yIGNoZWNr
Zm9yaGFuZyAmIGhhbHQKLQlVTE9ORyAgICAgICAgICAgICAgICAgICBTZW5kUmVmQ291bnQ7ICAg
ICAgIC8vIG51bWJlciBvZiBwYWNrZXQgdGhhdCBoYXZlIG5vdCBiZWVuIGNvbmZpcm1lZAotCVVM
T05HICAgICAgICAgICAgICAgICAgIFJjdlJlZkNvdW50OyAgICAgICAgLy8gbnVtYmVyIG9mIHBh
Y2tldHMgdGhhdCBoYXZlIG5vdCBiZWVuIHJldHVybmVkIGJhY2sKLQotCS8vIFZhcmlvdXMgTkRJ
UyBFdmVudAotCWludCAgICAgICAgICAgICAgRXhpdEV2ZW50OwotCQotCi0JTkRJU19NRURJQV9T
VEFURSAgICAgICAgICAgICAgICAgICAgTGlua0lzQWN0aXZlOwotCVVMT05HICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEN1cnJlbnRMb29rQWhlYWQ7Ci0JQ21kUQkJCQkJCQkJQ21kUTsK
LQlEQVRBX0JVTEtPVVRfUVVFVUUJCQkJCQkJCURhdGFROwotCU1MTUVfQlVMS09VVF9RVUVVRQkJ
CQkJCQkJTUxNRVE7Ci0KLQkvLyBCb29sZWFuIGNvbnRyb2wgZm9yIHBhY2tldCBmaWx0ZXIKLQlC
T09MRUFOCQkJCQliQWNjZXB0RGlyZWN0OwotCUJPT0xFQU4JCQkJCWJBY2NlcHRNdWx0aWNhc3Q7
Ci0JQk9PTEVBTgkJCQkJYkFjY2VwdEJyb2FkY2FzdDsKLQlCT09MRUFOCQkJCQliQWNjZXB0QWxs
TXVsdGljYXN0OwotCi0JLy8gQ29udHJvbCB0byBjaGVjayBUeCBoYW5nCi0JQk9PTEVBTgkJCQkJ
YlR4QnVzeTsKLQlQUVVFVUVfRU5UUlkJCQlGaXJzdEVudHJ5SW5RdWV1ZTsJCS8vIFRoZSBmaXJz
dCBwYWNrZXQgaW4gVHggcXVldWUKLQkKLQkvLyBDb250cm9sIGRpc2Nvbm5lY3QgLyBjb25uZWN0
IGV2ZW50IGdlbmVyYXRpb24KLQlVTE9ORwkJCQkJTGlua0Rvd25UaW1lOwotCVVDSEFSCQkJCQlM
YXN0U3NpZExlbjsgICAgICAgICAgICAgICAvLyB0aGUgYWN0dWFsIHNzaWQgbGVuZ3RoIGluIHVz
ZWQKLQlDSEFSCQkJCQlMYXN0U3NpZFtNQVhfTEVOX09GX1NTSURdOyAvLyBOT1QgTlVMTC10ZXJt
aW5hdGVkCi0JTUFDQUREUgkJCQkJTGFzdEJzc2lkOwotCUJPT0xFQU4JCQkJCWJDb25maWdDaGFu
Z2VkOwkJCQkvLyBDb25maWcgQ2hhbmdlIGZsYWcgZm9yIHRoZSBzYW1lIFNTSUQgc2V0dGluZwot
CQotCVBPUlRfQ09ORklHICAgICAgICAgICAgIFBvcnRDZmc7Ci0JTUxNRV9TVFJVQ1QgICAgICAg
ICAgICAgTWxtZTsKLQkvLy8vLy8vLy8vLy8vLy8vLy8vLy8KLQkvLyBVU0IKLQkvLy8vLy8vLy8v
Ly8vLy8vLy8vLy8KLQlVU0hPUlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdWxrT3V0
TWF4UGFja2V0U2l6ZTsgICAvLyA2NCBpbiBYUAotCVVTSE9SVCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEJ1bGtJbk1heFBhY2tldFNpemU7Ci0KLQkvLy8vLy8vLy8vLy8vLy8vLy8vLy8K
LQkvLyAgQ29udHJvbCBGbGFncwotCS8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCUxPTkcgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFBlbmRpbmdUeDsKLQlhdG9taWNfdCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgUGVuZGluZ1J4OwotCUxPTkcgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFBlbmRpbmdSZXNldDsKLQlMT05HICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBCdWxrT3V0RmFpbGVkOwotCUxPTkcgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEJ1bGtJbkZhaWxlZDsKLQlMT05HICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBE
ZXZpY2VGYWlsZWQ7Ci0JVUNIQVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGV2aWNl
TW9kZTsKLQlCT09MRUFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVbnBsdWdEZXZpY2U7
Ci0JYXRvbWljX3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRlcm1pbmF0ZVRocmVh
ZHM7Ci0JYXRvbWljX3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBlbmRpbmdJb0Nv
dW50OwotCUJPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJTU1NlbGVjdGVkOwot
CUJPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRpb25XYXNBc3NvY2lhdGVk
OwotCUJPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRpb25Jc0Fzc29jaWF0
ZWQ7Ci0JQk9PTEVBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGlvbklzQXV0aGVu
dGljYXRlZDsKLQlVQ0hBUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZXBMZXZlbDsK
LQlCT09MRUFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRPZlJhbmdlRGV0ZWN0ZWQ7
Ci0JQk9PTEVBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkcmVzc092ZXJyaWRlZDsK
LQlCT09MRUFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdXRvQXV0aGVudGljYXRpb247
Ci0JQk9PTEVBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXV0b1ByZWFtYmxlOwotCUJP
T0xFQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF1dG9Kb2luOwotCUJPT0xFQU4gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFVzZUludGVybmFsRldJbWFnZTsKLQlCT09MRUFOICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBBbnlBUDsKLQkKLQlQVk9JRAkJCQkJCQkJcEluZm9y
bWF0aW9uQnVmZmVyOwotCVVMT05HCQkJCQkJCQlJbmZvcm1hdGlvbkJ1ZmZlckxlbmd0aDsKLQlQ
VUxPTkcJCQkJCQkJCXBCeXRlc1dyaXR0ZW47Ci0JUFVMT05HCQkJCQkJCQlwQnl0ZXNOZWVkZWQ7
Ci0JQk9PTEVBTgkJCQkJCQkJU2VuZERlbGltaXRpbmdQYWNrZXQ7Ci0JVUxPTkcJCQkJCQkJCURl
bGltaXRpbmdQYWNrZXRTZW50OwotCVVJTlQJCQkJCQkJCUZyYWdtZW50c1NlbnQ7Ci0JVVNIT1JU
CQkJCQkJCQlCdWxrT3V0TGVuZ3RoOwotCVVTSE9SVAkJCQkJCQkJQnVsa091dFJlbWFpbmVkOwot
CUJPT0xFQU4JCQkJCQkJCUNvbnRpbkJ1bGtPdXQ7Ci0JVVNIT1JUCQkJCQkJCQlCdWxrSW5SZW1h
aW5lZDsKLQlCT09MRUFOCQkJCQkJCQlDb250aW5CdWxrSW47Ci0JQk9PTEVBTgkJCQkJCQkJQmVh
Y29uSW50ZXJ2YWxDaGFuZ2VBbGxvd2VkOwotCVVTSE9SVAkJCQkJCQkJU2VudEJlYWNvbnNDb3Vu
dDsKLQlVU0hPUlQJCQkJCQkJCVJlY2VpdmVkQmVhY29uc0NvdW50OwotCUxBUkdFX0lOVEVHRVIJ
CQkJCQlUcmFuc21pdHRlZEZyYWdtZW50Q291bnQ7Ci0jaWZkZWYgVEVTVF9NT0RFX1NVUFBPUlQK
LQlDbWRRRWxtdAkJCQkJCQlDbWRRRWxlbWVudHNbMTJdOwotI2Vsc2UKLQlDbWRRRWxtdAkJCQkJ
CQlDbWRRRWxlbWVudHNbQ09NTUFORF9RVUVVRV9TSVpFXTsKLSNlbmRpZgotCi0JVVNIT1JUCQkJ
CQkJCQlNQUNDb3VudGVyc1sxMV07Ci0JVFhfUkFURV9TV0lUQ0hJTkdfU1RSVUMJCQlUeFJhdGVT
d2l0Y2hpbmdTdHJ1Y1sxMl07Ci0JVUxPTkcJCQlDdXJyUmF0ZUdvb2RUaW1lOwotCVVDSEFSCQkJ
Q3VyclJhdGVCYWRUaW1lOwotCVVDSEFSCQkJVHhRdWFsaXR5OwotCUJCUF9UVU5JTkdfUEFSQU1F
VEVSU19TVFJVQwkJCUJCUFR1bmluZ1BhcmFtZXRlcnM7Ci0JVUxPTkcJCQkJCUxhc3RSeFJhdGU7
Ci0JVUxPTkcJCQkJCVBhY2tldHNTZW50QmV0d2VlblRCVFRzOwotCUJPT0xFQU4JCQkJCVNjYW5B
bGxvd2VkOwotCS8vIEFscGhhIGNhbid0IGxpbmsgdXAgcHJvYmxlbQotCVVMT05HCQkJCQlFeHRy
YUluZm87CQkJCS8vIEV4dHJhIGluZm9ybWF0aW9uIGZvciBkaXNwbGF5aW5nIHN0YXR1cwotCXN0
cnVjdCBuZXRfZGV2aWNlX3N0YXRzCW5ldF9kZXZpY2Vfc3RhdHM7CS8qIGludGVyZmFjZSBzdGF0
aXN0aWNzICovCi0JCi19ICAgUlQyNTcwQURBUFRFUiwgKlBSVDI1NzBBREFQVEVSOwotCi0KLQot
I2VuZGlmCi0KLQotCi0KLQotCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLwotLy8gIGlubGluZSBG
VU5DVElPTlMKLS8vCi0vLyAgIEluY3JlbWVudElvQ291bnQgYW5kIERlY3JlbWVudElvQ291bnQK
LS8vCi0vLyAgREVTQ1JJUFRJT04KLS8vCi0vLyAgIFdlIGtlZXAgYSBwZW5kaW5nIElPIGNvdW50
LiBUaGlzIGNvdW50IGlzIGluaXRpYWxpemVkIHRvIG9uZS4KLS8vICAgU3Vic2VxdWVudGx5LCB0
aGUgY291bnQgaXMgaW5jcmVtZW50ZWQgZm9yIGVhY2ggbmV3IElSUCByZWNlaXZlZCBvcgotLy8g
ICBjcmVhdGVkIGFuZCBpcyBkZWNyZW1lbnRlZCB3aGVuIGVhY2ggSVJQIGlzIGNvbXBsZXRlZC4K
LS8vICAgVHJhbnNpdGlvbiB0byAnb25lJyB0aGVyZWZvcmUgaW5kaWNhdGVzIG5vIElPIGlzIHBl
bmRpbmcgYW5kIHNpZ25hbHMKLS8vICAgQWRhcHRlci0+UmVtb3ZlRXZlbnQuIFRyYW5zaXRpb24g
dG8gJ3plcm8nIHNpZ25hbHMgYW4gZXZlbnQKLS8vICAgKEFkYXB0ZXItPlJlbW92ZUV2ZW50KSB0
byBlbmFibGUgZGV2aWNlIHJlbW92YWwuCi0vLwotLy8gIElOUFVUCi0vLwotLy8gICAgQWRhcHRl
ciAgICAgICAgICAgICAgICAgICAgICAgUHRyIHRvIHRoZSBhZGFwdGVyIG9iamVjdAotLy8KLS8v
ICBPVVRQVVQKLS8vCi0vLyAgICAtCi0vLwotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotaW5saW5lIFZP
SUQgSW5jcmVtZW50SW9Db3VudChQUlQyNTcwQURBUFRFUiBBZGFwdGVyKTsKLWlubGluZSBWT0lE
IERlY3JlbWVudElvQ291bnQoSU4gUFJUMjU3MEFEQVBURVIgcEFkYXB0ZXIpOwotCi0KLQotLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLwotLy8gX19pbmxpbmUgVk9JRCBFblFUeFBhY2tldChQUlQyNTcwQURB
UFRFUiBBZGFwdGVyLCBQTkRJU19QQUNLRVQgUGFja2V0KQotLy8gewotLy8gICAgIFBUWF9RVUVV
RSB0ZW1wVHhRbm9kZTsKLS8vCi0vLwotLy8gICAgIGlmIChBbGxvY2F0ZU1lbW9yeSgmdGVtcFR4
UW5vZGUsIHNpemVvZihUWF9RVUVVRSkpIT1ORElTX1NUQVRVU19TVUNDRVNTKQotLy8gICAgIHsK
LS8vICAgICAgICAgTmRpc01TZW5kQ29tcGxldGUoQWRhcHRlci0+QWRhcHRlckhhbmRsZSwgUGFj
a2V0LCBORElTX1NUQVRVU19TVUNDRVNTKTsKLS8vICAgICAgICAgcmV0dXJuOwotLy8gICAgIH0K
LS8vCi0vLyAgICAgdGVtcFR4UW5vZGUtPnBOZGlzUGFja2V0ID0gUGFja2V0OwotLy8gICAgIHRl
bXBUeFFub2RlLT5uZXh0ID0gTlVMTDsKLS8vCi0vLyAgICAgaWYgKEFkYXB0ZXItPlR4UUhlYWQ9
PU5VTEwpCi0vLyAgICAgewotLy8gICAgICAgICBBZGFwdGVyLT5UeFFIZWFkID0gdGVtcFR4UW5v
ZGU7Ci0vLyAgICAgfQotLy8KLS8vICAgICBpZiAoQWRhcHRlci0+VHhRVGFpbCE9TlVMTCkKLS8v
ICAgICB7Ci0vLyAgICAgICAgIEFkYXB0ZXItPlR4UVRhaWwtPm5leHQgPSB0ZW1wVHhRbm9kZTsK
LS8vICAgICB9Ci0vLwotLy8gICAgIEFkYXB0ZXItPlR4UVRhaWwgPSB0ZW1wVHhRbm9kZTsKLS8v
IH0KLQotCi0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vIF9faW5saW5lIFZPSUQgRGVRVHhQYWNr
ZXQoUFJUMjU3MEFEQVBURVIgQWRhcHRlcikKLS8vIHsKLS8vICAgICBQVFhfUVVFVUUgdGVtcFR4
UW5vZGU7Ci0vLwotLy8gICAgIHRlbXBUeFFub2RlID0gQWRhcHRlci0+VHhRSGVhZDsKLS8vICAg
ICBBZGFwdGVyLT5UeFFIZWFkID0gdGVtcFR4UW5vZGUtPm5leHQ7Ci0vLwotLy8gICAgIGlmIChB
ZGFwdGVyLT5UeFFIZWFkPT1OVUxMKQotLy8gICAgIHsKLS8vICAgICAgICAgQWRhcHRlci0+VHhR
VGFpbD1OVUxMOwotLy8gICAgIH0KLS8vCi0vLyAgICAgRnJlZU1lbW9yeSh0ZW1wVHhRbm9kZSwg
c2l6ZW9mKFRYX1FVRVVFKSk7Ci0vLyB9Ci0KLQotCi0jZGVmaW5lIERFVklDRV9WRU5ET1JfUkVR
VUVTVF9PVVQgICAgICAgKFVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQ
X0RFVklDRSkgLy8gMHg0MAotI2RlZmluZSBERVZJQ0VfVkVORE9SX1JFUVVFU1RfSU4gICAgICAg
IChVU0JfRElSX0lOIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSApICAvLzB4
YzAKLSNkZWZpbmUgSU5URVJGQUNFX1ZFTkRPUl9SRVFVRVNUX09VVCAgICAweDQxCi0jZGVmaW5l
IElOVEVSRkFDRV9WRU5ET1JfUkVRVUVTVF9JTiAgICAgMHhjMQotI2RlZmluZQlQTF9SRVNFVF9J
TgkoMTw8MykJCS8qIHJlc2V0IGlucHV0IHBpcGUgKi8KLQotLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwot
Ly8gTWlzYyBkZWZpbml0aW9ucwotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotI2RlZmluZSBPU19JU19X
SU5fMjAwMCAgICAgICAgICAgICAgMCAgIAotI2RlZmluZSBPU19JU19XSU5fTUUgICAgICAgICAg
ICAgICAgMQotI2RlZmluZSBPU19JU19XSU5fOTggICAgICAgICAgICAgICAgMgotI2RlZmluZSBP
U19JU19XSU5fWFAgICAgICAgICAgICAgICAgMwotCi0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8v
IFN0YXRpb24gU3RhdGVzIGRlZmluaXRpb25zCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0jZGVmaW5l
IFNUQVRJT05fU1RBVEVfSU5JVElBTElaSU5HICAgICAgICAgIDB4MDAKLSNkZWZpbmUgU1RBVElP
Tl9TVEFURV9TQ0FOTklORyAgICAgICAgICAgICAgMHgwMQotI2RlZmluZSBTVEFUSU9OX1NUQVRF
X0pPSU5OSU5HICAgICAgICAgICAgICAweDAyCi0jZGVmaW5lIFNUQVRJT05fU1RBVEVfQVVUSEVO
VElDQVRJTkcgICAgICAgIDB4MDMKLSNkZWZpbmUgU1RBVElPTl9TVEFURV9BU1NPQ0lBVElORyAg
ICAgICAgICAgMHgwNAotI2RlZmluZSBTVEFUSU9OX1NUQVRFX1JFQURZICAgICAgICAgICAgICAg
ICAweDA1Ci0jZGVmaW5lIFNUQVRJT05fU1RBVEVfT1VUX09GX1JBTkdFICAgICAgICAgIDB4MDYK
LSNkZWZpbmUgU1RBVElPTl9TVEFURV9ESVNBU1NPQ0lBVElORyAgICAgICAgMHgwNwotI2RlZmlu
ZSBTVEFUSU9OX1NUQVRFX0RJQVVUSEVOVElDQVRJTkcgICAgICAweDA4Ci0jZGVmaW5lIFNUQVRJ
T05fU1RBVEVfUkVBU1NPQ0lBVElORyAgICAgICAgIDB4MDkKLSNkZWZpbmUgU1RBVElPTl9TVEFU
RV9GT1JDRURfSk9JTk5JTkcgICAgICAgMHgwYQotI2RlZmluZSBTVEFUSU9OX1NUQVRFX1JFQ09O
RklHVVJJTkcgICAgICAgICAweDBiCi0jZGVmaW5lIFNUQVRJT05fU1RBVEVfRldfVVBHUkFERSAg
ICAgICAgICAgIDB4MGMKLSNkZWZpbmUgU1RBVElPTl9TVEFURV9GT1JDRURfSk9JTl9GQUlMVVJF
ICAgMHgwZCAKLSNkZWZpbmUgU1RBVElPTl9TVEFURV9SRVNFVFRJTkcgICAgICAgICAgICAgMHgw
ZSAKLSNkZWZpbmUgU1RBVElPTl9TVEFURV9SRVNFVF9QRU5ESU5HICAgICAgICAgMHgwZiAKLSNk
ZWZpbmUgU1RBVElPTl9TVEFURV9OT1RfTkVUX01PREUgICAgICAgICAgMHgxMAotI2RlZmluZSBT
VEFUSU9OX1NUQVRFX1dBSVRfQUNUSU9OICAgICAgICAgICAweDExIC8vdW5kZXIgWFAgd2UgbmVl
ZCB0aGlzIHN0YXRlIHRvIGFsbG93IFhQIHRvIHRha2UgY29udHJvbAotI2RlZmluZSBTVEFUSU9O
X1NUQVRFX1JFSkVDVElOR19QQUNLRVRTICAgICAweDk5IAotI2RlZmluZSBTVEFUSU9OX1NUQVRF
X05PX0NBUkQgICAgICAgICAgICAgICAweGYwIAotI2RlZmluZSBTVEFUSU9OX1NUQVRFX01HTVRf
RVJST1IgICAgICAgICAgICAweGYxIAotI2RlZmluZSBTVEFUSU9OX1NUQVRFX0dFTkVSQUxfRVJS
T1IgICAgICAgICAweGYyIAotI2RlZmluZSBTVEFUSU9OX1NUQVRFX1BPV0VSX0RPV04gICAgICAg
ICAgICAweGZmCi0KLQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8gU0NBTiBUeXBlIERlZmluaXRp
b25zCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0jZGVmaW5lIFNDQU5fVFlQRV9BQ1RJVkUgICAgICAg
ICAgICAgICAgICAgIDAKLSNkZWZpbmUgU0NBTl9UWVBFX1BBU1NJVkUgICAgICAgICAgICAgICAg
ICAgMQotCi0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vIE9wZXJhdGluZyBNb2RlcyBkZWZpbml0
aW9ucwotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotI2RlZmluZSBCU1NfVFlQRV9BRF9IT0MgICAgICAg
ICAgICAgICAgICAgICAxCi0jZGVmaW5lIEJTU19UWVBFX0lORlJBU1RSVUNUVVJFICAgICAgICAg
ICAgIDIKLQotLy8KLS8vICBNaW5pcG9ydCByb3V0aW5lcyBpbiBydG1wX21haW4uYwotLy8KLQot
Ci1WT0lECVJUVVNCSGFsdCgJSU4JUFJUMjU3MEFEQVBURVIJcEFkYXB0ZXIsIEJPT0xFQU4gSXNG
cmVlKTsKLQotCi0vLwotLy8gIFByaXZhdGUgcm91dGluZXMgaW4gcnRtcF9pbml0LmMKLS8vCi0K
LVBVQ0hBUiAgUlRNUEZpbmRTZWN0aW9uKAotICAgIElOICBQQ0hBUiAgIGJ1ZmZlciwKLSAgICBJ
TiAgUENIQVIgICBzZWN0aW9uKTsKLQotSU5UIFJUTVBJc0ZpbmRTZWN0aW9uKAotICAgIElOICBQ
VUNIQVIgIHB0ciwKLSAgICBJTiAgUFVDSEFSICBidWZmZXIpOwotCi0KLUlOVCBSVE1QR2V0S2V5
UGFyYW1ldGVyKAotICAgIElOICBQVUNIQVIgIHNlY3Rpb24sCi0gICAgSU4gIFBDSEFSICAga2V5
LAotICAgIE9VVCBQQ0hBUiAgIGRlc3QsICAgCi0gICAgSU4gIElOVCAgICAgZGVzdHNpemUsCi0g
ICAgSU4gIFBDSEFSICAgYnVmZmVyKTsKLVZPSUQgUlRNUFJlYWRQYXJhbWV0ZXJzRnJvbUZpbGUo
Ci0JSU4JUFJUMjU3MEFEQVBURVIgcEFkYXB0ZXIpOwotCi0KLQotVk9JRAlOSUNSZWFkRUVQUk9N
UGFyYW1ldGVycygKLSAgICBJTiAgUFJUMjU3MEFEQVBURVIgICAgICAgcEFkYXB0ZXIpOwotCi1W
T0lECU5JQ0luaXRBc2ljRnJvbUVFUFJPTSgKLQlJTiAgUFJUMjU3MEFEQVBURVIgICAgICAgcEFk
YXB0ZXIpOwotCi0KLU5ESVNfU1RBVFVTIE5JQ0luaXRSZWN2KAotICAgIElOICBQUlQyNTcwQURB
UFRFUiAgIHBBZGFwdGVyKTsKLQotI2lmIDAKLU5ESVNfU1RBVFVTCU5JQ1JlYWRBZGFwdGVySW5m
bygKLQlJTglQUlQyNTcwQURBUFRFUgkJcEFkYXB0ZXIpOwotCi0KLVZPSUQJTklDSW5pdGlhbGl6
ZUFkYXB0ZXIoCi0gICAgSU4gIFBSVDI1NzBBREFQVEVSICAgcEFkYXB0ZXIpOwotI2VuZGlmLy9i
bHVlCi0KLVZPSUQJUlQyNTcwSW5pdGlhbGl6ZUFzaWMoCi0JSU4JUFJUMjU3MEFEQVBURVIJcEFk
YXB0ZXIpOwotCi1WT0lECU5JQ0lzc3VlUmVzZXQoCi0JSU4JUFJUMjU3MEFEQVBURVIJcEFkYXB0
ZXIpOwotCi0jaWYgMAotVk9JRAlSVE1QUmluZ0NsZWFuVXAoCi0JSU4JUFJUMjU3MEFEQVBURVIJ
cEFkYXB0ZXIsCi0JSU4JVUNIQVIJCQlSaW5nVHlwZSk7Ci0jZW5kaWYKLQotVk9JRAlSeFRlc3Qo
Ci0JSU4JUFJUMjU3MEFEQVBURVIJcEFkYXB0ZXIpOwotCi0vLwotI2lmIDAKLU5ESVNfU1RBVFVT
CURiZ1NlbmRQYWNrZXQoCi0JSU4JUFJUMjU3MEFEQVBURVIJcEFkYXB0ZXIsCi0JSU4JUE5ESVNf
UEFDS0VUCXBQYWNrZXQpOwotI2VuZGlmCi0KLVZPSUQJUG9ydENmZ0luaXQoCi0JSU4JUFJUMjU3
MEFEQVBURVIJcEFkYXB0ZXIpOwotCi1WT0lECU5JQ1Jlc2V0RnJvbUVycm9yKAotCUlOCVBSVDI1
NzBBREFQVEVSCXBBZGFwdGVyKTsKLQotQk9PTEVBTglOSUNDaGVja0ZvckhhbmcoCi0JSU4JUFJU
MjU3MEFEQVBURVIJcEFkYXB0ZXIpOwotCi1WT0lEIENyZWF0ZVRocmVhZHMoIHN0cnVjdCBuZXRf
ZGV2aWNlICpuZXRfZGV2KTsKLQotI2lmIDAKLU5ESVNfU1RBVFVTCVJUMjU3MFJlYWRIV01BQ0Fk
ZHJlc3MoCi0JSU4JUFJUMjU3MEFEQVBURVIJCXBBZGFwdGVyKTsKLSNlbmRpZgotTkRJU19TVEFU
VVMJUlRVU0JXcml0ZUhXTUFDQWRkcmVzcygKLQlJTglQUlQyNTcwQURBUFRFUgkJcEFkYXB0ZXIp
OwotCi12b2lkIEF0b0goY2hhciAqIHNyYywgVUNIQVIgKiBkZXN0LCBpbnQgZGVzdGxlbik7Ci1V
Q0hBUiBCdG9IKGNoYXIgY2gpOwotCi1WT0lECVJUTVBJbml0VGltZXIoCi0JSU4JUFJUMjU3MEFE
QVBURVIJCQlwQWRhcHRlciwKLQlJTglQUkFMSU5LX1RJTUVSX1NUUlVDVAlwVGltZXIsCi0JSU4J
UFZPSUQJCQkJCXBUaW1lckZ1bmMpOwotCi1WT0lECVJUTVBTZXRUaW1lcigKLQlJTglQUlQyNTcw
QURBUFRFUgkJCXBBZGFwdGVyLAkKLQlJTglQUkFMSU5LX1RJTUVSX1NUUlVDVAlwVGltZXIsCi0J
SU4JVUxPTkcJCQkJCVZhbHVlKTsKLQotVk9JRAlSVE1QQ2FuY2VsVGltZXIoCi0JSU4JUFJBTElO
S19USU1FUl9TVFJVQ1QJcFRpbWVyKTsKLQotCi0vLwotLy8gUHJpdmF0ZSByb3V0aW5lcyBpbiBy
dG1wX2RhdGEuYwotLy8KLSNpZiAwCi1WT0lECVJUTVBIYW5kbGVSeERvbmVJbnRlcnJ1cHQoCi0J
SU4JUFJUMjU3MEFEQVBURVIJcEFkYXB0ZXIpOwotCi1WT0lECVJUTVBIYW5kbGVUeFJpbmdUeERv
bmVJbnRlcnJ1cHQoCi0JSU4JUFJUMjU3MEFEQVBURVIJcEFkYXB0ZXIpOwotCi1WT0lECVJUTVBI
YW5kbGVQcmlvUmluZ1R4RG9uZUludGVycnVwdCgKLQlJTglQUlQyNTcwQURBUFRFUglwQWRhcHRl
cik7Ci0KLVZPSUQJUlRNUEhhbmRsZUF0aW1SaW5nVHhEb25lSW50ZXJydXB0KAotCUlOCVBSVDI1
NzBBREFQVEVSCXBBZGFwdGVyKTsKLQotVk9JRAlSVE1QSGFuZGxlVGJjbkludGVycnVwdCgKLQlJ
TglQUlQyNTcwQURBUFRFUglwQWRhcHRlcik7Ci0KLVZPSUQJUlRNUEhhbmRsZVR3YWtldXBJbnRl
cnJ1cHQoCi0JSU4JUFJUMjU3MEFEQVBURVIJcEFkYXB0ZXIpOwotCi1WT0lECVJUTVBIYXJkVHJh
bnNtaXREb25lKAotCUlOCVBSVDI1NzBBREFQVEVSCXBBZGFwdGVyLAotCUlOCVBUWERfU1RSVUMJ
CXBUeEQsCi0JSU4JVUNIQVIJCQlGcmFtZVR5cGUpOwotCi1ORElTX1NUQVRVUwlSVE1QU2VuZFBh
Y2tldCgKLQlJTglQUlQyNTcwQURBUFRFUglwQWRhcHRlciwKLQlJTglQTkRJU19QQUNLRVQJcFBh
Y2tldCk7Ci0JCi1WT0lECVJUTVBEZVF1ZXVlUGFja2V0KAotICAgIElOCVBSVDI1NzBBREFQVEVS
CXBBZGFwdGVyLAotICAgIElOCVBRVUVVRV9IRUFERVIJcFF1ZXVlKTsKLQotTkRJU19TVEFUVVMJ
UlRNUEhhcmRUcmFuc21pdCgKLQlJTglQUlQyNTcwQURBUFRFUglwQWRhcHRlciwKLQlJTglQTkRJ
U19QQUNLRVQJcFBhY2tldCwKLQlJTglVQ0hBUgkJCU51bWJlclJlcXVpcmVkKTsKLQotTkRJU19T
VEFUVVMJUlRNUEZyZWVEZXNjcmlwdG9yUmVxdWVzdCgKLQlJTgkJUFJUMjU3MEFEQVBURVIJcEFk
YXB0ZXIsCi0JSU4JCVVDSEFSCQkJUmluZ1R5cGUsCi0JSU4JCVVDSEFSCQkJTnVtYmVyUmVxdWly
ZWQpOwotI2VuZGlmLy9yZWQKLQotCi1WT0lECU1sbWVIYXJkVHJhbnNtaXQoCi0JSU4JUFJUMjU3
MEFEQVBURVIJcEFkYXB0ZXIsCi0JSU4JUE1HTVRfU1RSVUMJCXBNZ210KTsKLQotVk9JRAotQnVs
a091dE1MTUVQYWNrZXQKLSgKLSBQUlQyNTcwQURBUFRFUglwQWRhcHRlciwKLSBVQ0hBUglJbmRl
eCk7Ci0KLQotdm9pZCBCdWxrT3V0TUxNRVBhY2tldENvbXBsZXRlKHB1cmJiX3QgcHVyYixzdHJ1
Y3QgcHRfcmVncyAqcHRfcmVncyk7Ci0KLVVTSE9SVAlSVE1QQ2FsY0R1cmF0aW9uKAotCUlOCVBS
VDI1NzBBREFQVEVSCXBBZGFwdGVyLAotCUlOCVVDSEFSCQkJUmF0ZSwKLQlJTglVTE9ORwkJCVNp
emUpOwotCi0KLVZPSUQJUlRNUFdyaXRlQmVhY29uRGVzY3JpcHRvcigKLQlJTglQVFhEX1NUUlVD
CXBUeEQsCi0JSU4JVUlOVAkJTGVuZ3RoLAotCUlOCVVJTlQJCVBMQ1BMZW5ndGgsCi0JSU4JVUlO
VAkJUmF0ZSwKLQlJTglVQ0hBUgkJU2VydmljZSwKLQlJTiAgVVNIT1JUICAgICAgVHhQcmVhbWJs
ZSk7Ci0KLQotVk9JRCAgICBSVFVTQlN1c3BlbmRNc2R1VHJhbnNtaXNzaW9uKAotICAgCUlOCVBS
VDI1NzBBREFQVEVSCXBBZGFwdGVyKTsKLQotVk9JRCAgICBSVFVTQlJlc3VtZU1zZHVUcmFuc21p
c3Npb24oCi0gICAJSU4JUFJUMjU3MEFEQVBURVIJcEFkYXB0ZXIpOwotCi1WT0lECi1EZXF1ZXVl
TUxNRVBhY2tldCgKLQlJTglQUlQyNTcwQURBUFRFUglwQWRhcHRlcik7Ci0KLQotVk9JRAotTWlu
aXBvcnRNTVJlcXVlc3QoCi0JSU4JUFJUMjU3MEFEQVBURVIJcEFkYXB0ZXIsCi0JSU4JUFZPSUQJ
CQlwQnVmZmVyLAotCUlOCVVMT05HCQkJTGVuZ3RoKTsKLQotQk9PTEVBTglSVE1QU2VhcmNoVHVw
bGVDYWNoZSgKLQlJTglQUlQyNTcwQURBUFRFUglwQWRhcHRlciwKLQlJTglQSEVBREVSXzgwMl8x
MQlwSGVhZGVyKTsKLQotVk9JRAlSVE1QVXBkYXRlVHVwbGVDYWNoZSgKLQlJTglQUlQyNTcwQURB
UFRFUglwQWRhcHRlciwKLQlJTglQSEVBREVSXzgwMl8xMQlwSGVhZGVyKTsKLQotTkRJU19TVEFU
VVMJUlRNUEFwcGx5UGFja2V0RmlsdGVyKAotCUlOCVBSVDI1NzBBREFQVEVSCXBBZGFwdGVyLCAK
LQlJTglQUlhEX1NUUlVDCQlwUnhELCAKLQlJTglQSEVBREVSXzgwMl8xMQlwSGVhZGVyKTsKLQot
TkRJU19TVEFUVVMJUlRNUENoZWNrUnhEZXNjcmlwdG9yKAotCUlOCVBSVDI1NzBBREFQVEVSCXBB
ZGFwdGVyLAotCUlOCVBSWERfU1RSVUMJcFJ4RCk7Ci0KLVZPSUQJUlRNUFJlcG9ydE1pY0Vycm9y
KAotCUlOCVBSVDI1NzBBREFQVEVSCXBBZGFwdGVyLCAKLQlJTglQV1BBX0tFWQkJcFdwYUtleSk7
Ci0KLVZPSUQJUlRVU0JNbG1lSGFyZFRyYW5zbWl0KAotCUlOCVBSVDI1NzBBREFQVEVSCXBBZGFw
dGVyLAotCUlOCVBNR01UX1NUUlVDCQlwTWdtdCk7Ci0KLQotLy8KLS8vIFByaXZhdGUgcm91dGlu
ZXMgaW4gcnRtcF93ZXAuYwotLy8KLVZPSUQJUlRNUEluaXRXZXBFbmdpbmUoCi0JSU4JUFJUMjU3
MEFEQVBURVIJcEFkYXB0ZXIsCQotCUlOCVBVQ0hBUgkJCXBLZXksCi0JSU4JVUNIQVIJCQlLZXlJ
ZCwKLQlJTglVQ0hBUgkJCUtleUxlbiwgCi0JSU4JUFVDSEFSCQkJcERlc3QpOwotCi1WT0lECVJU
TVBFbmNyeXB0RGF0YSgKLQlJTglQUlQyNTcwQURBUFRFUglwQWRhcHRlciwJCi0JSU4JUFVDSEFS
CQkJcFNyYywKLQlJTglQVUNIQVIJCQlwRGVzdCwKLQlJTglVSU5UCQkJTGVuKTsKLQotQk9PTEVB
TglSVE1QRGVjcnlwdERhdGEoCi0JSU4JUFJUMjU3MEFEQVBURVIJcEFkYXB0ZXIsCi0JSU4JUFVD
SEFSCXBTcmMsCi0JSU4JVUlOVAlMZW4pOwotCi1WT0lECVJUTVBTZXRJQ1YoCi0JSU4JUFJUMjU3
MEFEQVBURVIJcEFkYXB0ZXIsCi0JSU4JUFVDSEFSCQkJcERlc3QpOwotCi1WT0lECUFSQ0ZPVVJf
SU5JVCgKLQlJTglQQVJDRk9VUkNPTlRFWFQJQ3R4LAotCUlOCVBVQ0hBUgkJCXBLZXksCi0JSU4J
VUlOVAkJCUtleUxlbik7Ci0KLVVDSEFSCUFSQ0ZPVVJfQllURSgKLQlJTglQQVJDRk9VUkNPTlRF
WFQJCUN0eCk7Ci0KLVZPSUQJQVJDRk9VUl9ERUNSWVBUKAotCUlOCVBBUkNGT1VSQ09OVEVYVAlD
dHgsCi0JSU4JUFVDSEFSCQkJcERlc3QsIAotCUlOCVBVQ0hBUgkJCXBTcmMsCi0JSU4JVUlOVAkJ
CUxlbik7Ci0KLVZPSUQJQVJDRk9VUl9FTkNSWVBUKAotCUlOCVBBUkNGT1VSQ09OVEVYVAlDdHgs
Ci0JSU4JUFVDSEFSCQkJcERlc3QsCi0JSU4JUFVDSEFSCQkJcFNyYywKLQlJTglVSU5UCQkJTGVu
KTsKLQotVUxPTkcJUlRNUF9DQUxDX0ZDUzMyKAotCUlOCVVMT05HCUZjcywKLQlJTglQVUNIQVIJ
Q3AsCi0JSU4JSU5UCQlMZW4pOwotCi0vLwotLy8gTUxNRSByb3V0aW5lcwotLy8KLS8vVk9JRCAg
ICBBcmM0SW5pdChBUkM0X0NPTlRFWFQgKkN0eCwgVUNIQVIgKktleSwgVUxPTkcgS2V5TGVuKTsK
LS8vVUNIQVIgICBBcmM0Qnl0ZShBUkM0X0NPTlRFWFQgKkN0eCk7Ci0vL1ZPSUQgICAgQXJjNENp
cGhlcihBUkM0X0NPTlRFWFQgKkN0eCwgVUNIQVIgKkRlc3QsIFVDSEFSICpTcmMsIFVMT05HIExl
bik7Ci0KLS8vIEFzaWMvUkYvQkJQIHJlbGF0ZWQgZnVuY3Rpb25zCi0KLVZPSUQgQXNpY0FkanVz
dFR4UG93ZXIoCi0gICAgSU4gUFJUMjU3MEFEQVBURVIgcEFkKTsKLSAgICAKLVZPSUQgICAgQXNp
Y1N3aXRjaENoYW5uZWwoCi0gICAgSU4JUFJUMjU3MEFEQVBURVIJcEFkYXB0ZXIsIAotICAgIFVD
SEFSIENoYW5uZWwpOwotCi1WT0lEICAgIEFzaWNMb2NrQ2hhbm5lbCgKLSAgICBJTiBQUlQyNTcw
QURBUFRFUiBwQWQsIAotICAgIElOIFVMT05HIENoYW5uZWwpIDsKLQotI2lmIDAKLVZPSUQgQXNp
Y1JmVHVuaW5nRXhlYygKLSAgICBJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzEsIAotICAgIElOIFBW
T0lEIEZ1bmN0aW9uQ29udGV4dCwgCi0gICAgSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMyLCAKLSAg
ICBJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzMpOwotI2VuZGlmCi0KLSNpZmRlZiBSQUxJTktfQVRF
Ci1WT0lEICAgIEFzaWNTd2l0Y2hDaGFubmVsX0FURSgKLSAgICBJTglQUlQyNTcwQURBUFRFUglw
QWRhcHRlciwgCi0gICAgVUxPTkcgQ2hhbm5lbCk7Ci0jZW5kaWYKLQotVk9JRCAgICBBc2ljU2xl
ZXBUaGVuQXV0b1dha2V1cCgKLSAgICBJTglQUlQyNTcwQURBUFRFUglwQWRhcHRlciwgCi0gICAg
SU4gIFVTSE9SVCBUYnR0TnVtVG9OZXh0V2FrZVVwKTsKLQotVk9JRCAgICBBc2ljRm9yY2VTbGVl
cCgKLSAgICBJTiBQUlQyNTcwQURBUFRFUiBwQWRhcHRlcik7Ci0KLVZPSUQgICAgQXNpY0ZvcmNl
V2FrZXVwKAotICAgIElOIFBSVDI1NzBBREFQVEVSIHBBZGFwdGVyKTsKLQotVk9JRCAgICBBc2lj
U2V0QnNzaWQoCi0gICAgSU4JUFJUMjU3MEFEQVBURVIJcEFkYXB0ZXIsIAotICAgIElOICBNQUNB
RERSICpCc3NpZCk7Ci0KLVZPSUQgICAgQXNpY0Rpc2FibGVTeW5jKAotICAgIElOCVBSVDI1NzBB
REFQVEVSCXBBZGFwdGVyKTsKLQotVk9JRCAgICBBc2ljRW5hYmxlQnNzU3luYygKLSAgICBJTglQ
UlQyNTcwQURBUFRFUglwQWRhcHRlcik7Ci0KLVZPSUQgICAgQXNpY0VuYWJsZUlic3NTeW5jKAot
ICAgIElOCVBSVDI1NzBBREFQVEVSCXBBZGFwdGVyKTsKLQotVk9JRCAgICBBc2ljTGVkUGVyaW9k
aWNFeGVjKAotICAgIElOIHVuc2lnbmVkIGxvbmcgZGF0YSk7Ci0KLVZPSUQgQXNpY1NldFNsb3RU
aW1lKAotICAgIElOIFBSVDI1NzBBREFQVEVSIHBBZCwKLSAgICBJTiBCT09MRUFOIFVzZVNob3J0
U2xvdFRpbWUpOwotCi0vL2JsdWUKLVZPSUQgQXNpY0JicFR1bmluZygKLSAgICBJTiBQUlQyNTcw
QURBUFRFUiBwQWQpOwotCi1WT0lEIEFzaWNSZXN0b3JlQmJwU2Vuc2liaWxpdHkoCi0gICAgSU4g
UFJUMjU3MEFEQVBURVIgcEFkKTsKLQotCi1WT0lEICAgIE1hY0FkZHJSYW5kb21Cc3NpZCgKLSAg
ICBJTglQUlQyNTcwQURBUFRFUglwQWRhcHRlciwgCi0gICAgT1VUIFBNQUNBRERSIEFkZHIpOwot
Ci1WT0lEICAgIE1ndE1hY0hlYWRlckluaXQoCi0gICAgSU4JUFJUMjU3MEFEQVBURVIJcEFkYXB0
ZXIsIAotICAgIElOIE9VVCBQTUFDSERSIEhkciwgCi0gICAgSU4gVUNIQVIgU3VidHlwZSwgCi0g
ICAgSU4gVUNIQVIgVG9EcywgCi0vLyAgSU4gVUNIQVIgQWRkclR5cGUsIAotICAgIElOIFBNQUNB
RERSIERzLCAKLSAgICBJTiBQTUFDQUREUiBCc3NpZCk7Ci0KLVZPSUQgTWxtZVJhZGlvT2ZmKAot
ICAgIElOIFBSVDI1NzBBREFQVEVSIHBBZCk7Ci0KLVZPSUQgTWxtZVJhZGlvT24oCi0gICAgSU4g
UFJUMjU3MEFEQVBURVIgcEFkKTsKLQotVk9JRCAgQnNzVGFibGVJbml0KAotICAgIElOIEJTU19U
QUJMRSAqVGFiKTsKLQotVUxPTkcgQnNzVGFibGVTZWFyY2goCi0gICAgSU4gQlNTX1RBQkxFICpU
YWIsIAotICAgIElOIFBNQUNBRERSIEJzc2lkKTsKLQotVk9JRCBCc3NUYWJsZURlbGV0ZUVudHJ5
KAotICAgIElOIE9VVAlCU1NfVEFCTEUgKlRhYiwgCi0gICAgSU4JCVBNQUNBRERSIEJzc2lkKTsK
LQotVk9JRCAgQnNzRW50cnlTZXQoCi0gICAgSU4JUFJUMjU3MEFEQVBURVIJcEFkYXB0ZXIsIAot
ICAgIE9VVCBCU1NfRU5UUlkgKkJzcywgCi0gICAgSU4gTUFDQUREUiAqQnNzaWQsIAotICAgIElO
IENIQVIgU3NpZFtdLCAKLSAgICBJTiBVQ0hBUiBTc2lkTGVuLCAKLSAgICBJTiBVQ0hBUiBCc3NU
eXBlLCAKLSAgICBJTiBVU0hPUlQgQmVhY29uUGVyaW9kLAotICAgIElOIEJPT0xFQU4gQ2ZFeGlz
dCwgCi0gICAgSU4gQ0ZfUEFSTSAqQ2ZQYXJtLCAKLSAgICBJTiBVU0hPUlQgQXRpbVdpbiwgCi0g
ICAgSU4gVVNIT1JUIENhcGFiaWxpdHlJbmZvLCAKLSAgICBJTiBVQ0hBUiBSYXRlc1tdLCAKLSAg
ICBJTiBVQ0hBUiBSYXRlc0xlbiwKLSAgICBJTiBCT09MRUFOIEV4dGVuZGVkUmF0ZUllRXhpc3Qs
Ci0gICAgSU4gVUNIQVIgQ2hhbm5lbCwKLSAgICBJTiBVQ0hBUiBSc3NpLAotICAgIElOIExBUkdF
X0lOVEVHRVIgVGltZVN0YW1wLAotICAgIElOIFVDSEFSIExlbmd0aFZJRSwKLSAgICBJTiBQTkRJ
U184MDJfMTFfVkFSSUFCTEVfSUVzIHBWSUUpOwotCi1VTE9ORyAgQnNzVGFibGVTZXRFbnRyeSgK
LSAgICBJTglQUlQyNTcwQURBUFRFUglwQWRhcHRlciwgCi0gICAgT1VUIEJTU19UQUJMRSAqVGFi
LCAKLSAgICBJTiBNQUNBRERSICpCc3NpZCwgCi0gICAgSU4gQ0hBUiBTc2lkW10sIAotICAgIElO
IFVDSEFSIFNzaWRMZW4sIAotICAgIElOIFVDSEFSIEJzc1R5cGUsIAotICAgIElOIFVTSE9SVCBC
ZWFjb25QZXJpb2QsIAotICAgIElOIEJPT0xFQU4gQ2ZFeGlzdCwgCi0gICAgSU4gQ0ZfUEFSTSAq
Q2ZQYXJtLCAKLSAgICBJTiBVU0hPUlQgQXRpbVdpbiwgCi0gICAgSU4gVVNIT1JUIENhcGFiaWxp
dHlJbmZvLCAKLSAgICBJTiBVQ0hBUiBSYXRlc1tdLCAKLSAgICBJTiBVQ0hBUiBSYXRlc0xlbiwK
LSAgICBJTiBCT09MRUFOIEV4dGVuZGVkUmF0ZUllRXhpc3QsCi0gICAgSU4gVUNIQVIgQ2hhbm5l
bCwKLSAgICBJTiBVQ0hBUiBSc3NpLAotICAgIElOIExBUkdFX0lOVEVHRVIgVGltZVN0YW1wLAot
ICAgIElOIFVDSEFSIExlbmd0aFZJRSwKLSAgICBJTiBQTkRJU184MDJfMTFfVkFSSUFCTEVfSUVz
IHBWSUUpOwotCi1WT0lEICBCc3NUYWJsZVNzaWRTb3J0KAotICAgIElOCVBSVDI1NzBBREFQVEVS
CXBBZCwgCi0gICAgT1VUIEJTU19UQUJMRSAqT3V0VGFiLCAKLSAgICBJTiAgQ0hBUiBTc2lkW10s
IAotICAgIElOICBVQ0hBUiBTc2lkTGVuKTsKLQotVk9JRCAgQnNzVGFibGVTb3J0QnlSc3NpKAot
ICAgIElOIE9VVCBCU1NfVEFCTEUgKk91dFRhYik7Ci0KLVZPSUQJQnNzQ2lwaGVyUGFyc2UoCi0J
SU4gT1VUCVBCU1NfRU5UUlkJcEJzcyk7Ci0KLU5ESVNfU1RBVFVTICBNbG1lUXVldWVJbml0KAot
ICAgIElOIE1MTUVfUVVFVUUgKlF1ZXVlKTsKLQotVk9JRCAgTWxtZVF1ZXVlRGVzdHJveSgKLSAg
ICBJTiBNTE1FX1FVRVVFICpRdWV1ZSk7Ci0KLUJPT0xFQU4gTWxtZUVucXVldWUoCi0gICAgSU4g
UFJUMjU3MEFEQVBURVIgcEFkLCAKLQlJTiBVTE9ORyBNYWNoaW5lLCAKLSAgICBJTiBVTE9ORyBN
c2dUeXBlLCAKLSAgICBJTiBVTE9ORyBNc2dMZW4sIAotICAgIElOIFZPSUQgKk1zZyk7Ci0KLUJP
T0xFQU4gTWxtZUVucXVldWVGb3JSZWN2KAotICAgIElOCVBSVDI1NzBBREFQVEVSCXBBZGFwdGVy
LCAKLSAgICBPVVQgTUxNRV9RVUVVRSAqUXVldWUsIAotICAgIElOIFVDSEFSIFJzc2ksIAotICAg
IElOIFVMT05HIE1zZ0xlbiwgCi0gICAgSU4gUFZPSUQgTXNnKTsKLQotQk9PTEVBTiBNbG1lRGVx
dWV1ZSgKLSAgICBJTiBNTE1FX1FVRVVFICpRdWV1ZSwgCi0gICAgT1VUIE1MTUVfUVVFVUVfRUxF
TSAqKkVsZW0pOwotCi0jaWYgMQotVk9JRAlNbG1lUmVzdGFydFN0YXRlTWFjaGluZSgKLSAgICBJ
TglQUlQyNTcwQURBUFRFUglwQWQpOwotI2VuZGlmCi0KLS8vYmx1ZQotVk9JRAlNbG1lUG9zdFJl
c3RhcnRTdGF0ZU1hY2hpbmUoCi0gICAgSU4JUFJUMjU3MEFEQVBURVIJcEFkKTsKLQotQk9PTEVB
TiAgTWxtZVF1ZXVlRW1wdHkoCi0gICAgSU4gTUxNRV9RVUVVRSAqUXVldWUpOwotCi1CT09MRUFO
ICBNbG1lUXVldWVGdWxsKAotICAgIElOIE1MTUVfUVVFVUUgKlF1ZXVlKTsKLQotQk9PTEVBTiAg
TXNnVHlwZVN1YnN0KAotCUlOIFBSVDI1NzBBREFQVEVSIHBBZCwKLSAgICBJTiBNQUNGUkFNRSAq
RnIsIAotICAgIE9VVCBJTlQgKk1hY2hpbmUsIAotICAgIE9VVCBJTlQgKk1zZ1R5cGUpOwotCi1W
T0lEIFN0YXRlTWFjaGluZUluaXQoCi0gICAgSU4gU1RBVEVfTUFDSElORSAqU20sIAotICAgIElO
IFNUQVRFX01BQ0hJTkVfRlVOQyBUcmFuc1tdLCAKLSAgICBJTiBVTE9ORyBTdE5yLCAKLSAgICBJ
TiBVTE9ORyBNc2dOciwgCi0gICAgSU4gU1RBVEVfTUFDSElORV9GVU5DIERlZkZ1bmMsIAotICAg
IElOIFVMT05HIEluaXRTdGF0ZSwgCi0gICAgSU4gVUxPTkcgQmFzZSk7Ci0KLVZPSUQgU3RhdGVN
YWNoaW5lU2V0QWN0aW9uKAotICAgIElOIFNUQVRFX01BQ0hJTkUgKlMsIAotICAgIElOIFVMT05H
IFN0LCAKLSAgICBVTE9ORyBNc2csIAotICAgIElOIFNUQVRFX01BQ0hJTkVfRlVOQyBGKTsKLQot
Vk9JRCBTdGF0ZU1hY2hpbmVQZXJmb3JtQWN0aW9uKAotICAgIElOCVBSVDI1NzBBREFQVEVSCXBB
ZGFwdGVyLCAKLSAgICBJTiBTVEFURV9NQUNISU5FICpTLCAKLSAgICBJTiBNTE1FX1FVRVVFX0VM
RU0gKkVsZW0pOwotCi1WT0lEIERyb3AoCi0gICAgSU4JUFJUMjU3MEFEQVBURVIJcEFkYXB0ZXIs
IAotICAgIElOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSk7Ci0KLVZPSUQgU3RhdGVNYWNoaW5lRGVz
dHJveSgKLSAgICBJTiBTVEFURV9NQUNISU5FICpTbSk7Ci0KLVZPSUQgIEFzc29jU3RhdGVNYWNo
aW5lSW5pdCgKLSAgICBJTglQUlQyNTcwQURBUFRFUglwQWRhcHRlciwgCi0gICAgSU4gIFNUQVRF
X01BQ0hJTkUgKlNtLCAKLSAgICBPVVQgU1RBVEVfTUFDSElORV9GVU5DIFRyYW5zW10pOwotCi1W
T0lEICBSZWFzc29jVGltZW91dCgKLSAgICBJTgl1bnNpZ25lZCBsb25nIGRhdGEpOwotCi1WT0lE
ICBBc3NvY1RpbWVvdXQoCi0gICAgSU4JdW5zaWduZWQgbG9uZyBkYXRhKTsKLQotVk9JRCAgRGlz
YXNzb2NUaW1lb3V0KAotICAgIElOCXVuc2lnbmVkIGxvbmcgZGF0YSk7Ci0KLS8vLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotVk9JRCAgTWxtZURpc2Fzc29j
UmVxQWN0aW9uKAotICAgIElOCVBSVDI1NzBBREFQVEVSCXBBZGFwdGVyLCAKLSAgICBJTiAgTUxN
RV9RVUVVRV9FTEVNICpFbGVtKTsKLQotVk9JRCAgTWxtZUFzc29jUmVxQWN0aW9uKAotICAgIElO
CVBSVDI1NzBBREFQVEVSCXBBZGFwdGVyLCAKLSAgICBJTiAgTUxNRV9RVUVVRV9FTEVNICpFbGVt
KTsKLQotVk9JRCAgTWxtZVJlYXNzb2NSZXFBY3Rpb24oCi0gICAgSU4JUFJUMjU3MEFEQVBURVIJ
cEFkYXB0ZXIsIAotICAgIElOICBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pOwotCi1WT0lEICBNbG1l
RGlzYXNzb2NSZXFBY3Rpb24oCi0gICAgSU4JUFJUMjU3MEFEQVBURVIJcEFkYXB0ZXIsIAotICAg
IElOICBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pOwotCi1WT0lEICBQZWVyQXNzb2NSc3BBY3Rpb24o
Ci0gICAgSU4JUFJUMjU3MEFEQVBURVIJcEFkYXB0ZXIsIAotICAgIElOICBNTE1FX1FVRVVFX0VM
RU0gKkVsZW0pOwotCi1WT0lEICBQZWVyUmVhc3NvY1JzcEFjdGlvbigKLSAgICBJTglQUlQyNTcw
QURBUFRFUglwQWRhcHRlciwgCi0gICAgSU4gIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSk7Ci0KLVZP
SUQgIFBlZXJEaXNhc3NvY0FjdGlvbigKLSAgICBJTglQUlQyNTcwQURBUFRFUglwQWRhcHRlciwg
Ci0gICAgSU4gIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSk7Ci0KLVZPSUQgIERpc2Fzc29jVGltZW91
dEFjdGlvbigKLSAgICBJTglQUlQyNTcwQURBUFRFUglwQWRhcHRlciwgCi0gICAgSU4gIE1MTUVf
UVVFVUVfRUxFTSAqRWxlbSk7Ci0KLVZPSUQgIEFzc29jVGltZW91dEFjdGlvbigKLSAgICBJTglQ
UlQyNTcwQURBUFRFUglwQWRhcHRlciwgCi0gICAgSU4gIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSk7
Ci0KLVZPSUQgIFJlYXNzb2NUaW1lb3V0QWN0aW9uKAotICAgIElOCVBSVDI1NzBBREFQVEVSCXBB
ZGFwdGVyLCAKLSAgICBJTiAgTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKLQotVk9JRCAgQ2xzM2Vy
ckFjdGlvbigKLSAgICBJTglQUlQyNTcwQURBUFRFUglwQWRhcHRlciwgCi0gICAgSU4gIFBNQUNB
RERSIHBBZGRyKTsKLQotVk9JRCAgSW52YWxpZFN0YXRlV2hlbkFzc29jKAotICAgIElOCVBSVDI1
NzBBREFQVEVSCXBBZGFwdGVyLCAKLSAgICBJTiAgTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKLQot
Vk9JRCAgSW52YWxpZFN0YXRlV2hlblJlYXNzb2MoCi0gICAgSU4JUFJUMjU3MEFEQVBURVIJcEFk
YXB0ZXIsIAotICAgIElOICBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pOwotCi1WT0lEIEludmFsaWRT
dGF0ZVdoZW5EaXNhc3NvY2lhdGUoCi0gICAgSU4gIFBSVDI1NzBBREFQVEVSIHBBZGFwdGVyLCAK
LSAgICBJTiAgTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKLQotVk9JRCAgQ29tcG9zZVBzUG9sbCgK
LSAgICBJTglQUlQyNTcwQURBUFRFUglwQWRhcHRlcik7Ci0KLVZPSUQgIENvbXBvc2VOdWxsRnJh
bWUoCi0gICAgSU4gIFBSVDI1NzBBREFQVEVSIHBBZGFwdGVyKTsKLQotVk9JRCAgQ29tcG9zZVN0
dWZmRnJhbWUoCi0gICAgSU4gIFBSVDI1NzBBREFQVEVSIHBBZGFwdGVyKTsKLQotVk9JRCAgQXNz
b2NQb3N0UHJvYygKLSAgICBJTglQUlQyNTcwQURBUFRFUglwQWRhcHRlciwgCi0gICAgSU4gIE1B
Q0FERFIgKkFkZHIyLCAKLSAgICBJTiAgVVNIT1JUIENhcGFiaWxpdHlJbmZvLCAKLSAgICBJTiAg
VVNIT1JUIEFpZCwgCi0gICAgSU4gIFVDSEFSIFJhdGVzW10sIAotICAgIElOICBVQ0hBUiBSYXRl
c0xlbiwKLSAgICBJTiAgQk9PTEVBTiBFeHRlbmRlZFJhdGVJZUV4aXN0KTsKLQotVk9JRCBBdXRo
U3RhdGVNYWNoaW5lSW5pdCgKLSAgICBJTglQUlQyNTcwQURBUFRFUglwQWRhcHRlciwgCi0gICAg
SU4gUFNUQVRFX01BQ0hJTkUgc20sIAotICAgIE9VVCBTVEFURV9NQUNISU5FX0ZVTkMgVHJhbnNb
XSk7Ci0KLVZPSUQgQXV0aFRpbWVvdXQoCi0gICAgSU4JdW5zaWduZWQgbG9uZyBkYXRhKTsKLQot
Ci1WT0lEIE1sbWVBdXRoUmVxQWN0aW9uKAotICAgIElOCVBSVDI1NzBBREFQVEVSCXBBZGFwdGVy
LCAKLSAgICBJTiAgTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKLQotVk9JRCBQZWVyQXV0aFJzcEF0
U2VxMkFjdGlvbigKLSAgICBJTglQUlQyNTcwQURBUFRFUglwQWRhcHRlciwgCi0gICAgSU4gIE1M
TUVfUVVFVUVfRUxFTSAqRWxlbSk7Ci0KLVZPSUQgUGVlckF1dGhSc3BBdFNlcTRBY3Rpb24oCi0g
ICAgSU4JUFJUMjU3MEFEQVBURVIJcEFkYXB0ZXIsIAotICAgIElOICBNTE1FX1FVRVVFX0VMRU0g
KkVsZW0pOwotCi1WT0lEIEF1dGhUaW1lb3V0QWN0aW9uKAotICAgIElOCVBSVDI1NzBBREFQVEVS
CXBBZGFwdGVyLCAKLSAgICBJTiAgTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKLQotVk9JRCBDbHMy
ZXJyQWN0aW9uKAotICAgIElOCVBSVDI1NzBBREFQVEVSCXBBZGFwdGVyLCAKLSAgICBJTiAgUE1B
Q0FERFIgcEFkZHIpOwotCi1WT0lEIE1sbWVEZWF1dGhSZXFBY3Rpb24oCi0gICAgSU4JUFJUMjU3
MEFEQVBURVIJcEFkYXB0ZXIsIAotICAgIElOICBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pOwotCi1W
T0lEIEludmFsaWRTdGF0ZVdoZW5BdXRoKAotICAgIElOCVBSVDI1NzBBREFQVEVSCXBBZGFwdGVy
LCAKLSAgICBJTiAgTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKLQotLy9WT0lEIE1sbWVEZWF1dGhS
ZXFQcm9jKAotLy8gICAgSU4JUFJUMjU3MEFEQVBURVIJcEFkYXB0ZXIsIAotLy8gICAgSU4gIE1B
Q0FERFIgKkFkZHIsIAotLy8gICAgSU4gIFVTSE9SVCBSZWFzb24pOwotCi0vLz09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1WT0lEIEF1dGhSc3BTdGF0ZU1h
Y2hpbmVJbml0KAotICAgIElOCVBSVDI1NzBBREFQVEVSCXBBZGFwdGVyLCAKLSAgICBJTiAgUFNU
QVRFX01BQ0hJTkUgU20sIAotICAgIElOICBTVEFURV9NQUNISU5FX0ZVTkMgVHJhbnNbXSk7Ci0K
LQotVk9JRCBBdXRoUnNwQ2hhbGxlbmdlVGltZW91dCgKLSAgICBJTgl1bnNpZ25lZCBsb25nIGRh
dGEpOwotCi1WT0lEIEF1dGhSc3BDaGFsbGVuZ2VUaW1lb3V0QWN0aW9uKAotICAgIElOCVBSVDI1
NzBBREFQVEVSCXBBZGFwdGVyLCAKLSAgICBJTiAgTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKLQot
Vk9JRCBQZWVyQXV0aEF0QXV0aFJzcElkbGVBY3Rpb24oCi0gICAgSU4JUFJUMjU3MEFEQVBURVIJ
cEFkYXB0ZXIsIAotICAgIElOICBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pOwotCi1WT0lEIFBlZXJB
dXRoQXRBdXRoUnNwV2FpdEFjdGlvbigKLSAgICBJTglQUlQyNTcwQURBUFRFUglwQWRhcHRlciwg
Ci0gICAgSU4gIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSk7Ci0KLVZPSUQgUGVlckRlYXV0aEFjdGlv
bigKLSAgICBJTiBQUlQyNTcwQURBUFRFUiBwQWRhcHRvciwgCi0gICAgSU4gTUxNRV9RVUVVRV9F
TEVNICpFbGVtKTsKLQotVk9JRCBQZWVyQXV0aFNpbXBsZVJzcEdlbkFuZFNlbmQoCi0gICAgSU4J
UFJUMjU3MEFEQVBURVIJcEFkYXB0ZXIsIAotICAgIElOICBQTUFDSERSIEhkciwgCi0gICAgSU4g
IFVTSE9SVCBBbGcsIAotICAgIElOICBVU0hPUlQgU2VxLCAKLSAgICBJTiAgVVNIT1JUIFJlYXNv
biwgCi0gICAgSU4gIFVTSE9SVCBTdGF0dXMpOwotCi0vLz09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLQotVk9JRCBTeW5jU3RhdGVNYWNoaW5lSW5pdCgKLSAgICBJTglQ
UlQyNTcwQURBUFRFUglwQWRhcHRlciwgCi0gICAgSU4gIFNUQVRFX01BQ0hJTkUgKlNtLCAKLSAg
ICBPVVQgU1RBVEVfTUFDSElORV9GVU5DIFRyYW5zW10pOwotCi1WT0lEIEJlYWNvblRpbWVvdXQo
Ci0gICAgSU4JdW5zaWduZWQgbG9uZyBkYXRhKTsKLQotVk9JRCBBdGltVGltZW91dCgKLSAgICBJ
Tgl1bnNpZ25lZCBsb25nIGRhdGEpOyAKLQotVk9JRCBTY2FuVGltZW91dCgKLSAgICBJTgl1bnNp
Z25lZCBsb25nIGRhdGEpOwotCi1WT0lEIE1sbWVTY2FuUmVxQWN0aW9uKAotICAgIElOCVBSVDI1
NzBBREFQVEVSCXBBZGFwdGVyLCAKLSAgICBJTiAgTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKLQot
Vk9JRCBJbnZhbGlkU3RhdGVXaGVuU2NhbigKLSAgICBJTglQUlQyNTcwQURBUFRFUglwQWRhcHRl
ciwgCi0gICAgSU4gIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSk7Ci0KLVZPSUQgSW52YWxpZFN0YXRl
V2hlbkpvaW4oCi0gICAgSU4JUFJUMjU3MEFEQVBURVIJcEFkYXB0ZXIsIAotICAgIElOICBNTE1F
X1FVRVVFX0VMRU0gKkVsZW0pOwotCi1WT0lEIEludmFsaWRTdGF0ZVdoZW5TdGFydCgKLSAgICBJ
TglQUlQyNTcwQURBUFRFUglwQWRhcHRlciwgCi0gICAgSU4gIE1MTUVfUVVFVUVfRUxFTSAqRWxl
bSk7Ci0KLVZPSUQgUGVlckJlYWNvbigKLSAgICBJTglQUlQyNTcwQURBUFRFUglwQWRhcHRlciwg
Ci0gICAgSU4gIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSk7Ci0KLS8vPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLQotVk9JRCBNbG1lQ250bEluaXQoCi0gICAgSU4JUFJU
MjU3MEFEQVBURVIJcEFkYXB0ZXIsIAotICAgIElOICBTVEFURV9NQUNISU5FICpTLCAKLSAgICBP
VVQgU1RBVEVfTUFDSElORV9GVU5DIFRyYW5zW10pOwotCi1WT0lEIE1sbWVDbnRsTWFjaGluZVBl
cmZvcm1BY3Rpb24oCi0gICAgSU4JUFJUMjU3MEFEQVBURVIJcEFkYXB0ZXIsIAotICAgIElOICBT
VEFURV9NQUNISU5FICpTLCAKLSAgICBJTiAgTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKLQotVk9J
RCBDbnRsSWRsZVByb2MoCi0gICAgSU4JUFJUMjU3MEFEQVBURVIJcEFkYXB0ZXIsIAotICAgIElO
ICBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pOwotCi1WT0lEIENudGxPaWRTY2FuUHJvYygKLSAgICBJ
TiAgUFJUMjU3MEFEQVBURVIgcEFkYXB0ZXIsCi0gICAgSU4gIE1MTUVfUVVFVUVfRUxFTSAqRWxl
bSk7Ci0KLVZPSUQgQ250bE9pZFNzaWRQcm9jKAotICAgIElOCVBSVDI1NzBBREFQVEVSCXBBZGFw
dGVyLCAKLSAgICBJTiAgTUxNRV9RVUVVRV9FTEVNICogRWxlbSk7Ci0KLVZPSUQgQ250bE9pZFJU
QnNzaWRQcm9jKAotICAgIElOCVBSVDI1NzBBREFQVEVSCXBBZGFwdGVyLCAKLSAgICBJTiAgTUxN
RV9RVUVVRV9FTEVNICogRWxlbSk7Ci0KLVZPSUQgQ250bE1sbWVSb2FtaW5nUHJvYygKLSAgICBJ
TglQUlQyNTcwQURBUFRFUglwQWRhcHRlciwgCi0gICAgSU4gIE1MTUVfUVVFVUVfRUxFTSAqIEVs
ZW0pOwotCi1WT0lEIENudGxXYWl0RGlzYXNzb2NQcm9jKAotICAgIElOCVBSVDI1NzBBREFQVEVS
CXBBZGFwdGVyLCAKLSAgICBJTiAgTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKLQotVk9JRCBDbnRs
V2FpdEpvaW5Qcm9jKAotICAgIElOCVBSVDI1NzBBREFQVEVSCXBBZGFwdGVyLCAKLSAgICBJTiAg
TUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKLQotVk9JRCBDbnRsV2FpdFJlYXNzb2NQcm9jKAotICAg
IElOCVBSVDI1NzBBREFQVEVSCXBBZGFwdGVyLCAKLSAgICBJTiAgTUxNRV9RVUVVRV9FTEVNICpF
bGVtKTsKLQotVk9JRCBDbnRsV2FpdFN0YXJ0UHJvYygKLSAgICBJTglQUlQyNTcwQURBUFRFUglw
QWRhcHRlciwgCi0gICAgSU4gIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSk7Ci0KLVZPSUQgQ250bFdh
aXRBdXRoUHJvYygKLSAgICBJTglQUlQyNTcwQURBUFRFUglwQWRhcHRlciwgCi0gICAgSU4gIE1M
TUVfUVVFVUVfRUxFTSAqRWxlbSk7Ci0KLVZPSUQgQ250bFdhaXRBdXRoUHJvYzIoCi0gICAgSU4g
IFBSVDI1NzBBREFQVEVSIHBBZGFwdGVyLCAKLSAgICBJTiAgTUxNRV9RVUVVRV9FTEVNICpFbGVt
KTsKLQotVk9JRCBDbnRsV2FpdEFzc29jUHJvYygKLSAgICBJTglQUlQyNTcwQURBUFRFUglwQWRh
cHRlciwgCi0gICAgSU4gIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSk7Ci0KLVZPSUQgTGlua1VwKAot
ICAgIElOCVBSVDI1NzBBREFQVEVSCXBBZGFwdGVyLAotICAgIElOICBVQ0hBUiBCc3NUeXBlKTsK
LQotVk9JRCBMaW5rRG93bigKLSAgICBJTglQUlQyNTcwQURBUFRFUglwQWRhcHRlcik7Ci0KLVZP
SUQgTWxtZUNudGxDb25maXJtKAotICAgIElOCVBSVDI1NzBBREFQVEVSCXBBZGFwdGVyLCAKLSAg
ICBJTiAgVUxPTkcgTXNnVHlwZSwgCi0gICAgSU4gIFVTSE9SVCBNc2cpOwotCi1WT0lEIEl0ZXJh
dGVPbkJzc1RhYigKLSAgICBJTglQUlQyNTcwQURBUFRFUglwQWRhcHRlcik7Ci0KLVZPSUQgSXRl
cmF0ZU9uQnNzVGFiMigKLSAgICBJTiAgUFJUMjU3MEFEQVBURVIgICBwQWRhcHRlcik7OwotCi1W
T0lEIEpvaW5QYXJtRmlsbCgKLSAgICBJTglQUlQyNTcwQURBUFRFUglwQWRhcHRlciwgCi0gICAg
SU4gIE9VVCBNTE1FX0pPSU5fUkVRX1NUUlVDVCAqSm9pblJlcSwgCi0gICAgSU4gIFVMT05HIEJz
c0lkeCk7Ci0KLVZPSUQgQXNzb2NQYXJtRmlsbCgKLSAgICBJTglQUlQyNTcwQURBUFRFUglwQWRh
cHRlciwgCi0gICAgSU4gT1VUIE1MTUVfQVNTT0NfUkVRX1NUUlVDVCAqQXNzb2NSZXEsIAotICAg
IElOICBNQUNBRERSICpBZGRyLCAKLSAgICBJTiAgVVNIT1JUIENhcGFiaWxpdHlJbmZvLCAKLSAg
ICBJTiAgVUxPTkcgVGltZW91dCwgCi0gICAgSU4gIFVTSE9SVCBMaXN0ZW5JbnR2KTsKLQotVk9J
RCBTY2FuUGFybUZpbGwoCi0gICAgSU4JUFJUMjU3MEFEQVBURVIJcEFkYXB0ZXIsIAotICAgIElO
ICBPVVQgTUxNRV9TQ0FOX1JFUV9TVFJVQ1QgKlNjYW5SZXEsIAotICAgIElOICBDSEFSIFNzaWRb
XSwgCi0gICAgSU4gIFVDSEFSIFNzaWRMZW4sIAotICAgIElOICBVQ0hBUiBCc3NUeXBlLCAKLSAg
ICBJTiAgVUNIQVIgU2NhblR5cGUpOyAKLQotVk9JRCBEaXNhc3NvY1Bhcm1GaWxsKAotICAgIElO
CVBSVDI1NzBBREFQVEVSCXBBZGFwdGVyLCAKLSAgICBJTiAgT1VUIE1MTUVfRElTQVNTT0NfUkVR
X1NUUlVDVCAqRGlzYXNzb2NSZXEsIAotICAgIElOICBNQUNBRERSICpBZGRyLCAKLSAgICBJTiAg
VVNIT1JUIFJlYXNvbik7Ci0KLVZPSUQgU3RhcnRQYXJtRmlsbCgKLSAgICBJTglQUlQyNTcwQURB
UFRFUglwQWRhcHRlciwgCi0gICAgSU4gIE9VVCBNTE1FX1NUQVJUX1JFUV9TVFJVQ1QgKlN0YXJ0
UmVxLCAKLSAgICBJTiAgQ0hBUiBTc2lkW10sIAotICAgIElOICBVQ0hBUiBTc2lkTGVuKTsKLQot
Vk9JRCBBdXRoUGFybUZpbGwoCi0gICAgSU4JUFJUMjU3MEFEQVBURVIJcEFkYXB0ZXIsIAotICAg
IElOICBPVVQgTUxNRV9BVVRIX1JFUV9TVFJVQ1QgKkF1dGhSZXEsIAotICAgIElOICBNQUNBRERS
ICpBZGRyLCAKLSAgICBJTiAgVVNIT1JUIEFsZyk7Ci0KLVZPSUQgRW5xdWV1ZVBzUG9sbCgKLSAg
ICBJTglQUlQyNTcwQURBUFRFUglwQWRhcHRlcik7Ci0KLVZPSUQgRW5xdWV1ZUJlYWNvbkZyYW1l
KAotICAgIElOICBQUlQyNTcwQURBUFRFUiAgIHBBZGFwdGVyKTsgCi0KLXZvaWQgVVNCX1NlbmRO
dWxsRnJhbWVDb21wbGV0ZShwdXJiYl90IHB1cmIsc3RydWN0IHB0X3JlZ3MgKnB0X3JlZ3MpOwot
Ci1WT0lEIEVucXVldWVOdWxsRnJhbWUoCi0gICAgSU4gIFBSVDI1NzBBREFQVEVSIHBBZGFwdGVy
LAotICAgIElOICBVQ0hBUiAgICAgICAgIFR4UmF0ZSk7Ci0KLVZPSUQgTWxtZUpvaW5SZXFBY3Rp
b24oCi0gICAgSU4JUFJUMjU3MEFEQVBURVIJcEFkYXB0ZXIsIAotICAgIElOICBNTE1FX1FVRVVF
X0VMRU0gKkVsZW0pOwotCi0KLQotVk9JRCBNbG1lU3RhcnRSZXFBY3Rpb24oCi0gICAgSU4JUFJU
MjU3MEFEQVBURVIJcEFkYXB0ZXIsIAotICAgIElOICBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pOwot
Ci1WT0lEIFNjYW5UaW1lb3V0QWN0aW9uKAotICAgIElOCVBSVDI1NzBBREFQVEVSCXBBZGFwdGVy
LCAKLSAgICBJTiAgTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKLQotVk9JRCBCZWFjb25UaW1lb3V0
QXRKb2luQWN0aW9uKAotICAgIElOCVBSVDI1NzBBREFQVEVSCXBBZGFwdGVyLCAKLSAgICBJTiAg
TUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKLQotVk9JRCBQZWVyQmVhY29uQXRTY2FuQWN0aW9uKAot
ICAgIElOCVBSVDI1NzBBREFQVEVSCXBBZGFwdGVyLCAKLSAgICBJTiAgTUxNRV9RVUVVRV9FTEVN
ICpFbGVtKTsKLQotVk9JRCBQZWVyQmVhY29uQXRKb2luQWN0aW9uKAotICAgIElOCVBSVDI1NzBB
REFQVEVSCXBBZGFwdGVyLCAKLSAgICBJTiAgTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKLQotVk9J
RCBQZWVyQmVhY29uKAotICAgIElOCVBSVDI1NzBBREFQVEVSCXBBZGFwdGVyLCAKLSAgICBJTiAg
TUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKLQotVk9JRCBQZWVyUHJvYmVSZXFBY3Rpb24oCi0gICAg
SU4gIFBSVDI1NzBBREFQVEVSIHBBZCwgCi0gICAgSU4gIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSk7
Ci0KLVZPSUQgU2Nhbk5leHRDaGFubmVsKAotICAgIElOCVBSVDI1NzBBREFQVEVSCXBBZGFwdGVy
KTsKLQotVk9JRCBNYWtlSWJzc0JlYWNvbigKLSAgICBJTglQUlQyNTcwQURBUFRFUglwQWRhcHRl
cik7Ci0KLUJPT0xFQU4gTWxtZVNjYW5SZXFTYW5pdHkoCi0gICAgSU4JUFJUMjU3MEFEQVBURVIJ
cEFkYXB0ZXIsIAotICAgIElOICBWT0lEICpNc2csIAotICAgIElOICBVTE9ORyBNc2dMZW4sIAot
ICAgIE9VVCBVQ0hBUiAqQnNzVHlwZSwgCi0gICAgT1VUIENIQVIgc3NpZFtdLCAKLSAgICBPVVQg
VUNIQVIgKlNzaWRMZW4sIAotICAgIE9VVCBVQ0hBUiAqU2NhblR5cGUpOwotCi1CT09MRUFOIFBl
ZXJCZWFjb25BbmRQcm9iZVJzcFNhbml0eSgKLSAgICBJTglQUlQyNTcwQURBUFRFUglwQWRhcHRl
ciwgCi0gICAgSU4gIFZPSUQgKk1zZywgCi0gICAgSU4gIFVMT05HIE1zZ0xlbiwgCi0gICAgT1VU
IE1BQ0FERFIgKkFkZHIyLCAKLSAgICBPVVQgTUFDQUREUiAqQnNzaWQsIAotICAgIE9VVCBDSEFS
IFNzaWRbXSwgCi0gICAgT1VUIFVDSEFSICpTc2lkTGVuLCAKLSAgICBPVVQgVUNIQVIgKkJzc1R5
cGUsIAotICAgIE9VVCBVU0hPUlQgKkJlYWNvblBlcmlvZCwgCi0gICAgT1VUIFVDSEFSICpDaGFu
bmVsLCAKLSAgICBPVVQgTEFSR0VfSU5URUdFUiAqVGltZXN0YW1wLCAKLSAgICBPVVQgQk9PTEVB
TiAqQ2ZFeGlzdCwgCi0gICAgT1VUIENGX1BBUk0gKkNmLCAKLSAgICBPVVQgVVNIT1JUICpBdGlt
V2luLCAKLSAgICBPVVQgVVNIT1JUICpDYXBhYmlsaXR5SW5mbywgCi0gICAgT1VUIFVDSEFSIFJh
dGVbXSwgCi0gICAgT1VUIFVDSEFSICpSYXRlTGVuLAotICAgIE9VVCBCT09MRUFOICpFeHRlbmRl
ZFJhdGVJZUV4aXN0LAotICAgIE9VVCBVQ0hBUiAqRXJwLAotICAgIE9VVCBVQ0hBUiAqRHRpbUNv
dW50LCAKLSAgICBPVVQgVUNIQVIgKkR0aW1QZXJpb2QsIAotICAgIE9VVCBVQ0hBUiAqQmNhc3RG
bGFnLCAKLSAgICBPVVQgVUNIQVIgKk1lc3NhZ2VUb01lLCAKLSAgICBPVVQgVUNIQVIgKkxlZ2Fj
eSwKLSAgICBPVVQgVUNIQVIgU3VwUmF0ZVtdLAotICAgIE9VVCBVQ0hBUiAqU3VwUmF0ZUxlbiwK
LSAgICBPVVQgVUNIQVIgRXh0UmF0ZVtdLAotICAgIE9VVCBVQ0hBUiAqRXh0UmF0ZUxlbiwKLSAg
ICBPVVQgVUNIQVIgKkxlbmd0aFZJRSwKLSAgICBPVVQJUE5ESVNfODAyXzExX1ZBUklBQkxFX0lF
cyBwVklFKTsKLQotLy9CT09MRUFOIEpvaW5QYXJtU2FuaXR5KAotLy8gICAgSU4JUFJUMjU3MEFE
QVBURVIJcEFkYXB0ZXIsIAotLy8gICAgSU4gIFZPSUQgKk1zZywgCi0vLyAgICBJTiAgVUxPTkcg
TXNnTGVuLCAKLS8vICAgIE9VVCBVTE9ORyAqQnNzSWR4LAotLy8gICAgT1VUIFVDSEFSIFN1cHBv
cnRlZFJhdGVzW10sIAotLy8gICAgT1VUIFVDSEFSICpTdXBwb3J0ZWRSYXRlc0xlbik7Ci0KLUJP
T0xFQU4gTWxtZUFzc29jUmVxU2FuaXR5KAotICAgIElOCVBSVDI1NzBBREFQVEVSCXBBZGFwdGVy
LCAKLSAgICBJTiAgVk9JRCAqTXNnLCAKLSAgICBJTiAgVUxPTkcgTXNnTGVuLCAKLSAgICBPVVQg
TUFDQUREUiAqQXBBZGRyLCAKLSAgICBPVVQgVVNIT1JUICpDYXBhYmlsaXR5SW5mbywgCi0gICAg
T1VUIFVMT05HICpUaW1lb3V0LCAKLSAgICBPVVQgVVNIT1JUICpMaXN0ZW5JbnR2KTsKLQotQk9P
TEVBTiBNbG1lQXV0aFJlcVNhbml0eSgKLSAgICBJTglQUlQyNTcwQURBUFRFUglwQWRhcHRlciwg
Ci0gICAgSU4gIFZPSUQgKk1zZywgCi0gICAgSU4gIFVMT05HIE1zZ0xlbiwgCi0gICAgT1VUIE1B
Q0FERFIgKkFkZHIsIAotICAgIE9VVCBVTE9ORyAqVGltZW91dCwgCi0gICAgT1VUIFVTSE9SVCAq
QWxnKTsKLQotQk9PTEVBTiBNbG1lU3RhcnRSZXFTYW5pdHkoCi0gICAgSU4JUFJUMjU3MEFEQVBU
RVIJcEFkYXB0ZXIsIAotICAgIElOICBWT0lEICpNc2csIAotICAgIElOICBVTE9ORyBNc2dMZW4s
IAotICAgIE9VVCBDSEFSIFNzaWRbXSwgCi0gICAgT1VUIFVDSEFSICpTc2lkbGVuKTsKLQotQk9P
TEVBTiBQZWVyQXV0aFNhbml0eSgKLSAgICBJTglQUlQyNTcwQURBUFRFUglwQWRhcHRlciwgCi0g
ICAgSU4gIFZPSUQgKk1zZywgCi0gICAgSU4gIFVMT05HIE1zZ0xlbiwgCi0gICAgT1VUIE1BQ0FE
RFIgKkFkZHIsIAotICAgIE9VVCBVU0hPUlQgKkFsZywgCi0gICAgT1VUIFVTSE9SVCAqU2VxLCAK
LSAgICBPVVQgVVNIT1JUICpTdGF0dXMsIAotICAgIE9VVCBDSEFSIENobGdUZXh0W10pOwotCi1C
T09MRUFOIFBlZXJBc3NvY1JzcFNhbml0eSgKLSAgICBJTglQUlQyNTcwQURBUFRFUglwQWRhcHRl
ciwgCi0gICAgSU4gIFZPSUQgKk1zZywgCi0gICAgSU4gIFVMT05HIE1zZ0xlbiwgCi0gICAgT1VU
IE1BQ0FERFIgKkFkZHIyLCAKLSAgICBPVVQgVVNIT1JUICpDYXBhYmlsaXR5SW5mbywgCi0gICAg
T1VUIFVTSE9SVCAqU3RhdHVzLCAKLSAgICBPVVQgVVNIT1JUICpBaWQsIAotICAgIE9VVCBVQ0hB
UiBSYXRlc1tdLCAKLSAgICBPVVQgVUNIQVIgKlJhdGVzTGVuLAotICAgIE9VVCBCT09MRUFOICpF
eHRlbmRlZFJhdGVJZUV4aXN0KTsKLQotQk9PTEVBTiBQZWVyRGlzYXNzb2NTYW5pdHkoCi0gICAg
SU4JUFJUMjU3MEFEQVBURVIJcEFkYXB0ZXIsIAotICAgIElOICBWT0lEICpNc2csIAotICAgIElO
ICBVTE9ORyBNc2dMZW4sIAotICAgIE9VVCBNQUNBRERSICpBZGRyMiwgCi0gICAgT1VUIFVTSE9S
VCAqUmVhc29uKTsKLQotQk9PTEVBTiBQZWVyRGVhdXRoU2FuaXR5KAotICAgIElOCVBSVDI1NzBB
REFQVEVSCXBBZGFwdGVyLCAKLSAgICBJTiAgVk9JRCAqTXNnLCAKLSAgICBJTiAgVUxPTkcgTXNn
TGVuLCAKLSAgICBPVVQgTUFDQUREUiAqQWRkcjIsIAotICAgIE9VVCBVU0hPUlQgKlJlYXNvbik7
Ci0KLUJPT0xFQU4gUGVlclByb2JlUmVxU2FuaXR5KAotICAgIElOCVBSVDI1NzBBREFQVEVSCXBB
ZGFwdGVyLCAKLSAgICBJTiAgVk9JRCAqTXNnLCAKLSAgICBJTiAgVUxPTkcgTXNnTGVuLCAKLSAg
ICBPVVQgTUFDQUREUiAqQWRkcjIsCi0gICAgT1VUIENIQVIgU3NpZFtdLCAKLSAgICBPVVQgVUNI
QVIgKlNzaWRMZW4pOyAKLS8vICAgIE9VVCBVQ0hBUiBSYXRlc1tdLCAKLS8vICAgIE9VVCBVQ0hB
UiAqUmF0ZXNMZW4pOwotTkRJU19TVEFUVVMJUlRNUFdQQVdlcEtleVNhbml0eSgKLQlJTglQUlQy
NTcwQURBUFRFUglwQWRhcHRlciwKLQlJTglQVk9JRAkJCXBCdWYpOwotCi1CT09MRUFOIEdldFRp
bUJpdCgKLSAgICBJTiAgQ0hBUiAqUHRyLCAKLSAgICBJTiAgVVNIT1JUIEFpZCwgCi0gICAgT1VU
IFVDSEFSICpUaW1MZW4sIAotICAgIE9VVCBVQ0hBUiAqQmNhc3RGbGFnLCAKLSAgICBPVVQgVUNI
QVIgKkR0aW1Db3VudCwgCi0gICAgT1VUIFVDSEFSICpEdGltUGVyaW9kLCAKLSAgICBPVVQgVUNI
QVIgKk1lc3NhZ2VUb01lKTsKLQotQk9PTEVBTiBHZXRMZWdhY3koCi0gICAgSU4gIENIQVIgKlB0
ciwgCi0gICAgT1VUIFVDSEFSICpMZWdhY3kpOwotCi1VTE9ORyBNYWtlT3V0Z29pbmdGcmFtZSgK
LSAgICBPVVQgQ0hBUiAqQnVmZmVyLCAKLSAgICBPVVQgVUxPTkcgKkxlbmd0aCwgLi4uKTsKLQot
Vk9JRCAgTGZzckluaXQoCi0gICAgSU4JUFJUMjU3MEFEQVBURVIJcEFkYXB0ZXIsIAotICAgIElO
ICBVTE9ORyBTZWVkKTsKLQotVUNIQVIgUmFuZG9tQnl0ZSgKLSAgICBJTglQUlQyNTcwQURBUFRF
UglwQWRhcHRlcik7Ci0KLVZPSUQgIE1sbWVQZXJpb2RpY0V4ZWMoCi0gICAgSU4JdW5zaWduZWQg
bG9uZyBkYXRhKTsKLQotI2lmIDEKLVZPSUQgIFJ4UGVyaW9kaWNFeGVjKAotICAgIElOIFBWT0lE
IFN5c3RlbVNwZWNpZmljMSwgCi0gICAgSU4gUFZPSUQgRnVuY3Rpb25Db250ZXh0LCAKLSAgICBJ
TiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzIsIAotICAgIElOIFBWT0lEIFN5c3RlbVNwZWNpZmljMyk7
Ci0KLSNlbmRpZgotCi1WT0lEIE1sbWVBdXRvU2NhbigKLSAgICBJTiBQUlQyNTcwQURBUFRFUiBw
QWRhcHRlcik7Ci0KLVZPSUQgTWxtZUF1dG9SZWNvdmVyTmV0d29yaygKLSAgICBJTiBQUlQyNTcw
QURBUFRFUiBwQWRhcHRlcik7Ci0KLVZPSUQgTWxtZUF1dG9SZWNvbm5lY3RMYXN0U1NJRCgKLSAg
ICBJTiBQUlQyNTcwQURBUFRFUiBwQWRhcHRlcik7Ci0KLUJPT0xFQU4JTWxtZVZhbGlkYXRlU1NJ
RCgKLSAgICBJTiBQUlQyNTcwQURBUFRFUiBwQWQpOwotCi1WT0lEIE1sbWVDaGVja0ZvclJvYW1p
bmcoCi0gICAgSU4gUFJUMjU3MEFEQVBURVIgcEFkYXB0ZXIsCi0gICAgSU4gVUxPTkcgICAgTm93
MzIpOwotCi0vL2JsdWUsVk9JRCBNbG1lQ2hlY2tDaGFubmVsUXVhbGl0eSgKLVZPSUQgUGVyaW9k
aWNFeGVjKAotICAgIElOIFBSVDI1NzBBREFQVEVSIHBBZGFwdGVyKTsKLQotVk9JRCBNbG1lQ2hl
Y2tGb3JQc21DaGFuZ2UoCi0gICAgSU4gUFJUMjU3MEFEQVBURVIgcEFkKTsKLQotVk9JRCBNbG1l
U2V0UHNtQml0KAotICAgIElOIFBSVDI1NzBBREFQVEVSIHBBZGFwdGVyLCAKLSAgICBJTiBVU0hP
UlQgcHNtKTsKLQotVk9JRCBNbG1lU2V0VHhQcmVhbWJsZSgKLSAgICBJTiBQUlQyNTcwQURBUFRF
UiBwQWRhcHRlciwgCi0gICAgSU4gVVNIT1JUIFR4UHJlYW1ibGUpOwotCi1WT0lEIE1sbWVVcGRh
dGVUeFJhdGVzKAotICAgIElOIFBSVDI1NzBBREFQVEVSIHBBZCwKLSAgICBJTiBCT09MRUFOCQkg
YkxpbmtVcCk7Ci0KLVZPSUQJUlRNUENoZWNrUmF0ZXMoCi0JSU4JCVBSVDI1NzBBREFQVEVSCXBB
ZCwKLQlJTiBPVVQJVUNIQVIJCQlTdXBSYXRlW10sCi0JSU4gT1VUCVVDSEFSCQkJKlN1cFJhdGVM
ZW4pOwotCi1ORElTX1NUQVRVUyBNbG1lSW5pdCgKLSAgICBJTglQUlQyNTcwQURBUFRFUglwQWRh
cHRlcik7Ci0KLXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICoKLXJ0X2dldHN0YXRzKHN0cnVjdCBu
ZXRfZGV2aWNlICpkZXYpOwotCi1zdHJ1Y3QgaXdfc3RhdGlzdGljcyAqUlRVU0JfZ2V0X3dpcmVs
ZXNzX3N0YXRzKAotICAgIElOICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2Rldik7Ci0KLVZPSUQg
TWxtZUhhbHQoCi0gICAgSU4JUFJUMjU3MEFEQVBURVIJcEFkYXB0ZXIpOwotCi1WT0lEIE1sbWVI
YW5kbGVyKAotICAgIElOIFBSVDI1NzBBREFQVEVSIHBBZCk7Ci0KLVZPSUQgTWxtZVN1c3BlbmQo
Ci0gICAgSU4gUFJUMjU3MEFEQVBURVIgcEFkKTsKLQotaW50IE1sbWVUaHJlYWQodm9pZCAqIENv
bnRleHQpOwotVk9JRCBDTURIYW5kbGVyKAotICAgIElOIFBSVDI1NzBBREFQVEVSIHBBZGFwdGVy
KTsKLQotaW50IFJUVVNCQ21kVGhyZWFkKHZvaWQgKiBDb250ZXh0KTsKLU5ESVNfU1RBVFVTIE1s
bWVJbml0TWVtb3J5SGFuZGxlcigKLSAgICBJTiBQUlQyNTcwQURBUFRFUiAgICBwQWQsCi0gICAg
SU4gVUlOVCAgICAgICAgICAgICBOdW1iZXIsCi0gICAgSU4gVUlOVCAgICAgICAgICAgICBTaXpl
KTsKLQotTkRJU19TVEFUVVMgTWxtZUFsbG9jYXRlTWVtb3J5KAotICAgIElOIFBSVDI1NzBBREFQ
VEVSICAgIHBBZCwKLSAgICBPVVQgUFZPSUQgICAgICAgICAgICpBbGxvY1ZhKTsKLQotVk9JRCBN
bG1lRnJlZU1lbW9yeSgKLSAgICBJTiBQUlQyNTcwQURBUFRFUiAgICBwQWQsCi0gICAgSU4gUFZP
SUQgICAgICAgICAgICBBbGxvY1ZhKTsKLQotVk9JRCBNbG1lRnJlZU1lbW9yeUhhbmRsZXIoCi0g
ICAgSU4gUFJUMjU3MEFEQVBURVIgICAgcEFkKTsKLQotCi1WT0lEIERlbGV0ZVRpbWVyKAotICAg
IElOIFBSVDI1NzBBREFQVEVSICAgIHBBZCk7Ci0KLU5UU1RBVFVTCi1SVFVTQlNpbmdsZVJlYWQK
LSgKLSBJTglQUlQyNTcwQURBUFRFUglwQWRhcHRlciwKLSBVU0hPUlQJCQkJT2Zmc2V0LAotIFBV
U0hPUlQJCQlwVmFsdWUKLSApOwotCi1OVFNUQVRVUwotUlRVU0JTaW5nbGVXcml0ZQotKAotIElO
CVBSVDI1NzBBREFQVEVSCXBBZGFwdGVyLAotIFVTSE9SVAkJCQlPZmZzZXQsCi0gVVNIT1JUCQkJ
CVZhbHVlCi0gKTsKLQotTlRTVEFUVVMKLVJUVVNCUmVhZE1BQ1JlZ2lzdGVyCi0oCi0gSU4JUFJU
MjU3MEFEQVBURVIJcEFkYXB0ZXIsCi0gVVNIT1JUCQkJCU9mZnNldCwKLSBQVVNIT1JUCQkJcFZh
bHVlCi0gKTsKLQotTlRTVEFUVVMKLVJUVVNCV3JpdGVNQUNSZWdpc3RlcgotKAotIElOCVBSVDI1
NzBBREFQVEVSCXBBZGFwdGVyLAotIFVTSE9SVAkJCQlPZmZzZXQsCi0gVVNIT1JUCQkJCVZhbHVl
Ci0gKTsKLQotTlRTVEFUVVMKLVJUVVNCTXVsdGlSZWFkCi0oCi0gSU4JUFJUMjU3MEFEQVBURVIJ
cEFkYXB0ZXIsCi0gVVNIT1JUCQkJCU9mZnNldCwKLSBQVUNIQVIJCQkJcERhdGEsCi0gVVNIT1JU
CQkJCWxlbmd0aAotICk7Ci0KLU5UU1RBVFVTCi1SVFVTQk11bHRpV3JpdGUKLSgKLSBJTglQUlQy
NTcwQURBUFRFUglwQWRhcHRlciwKLSBVU0hPUlQJCQkJT2Zmc2V0LAotIFBVQ0hBUgkJCQlwRGF0
YSwKLSBVU0hPUlQJCQkJbGVuZ3RoCi0gKTsKLQotI2RlZmluZQlSRVRSWV9MSU1JVAkzCi1OVFNU
QVRVUwotUlRVU0JSZWFkQkJQUmVnaXN0ZXIKLSgKLSBJTglQUlQyNTcwQURBUFRFUglwQWRhcHRl
ciwKLSBJTglVQ0hBUgkJCUlkLAotIElOCVBVQ0hBUgkJCXBWYWx1ZQotICk7Ci0KLQotTlRTVEFU
VVMKLVJUVVNCV3JpdGVCQlBSZWdpc3RlcgotKAotIElOCVBSVDI1NzBBREFQVEVSCXBBZGFwdGVy
LAotIElOCVVDSEFSCQkJSWQsCi0gSU4JVUNIQVIJCQlWYWx1ZQotICk7Ci0KLU5UU1RBVFVTCi1S
VFVTQldyaXRlUkZSZWdpc3RlcgotKAotIElOCVBSVDI1NzBBREFQVEVSCXBBZGFwdGVyLAotIElO
CVVMT05HCQkJVmFsdWUKLSApOwotCi1OVFNUQVRVUwotUlRVU0JSZWFkRUVQUk9NCi0oCi0gSU4J
UFJUMjU3MEFEQVBURVIJcEFkYXB0ZXIsCi0gVVNIT1JUCQkJCU9mZnNldCwKLSBQVUNIQVIJCQkJ
cERhdGEsCi0gVVNIT1JUCQkJCWxlbmd0aAotICk7Ci0KLU5UU1RBVFVTCi1SVDI1NzBXcml0ZUVF
UFJPTQotKAotIElOCVBSVDI1NzBBREFQVEVSCXBBZGFwdGVyLAotIFVTSE9SVAkJCQlPZmZzZXQs
Ci0gUFVDSEFSCQkJCXBEYXRhLAotIFVTSE9SVAkJCQlsZW5ndGgKLSApOwotCi0KLVZPSUQKLSAg
VXNiQnVpbGRWZW5kb3JSZXF1ZXN0KAotICAgIElOIFBSVDI1NzBBREFQVEVSCXBBZGFwdGVyLAot
ICAgIElOIFBVUkIJVXJiLAotICAgIElOIFVTSE9SVCAgRnVuY3Rpb24sCi0gICAgSU4gVVNIT1JU
ICBMZW5ndGgsCi0gICAgSU4gVUxPTkcgIFRyYW5zZmVyRmxhZ3MsCi0gICAgSU4gVUNIQVIgIFJl
c2VydmVkQml0cywKLSAgICBJTiBVQ0hBUiAgUmVxdWVzdCwKLSAgICBJTiBVU0hPUlQgIFZhbHVl
LAotICAgIElOIFVTSE9SVCAgSW5kZXgsCi0gICAgSU4gUFZPSUQgIFRyYW5zZmVyQnVmZmVyICwK
LSAgICBJTiBQTURMICBUcmFuc2ZlckJ1ZmZlck1ETCAsCi0gICAgSU4gVUxPTkcgIFRyYW5zZmVy
QnVmZmVyTGVuZ3RoLAotICAgIElOIFBVUkIgIExpbmsKLSAgICApOwotCi0KLXZvaWQgbW9kX3Vz
ZShVQ0hBUiBhLCBQUlQyNTcwQURBUFRFUiBwQWRhcHRlcik7Ci0KLQotCi0KLSNpZiAwCi1WT0lE
Ci1FbnF1ZXVlQ21kCi0oCi0gUENtZFEJY21kcSwKLSBQQ21kUUVsbXQJY21kZWxtdAotICk7Ci0j
ZWxzZQotI2RlZmluZSBFbnF1ZXVlQ21kKGNtZHEsIGNtZHFlbG10KSBcCi17IFwKLQlpZiAoY21k
cS0+c2l6ZSA9PSAwKSBcCi0JCWNtZHEtPmhlYWQgPSBjbWRxZWxtdDsgXAotCWVsc2UgXAotCQlj
bWRxLT50YWlsLT5uZXh0ID0gY21kcWVsbXQ7IFwKLQljbWRxLT50YWlsID0gY21kcWVsbXQ7IFwK
LQljbWRxZWxtdC0+bmV4dCA9IE5VTEw7IFwKLQljbWRxLT5zaXplKys7IFwKLX0KLSNlbmRpZgot
Ci0KLVZPSUQKLUVucXVldWVJbnRlcm5hbENtZAotKAotIFBSVDI1NzBBREFQVEVSCXBBZGFwdGVy
LAotIE5ESVNfT0lECQlPaWQKLSApOwotCi1WT0lECi1EZXF1ZXVlQ21kCi0oCi0gUENtZFEJY21k
cSwKLSBQQ21kUUVsbXQJKnBjbWRlbG10Ci0gKTsKLQotCi0vL2JsdWUKLSNpZiAwCi1WT0lECi1J
bml0aWFsaXplQnVsa091dFF1ZXVlCi0oCi0gUEJVTEtfT1VUX1FVRVVFCWNtZHEKLSApOwotCi0K
LVZPSUQKLUVucXVldWVCdWxrT3V0Ci0oCi0gUEJVTEtfT1VUX1FVRVVFCWNtZHEsCi0gUEJVTEtf
T1VUX1FVRVVFX0VMRU1FTlQJY21kZWxtdAotICk7Ci0KLVZPSUQKLURlcXVldWVCdWxrT3V0Ci0o
Ci0gUEJVTEtfT1VUX1FVRVVFCWNtZHEsCi0gUEJVTEtfT1VUX1FVRVVFX0VMRU1FTlQJKnBjbWRl
bG10Ci0gKTsKLSNlbmRpZgotCi1WT0lECi1Jbml0aWFsaXplRGF0YUJ1bGtPdXRRdWV1ZQotKAot
IFBSVDI1NzBBREFQVEVSCXBBZGFwdGVyCi0gKTsKLQotI2lmIDAKLVZPSUQKLUVucXVldWVEYXRh
QnVsa091dAotKAotIFBSVDI1NzBBREFQVEVSCXBBZGFwdGVyLAotIFBORElTX1BBQ0tFVAljbWRl
bG10Ci0gKTsKLQotVk9JRAotRGVxdWV1ZURhdGFCdWxrT3V0Ci0oCi0gUFJUMjU3MEFEQVBURVIJ
cEFkYXB0ZXIsCi0gUE5ESVNfUEFDS0VUCSpwY21kZWxtdAotICk7Ci0jZWxzZQotCi0jZGVmaW5l
IEVucXVldWVEYXRhQnVsa091dChwQWRhcHRlciwgY21kcWVsbXQpIFwKLXsgXAotCVBEQVRBX0JV
TEtPVVRfUVVFVUUJY21kcSA9ICYocEFkYXB0ZXItPkRhdGFRKTsgXAotCWlmIChjbWRxLT5zaXpl
ID09IDApIFwKLQkJY21kcS0+aGVhZCA9IGNtZHFlbG10OyBcCi0JZWxzZSBcCi0JCSooR0VUX05F
WFRfUEFDS0VUX0lOX0JVTEtPVVRfUVVFVUUoY21kcS0+dGFpbCkpID0gY21kcWVsbXQ7IFwKLQlj
bWRxLT50YWlsID0gY21kcWVsbXQ7IFwKLQljbWRxLT5zaXplKys7IFwKLQkqKEdFVF9ORVhUX1BB
Q0tFVF9JTl9CVUxLT1VUX1FVRVVFKGNtZHFlbG10KSkgPSBOVUxMOyBcCi19Ci0KLSNkZWZpbmUg
RGVxdWV1ZURhdGFCdWxrT3V0KHBBZGFwdGVyLCBwY21kcWVsbXQpIFwKLXsgXAotCVBEQVRBX0JV
TEtPVVRfUVVFVUUJY21kcSA9ICYocEFkYXB0ZXItPkRhdGFRKTsgXAotCSpwY21kcWVsbXQgPSBj
bWRxLT5oZWFkOyBcCi0JY21kcS0+aGVhZCA9ICooR0VUX05FWFRfUEFDS0VUX0lOX0JVTEtPVVRf
UVVFVUUoKnBjbWRxZWxtdCkpOyBcCi0JY21kcS0+c2l6ZS0tOyBcCi0JaWYgKGNtZHEtPnNpemUg
PT0gMCkgXAotCQljbWRxLT50YWlsID0gTlVMTDsgXAotfQotCi0KLSNlbmRpZgotCi1WT0lECi1J
bml0aWFsaXplTUxNRUJ1bGtPdXRRdWV1ZQotKAotIFBSVDI1NzBBREFQVEVSCXBBZGFwdGVyCi0g
KTsKLQotI2lmIDAKLVZPSUQKLUVucXVldWVNTE1FQnVsa091dAotKAotIFBSVDI1NzBBREFQVEVS
CXBBZGFwdGVyLAotIFBNR01UX1NUUlVDCWNtZGVsbXQKLSApOwotCi1WT0lECi1EZXF1ZXVlTUxN
RUJ1bGtPdXQKLSgKLSBQUlQyNTcwQURBUFRFUglwQWRhcHRlciwKLSBQTUdNVF9TVFJVQwkqcGNt
ZGVsbXQKLSApOwotI2Vsc2UKLSNkZWZpbmUgRW5xdWV1ZU1MTUVCdWxrT3V0KHBBZGFwdGVyLCBj
bWRxZWxtdCkgXAoteyBcCi0JUE1MTUVfQlVMS09VVF9RVUVVRQljbWRxID0gJihwQWRhcHRlci0+
TUxNRVEpOyBcCi0JaWYgKGNtZHEtPnNpemUgPT0gMCkgXAotCQljbWRxLT5oZWFkID0gY21kcWVs
bXQ7IFwKLQllbHNlIFwKLSAJCWNtZHEtPnRhaWwtPm5leHQgPSBjbWRxZWxtdDsgXAotIAljbWRx
LT50YWlsID0gY21kcWVsbXQ7IFwKLQljbWRxLT5zaXplKys7IFwKLQljbWRxZWxtdC0+bmV4dCA9
IE5VTEw7IFwKLX0KLQotI2RlZmluZSBEZXF1ZXVlTUxNRUJ1bGtPdXQocEFkYXB0ZXIsIHBjbWRx
ZWxtdCkgXAoteyBcCi0JUE1MTUVfQlVMS09VVF9RVUVVRQljbWRxID0gJihwQWRhcHRlci0+TUxN
RVEpOyBcCi0JKnBjbWRxZWxtdCA9IGNtZHEtPmhlYWQ7IFwKLQljbWRxLT5oZWFkID0gKCpwY21k
cWVsbXQpLT5uZXh0OyBcCi0JY21kcS0+c2l6ZS0tOyBcCi0JaWYgKGNtZHEtPnNpemUgPT0gMCkg
XAotCQljbWRxLT50YWlsID0gTlVMTDsgXAotfQotI2VuZGlmCi0KLU5ESVNfU1RBVFVTIFJUTVBG
cmVlRGVzY3JpcHRvclJlcXVlc3QoCi0JSU4JCVBSVDI1NzBBREFQVEVSCXBBZGFwdGVyLAotCUlO
CQlVQ0hBUgkJCVJpbmdUeXBlLAotCUlOCQlVQ0hBUgkJCU51bWJlclJlcXVpcmVkKTsKLQotCi1W
T0lEIE1sbWVTdXNwZW5kKAotICAgIElOCVBSVDI1NzBBREFQVEVSCXBBZGFwdGVyKTsKLQotVk9J
RCBNbG1lUmVzdW1lKAotICAgIElOCVBSVDI1NzBBREFQVEVSCXBBZGFwdGVyKTsKLQotI2lmZGVm
IFRFU1RfTU9ERV9TVVBQT1JUCi1OVFNUQVRVUwotVVNCX0J1bGtPdXQKLSgKLSBQUlQyNTcwQURB
UFRFUiBwQWRhcHRlciwKLSBVU0hPUlQJbGVuZ3RoLAotIFBWT0lEIGJ1ZmZlcgotICk7Ci0KLS8v
Ymx1ZQotI2lmIDAKLVZPSUQKLUJ1bGtJbk9uZVBhY2tldAotKAotIFBSVDI1NzBBREFQVEVSIEFk
YXB0ZXIKLSApOwotI2VuZGlmCi0KLVZPSUQKLUJ1bGtJblBhY2tldHMKLSgKLSBQUlQyNTcwQURB
UFRFUiBBZGFwdGVyCi0gKTsKLQotVk9JRAotQnVsa091dFBhY2tldHMKLSgKLSBQUlQyNTcwQURB
UFRFUiBwQWRhcHRlciwKLSBVU0hPUlQgbGVuZ3RoLCBQVk9JRCBidWZmZXIKLSApOwotI2VuZGlm
Ci0KLSNpZmRlZiBSQUxJTktfQVRFCi1WT0lEIERpc2FibGVNbG1lKAotICAgIElOIFBSVDI1NzBB
REFQVEVSIHBBZCk7IAotCi1WT0lEIFJlZW5hYmxlTWxtZSgKLSAgICBJTiBQUlQyNTcwQURBUFRF
UiBwQWQpOyAKLSNlbmRpZgotCi1WT0lEIEJ1aWxkQ2hhbm5lbExpc3QoCi0gICAgSU4gUFJUMjU3
MEFEQVBURVIgcEFkYXB0ZXIpOwotCi1VQ0hBUiBGaXJzdENoYW5uZWwoCi0gICAgSU4JUFJUMjU3
MEFEQVBURVIJcEFkYXB0ZXIpOwotCi1VQ0hBUiBOZXh0Q2hhbm5lbCgKLSAgICBJTglQUlQyNTcw
QURBUFRFUglwQWRhcHRlciwgCi0gICAgSU4gIFVDSEFSIGNoYW5uZWwpOwotCi1WT0lEIFJhaXNl
Q2xvY2soCi0gICAgSU4JUFJUMjU3MEFEQVBURVIJcEFkLAotICAgIElOICBVTE9ORyAqeCk7Ci0K
LVZPSUQgTG93ZXJDbG9jaygKLSAgICBJTglQUlQyNTcwQURBUFRFUglwQWQsCi0gICAgSU4gIFVM
T05HICp4KTsKLQotVVNIT1JUIFNoaWZ0SW5CaXRzKAotICAgIElOCVBSVDI1NzBBREFQVEVSCXBB
ZCk7Ci0KLVZPSUQgU2hpZnRPdXRCaXRzKAotICAgIElOCVBSVDI1NzBBREFQVEVSCXBBZCwKLSAg
ICBJTiAgVVNIT1JUIGRhdGEsCi0gICAgSU4gIFVTSE9SVCBjb3VudCk7Ci0KLVZPSUQgRUVwcm9t
Q2xlYW51cCgKLSAgICBJTglQUlQyNTcwQURBUFRFUglwQWQpOwotCi1WT0lEIEVXRFMoCi0JSU4J
UFJUMjU3MEFEQVBURVIJcEFkKTsKLQotVk9JRCBFV0VOKAotCUlOCVBSVDI1NzBBREFQVEVSCXBB
ZCk7Ci0gICAgCi1VU0hPUlQgUlRNUF9FRVBST01fUkVBRDE2KAotICAgIElOCVBSVDI1NzBBREFQ
VEVSCXBBZCwKLSAgICBJTiAgVVNIT1JUIE9mZnNldCk7Ci0KLVZPSUQgUlRNUF9FRVBST01fV1JJ
VEUxNigKLSAgICBJTglQUlQyNTcwQURBUFRFUglwQWQsCi0gICAgSU4gIFVTSE9SVCBPZmZzZXQs
Ci0gICAgSU4gIFVTSE9SVCBEYXRhKTsKLQotVUNIQVIgQ2hhbm5lbFNhbml0eSgKLSAgICBJTiBQ
UlQyNTcwQURBUFRFUiBwQWQsIAotICAgIElOIFVDSEFSIGNoYW5uZWwpOwotICAgIAotLy8KLS8v
IFByb3RvdHlwZXMgb2YgZnVuY3Rpb24gZGVmaW5pdGlvbiBpbiBydG1wX3RraXAuYwotLy8KLVZP
SUQJUlRNUEluaXRUa2lwRW5naW5lKAotCUlOCVBSVDI1NzBBREFQVEVSCXBBZGFwdGVyLAkKLQlJ
TglQVUNIQVIJCQlwVEtleSwKLQlJTglVQ0hBUgkJCUtleUlkLAotCUlOCVBVQ0hBUgkJCXBUQSwK
LQlJTglQVUNIQVIJCQlwTUlDS2V5LAotCUlOCVBVQ0hBUgkJCXBUU0MsCi0JSU4JSU5UCQkJCURv
RW5jcnlwdCwKLQlPVVQgUFVMT05HCQkJcElWMTYsCi0JT1VUIFBVTE9ORwkJCXBJVjMyLAotCUlO
CVBVQ0hBUgkJCXBEZXN0KTsKLQotQk9PTEVBTglSVE1QVGtpcENvbXBhcmVNSUNWYWx1ZSgKLQlJ
TglQUlQyNTcwQURBUFRFUglwQWRhcHRlciwKLQlJTglQVUNIQVIJCQlwU3JjLAotCUlOCVBVQ0hB
UgkJCXBEQSwKLQlJTglQVUNIQVIJCQlwU0EsCi0JSU4JUFVDSEFSCQkJcE1JQ0tleSwKLQlJTglV
SU5UCQkJTGVuKTsKLQotVk9JRAlSVE1QQ2FsY3VsYXRlTUlDVmFsdWUoCi0JSU4JUFJUMjU3MEFE
QVBURVIJcEFkYXB0ZXIsCi0JSU4Jc3RydWN0IHNrX2J1ZmYgCSpwUGFja2V0LAotCUlOCVBVQ0hB
UgkJCXBFbmNhcCwKLQlJTglJTlQJCQkJTGVuRW5jYXAsCi0JSU4JUFdQQV9LRVkJCXBXcGFLZXkp
OwotCi1WT0lEIFJUTVBUa2lwTWl4VEtleSgKLQlJTglQVEtJUF9LRVlfSU5GTwlwVGtpcCwKLQlJ
TglQVUNIQVIJCQlwVEtleSwKLQlJTglQVUNIQVIJCQlwVEEJKTsKLQotQk9PTEVBTglSVE1QVGtp
cENvbXBhcmVNSUNWYWx1ZVdpdGhMTEMoCi0JSU4JUFJUMjU3MEFEQVBURVIJcEFkYXB0ZXIsCi0J
SU4JUFVDSEFSCQkJcExMQywKLQlJTglQVUNIQVIJCQlwU3JjLAotCUlOCVBVQ0hBUgkJCXBEQSwK
LQlJTglQVUNIQVIJCQlwU0EsCi0JSU4JUFVDSEFSCQkJcE1JQ0tleSwKLQlJTglVSU5UCQkJTGVu
KTsKLQotQk9PTEVBTiBSVE1QU29mdERlY3J5cHRUS0lQKAotCUlOIFBSVDI1NzBBREFQVEVSIHBB
ZGFwdGVyLAotCUlOIFBVQ0hBUglwRGF0YSwKLQlJTiBVTE9ORwlEYXRhQnl0ZUNudCwgCi0JSU4g
UFdQQV9LRVkJcFdwYUtleSk7Ci0KLU5ESVNfU1RBVFVTCVJUTVBXUEFBZGRLZXlQcm9jKAotCUlO
CVBSVDI1NzBBREFQVEVSCXBBZGFwdGVyLAotCUlOCVBWT0lECQkJcEJ1Zik7Ci0KLU5ESVNfU1RB
VFVTCVJUTVBXUEFSZW1vdmVLZXlQcm9jKAotCUlOCVBSVDI1NzBBREFQVEVSCXBBZGFwdGVyLAot
CUlOCVBWT0lECQkJcEJ1Zik7Ci0KLVZPSUQJUlRNUFdQQVJlbW92ZUFsbEtleXMoCi0JSU4JUFJU
MjU3MEFEQVBURVIJcEFkYXB0ZXIpOwotCi1WT0lECVJUTVBTZXRQaHlNb2RlKAotCUlOCVBSVDI1
NzBBREFQVEVSCXBBZGFwdGVyLAotCUlOICBVTE9ORyBwaHltb2RlKTsKLQotVk9JRCAgICBSVDI1
NzBTZXREZXNpcmVkUmF0ZXMoCi0gICAgSU4gIFBSVDI1NzBBREFQVEVSCXBBZGFwdGVyLAotICAg
IElOICBMT05HICAgICAgICAgICAgUmF0ZXMpOwotSU5UIFNldF9SMTdfUHJvYygKLQlJTglQUlQy
NTcwQURBUFRFUgkgcEFkYXB0ZXIsIAotCUlOCVBVQ0hBUgkJCWFyZyk7Ci0KLUlOVCBSZWFkX1Ix
N19Qcm9jKAotCUlOCVBSVDI1NzBBREFQVEVSCSBwQWRhcHRlciwgCi0JSU4JUFVDSEFSCQkJYXJn
KTsKLQotaW50IHVzYl9ydDI1NzBfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYsIHN0
cnVjdCBpZnJlcSAqcnEsIGludCBjbWQpOwotCi1WT0lECi1LaWNrQnVsa091dAotKAotIFBSVDI1
NzBBREFQVEVSIHBBZGFwdGVyLAotIEJPT0xFQU4JSW5CdXJzdAotICk7Ci0KLVZPSUQKLUJ1bGtP
dXRCZWFjb24wCi0oCi0gUFJUMjU3MEFEQVBURVIJcEFkYXB0ZXIKLSApOwotCi1WT0lECi1SZWpl
Y3RQZW5kaW5nUGFja2V0cwotKAotIFBSVDI1NzBBREFQVEVSIHBBZGFwdGVyCi0gKTsKLQotVk9J
RAotQ2xlYW5VcE1MTUVXYWl0UXVldWUKLSgKLSBJTglQUlQyNTcwQURBUFRFUglwQWRhcHRlcgot
ICk7Ci0KLSNpZiAwCi1WT0lECi1DbGVhblVwQnVsa091dFF1ZXVlcwotKAotIFBSVDI1NzBBREFQ
VEVSIHBBZGFwdGVyLAotIEJVTEtfT1VUX1RZUEUJdHlwZQotICk7Ci0jZW5kaWYKLQotVk9JRAot
Q2xlYW5VcERhdGFCdWxrT3V0UXVldWUKLSgKLSBQUlQyNTcwQURBUFRFUiBwQWRhcHRlcgotICk7
Ci0KLVZPSUQKLUNsZWFuVXBNTE1FQnVsa091dFF1ZXVlCi0oCi0gUFJUMjU3MEFEQVBURVIgcEFk
YXB0ZXIKLSApOwotCi1WT0lECi1DYW5jZWxQZW5kaW5nSVJQcwotKAotIElOIFBSVDI1NzBBREFQ
VEVSIHBBZGFwdGVyCi0gKTsKLQotVk9JRAotQ2FuY2VsUGVuZGluZ0J1bGtPdXRJUlAKLSgKLSBQ
UlQyNTcwQURBUFRFUiBwQWRhcHRlcgotICk7Ci0KLVZPSUQKLUNhbmNlbFBlbmRpbmdCdWxrSW5J
UlBfYmgKLSgKLSBQUlQyNTcwQURBUFRFUiBwQWRhcHRlcgotICk7Ci0KLQotCi0vLwotLy8gUHJv
dG90eXBlcyBvZiBmdW5jdGlvbiBkZWZpbml0aW9uIGZvciAqaXdwcml2KiBpbiBydG1wX2luZm8u
YwotLy8KLUlOVCBTZXRfQ291bnRyeVJlZ2lvbl9Qcm9jKAotICAgIElOICBQUlQyNTcwQURBUFRF
UglwQWRhcHRlciwgCi0gICAgSU4gIFBVQ0hBUiAgICAgICAgICBhcmcpOwotCi1JTlQgU2V0X1NT
SURfUHJvYygKLSAgICBJTiAgUFJUMjU3MEFEQVBURVIgICBwQWRhcHRlciwgCi0gICAgSU4gIFBV
Q0hBUiAgICAgICAgICBhcmcpOwotCi1JTlQgU2V0X1dpcmVsZXNzTW9kZV9Qcm9jKAotICAgIElO
ICBQUlQyNTcwQURBUFRFUiAgIHBBZGFwdGVyLCAKLSAgICBJTiAgUFVDSEFSICAgICAgICAgIGFy
Zyk7Ci0KLUlOVCBTZXRfVHhSYXRlX1Byb2MoCi0gICAgSU4gIFBSVDI1NzBBREFQVEVSICAgcEFk
YXB0ZXIsIAotICAgIElOICBQVUNIQVIgICAgICAgICAgYXJnKTsKLQotSU5UIFNldF9DaGFubmVs
X1Byb2MoCi0gICAgSU4gIFBSVDI1NzBBREFQVEVSICAgcEFkYXB0ZXIsIAotICAgIElOICBQVUNI
QVIgIAotICAgIGFyZyk7Ci0KLUlOVCBTZXRfQkdQcm90ZWN0aW9uX1Byb2MoCi0gICAgSU4gIFBS
VDI1NzBBREFQVEVSICAgcEFkYXB0ZXIsIAotICAgIElOICBQVUNIQVIgICAgICAgICAgYXJnKTsK
LQotSU5UIFNldF9UeFByZWFtYmxlX1Byb2MoCi0gICAgSU4gIFBSVDI1NzBBREFQVEVSICAgcEFk
YXB0ZXIsIAotICAgIElOICBQVUNIQVIgICAgICAgICAgYXJnKTsKLQotSU5UIFNldF9SVFNUaHJl
c2hvbGRfUHJvYygKLSAgICBJTiAgUFJUMjU3MEFEQVBURVIgICBwQWRhcHRlciwgCi0gICAgSU4g
IFBVQ0hBUiAgICAgICAgICBhcmcpOwotCi1JTlQgU2V0X0ZyYWdUaHJlc2hvbGRfUHJvYygKLSAg
ICBJTiAgUFJUMjU3MEFEQVBURVIgICBwQWRhcHRlciwgCi0gICAgSU4gIFBVQ0hBUiAgICAgICAg
ICBhcmcpOwotCi1JTlQgU2V0X1R4QnVyc3RfUHJvYygKLSAgICBJTiAgUFJUMjU3MEFEQVBURVIg
ICBwQWRhcHRlciwgCi0gICAgSU4gIFBVQ0hBUiAgICAgICAgICBhcmcpOwotCi1JTlQgU2V0X1R1
cmJvUmF0ZV9Qcm9jKAotICAgIElOICBQUlQyNTcwQURBUFRFUiAgIHBBZGFwdGVyLCAKLSAgICBJ
TiAgUFVDSEFSICAgICAgICAgIGFyZyk7Ci0KLUlOVCBTZXRfQXV0aE1vZGVfUHJvYygKLSAgICBJ
TiAgUFJUMjU3MEFEQVBURVIgICBwQWRhcHRlciwgCi0gICAgSU4gIFBVQ0hBUiAgICAgICAgICBh
cmcpOwotCi1JTlQgU2V0X0VuY3J5cFR5cGVfUHJvYygKLSAgICBJTiAgUFJUMjU3MEFEQVBURVIg
ICBwQWRhcHRlciwgCi0gICAgSU4gIFBVQ0hBUiAgICAgICAgICBhcmcpOwotCi1JTlQgU2V0X0Rl
ZmF1bHRLZXlJRF9Qcm9jKAotICAgIElOICBQUlQyNTcwQURBUFRFUiAgIHBBZGFwdGVyLCAKLSAg
ICBJTiAgUFVDSEFSICAgICAgICAgIGFyZyk7Ci0KLUlOVCBTZXRfS2V5MV9Qcm9jKAotICAgIElO
ICBQUlQyNTcwQURBUFRFUiAgIHBBZGFwdGVyLCAKLSAgICBJTiAgUFVDSEFSICAgICAgICAgIGFy
Zyk7Ci0KLUlOVCBTZXRfS2V5Ml9Qcm9jKAotICAgIElOICBQUlQyNTcwQURBUFRFUiAgIHBBZGFw
dGVyLCAKLSAgICBJTiAgUFVDSEFSICAgICAgICAgIGFyZyk7Ci0KLUlOVCBTZXRfS2V5M19Qcm9j
KAotICAgIElOICBQUlQyNTcwQURBUFRFUiAgIHBBZGFwdGVyLCAKLSAgICBJTiAgUFVDSEFSICAg
ICAgICAgIGFyZyk7Ci0KLUlOVCBTZXRfS2V5NF9Qcm9jKAotICAgIElOICBQUlQyNTcwQURBUFRF
UiAgIHBBZGFwdGVyLCAKLSAgICBJTiAgUFVDSEFSICAgICAgICAgIGFyZyk7Ci0KLUlOVCBTZXRf
V1BBUFNLX1Byb2MoCi0gICAgSU4gIFBSVDI1NzBBREFQVEVSICAgcEFkYXB0ZXIsIAotICAgIElO
ICBQVUNIQVIgICAgICAgICAgYXJnKTsKLQotI2lmZGVmIFJUMjUwMF9EQkcKLVZPSUQgUlRNUElv
Y3RsQkJQKAotICAgIElOICBQUlQyNTcwQURBUFRFUiAgIHBBZGFwdGVyLAotICAgIElOICBzdHJ1
Y3QgaXdyZXEgICAgKndycSk7Ci0KLVZPSUQgUlRNUElvY3RsTUFDKAotICAgIElOICBQUlQyNTcw
QURBUFRFUiAgIHBBZGFwdGVyLAotICAgIElOICBzdHJ1Y3QgaXdyZXEgICAgKndycSk7Ci0jZW5k
aWYKLQotCi0KLS8vCi0vLyBwcm90b3R5cGUgaW4gd3BhLmMKLS8vCi1CT09MRUFOIFdwYU1zZ1R5
cGVTdWJzdCgKLSAgICBJTiAgVUNIQVIgICBFQVBUeXBlLAotICAgIE9VVCBVTE9ORyAgICpNc2dU
eXBlKTsKLQotVk9JRCBXcGFQc2tTdGF0ZU1hY2hpbmVJbml0KAotICAgIElOICBQUlQyNTcwQURB
UFRFUiAgICAgICBwQWQsIAotICAgIElOICBTVEFURV9NQUNISU5FICAgICAgICpTLCAKLSAgICBP
VVQgU1RBVEVfTUFDSElORV9GVU5DIFRyYW5zW10pOwotCi1WT0lEIFdwYUVBUE9MS2V5QWN0aW9u
KAotICAgIElOICBQUlQyNTcwQURBUFRFUiAgIHBBZGFwdGVyLCAKLSAgICBJTiAgTUxNRV9RVUVV
RV9FTEVNICpFbGVtKTsKLQotVk9JRCAgICBXcGFQYWlyTXNnMUFjdGlvbigKLSAgICBJTiAgUFJU
MjU3MEFEQVBURVIgICBwQWRhcHRlciwgCi0gICAgSU4gIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSk7
Ci0KLVZPSUQgICAgV3BhUGFpck1zZzNBY3Rpb24oCi0gICAgSU4gIFBSVDI1NzBBREFQVEVSICAg
cEFkYXB0ZXIsIAotICAgIElOICBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pOyAKLQotVk9JRCAgICBX
cGFHcm91cE1zZzFBY3Rpb24oCi0gICAgSU4gIFBSVDI1NzBBREFQVEVSICAgcEFkYXB0ZXIsIAot
ICAgIElOICBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pOwotCi1WT0lEICAgIFdwYU1hY0hlYWRlcklu
aXQoCi0gICAgSU4gICAgICBQUlQyNTcwQURBUFRFUiAgIHBBZCwgCi0gICAgSU4gT1VUICBQSEVB
REVSXzgwMl8xMSAgSGRyLCAKLSAgICBJTiAgICAgIFVDSEFSICAgICAgICAgICB3ZXAsIAotICAg
IElOICAgICAgUE1BQ0FERFIgICAgICAgIHBBZGRyMSk7IAotCi1WT0lEICAgIFdwYUhhcmRFbmNy
eXB0KAotICAgIElOICBQUlQyNTcwQURBUFRFUiAgIHBBZGFwdGVyLAotICAgIElOICBQVUNIQVIg
ICAgICAgICAgcFBhY2tldCwKLSAgICBJTiAgVUxPTkcgICAgICAgICAgIExlbik7Ci0KLVZPSUQg
ICAgSE1BQ19TSEExKAotICAgIElOICBVQ0hBUiAgICp0ZXh0LAotICAgIElOICBVSU5UICAgIHRl
eHRfbGVuLAotICAgIElOICBVQ0hBUiAgICprZXksCi0gICAgSU4gIFVJTlQgICAga2V5X2xlbiwK
LSAgICBJTiAgVUNIQVIgICAqZGlnZXN0KTsKLSB2b2lkIGhtYWNfc2hhMSh1bnNpZ25lZCBjaGFy
ICp0ZXh0LCBpbnQgdGV4dF9sZW4sIHVuc2lnbmVkIGNoYXIgKmtleSwgaW50IGtleV9sZW4sIHVu
c2lnbmVkIGNoYXIgKmRpZ2VzdCk7Ci0KLVZPSUQgICAgUFJGKAotICAgIElOICBVQ0hBUiAgICpr
ZXksCi0gICAgSU4gIElOVCAgICAga2V5X2xlbiwKLSAgICBJTiAgVUNIQVIgICAqcHJlZml4LAot
ICAgIElOICBJTlQgICAgIHByZWZpeF9sZW4sCi0gICAgSU4gIFVDSEFSICAgKmRhdGEsCi0gICAg
SU4gIElOVCAgICAgZGF0YV9sZW4sCi0gICAgT1VUIFVDSEFSICAgKm91dHB1dCwKLSAgICBJTiAg
SU5UICAgICBsZW4pOwotCi1WT0lEIFdwYUNvdW50UFRLKAotICAgIElOICBVQ0hBUiAgICpQTUss
Ci0gICAgSU4gIFVDSEFSICAgKkFOb25jZSwKLSAgICBJTiAgVUNIQVIgICAqQUEsCi0gICAgSU4g
IFVDSEFSICAgKlNOb25jZSwKLSAgICBJTiAgVUNIQVIgICAqU0EsCi0gICAgT1VUIFVDSEFSICAg
Km91dHB1dCwKLSAgICBJTiAgVUlOVCAgICBsZW4pOwotCi1WT0lEICAgIEdlblJhbmRvbSgKLSAg
ICBJTiAgUFJUMjU3MEFEQVBURVIgICBwQWQsIAotICAgIE9VVCBVQ0hBUiAgICAgICAgICAgKnJh
bmRvbSk7Ci0KLVZPSUQgICAgQUVTX0dUS19LRVlfVU5XUkFQKCAKLSAgICBJTiAgVUNIQVIgICAq
a2V5LAotICAgIE9VVCBVQ0hBUiAgICpwbGFpbnRleHQsCi0gICAgSU4gIFVDSEFSICAgKmNpcGhl
cnRleHQpOwotCi0KLS8vCi0vLyBTSEEgY29udGV4dAotLy8KLXR5cGVkZWYJc3RydWN0IF9TSEFf
Q1RYCi17Ci0gICAgVUxPTkcgICBCdWZbNV07ICAgICAgICAgICAgIC8vIGJ1ZmZlcnMgb2YgZml2
ZSBzdGF0ZXMKLQlVQ0hBUiAgIElucHV0WzgwXTsgICAgICAgICAgLy8gaW5wdXQgbWVzc2FnZQot
CVVMT05HICAgTGVuSW5CaXRDb3VudFsyXTsgICAvLyBsZW5ndGggY291bnRlciBmb3IgaW5wdXQg
bWVzc2FnZSwgMCB1cCB0byA2NCBiaXRzCi0JCi19CVNIQV9DVFg7Ci0gICAgCi0gICAgCi1WT0lE
IEJ1bGtPdXRXcGFQc2tGcmFtZSggUFJUMjU3MEFEQVBURVIJcEFkKTsKLQotVk9JRAlSVE1QVGtp
cEVuY3J5cHREYXRhKAotCUlOCVBSVDI1NzBBREFQVEVSCXBBZGFwdGVyLAkKLQlJTglQVUNIQVIJ
CQlwU3JjLAotCUlOCVBVQ0hBUgkJCXBEZXN0LAotCUlOCVVJTlQJCQlMZW4pOwotCi1WT0lEICAg
IFJUTVBJbml0TUlDRW5naW5lKAotICAgIElOICBQUlQyNTcwQURBUFRFUiBwQWRhcHRlciwgICAK
LSAgICBJTiAgUFVDSEFSICAgICAgICAgIHBLZXksCi0gICAgSU4gIFBVQ0hBUiAgICAgICAgICBw
REEsCi0gICAgSU4gIFBVQ0hBUiAgICAgICAgICBwU0EsCi0gICAgSU4gIFBVQ0hBUiAgICAgICAg
ICBwTUlDS2V5KTsKLQotCi1WT0lEICAgIFJUTVBUa2lwQXBwZW5kKCAKLSAgICBJTiAgUFRLSVBf
S0VZX0lORk8gIHBUa2lwLCAgCi0gICAgSU4gIFBVQ0hBUiAgICAgICAgICBwU3JjLAotICAgIElO
ICBVSU5UICAgICAgICAgICAgbkJ5dGVzKTsKLQotVk9JRCAgICBSVE1QVGtpcEdldE1JQyggCi0g
ICAgSU4gIFBUS0lQX0tFWV9JTkZPICBwVGtpcCk7Ci0KLXZvaWQgVVNCX1NlbmRXcGFQc2tDb21w
bGV0ZShwdXJiYl90IHBVcmIsc3RydWN0IHB0X3JlZ3MgKnB0X3JlZ3MpOwotLy92b2lkIFVTQl9T
ZW5kV3BhUHNrQ29tcGxldGUocHVyYmJfdCBwVXJiKTsKLQotLy8KLS8vIGV4dHJhIHByb3RvdHlw
ZSBpbiBtZDUuYwotLy8KLVZPSUQgICAgU0hBSW5pdChTSEFfQ1RYICpjdHgpOwotCi0gIFZPSUQg
ICAgU0hBSGFzaEJsb2NrKFNIQV9DVFggKmN0eCk7Ci0KLVVDSEFSIFNIQVVwZGF0ZShTSEFfQ1RY
ICpwQ3R4LCBVQ0hBUiAqcERhdGEsIFVMT05HIExlbkluQnl0ZXMpOwotCi1WT0lEICAgIFNIQUZp
bmFsKFNIQV9DVFggKmN0eCwgdW5zaWduZWQgY2hhciBoYXNob3V0WzIwXSk7Ci0jZW5kaWYgCi0j
aWZuZGVmIF9zdGRpbmNsX2hfT0tfXwotI2RlZmluZSBfc3RkaW5jbF9oX09LX18KLQotCi0KLQot
Ly89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vIGZ1bmN0
aW9ucyBpbiB1c2JyeC5jCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotCi1pbnQgVVNCX1J4UGFja2V0KFBSVDI1NzBBREFQVEVSIEFkYXB0ZXIpOwotCi0v
Lz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gZnVuY3Rp
b25zIGluIHJ0MjU3MF9tYWluLmMKLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0KLVZPSUQgUmVsZWFzZUFkYXB0ZXIoUFJUMjU3MEFEQVBURVIgICBBZGFw
dGVyLCBCT09MRUFOIElzRnJlZSk7Ci0KLQotVk9JRCBSZWplY3RQZW5kaW5nUGFja2V0cyhQUlQy
NTcwQURBUFRFUiBBZGFwdGVyKTsKLQotaW50IENvbnRyb2xUaHJlYWQoSU4gT1VUIFBWT0lEIENv
bnRleHQpOwotCi0KLWludCBUWFRocmVhZChJTiBPVVQgUFZPSUQgIENvbnRleHQpOwotCi0KLUJP
T0xFQU4gUlQyNTcwVXNiUmVzZXQoUFJUMjU3MEFEQVBURVIgICAgQWRhcHRlcik7Ci0KLU5UU1RB
VFVTIFVTQl9SZXNldFBpcGUoUFJUMjU3MEFEQVBURVIgICAgQWRhcHRlciwgCi0gICAgICAgICAg
ICAgICAgICAgICAgIFVJTlQgQnVsa1BpcGUpOwotCi1pbnQgVVNCX0NhbGxVU0JEKFBSVDI1NzBB
REFQVEVSIEFkYXB0ZXIsIAotICAgICAgICAgICAgICAgICAgICAgIElOIFBVUkIgICAgICAgVXJi
KTsKLSNlbmRpZgpkaWZmIC1ydU4gcnQyNTcwLTEuMS4wLWIxL01vZHVsZS9ydF9jb25maWcuaCBy
dDI1NzAtY3ZzLTIwMDUxMjI2MTYvTW9kdWxlL3J0X2NvbmZpZy5oCi0tLSBydDI1NzAtMS4xLjAt
YjEvTW9kdWxlL3J0X2NvbmZpZy5oCTIwMDUtMDctMzAgMTE6NDU6MzkuMDAwMDAwMDAwIC0wNTAw
CisrKyBydDI1NzAtY3ZzLTIwMDUxMjI2MTYvTW9kdWxlL3J0X2NvbmZpZy5oCTIwMDUtMDctMTEg
MDQ6Mzg6MjEuMDAwMDAwMDAwIC0wNTAwCkBAIC00MCwxNiArNDAsMTYgQEAKICNkZWZpbmUgUFJP
RklMRV9QQVRIICAgICAgICAgICAgIi9ldGMvV2lyZWxlc3MvUlQyNTcwU1RBL1JUMjU3MFNUQS5k
YXQiCiAjZGVmaW5lIE5JQ19ERVZJQ0VfTkFNRSAgICAgICAgICJSVDI1MDBVU0JTVEEiCiAjZGVm
aW5lIERSVl9NQUpPUlZFUlNJT04JMQotI2RlZmluZSBEUlZfTUlOT1JWRVJTSU9OCTEKKyNkZWZp
bmUgRFJWX01JTk9SVkVSU0lPTgkwCiAjZGVmaW5lIERSVl9TVUJWRVJTSU9OCQkwCiAjZGVmaW5l
IERSVl9URVNUVkVSU0lPTgkJMAogI2RlZmluZSBEUlZfWUVBUgkJMjAwNQotI2RlZmluZSBEUlZf
TU9OVEgJCTcJCi0jZGVmaW5lIERSVl9EQVkJCQkzMQorI2RlZmluZSBEUlZfTU9OVEgJCTYKKyNk
ZWZpbmUgRFJWX0RBWQkJCTEKIAogI2RlZmluZSBEUlZfTkFNRQkJInJ0MjU3MCIKLSNkZWZpbmUg
RFJWX1ZFUlNJT04JCSIxLjEuMCBCRVRBMSIKLSNkZWZpbmUgRFJWX1JFTERBVEUJCSIyMDA1LzA3
LzMxIgorI2RlZmluZSBEUlZfVkVSU0lPTgkJIjEuMC4wIC0gQ1ZTIgorI2RlZmluZSBEUlZfUkVM
REFURQkJIjIwMDUvMDYvMDEiCiAKIAogLyogT3BlcmF0aW9uYWwgcGFyYW1ldGVycyB0aGF0IGFy
ZSBzZXQgYXQgY29tcGlsZSB0aW1lLiAqLwpkaWZmIC1ydU4gcnQyNTcwLTEuMS4wLWIxL01vZHVs
ZS8uI3J0X2NvbmZpZy5oLjEuMyBydDI1NzAtY3ZzLTIwMDUxMjI2MTYvTW9kdWxlLy4jcnRfY29u
ZmlnLmguMS4zCi0tLSBydDI1NzAtMS4xLjAtYjEvTW9kdWxlLy4jcnRfY29uZmlnLmguMS4zCTIw
MDUtMDctMzAgMTE6NDQ6MzAuMDAwMDAwMDAwIC0wNTAwCisrKyBydDI1NzAtY3ZzLTIwMDUxMjI2
MTYvTW9kdWxlLy4jcnRfY29uZmlnLmguMS4zCTE5NjktMTItMzEgMTg6MDA6MDAuMDAwMDAwMDAw
IC0wNjAwCkBAIC0xLDE5MiArMCwwIEBACi0vKg0KLSAqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gKiBS
YWxpbmsgVGVjaCBJbmMuDQotICogNEYsIE5vLiAyIFRlY2hub2xvZ3kgNXRoIFJkLg0KLSAqIFNj
aWVuY2UtYmFzZWQgSW5kdXN0cmlhbCBQYXJrDQotICogSHNpbi1jaHUsIFRhaXdhbiwgUi5PLkMu
DQotICoNCi0gKiAoYykgQ29weXJpZ2h0IDIwMDItMjAwNCwgUmFsaW5rIFRlY2hub2xvZ3ksIElu
Yy4NCi0gKg0KLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqIA0KLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAqIA0KLSAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yICAgICAqIA0KLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIA0KLSAqICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIA0K
LSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLCAgICAgICAqIA0KLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAqIA0KLSAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAg
ICAqIA0KLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAg
ICAgICAgICAgICAgICAgICAgICAgICAqIA0KLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIA0KLSAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlICAgICAqIA0KLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRv
IHRoZSAgICAgICAgICAgICAgICAgICAgICAgICAqIA0KLSAqIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIA0KLSAq
IDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNB
LiAgICAgICAgICAgICAqIA0KLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIA0KLSAqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioN
Ci0JTW9kdWxlIE5hbWU6DQotCXJ0X2NvbmZpZy5oDQotDQotCUFic3RyYWN0Og0KLQ0KLQlSZXZp
c2lvbiBIaXN0b3J5Og0KLQlXaG8JCQlXaGVuCQkJV2hhdA0KLQktLS0tLS0tLQktLS0tLS0tLS0t
CQktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotCU5hbWUJ
CURhdGUJCQlNb2RpZmljYXRpb24gbG9ncw0KLQlKYW4gTGVlCQkyMDA1LTA2LTAxCQlSZWxlYXNl
DQotCVJvYmluQwkJMDItMDYtMjAwNQkJdXNiX2tpbGxfdXJiIGZpeGVzIGZvciBrZXJuZWxzID0+
Mi42LjcNCi0qLw0KLSNpZm5kZWYJX19SVF9DT05GSUdfSF9fDQotI2RlZmluZQlfX1JUX0NPTkZJ
R19IX18NCi0NCi0jZGVmaW5lIFBST0ZJTEVfUEFUSCAgICAgICAgICAgICAgICAiL2V0Yy9XaXJl
bGVzcy9SVDI1NzBTVEEvUlQyNTcwU1RBLmRhdCINCi0jZGVmaW5lIE5JQ19ERVZJQ0VfTkFNRSAg
ICAgICAgICAgICAicnQyNTcwIg0KLSNkZWZpbmUgRFJWX01BSk9SVkVSU0lPTgkJMQkNCi0jZGVm
aW5lIERSVl9NSU5PUlZFUlNJT04JCTANCi0jZGVmaW5lIERSVl9TVUJWRVJTSU9OCSAgICAgICAg
ICAgICAgICAwDQotI2RlZmluZSBEUlZfVEVTVFZFUlNJT04gICAgICAgICAgICAgICAgIDAJDQot
I2RlZmluZSBEUlZfWUVBUgkJICAgICAgIDIwMDUNCi0jZGVmaW5lIERSVl9NT05USAkJICAgICAg
IDcgDQotI2RlZmluZSBEUlZfREFZCQkgICAgICAgICAgICAgICAxMyANCi0NCi0NCi0NCi0NCi0v
KiBPcGVyYXRpb25hbCBwYXJhbWV0ZXJzIHRoYXQgYXJlIHNldCBhdCBjb21waWxlIHRpbWUuICov
DQotI2lmICFkZWZpbmVkKF9fT1BUSU1JWkVfXykgIHx8ICAhZGVmaW5lZChfX0tFUk5FTF9fKQ0K
LSN3YXJuaW5nICBZb3UgbXVzdCBjb21waWxlIHRoaXMgZmlsZSB3aXRoIHRoZSBjb3JyZWN0IG9w
dGlvbnMhDQotI3dhcm5pbmcgIFNlZSB0aGUgbGFzdCBsaW5lcyBvZiB0aGUgc291cmNlIGZpbGUu
DQotI2Vycm9yICBZb3UgbXVzdCBjb21waWxlIHRoaXMgZHJpdmVyIHdpdGggIi1PIi4NCi0jZW5k
aWYNCi0NCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+DQotI2luY2x1ZGUgPGxpbnV4L3ZlcnNp
b24uaD4NCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+DQotI2luY2x1ZGUgPGxpbnV4L3N0cmlu
Zy5oPg0KLSNpbmNsdWRlIDxsaW51eC90aW1lci5oPg0KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5o
Pg0KLSNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4NCi0vLyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1
cHQuaD4NCi0jaW5jbHVkZSA8bGludXgvcGNpLmg+DQotI2luY2x1ZGUgPGxpbnV4L25ldGRldmlj
ZS5oPg0KLSNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPg0KLSNpbmNsdWRlIDxsaW51eC9z
a2J1ZmYuaD4NCi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPg0KLSNpbmNsdWRlIDxsaW51eC9kZWxh
eS5oPg0KLSNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+DQotI2luY2x1ZGUgPGxpbnV4L3dpcmVs
ZXNzLmg+DQotI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4NCi0jaW5jbHVkZSA8bGludXgvZGVs
YXkuaD4NCi0jaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+DQotI2luY2x1ZGUgPGxpbnV4L2N0eXBl
Lmg+DQotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+DQotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2Nr
Lmg+DQotI2luY2x1ZGUgPGxpbnV4L2ttb2QuaD4NCi0jaW5jbHVkZSA8bGludXgvc2xhYi5oPg0K
LQ0KLS8vdXNiIGhlYWRlciBmaWxlcw0KLSNpbmNsdWRlIDxsaW51eC91c2IuaD4NCi0NCi0jaWYg
TElOVVhfVkVSU0lPTl9DT0RFID49IDB4MjA0MDcNCi0jaW5jbHVkZSA8bGludXgvbWlpLmg+DQot
I2VuZGlmDQotI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4gICAgICAvKiBQcm9jZXNzb3IgdHlw
ZSBmb3IgY2FjaGUgYWxpZ25tZW50LiAqLw0KLSNpbmNsdWRlIDxhc20vYml0b3BzLmg+DQotI2lu
Y2x1ZGUgPGFzbS9pby5oPg0KLSNpbmNsdWRlIDxhc20vaXJxLmg+DQotI2luY2x1ZGUgPGFzbS91
YWNjZXNzLmg+DQotI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4NCi0NCi0vLyBUaGUgdHlwZSBkZWZp
bml0aW9uIGhhcyB0byBiZSBwbGFjZWQgYmVmb3JlIGluY2x1ZGluZyBydDI0NjAuaA0KLSNpZm5k
ZWYgVUxPTkcNCi0jZGVmaW5lIENIQVIgICAgICAgICAgICBjaGFyDQotI2RlZmluZSBJTlQgICAg
ICAgICAgICAgaW50DQotI2RlZmluZSBVSU5UICAgICAgICAgICAgdTMyDQotI2RlZmluZSBVTE9O
RyAgICAgICAgICAgdTMyDQotI2RlZmluZSBVU0hPUlQgICAgICAgICAgdTE2DQotI2RlZmluZSBV
Q0hBUiAgICAgICAgICAgdTgNCi0NCi0jZGVmaW5lIEJPT0xFQU4gICAgICAgICB1OA0KLS8vI2Rl
ZmluZSBMQVJHRV9JTlRFR0VSIHM2NA0KLSNkZWZpbmUgVk9JRCAgICAgICAgICAgIHZvaWQNCi0j
ZGVmaW5lIExPTkcgICAgICAgICAgICBpbnQNCi0jZGVmaW5lIFVMT05HTE9ORyAgICAgICB1NjQN
Ci10eXBlZGVmIFZPSUQgICAgICAgICAgICAqUFZPSUQ7DQotdHlwZWRlZiBDSEFSICAgICAgICAg
ICAgKlBDSEFSOw0KLXR5cGVkZWYgVUNIQVIgICAgICAgICAgICpQVUNIQVI7DQotdHlwZWRlZiBV
U0hPUlQJCSpQVVNIT1JUOw0KLXR5cGVkZWYgTE9ORyAgICAgICAgICAgICpQTE9ORzsNCi10eXBl
ZGVmIFVMT05HICAgICAgICAgICAqUFVMT05HOw0KLQ0KLXR5cGVkZWYgdW5pb24gX0xBUkdFX0lO
VEVHRVIgew0KLSAgICBzdHJ1Y3Qgew0KLSAgICAgICAgVUxPTkcgTG93UGFydDsNCi0gICAgICAg
IExPTkcgSGlnaFBhcnQ7DQotICAgIH12djsNCi0gICAgc3RydWN0IHsNCi0gICAgICAgIFVMT05H
IExvd1BhcnQ7DQotICAgICAgICBMT05HIEhpZ2hQYXJ0Ow0KLSAgICB9IHU7DQotICAgIHM2NCBR
dWFkUGFydDsNCi19IExBUkdFX0lOVEVHRVI7DQotDQotI2VuZGlmDQotDQotI2RlZmluZSBJTg0K
LSNkZWZpbmUgT1VUDQotDQotI2RlZmluZSBUUlVFICAgICAgICAxDQotI2RlZmluZSBGQUxTRSAg
ICAgICAwDQotDQotI2RlZmluZSBFVEhfTEVOR1RIX09GX0FERFJFU1MgICA2DQotDQotI2RlZmlu
ZSBORElTX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5UDQotI2RlZmluZSBO
RElTX1NUQVRVU19TVUNDRVNTICAgICAgICAgICAgICAgICAgICAgMHgwMA0KLSNkZWZpbmUgTkRJ
U19TVEFUVVNfRkFJTFVSRSAgICAgICAgICAgICAgICAgICAgIDB4MDENCi0jZGVmaW5lIE5ESVNf
U1RBVFVTX1JFU09VUkNFUyAgICAgICAgICAgICAgICAgICAweDAzDQotI2RlZmluZSBORElTX1NU
QVRVU19NRURJQV9ESVNDT05ORUNUICAgICAgICAgICAgMHgwNA0KLSNkZWZpbmUgTkRJU19TVEFU
VVNfTUVESUFfQ09OTkVDVCAgICAgICAgICAgICAgIDB4MDUNCi0jZGVmaW5lIE5ESVNfU1RBVFVT
X1JFU0VUICAgICAgICAgICAgICAgICAgICAgMHgwNg0KLQ0KLQ0KLS8vDQotLy8JSHJhZHdhcmUg
cmVsYXRlZCBoZWFkZXIgZmlsZXMNCi0vLw0KLSNpbmNsdWRlCSJydDI1NzAuaCINCi0NCi0vLw0K
LS8vCU1pbmlwb3J0IGRlZmluZWQgaGVhZGVyIGZpbGVzDQotLy8NCi0jaW5jbHVkZQkicnRtcF90
eXBlLmgiDQotI2luY2x1ZGUJInJ0bXBfZGVmLmgiDQotI2luY2x1ZGUgICJvaWQuaCINCi0jaW5j
bHVkZQkibWxtZS5oIg0KLSNpbmNsdWRlICAibWQ1LmgiDQotI2luY2x1ZGUgICJ3cGEuaCINCi0j
aW5jbHVkZSAgInNoYTEuaCINCi0jaW5jbHVkZQkicnQyNTcwc3cuaCINCi0vLyNpbmNsdWRlICAi
U3RkaW5jbC5oIg0KLSNpbmNsdWRlICAicnR1c2IuaCINCi0NCi0NCi0jaWYgTElOVVhfVkVSU0lP
Tl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNSwwKQ0KLSNkZWZpbmUgcnR1c2Jfc3VibWl0X3Vy
YihwdXJiKSB1c2Jfc3VibWl0X3VyYihwdXJiLCBHRlBfS0VSTkVMKSANCi0jZWxzZQ0KLSNkZWZp
bmUgcnR1c2Jfc3VibWl0X3VyYihwdXJiKSB1c2Jfc3VibWl0X3VyYihwdXJiKSANCi0jZW5kaWYN
Ci0NCi0jaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNiw3KSkNCi0J
I2RlZmluZSB1c2Jfa2lsbF91cmIgIHVzYl91bmxpbmtfdXJiDQotI2VuZGlmDQotDQotDQotI2Rl
ZmluZSBfX0JIDQotI2RlZmluZSBSSEVMDQotICNpZm5kZWYgS0VSTkVMX1ZFUlNJT04NCi0jZGVm
aW5lIEtFUk5FTF9WRVJTSU9OKGEsYixjKSAoKGEpKjY1NTM2KyhiKSoyNTYrKGMpKQ0KLSNlbmRp
ZgkvLyBfX1JUX0NPTkZJR19IX18NCi0jaWZuZGVmIFVTQl9TVF9OT0VSUk9SDQotI2RlZmluZSAg
VVNCX1NUX05PRVJST1IgMA0KLSNlbmRpZg0KLSNkZWZpbmUgSU5JVF9GUk9NX0VFUFJPTQ0KLSNk
ZWZpbmUgUlQyNTcwX0RCRwkxDQotI2VuZGlmDQpkaWZmIC1ydU4gcnQyNTcwLTEuMS4wLWIxL01v
ZHVsZS9ydG1wX2RlZi5oIHJ0MjU3MC1jdnMtMjAwNTEyMjYxNi9Nb2R1bGUvcnRtcF9kZWYuaAot
LS0gcnQyNTcwLTEuMS4wLWIxL01vZHVsZS9ydG1wX2RlZi5oCTIwMDUtMDctMzAgMTE6NDQ6MzAu
MDAwMDAwMDAwIC0wNTAwCisrKyBydDI1NzAtY3ZzLTIwMDUxMjI2MTYvTW9kdWxlL3J0bXBfZGVm
LmgJMjAwNS0wOC0wMyAwODo1NDoxMi4wMDAwMDAwMDAgLTA1MDAKQEAgLTQ5LDcgKzQ5LDcgQEAK
ICNkZWZpbmUgUlRfREVCVUdfQURIT0MgICAgICAgMwogCiAjZGVmaW5lIE5JQ19UQUcgICAgICAg
ICAgICAgKChVTE9ORyknMDc1MicpCi0jZGVmaW5lIE5JQ19EQkdfU1RSSU5HICAgICAgKCJSVFVT
QiAgIikKKyNkZWZpbmUgTklDX0RCR19TVFJJTkcgICAgICAiUlRVU0IgICIKIAogLy8KIC8vIHVw
ZGF0ZSB0aGUgZHJpdmVyIHZlcnNpb24gbnVtYmVyIGV2ZXJ5IHRpbWUgeW91IHJlbGVhc2UgYSBu
ZXcgZHJpdmVyCmRpZmYgLXJ1TiBydDI1NzAtMS4xLjAtYjEvTW9kdWxlL3J0bXBfdGtpcC5jIHJ0
MjU3MC1jdnMtMjAwNTEyMjYxNi9Nb2R1bGUvcnRtcF90a2lwLmMKLS0tIHJ0MjU3MC0xLjEuMC1i
MS9Nb2R1bGUvcnRtcF90a2lwLmMJMjAwNS0wNy0zMCAxMTo0NDoyOS4wMDAwMDAwMDAgLTA1MDAK
KysrIHJ0MjU3MC1jdnMtMjAwNTEyMjYxNi9Nb2R1bGUvcnRtcF90a2lwLmMJMjAwNS0wOC0xNyAw
NDowMDozOS4wMDAwMDAwMDAgLTA1MDAKQEAgLTU2MiwxNCArNTYyLDE0IEBACiAJLy8gU2luY2Ug
dGhlIE1JQyB2YWx1ZSBtaWdodCBjcm9zcyBNUERVcy4KIAlpZihtZW1jbXAocEFkYXB0ZXItPlBy
aXZhdGVJbmZvLlJ4Lk1JQywgT2xkTWljLCA4KSAhPSAwKQogCXsKLQkJREJHUFJJTlRfUkFXKFJU
X0RFQlVHX0VSUk9SLCAiISBUS0lQIE1JQyBFcnJvciBMZW49JWQhXG4iLCBMZW4pOyAgLy9NSUMg
ZXJyb3IuCi0JCURCR1BSSU5UX1JBVyhSVF9ERUJVR19JTkZPLCAiT3JpZyBNSUMgdmFsdWUgPSIp
OyAgLy9NSUMgZXJyb3IuCisJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAiISBUS0lQIE1JQyBF
cnJvciBMZW49JWQhXG4iLCBMZW4pOyAgLy9NSUMgZXJyb3IuCisJCURCR1BSSU5UKFJUX0RFQlVH
X0lORk8sICJPcmlnIE1JQyB2YWx1ZSA9ICIpOyAgLy9NSUMgZXJyb3IuCiAJCWZvciAoaSA9IDA7
IGkgPCA4OyBpKyspCiAJCXsKIAkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19JTkZPLCAiJTAyeDoi
LCBPbGRNaWNbaV0pOyAgLy9NSUMgZXJyb3IuCiAJCX0KIAkJREJHUFJJTlRfUkFXKFJUX0RFQlVH
X0lORk8sICJcbiIpOyAgLy9NSUMgZXJyb3IuCi0JCURCR1BSSU5UX1JBVyhSVF9ERUJVR19JTkZP
LCAiQ2FsY3VsYXRlZCBNSUMgdmFsdWUgPSIpOyAgLy9NSUMgZXJyb3IuCisJCURCR1BSSU5UKFJU
X0RFQlVHX0lORk8sICJDYWxjdWxhdGVkIE1JQyB2YWx1ZSA9ICIpOyAgLy9NSUMgZXJyb3IuCiAJ
CWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCiAJCXsKIAkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19J
TkZPLCAiJTAyeDoiLCBwQWRhcHRlci0+UHJpdmF0ZUluZm8uUnguTUlDW2ldKTsgIC8vTUlDIGVy
cm9yLgpAQCAtNjQ3LDEzICs2NDcsMTMgQEAKIAlpZihtZW1jbXAocEFkYXB0ZXItPlByaXZhdGVJ
bmZvLlJ4Lk1JQywgT2xkTWljLCA4KSAhPSAwKQogCXsKIAkJREJHUFJJTlRfUkFXKFJUX0RFQlVH
X0VSUk9SLCAiISBUS0lQIE1JQyBFcnJvciAhXG4iKTsgIC8vTUlDIGVycm9yLgotCQlEQkdQUklO
VF9SQVcoUlRfREVCVUdfSU5GTywgIk9yaWcgTUlDIHZhbHVlID0iKTsgIC8vTUlDIGVycm9yLgor
CQlEQkdQUklOVChSVF9ERUJVR19JTkZPLCAiT3JpZyBNSUMgdmFsdWUgPSAiKTsgIC8vTUlDIGVy
cm9yLgogCQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQogCQl7CiAJCQlEQkdQUklOVF9SQVcoUlRf
REVCVUdfSU5GTywgIiUwMng6IiwgT2xkTWljW2ldKTsgIC8vTUlDIGVycm9yLgogCQl9CiAJCURC
R1BSSU5UX1JBVyhSVF9ERUJVR19JTkZPLCAiXG4iKTsgIC8vTUlDIGVycm9yLgotCQlEQkdQUklO
VF9SQVcoUlRfREVCVUdfSU5GTywgIkNhbGN1bGF0ZWQgTUlDIHZhbHVlID0iKTsgIC8vTUlDIGVy
cm9yLgorCQlEQkdQUklOVChSVF9ERUJVR19JTkZPLCAiQ2FsY3VsYXRlZCBNSUMgdmFsdWUgPSAi
KTsgIC8vTUlDIGVycm9yLgogCQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQogCQl7CiAJCQlEQkdQ
UklOVF9SQVcoUlRfREVCVUdfSU5GTywgIiUwMng6IiwgcEFkYXB0ZXItPlByaXZhdGVJbmZvLlJ4
Lk1JQ1tpXSk7ICAvL01JQyBlcnJvci4KZGlmZiAtcnVOIHJ0MjU3MC0xLjEuMC1iMS9Nb2R1bGUv
cnR1c2JfYnVsay5jIHJ0MjU3MC1jdnMtMjAwNTEyMjYxNi9Nb2R1bGUvcnR1c2JfYnVsay5jCi0t
LSBydDI1NzAtMS4xLjAtYjEvTW9kdWxlL3J0dXNiX2J1bGsuYwkyMDA1LTA3LTMwIDExOjQ0OjI5
LjAwMDAwMDAwMCAtMDUwMAorKysgcnQyNTcwLWN2cy0yMDA1MTIyNjE2L01vZHVsZS9ydHVzYl9i
dWxrLmMJMjAwNS0wOS0xMiAwODo0NjoxNS4wMDAwMDAwMDAgLTA1MDAKQEAgLTEwNyw3ICsxMDcs
OSBAQAogCQlOZGlzUmVsZWFzZVNwaW5Mb2NrKCZwQWRhcHRlci0+QnVsa091dExvY2spOwogCQly
ZXR1cm47CiAJfQotCWVsc2UgaWYgKHBBZGFwdGVyLT5NZWRpYVN0YXRlID09IE5kaXNNZWRpYVN0
YXRlRGlzY29ubmVjdGVkKQorCWVsc2UgaWYgKHBBZGFwdGVyLT5NZWRpYVN0YXRlID09IE5kaXNN
ZWRpYVN0YXRlRGlzY29ubmVjdGVkICYmCisJCSAgISggcEFkYXB0ZXItPlBvcnRDZmcuQnNzVHlw
ZSA9PSBCU1NfTU9OSVRPUiAmJiBwQWRhcHRlci0+UG9ydENmZy5NYWxsb3dSRk1PTlR4ID09IFRS
VUUgICApCisJCSkKIAl7CiAJCS8vCiAJCS8vIFNpbmNlIHRoZXJlIGlzIG5vIGNvbm5lY3Rpb24s
IHNvIHdlIG5lZWQgdG8gZW1wdHkgdGhlIFR4IEJ1bGsgb3V0IFJpbmcuCmRpZmYgLXJ1TiBydDI1
NzAtMS4xLjAtYjEvTW9kdWxlL3J0dXNiX2RhdGEuYyBydDI1NzAtY3ZzLTIwMDUxMjI2MTYvTW9k
dWxlL3J0dXNiX2RhdGEuYwotLS0gcnQyNTcwLTEuMS4wLWIxL01vZHVsZS9ydHVzYl9kYXRhLmMJ
MjAwNS0wNy0zMCAxMTo0NDozMC4wMDAwMDAwMDAgLTA1MDAKKysrIHJ0MjU3MC1jdnMtMjAwNTEy
MjYxNi9Nb2R1bGUvcnR1c2JfZGF0YS5jCTIwMDUtMTEtMjUgMDU6MzY6NDEuMDAwMDAwMDAwIC0w
NjAwCkBAIC00MCw2ICs0MCw3IEBACiAJIDAsIC8qIFJBVEVfMSAqLyAgICAxLCAvKiBSQVRFXzIg
Ki8gICAgIDIsIC8qIFJBVEVfNV81ICovICAgMywgLyogUkFURV8xMSAqLyAgICAvLyBzZWUgQkJQ
IHNwZWMKIAkxMSwgLyogUkFURV82ICovICAgMTUsIC8qIFJBVEVfOSAqLyAgICAxMCwgLyogUkFU
RV8xMiAqLyAgIDE0LCAvKiBSQVRFXzE4ICovICAgIC8vIHNlZSBJRUVFODAyLjExYS0xOTk5IHAu
MTQKIAkgOSwgLyogUkFURV8yNCAqLyAgMTMsIC8qIFJBVEVfMzYgKi8gICAgOCwgLyogUkFURV80
OCAqLyAgICAxMiAgLyogUkFURV81NCAqLyB9OyAvLyBzZWUgSUVFRTgwMi4xMWEtMTk5OSBwLjE0
CitzdGF0aWMJVUlOVAlfMTFHX1JBVEVTWzEyXSA9IHsgMCwgMCwgMCwgMCwgNiwgOSwgMTIsIDE4
LCAyNCwgMzYsIDQ4LCA1NCB9Owogc3RhdGljCVVDSEFSCVNOQVBfODAyXzFIW10gPSB7MHhhYSwg
MHhhYSwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMH07CiBzdGF0aWMJVUNIQVIJU05BUF9CUklER0Vf
VFVOTkVMW10gPSB7MHhhYSwgMHhhYSwgMHgwMywgMHgwMCwgMHgwMCwgMHhmOH07CiBzdGF0aWMJ
VUNIQVIJRUFQT0xbXSA9IHsweDg4LCAweDhlfTsKQEAgLTg0LDcgKzg1LDkgQEAKIAkJcmV0dXJu
IDA7CiAJfQogCS8vIERyb3AgcGFja2V0cyBpZiBubyBhc3NvY2lhdGlvbnMKLQllbHNlIGlmICgh
SU5GUkFfT04ocEFkYXB0ZXIpICYmICFBREhPQ19PTihwQWRhcHRlcikpCisJZWxzZSBpZiAoIUlO
RlJBX09OKHBBZGFwdGVyKSAmJiAhQURIT0NfT04ocEFkYXB0ZXIpICYmIAorCQkgICAhKCBwQWRh
cHRlci0+UG9ydENmZy5Cc3NUeXBlID09IEJTU19NT05JVE9SICYmIHBBZGFwdGVyLT5Qb3J0Q2Zn
Lk1hbGxvd1JGTU9OVHggPT0gVFJVRSApCisJCSApCiAJewogCQlSVFVTQkZyZWVTa2JCdWZmZXIo
c2tiKTsKIAkJcmV0dXJuIDA7CkBAIC0xNDAsNiArMTQzLDE1IEBACiAJLy8gSW5pdCBwcmlvcml0
eSB2YWx1ZQogCVByaW9yaXR5ID0gMDsKIAlBY2Nlc3NDYXRlZ29yeSA9IDA7CisKKwlpZiAoc2ti
ICYmIHBBZGFwdGVyLT5Qb3J0Q2ZnLkJzc1R5cGUgPT0gQlNTX01PTklUT1IgJiYKKwkJICAgcEFk
YXB0ZXItPlBvcnRDZmcuTWFsbG93UkZNT05UeCA9PSBUUlVFKQorCXsKKwkJTmRpc0FjcXVpcmVT
cGluTG9jaygmcEFkYXB0ZXItPlNlbmRUeFdhaXRRdWV1ZUxvY2spOworCQlza2JfcXVldWVfdGFp
bCgmcEFkYXB0ZXItPlNlbmRUeFdhaXRRdWV1ZSwgc2tiKTsKKwkJTmRpc1JlbGVhc2VTcGluTG9j
aygmcEFkYXB0ZXItPlNlbmRUeFdhaXRRdWV1ZUxvY2spOworCQlyZXR1cm4gKE5ESVNfU1RBVFVT
X1NVQ0NFU1MpOworCX0KIAkKIAlpZiAoc2tiKQogCXsKQEAgLTgwNiw2ICs4MTgsMzYgQEAKIAkJ
REJHUFJJTlQoUlRfREVCVUdfRVJST1IsICJFcnJvciwgTnVsbCBza2IgZGF0YSBidWZmZXIhISFc
biIpOwogCQlyZXR1cm4gKE5ESVNfU1RBVFVTX0ZBSUxVUkUpOwogCX0KKworCWlmIChwQWRhcHRl
ci0+UG9ydENmZy5Cc3NUeXBlID09IEJTU19NT05JVE9SICYmIHBBZGFwdGVyLT5Qb3J0Q2ZnLk1h
bGxvd1JGTU9OVHggPT0gVFJVRSkKKwl7CisJCXBUeENvbnRleHQgID0gJnBBZGFwdGVyLT5UeENv
bnRleHRbcEFkYXB0ZXItPk5leHRUeEluZGV4XTsKKwkJcFR4Q29udGV4dC0+SW5Vc2UgICA9IFRS
VUU7CisJCXBUeENvbnRleHQtPkxhc3RPbmUgPSBUUlVFOworCQkKKwkJcEFkYXB0ZXItPk5leHRU
eEluZGV4Kys7CisJCWlmIChwQWRhcHRlci0+TmV4dFR4SW5kZXggPj0gVFhfUklOR19TSVpFKQor
CQkJcEFkYXB0ZXItPk5leHRUeEluZGV4ID0gMDsKKworCQlwVHhEICA9ICYocFR4Q29udGV4dC0+
VHJhbnNmZXJCdWZmZXItPlR4RGVzYyk7CisJCW1lbXNldChwVHhELCAwLCBzaXplb2YoVFhEX1NU
UlVDKSk7CisJCXBEZXN0ID0gcFR4Q29udGV4dC0+VHJhbnNmZXJCdWZmZXItPldpcmVsZXNzUGFj
a2V0OworCisJCW1lbWNweSggcERlc3QsIHNrYi0+ZGF0YSwgc2tiLT5sZW4gKTsKKworCQlSVFVT
QldyaXRlVHhEZXNjcmlwdG9yKHBUeEQsIEZBTFNFLCAwLCBGQUxTRSwgRkFMU0UsIFRSVUUsIElG
U19CQUNLT0ZGLCBza2ItPmxlbiwgRkFMU0UsIDAsIENXX01JTl9JTl9CSVRTLCBDV19NQVhfSU5f
QklUUywgc2tiLT5sZW4gKyA0LCBwQWRhcHRlci0+UG9ydENmZy5UeFJhdGUsIDQsIHBBZGFwdGVy
LT5Qb3J0Q2ZnLlR4UHJlYW1ibGVJblVzZWQpOworCisJCVRyYW5zZmVyQnVmZmVyTGVuZ3RoID0g
c2tiLT5sZW4gKyBzaXplb2YoVFhEX1NUUlVDKTsKKwkJaWYgKChUcmFuc2ZlckJ1ZmZlckxlbmd0
aCAlIDIpID09IDEpCisJCQlUcmFuc2ZlckJ1ZmZlckxlbmd0aCsrOworCisJCXBUeENvbnRleHQt
PkJ1bGtPdXRTaXplID0gVHJhbnNmZXJCdWZmZXJMZW5ndGg7CisJCWF0b21pY19pbmMoJnBBZGFw
dGVyLT5UeENvdW50KTsKKwkJUlRVU0JfU0VUX0JVTEtfRkxBRyhwQWRhcHRlciwgZlJUVVNCX0JV
TEtfT1VUX0RBVEFfRlJBRyk7CisJCVJUVVNCRnJlZVNrYkJ1ZmZlcihza2IpOworCQlyZXR1cm4g
KE5ESVNfU1RBVFVTX1NVQ0NFU1MpOworCX0KKwogCWlmIChOZGlzQnVmZmVyTGVuZ3RoIDwgMTQp
CiAJewogCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfRVJST1IsICJSVFVTQkhhcmRFbmNyeXB0IC0t
PiBOZGlzIFBhY2tldCBidWZmZXIgZXJyb3IgISEhXG4iKTsKQEAgLTExMDUsMTkgKzExNDcsMTkg
QEAKIAkJewogCQkJSU5UIGk7CiAJCQkJCi0JCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfSU5GTywg
IlJUTVBIYXJkRW5jcnlwdCBUS0lQIEtleSA9ICIpOworCQkJREJHUFJJTlQoUlRfREVCVUdfSU5G
TywgIlJUTVBIYXJkRW5jcnlwdCBUS0lQIEtleSA9ICIpOwogCQkJZm9yIChpID0gMDsgaSA8IDE2
OyBpKyspCiAJCQl7CiAJCQkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX0lORk8sICIlMDJ4OiIsIHBX
cGFLZXktPktleVtpXSk7CiAJCQl9CiAJCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfSU5GTywgIlxu
Iik7CQkJCQkJCi0JCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfSU5GTywgIlJUTVBIYXJkRW5jcnlw
dCBUS0lQIFR4TWljID0gIik7CisJCQlEQkdQUklOVChSVF9ERUJVR19JTkZPLCAiUlRNUEhhcmRF
bmNyeXB0IFRLSVAgVHhNaWMgPSAiKTsKIAkJCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCiAJCQl7
CiAJCQkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX0lORk8sICIlMDJ4OiIsIHBXcGFLZXktPlR4TWlj
W2ldKTsKIAkJCX0KIAkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19JTkZPLCAiXG4iKTsJCQkJCQkK
LQkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19JTkZPLCAiUlRNUEhhcmRFbmNyeXB0IFRLSVAgVHhU
c2MgPSAiKTsKKwkJCURCR1BSSU5UKFJUX0RFQlVHX0lORk8sICJSVE1QSGFyZEVuY3J5cHQgVEtJ
UCBUeFRzYyA9ICIpOwogCQkJZm9yIChpID0gMDsgaSA8IDY7IGkrKykKIAkJCXsKIAkJCQlEQkdQ
UklOVF9SQVcoUlRfREVCVUdfSU5GTywgIiUwMng6IiwgcFdwYUtleS0+VHhUc2NbaV0pOwpAQCAt
MTQwNyw3ICsxNDQ5LDcgQEAKIAkJCQkJSU5UIGk7CiAKIAkJCQkJTmRpc0J1ZmZlckxlbmd0aCA9
IDg7CQkvLyBTZXQgbGVuZ3RoIHRvIE1JQyBsZW5ndGgKLQkJCQkJREJHUFJJTlRfUkFXKFJUX0RF
QlVHX0lORk8sICJDYWxjdWxhdGVkIFRYIE1JQyB2YWx1ZSA9Iik7ICAKKwkJCQkJREJHUFJJTlQo
UlRfREVCVUdfSU5GTywgIkNhbGN1bGF0ZWQgVFggTUlDIHZhbHVlID0gIik7ICAKIAkJCQkJZm9y
IChpID0gMDsgaSA8IDg7IGkrKykKIAkJCQkJewogCQkJCQkJREJHUFJJTlRfUkFXKFJUX0RFQlVH
X0lORk8sICIlMDJ4OiIsIHBBZGFwdGVyLT5Qcml2YXRlSW5mby5UeC5NSUNbaV0pOyAgCkBAIC0x
NjMxLDYgKzE2NzMsNyBAQAogCU5ESVNfODAyXzExX0VOQ1JZUFRJT05fU1RBVFVTCUNpcGhlcjsK
IAlzdHJ1Y3Qgc2tfYnVmZiAgKnNrYjsKIAlQVk9JRAkJCXBNYW5hZ2U7CisJd2xhbl9uZ19wcmlz
bTJfaGVhZGVyCSpwaDsKIAogCXBSeENvbnRleHQ9IChQUlhfQ09OVEVYVClwVXJiLT5jb250ZXh0
OwogCXBBZGFwdGVyID0gcFJ4Q29udGV4dC0+cEFkYXB0ZXI7CkBAIC0xNjY4LDYgKzE3MTEsNjIg
QEAKICAJICAgICAgICAJCXN0cnVjdCBza19idWZmICAqc2tiOwogIAkgICAgICAgCQkJaWYgKChz
a2IgPSBfX2Rldl9hbGxvY19za2IoMjA0OCwgR0ZQX0RNQXxHRlBfQVRPTUlDKSkgIT0gTlVMTCkK
ICAJICAgICAgICAJCXsKKwkJCQkJaWYgKHBBZGFwdGVyLT5Qb3J0Q2ZnLk1hbGxvd1JGTU9OVHgg
PT0gVFJVRSkKKwkJCQkJCWdvdG8gcmZtb250eF84MDIxMV9yZWNlaXZlOworCisJCQkJCS8vIHNl
dHVwIHRoZSB3bGFuLW5nIHByaXNtaGVhZGVyCisKKwkJCQkJaWYgKHNrYl9oZWFkcm9vbShza2Ip
IDwgc2l6ZW9mKHdsYW5fbmdfcHJpc20yX2hlYWRlcikpCisJCQkJCQlwc2tiX2V4cGFuZF9oZWFk
KHNrYiwgc2l6ZW9mKHdsYW5fbmdfcHJpc20yX2hlYWRlciksIDAsIEdGUF9BVE9NSUMpOworCisJ
CQkJCXBoID0gKHdsYW5fbmdfcHJpc20yX2hlYWRlciAqKQorCQkJCQkJc2tiX3B1c2goc2tiLCBz
aXplb2Yod2xhbl9uZ19wcmlzbTJfaGVhZGVyKSk7CisJCQkJCW1lbXNldChwaCwgMCwgc2l6ZW9m
KHdsYW5fbmdfcHJpc20yX2hlYWRlcikpOworCisJCQkJCXBoLT5tc2djb2RlCT0gRElEbXNnX2xu
eGluZF93bGFuc25pZmZybTsKKwkJCQkJcGgtPm1zZ2xlbgk9IHNpemVvZih3bGFuX25nX3ByaXNt
Ml9oZWFkZXIpOworCQkJCQlzdHJjcHkocGgtPmRldm5hbWUsIHBBZGFwdGVyLT5uZXQtPm5hbWUp
OworCisJCQkJCXBoLT5ob3N0dGltZS5kaWQJPSBESURtc2dfbG54aW5kX3dsYW5zbmlmZnJtX2hv
c3R0aW1lOworCQkJCQlwaC0+bWFjdGltZS5kaWQJCT0gRElEbXNnX2xueGluZF93bGFuc25pZmZy
bV9tYWN0aW1lOworCQkJCQlwaC0+Y2hhbm5lbC5kaWQJCT0gRElEbXNnX2xueGluZF93bGFuc25p
ZmZybV9jaGFubmVsOworCQkJCQlwaC0+cnNzaS5kaWQJCT0gRElEbXNnX2xueGluZF93bGFuc25p
ZmZybV9yc3NpOworCQkJCQlwaC0+c2lnbmFsLmRpZAkJPSBESURtc2dfbG54aW5kX3dsYW5zbmlm
ZnJtX3NpZ25hbDsKKwkJCQkJcGgtPm5vaXNlLmRpZAkJPSBESURtc2dfbG54aW5kX3dsYW5zbmlm
ZnJtX25vaXNlOworCQkJCQlwaC0+cmF0ZS5kaWQJCT0gRElEbXNnX2xueGluZF93bGFuc25pZmZy
bV9yYXRlOworCQkJCQlwaC0+aXN0eC5kaWQJCT0gRElEbXNnX2xueGluZF93bGFuc25pZmZybV9p
c3R4OworCQkJCQlwaC0+ZnJtbGVuLmRpZAkJPSBESURtc2dfbG54aW5kX3dsYW5zbmlmZnJtX2Zy
bWxlbjsKKworCQkJCQlwaC0+aG9zdHRpbWUubGVuCT0gNDsKKwkJCQkJcGgtPm1hY3RpbWUubGVu
CQk9IDQ7CisJCQkJCXBoLT5jaGFubmVsLmxlbgkJPSA0OworCQkJCQlwaC0+cnNzaS5sZW4JCT0g
NDsKKwkJCQkJcGgtPnNpZ25hbC5sZW4JCT0gNDsKKwkJCQkJcGgtPm5vaXNlLmxlbgkJPSA0Owor
CQkJCQlwaC0+cmF0ZS5sZW4JCT0gNDsKKwkJCQkJcGgtPmlzdHgubGVuCQk9IDQ7CisJCQkJCXBo
LT5mcm1sZW4ubGVuCQk9IDQ7CisJCQorCQkJCQlwaC0+aG9zdHRpbWUuZGF0YQk9IGppZmZpZXM7
CisJCQkJCXBoLT5jaGFubmVsLmRhdGEJPSBwQWRhcHRlci0+UG9ydENmZy5JYnNzQ29uZmlnLkNo
YW5uZWw7CisJCQkJCXBoLT5zaWduYWwuZGF0YQkJPSBwUnhELT5CQlIxOworCQkJCQlwaC0+bm9p
c2UuZGF0YQkJPSBwQWRhcHRlci0+UG9ydENmZy5MYXN0UjE3VmFsdWU7CisJCQkJCXBoLT5yc3Np
LmRhdGEJCT0gcGgtPnNpZ25hbC5kYXRhIC0gcGgtPm5vaXNlLmRhdGE7CisJCQkJCXBoLT5mcm1s
ZW4uZGF0YQkJPSBwUnhELT5EYXRhQnl0ZUNudDsKKworCQkJCQlpZiAocFJ4RC0+T2ZkbSA9PSAx
KQorCQkJCQl7CisJCQkJCQlmb3IgKGkgPSA0OyBpIDwgMTI7IGkrKykKKwkJCQkJCQlpZiAocFJ4
RC0+QkJSMCA9PSBQbGNwU2lnbmFsW2ldKQorCQkJCQkJCQlwaC0+cmF0ZS5kYXRhID0gXzExR19S
QVRFU1tpXSAqIDI7CisJCQkJCX0KKwkJCQkJZWxzZQorCQkJCQkJcGgtPnJhdGUuZGF0YSA9IHBS
eEQtPkJCUjAgLyA1OworCisJCQkJCS8vIGVuZCBwcmlzbWhlYWRlciBzZXR1cAorCisJCQkJcmZt
b250eF84MDIxMV9yZWNlaXZlOgorCiAgCSAgICAgIAkJCQlza2ItPmRldiA9IHBBZGFwdGVyLT5u
ZXQ7CiAgCSAgICAgIAkJCQltZW1jcHkoc2tiX3B1dChza2IsIHBSeEQtPkRhdGFCeXRlQ250LTQp
LCBwRGF0YSwgcFJ4RC0+RGF0YUJ5dGVDbnQtNCk7CiAgCSAgICAgICAJCQkJc2tiLT5tYWMucmF3
ID0gc2tiLT5kYXRhOwpAQCAtMjAyNyw3ICsyMTI2LDcgQEAKIAkJCQkJCQkJCQl7CiAJCQkJCQkJ
CQkJCXBXcGFLZXkgPSAoUFdQQV9LRVkpICZwQWRhcHRlci0+UG9ydENmZy5QYWlyd2lzZUtleVtp
ZHhdOwogCQkJCQkJCQkJCQlwV3BhS2V5LT5UeXBlID0gUEFJUldJU0VfS0VZOwotCQkJCQkJCQkJ
CQlEQkdQUklOVChSVF9ERUJVR19URU1QLCAiUnggVXNlIFBhaXJ3aXNlIEtleSAlZFxuIixpZHgp
OworCQkJCQkJCQkJCQlEQkdQUklOVChSVF9ERUJVR19MT1VELCAiUnggVXNlIFBhaXJ3aXNlIEtl
eSAlZFxuIixpZHgpOwogCQkJCQkJCQkJCQlicmVhazsKIAkJCQkJCQkJCQl9CiAJCQkJCQkJCQl9
CkBAIC0yMTYwLDcgKzIyNTksNyBAQAogCQkJCQkJCQkgICAgcEFkYXB0ZXItPm5ldHN0YXRzLnJ4
X3BhY2tldHMrKzsKIAkJCQkJCQkJfQogCQkJCQkJCQkvL21lbXNldChIZWFkZXI4MDJfMywgMCwg
TEVOR1RIXzgwMl8zKTsKLQkJCQkJCQkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX0lORk8sICIhISEg
QnJvYWRjYXN0IEV0aGVuZXQgcnggSW5kaWNhdGVkICEhIVxuIik7CisJCQkJCQkJCURCR1BSSU5U
X1JBVyhSVF9ERUJVR19JTkZPLCAiISEhIEJyb2FkY2FzdCBFdGhlcm5ldCByeCBJbmRpY2F0ZWQg
ISEhXG4iKTsKIAkJCQkJCQl9IC8vaWYgKHBSeEQtPkJjYXN0IHx8IHBSeEQtPk1jYXN0KQkJCQkJ
CQkJCQkJCiAJCQkJCQkJLy8gQmVnaW4gcHJvY2VzcyB1bmljYXN0IHRvIG1lIGZyYW1lCiAJCQkJ
CQkJZWxzZSBpZiAocFJ4RC0+VTJNKSAKZGlmZiAtcnVOIHJ0MjU3MC0xLjEuMC1iMS9Nb2R1bGUv
LiNydHVzYl9kYXRhLmMuMS42IHJ0MjU3MC1jdnMtMjAwNTEyMjYxNi9Nb2R1bGUvLiNydHVzYl9k
YXRhLmMuMS42Ci0tLSBydDI1NzAtMS4xLjAtYjEvTW9kdWxlLy4jcnR1c2JfZGF0YS5jLjEuNgky
MDA1LTA3LTMwIDExOjQ0OjMwLjAwMDAwMDAwMCAtMDUwMAorKysgcnQyNTcwLWN2cy0yMDA1MTIy
NjE2L01vZHVsZS8uI3J0dXNiX2RhdGEuYy4xLjYJMTk2OS0xMi0zMSAxODowMDowMC4wMDAwMDAw
MDAgLTA2MDAKQEAgLTEsMzExMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAotICogUlQy
eDAwIFNvdXJjZUZvcmdlIFByb2plY3QgLSBodHRwOi8vcnQyeDAwLnNvdXJjZWZvcmdlLm5ldCAg
ICAgICAgICAgICAgKiAKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogCi0gKiAgIFRoaXMgcHJvZ3JhbSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAq
IAotICogICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSAgKiAKLSAqICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICogCi0gKiAgIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAqIAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAKLSAqICAgVGhpcyBwcm9ncmFtIGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICogCi0g
KiAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mICAgICAgICAqIAotICogICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgKiAKLSAqICAgR05VIEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAg
ICAgICogCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAqIAotICogICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgKiAKLSAqICAg
YWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlICAgICAgICAgICAg
ICAgICAgICAgICAgICogCi0gKiAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIAotICogICA1OSBUZW1wbGUgUGxh
Y2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4gICAgICAgICAgICAg
KiAKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICogCi0gKiAgIExpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgR1BM
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIAotICogICBPcmln
aW5hbCBjb2RlIHN1cHBsaWVkIHVuZGVyIGxpY2Vuc2UgZnJvbSBSYUxpbmsgSW5jLCAyMDA0LiAg
ICAgICAgICAgKiAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiog
Ci0gKglNb2R1bGUgTmFtZToJcnR1c2JfZGF0YS5jCi0gKgotICoJQWJzdHJhY3Q6Ci0gKgotICoJ
UmV2aXNpb24gSGlzdG9yeToKLSAqCVdobwkJV2hlbgkJV2hhdAotICoJLS0tLS0tLS0JLS0tLS0t
LS0tLQktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKglOYW1lCQlEYXRlCQlNb2Rp
ZmljYXRpb24gbG9ncwotICoJSmFuIExlZQkJMjAwNS0wNi0wMQlSZWxlYXNlCi0gKglSb2JpbkMJ
CTAyLTA2LTIwMDUJUkZNT04gTW9kZSBhZGRlZAotICoJTWF0aGlhc0sJMDQtMDctMjAwNQliaWcg
ZW5kaWFuIGZpeCBmcm9tIGdnbG9tbQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2luY2x1ZGUJ
InJ0X2NvbmZpZy5oIgotCi1zdGF0aWMgIFVDSEFSIFBsY3BTaWduYWxbMTJdID0geyAKLQkgMCwg
LyogUkFURV8xICovICAgIDEsIC8qIFJBVEVfMiAqLyAgICAgMiwgLyogUkFURV81XzUgKi8gICAz
LCAvKiBSQVRFXzExICovICAgIC8vIHNlZSBCQlAgc3BlYwotCTExLCAvKiBSQVRFXzYgKi8gICAx
NSwgLyogUkFURV85ICovICAgIDEwLCAvKiBSQVRFXzEyICovICAgMTQsIC8qIFJBVEVfMTggKi8g
ICAgLy8gc2VlIElFRUU4MDIuMTFhLTE5OTkgcC4xNAotCSA5LCAvKiBSQVRFXzI0ICovICAxMywg
LyogUkFURV8zNiAqLyAgICA4LCAvKiBSQVRFXzQ4ICovICAgIDEyICAvKiBSQVRFXzU0ICovIH07
IC8vIHNlZSBJRUVFODAyLjExYS0xOTk5IHAuMTQKLXN0YXRpYwlVQ0hBUglTTkFQXzgwMl8xSFtd
ID0gezB4YWEsIDB4YWEsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDB9Owotc3RhdGljCVVDSEFSCVNO
QVBfQlJJREdFX1RVTk5FTFtdID0gezB4YWEsIDB4YWEsIDB4MDMsIDB4MDAsIDB4MDAsIDB4Zjh9
Owotc3RhdGljCVVDSEFSCUVBUE9MW10gPSB7MHg4OCwgMHg4ZX07Ci1zdGF0aWMJVUNIQVIJSVBY
W10gPSB7MHg4MSwgMHgzN307Ci1zdGF0aWMJVUNIQVIJQVBQTEVfVEFMS1tdID0gezB4ODAsIDB4
ZjN9OwotVUNIQVIJQVJQW109ezB4MDgsIDB4MDZ9OwotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8K
LS8vCUZVTkNUSU9OCi0vLwkJUlRVU0JTZW5kUGFja2V0cwotLy8JCQotLy8JREVTQ1JJUFRJT04K
LS8vCSAgVk5FVE11bHRpcGxlU2VuZCBoYW5kbGVyIGlzIGNhbGxlZCBieSBORElTIHRvIHRyYW5z
bWl0IHBhY2tldHMKLS8vCSAgdGhyb3VnaCB0aGUgYWRhcHRlci4gSWYgdGhlcmUgYXJlIHBhY2tl
dHMgaW4gdGhlIFEgYW5kIHRoZSBkZXZpY2UKLS8vCSAgY2FuIGFjY2VwdCB0aGUgVHggcmVxdWVz
dHMgaW5pdGlhdGUgYSB0cmFuc21pc3Npb24gYW5kIHF1ZXVlIHRoZQotLy8JICByZXN0IG9mIHRo
ZSBwYWNrZXRzIChpZiBhbnkuLi4pLiBJZiB3ZSBjYW4gbm90IHRyYW5zbWl0IG9yIHRoZQotLy8J
ICBzdGF0aW9uIGlzIG5vdCByZWFkeSB3ZSBpbWVkaWF0ZWxseSBjb21wbGV0ZSB0aGUgcmVxdWVz
dAotLy8JCQotLy8JSU5QVVQKLS8vCSAgTWluaXBvcnRBZGFwdGVyQ29udGV4dAkJQ29udGV4dCBy
ZWdpc3RlcmVkIHdpdGggdGhlIHdyYXBwZXIKLS8vCQkJCQkJCQkJKFB0ciB0byB0byB0aGUgQWRh
cHRlciBvYmplY3QpCi0vLwkgIFBhY2tldEFycmF5CQkJCQlBcnJheSBvZiBQdHJzIHRvIE5ESVNf
UEFDS0VUIHN0cnVjdHMKLS8vCSAgTnVtYmVyT2ZQYWNrZXRzCQkJCU51bWJlciBvZiBwYWNrZXRz
IGluIFBhY2tldEFycmF5Ci0vLwkJCi0vLwlPVVRQVVQKLS8vCQktCi0vLwkJCi0vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vCi1pbnQgUlRVU0JTZW5kUGFja2V0cyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1
Y3QgbmV0X2RldmljZSAqbmV0X2RldikKLXsKLQotCU5ESVNfU1RBVFVTIAlTdGF0dXMgPSBORElT
X1NUQVRVU19TVUNDRVNTOwotCVBSVDI1NzBBREFQVEVSCXBBZGFwdGVyID0gbmV0X2Rldi0+cHJp
djsKLQkKLQlza2ItPmRhdGFfbGVuID0gc2tiLT5sZW47Ci0JaWYgKFJUTVBfVEVTVF9GTEFHKHBB
ZGFwdGVyLCBmUlRNUF9BREFQVEVSX1JFU0VUX0lOX1BST0dSRVNTKSB8fAotCQlSVE1QX1RFU1Rf
RkxBRyhwQWRhcHRlciwgZlJUTVBfQURBUFRFUl9SRU1PVkVfSU5fUFJPR1JFU1MpIHx8Ci0JCVJU
TVBfVEVTVF9GTEFHKHBBZGFwdGVyLCBmUlRNUF9BREFQVEVSX1JBRElPX09GRikgfHwKLQkJUlRN
UF9URVNUX0ZMQUcocEFkYXB0ZXIsIGZSVE1QX0FEQVBURVJfSEFMVF9JTl9QUk9HUkVTUykpCi0J
ewotCQlSVFVTQkZyZWVTa2JCdWZmZXIoc2tiKTsKLQkJcmV0dXJuIDA7Ci0JfQotCS8vIERyb3Ag
cGFja2V0cyBpZiBubyBhc3NvY2lhdGlvbnMKLQllbHNlIGlmICghSU5GUkFfT04ocEFkYXB0ZXIp
ICYmICFBREhPQ19PTihwQWRhcHRlcikpCi0JewotCQlSVFVTQkZyZWVTa2JCdWZmZXIoc2tiKTsK
LQkJcmV0dXJuIDA7Ci0JfQotCWVsc2UKLQl7Ci0JCVN0YXR1cyA9IFJUVVNCU2VuZFBhY2tldChw
QWRhcHRlciwgc2tiKTsKLQkgICAgICAgIGlmIChTdGF0dXMgIT0gTkRJU19TVEFUVVNfU1VDQ0VT
UykKLQkgICAgICAgIHsKLQkJCS8vIEVycm9ycyBiZWZvcmUgZW5xdWV1ZSBzdGFnZQotCQkJUlRV
U0JGcmVlU2tiQnVmZmVyKHNrYik7Ci0JCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwiPC0tLVJU
VVNCU2VuZFBhY2tldHMgbm90IGRlcXVldWVcbiIpOwotCQkJcmV0dXJuIDA7Ci0JICAgICAgICB9
Ci0JfQotCS8vIERlcXVldWUgb25lIGZyYW1lIGZyb20gU2VuZFR4V2FpdCBxdWV1ZSBhbmQgcHJv
Y2VzcyBpdAotCS8vIFRoZXJlIGFyZSB0d28gcGxhY2UgY2FsbGluZyBkZXF1ZXVlIGZvciBUWCBy
aW5nLgotCS8vIDEuIEhlcmUsIHJpZ2h0IGFmdGVyIHF1ZXVlaW5nIHRoZSBmcmFtZS4KLQkvLyAy
LiBBdCB0aGUgZW5kIG9mIFR4UmluZ1R4RG9uZSBzZXJ2aWNlIHJvdXRpbmUuCi0JaWYgKCghUlRN
UF9URVNUX0ZMQUcocEFkYXB0ZXIsIGZSVE1QX0FEQVBURVJfQlNTX1NDQU5fSU5fUFJPR1JFU1Mp
KSAmJiAKLQkJKCFSVE1QX1RFU1RfRkxBRyhwQWRhcHRlciwgZlJUTVBfQURBUFRFUl9SQURJT19P
RkYpKSAmJgotCQkoIVJUTVBfVEVTVF9GTEFHKHBBZGFwdGVyLCBmUlRNUF9BREFQVEVSX1JFU0VU
X0lOX1BST0dSRVNTKSkgJiYKLQkJKCFSVE1QX1RFU1RfRkxBRyhwQWRhcHRlciwgZlJUTVBfQURB
UFRFUl9SRU1PVkVfSU5fUFJPR1JFU1MpKSAmJgotCQkoIVJUTVBfVEVTVF9GTEFHKHBBZGFwdGVy
LCBmUlRNUF9BREFQVEVSX0hBTFRfSU5fUFJPR1JFU1MpKSkKLQl7Ci0JICAgIC8vUlRNUERlUXVl
dWVQYWNrZXQocEFkYXB0ZXIsICZwQWRhcHRlci0+VHhTd1F1ZXVlMCk7Ci0JICAgIC8vIENhbGwg
ZGVxdWV1ZSB3aXRob3V0IHNlbGVjdGVkIHF1ZXVlLCBsZXQgdGhlIHN1YnJvdXRpbmUgc2VsZWN0
IHRoZSByaWdodCBwcmlvcml0eQotCSAgICAvLyBUeCBzb2Z0d2FyZSBxdWV1ZQotCSAgICBSVFVT
QkRlUXVldWVQYWNrZXQocEFkYXB0ZXIpOwotCX0KLQotCS8vIEtpY2sgYnVsayBvdXQKLQlSVFVT
QktpY2tCdWxrT3V0KHBBZGFwdGVyKTsKLQlyZXR1cm4gMDsKLX0KLQotTkRJU19TVEFUVVMJUlRV
U0JTZW5kUGFja2V0KAotCUlOCVBSVDI1NzBBREFQVEVSCXBBZGFwdGVyLAotCUlOICBzdHJ1Y3Qg
c2tfYnVmZiAgKnNrYikKLXsKLQotCi0JUFZPSUQJCQlwVmlydHVhbEFkZHJlc3M7Ci0Jc3RydWN0
IHNrX2J1ZmZfaGVhZCAgICAgKnBUeFF1ZXVlOwotCVVMT05HCQkJCQlQcmlvcml0eTsKLQlVQ0hB
UgkJCU51bWJlck9mRnJhZzsKLQlVQ0hBUgkJCVJUU1JlcXVpcmVkOwotCVVJTlQJCQlBbGxvd0Zy
YWdTaXplOwotCVVDSEFSICAgICAgICAgICAgICAgICAgIEFjY2Vzc0NhdGVnb3J5OwotCU5ESVNf
U1RBVFVTCQlTdGF0dXMgPSBORElTX1NUQVRVU19GQUlMVVJFOwotCVVDSEFSCQkJUHNNb2RlOwot
Ci0JLy8gSW5pdCBwcmlvcml0eSB2YWx1ZQotCVByaW9yaXR5ID0gMDsKLQlBY2Nlc3NDYXRlZ29y
eSA9IDA7Ci0JCi0JaWYgKHNrYikKLQl7Ci0JCVByaW9yaXR5ID0gc2tiLT5wcmlvcml0eTsKLQkJ
Ly8gODAyLjExZS9kNC40IEp1bmUsIDIwMDMKLQkJaWYgKFByaW9yaXR5IDw9MikKLQkJICAgIEFj
Y2Vzc0NhdGVnb3J5ID0gMDsKLQkJZWxzZSBpZiAoUHJpb3JpdHkgPT0gMykKLQkJICAgIEFjY2Vz
c0NhdGVnb3J5ID0gMTsKLQkJZWxzZSBpZiAoUHJpb3JpdHkgPD0gNSkKLQkJICAgIEFjY2Vzc0Nh
dGVnb3J5ID0gMjsKLQkJZWxzZQotCQkgICAgQWNjZXNzQ2F0ZWdvcnkgPSAzOwotCQlEQkdQUklO
VChSVF9ERUJVR19JTkZPLCAiUHJpb3JpdHkgPSAlZCwgQUMgPSAlZFxuIiwgUHJpb3JpdHksIEFj
Y2Vzc0NhdGVnb3J5KTsKLQl9Ci0JLy8gRm9yIFRLSVAsIE1JQyB2YWx1ZSBpcyB0cmVhdGVkIGFz
IHBheWxvYWQsIGl0IG1pZ2h0IGJlIGZyYWdtZW50ZWQgdGhyb3VnaAotCS8vIGRpZmZlcmVudCBN
UERVcy4KLQlpZiAocEFkYXB0ZXItPlBvcnRDZmcuV2VwU3RhdHVzID09IE5kaXM4MDJfMTFFbmNy
eXB0aW9uMkVuYWJsZWQpCi0JewotCQlza2ItPmRhdGFfbGVuICs9IDg7Ci0JfQotCi0JcFZpcnR1
YWxBZGRyZXNzID0gKFBWT0lEKXNrYi0+ZGF0YTsKLQkvLyBDaGVjayBmb3IgdmlydHVhbCBhZGRy
ZXNzIGFsbG9jYXRpb24sIGl0IG1pZ2h0IGZhaWwgISEhCi0JaWYgKHBWaXJ0dWFsQWRkcmVzcyA9
PSBOVUxMKQotCXsKLQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsIjwtLS1SVFVTQlNlbmRQYWNr
ZXQgTlVMTCBwVmlydHVhbEFkZHJlc3NcbiIpOwotCQkvLyBSZXNvdXJlY2UgaXMgbG93LCBzeXN0
ZW0gZGlkIG5vdCBhbGxvY2F0aW9uIHZpcnR1YWwgYWRkcmVzcwotCQkvLyByZXR1cm4gTkRJU19T
VEFUVVNfRkFJTFVSRSBkaXJlY3RseSB0byB1cHBlciBsYXllcgotCQlyZXR1cm4gKFN0YXR1cyk7
Ci0JfQotCi0JLy8KLQkvLyBDaGVjayBmb3IgbXVsdGljYXN0IG9yIGJyb2FkY2FzdCAoRmlyc3Qg
Ynl0ZSBvZiBEQSkKLQkvLwotCWlmICgoKigoUFVDSEFSKSBwVmlydHVhbEFkZHJlc3MpICYgMHgw
MSkgIT0gMCkKLQl7Ci0JCS8vIEZvciBtdWx0aWNhc3QgJiBicm9hZGNhc3QsIHRoZXJlIGlzIG5v
IGZyYWdtZW50IGFsbG93ZWQKLQkJTnVtYmVyT2ZGcmFnID0gMTsKLQl9Ci0JZWxzZQotCXsKLQkJ
Ly8gQ2hlY2sgZm9yIHBheWxvYWQgYWxsb3dlZCBmb3IgZWFjaCBmcmFnbWVudAotCQlBbGxvd0Zy
YWdTaXplID0gKHBBZGFwdGVyLT5Qb3J0Q2ZnLkZyYWdtZW50VGhyZXNob2xkKSAtIExFTkdUSF84
MDJfMTEgLSBMRU5HVEhfQ1JDOwotCi0JCS8vIENhbGN1bGF0ZSBmcmFnbWVudHMgcmVxdWlyZWQK
LQkJTnVtYmVyT2ZGcmFnID0gKChza2ItPmRhdGFfbGVuIC0gTEVOR1RIXzgwMl8zICsgTEVOR1RI
XzgwMl8xX0gpIC8gQWxsb3dGcmFnU2l6ZSkgKyAxOwotCQkvLyBNaW51cyAxIGlmIHRoZSBzaXpl
IGp1c3QgbWF0Y2ggdG8gYWxsb3dhYmxlIGZyYWdtZW50IHNpemUKLQkJaWYgKCgoc2tiLT5kYXRh
X2xlbiAtIExFTkdUSF84MDJfMyArIExFTkdUSF84MDJfMV9IKSAlIEFsbG93RnJhZ1NpemUpID09
IDApCi0JCXsKLQkJCU51bWJlck9mRnJhZy0tOwotCQl9Ci0JfQotCQotCS8vIENoZWNrIGZvciBy
ZXF1aXJlbWVudCBvZiBSVFMgCi0JaWYgKE51bWJlck9mRnJhZyA+IDEpCi0JewotCQkvLyBJZiBt
dWx0aXBsZSBmcmFnbWVudCByZXF1aXJlZCwgUlRTIGlzIHJlcXVpcmVkIG9ubHkgZm9yIHRoZSBm
aXJzdCBmcmFnbWVudAotCQkvLyBpZiB0aGUgZnJhZ21lbnQgc2l6ZSBsYXJnZSB0aGFuIFJUUyB0
aHJlc2hvbGQKLQkJUlRTUmVxdWlyZWQgPSAocEFkYXB0ZXItPlBvcnRDZmcuRnJhZ21lbnRUaHJl
c2hvbGQgPiBwQWRhcHRlci0+UG9ydENmZy5SdHNUaHJlc2hvbGQpID8gMSA6IDA7Ci0JfQotCWVs
c2UKLQl7Ci0JCVJUU1JlcXVpcmVkID0gKHNrYi0+ZGF0YV9sZW4gPiBwQWRhcHRlci0+UG9ydENm
Zy5SdHNUaHJlc2hvbGQpID8gMSA6IDA7Ci0JfQotCi0JLy8gUlRTL0NUUyBtYXkgYWxzbyBiZSBy
ZXF1aXJlZCBpbiBvcmRlciB0byBwcm90ZWN0IE9GRE0gZnJhbWUKLQlpZiAoKHBBZGFwdGVyLT5Q
b3J0Q2ZnLlR4UmF0ZSA+PSBSQVRFX0ZJUlNUX09GRE1fUkFURSkgJiYgcEFkYXB0ZXItPlBvcnRD
ZmcuQkdQcm90ZWN0aW9uSW5Vc2VkKQotCQlSVFNSZXF1aXJlZCA9IDE7Ci0JLy9EQkdQUklOVChS
VF9ERUJVR19URU1QLCAiTnVtYmVyIG9mIGZyYWdtZW50cyA6JWQgLCBpbmNsdWRlIFJUUyA6JWRc
biIsIE51bWJlck9mRnJhZywgTnVtYmVyT2ZGcmFnICsgUlRTUmVxdWlyZWQpOwotICAgICAgICAK
LQkvLyBTYXZlIGZyYW1uZXQgbnVtYmVyIHRvIE5kaXMgcGFja2V0IHJlc2VydmVkIGZpZWxkCi0J
UlRNUF9TRVRfUEFDS0VUX0ZSQUdNRU5UUyhza2IsIE51bWJlck9mRnJhZyk7CSAgICAgCi0KLQkv
LyBTYXZlIFJUUyByZXF1aXJlbWVudCB0byBOZGlzIHBhY2tldCByZXNlcnZlZCBmaWVsZAotCVJU
TVBfU0VUX1BBQ0tFVF9SVFMoc2tiLCBSVFNSZXF1aXJlZCk7Ci0KLQkvLyBNYWtlIHN1cmUgU2Vu
ZFR4V2FpdCBxdWV1ZSByZXNvdXJjZSB3b24ndCBiZSB1c2VkIGJ5IG90aGVyIHRocmVhZHMKLQlO
ZGlzQWNxdWlyZVNwaW5Mb2NrKCZwQWRhcHRlci0+U2VuZFR4V2FpdFF1ZXVlTG9jayk7Ci0KLQlw
VHhRdWV1ZSA9ICZwQWRhcHRlci0+U2VuZFR4V2FpdFF1ZXVlOwotCWlmIChJTkZSQV9PTihwQWRh
cHRlcikpCi0JewotCQkvLyBJbiBpbmZyYXN0cnVjdHVyZSBtb2RlLCBzaW1wbHkgZW5xdWV1ZSB0
aGUgcGFja2V0IGludG8gVHggd2FpdGluZyBxdWV1ZS4KLQkJREJHUFJJTlQoUlRfREVCVUdfSU5G
TywgIkluZnJhc3RydWN0dXJlIC0+IEVucXVldWUgb25lIGZyYW1lXG4iKTsKLQotCQkvLyBFbnF1
ZXVlIE5kaXMgcGFja2V0IHRvIGVuZCBvZiBUeCB3YWl0IHF1ZXVlCi0JCXNrYl9xdWV1ZV90YWls
KHBUeFF1ZXVlLCBza2IpOwotCQlTdGF0dXMgPSBORElTX1NUQVRVU19TVUNDRVNTOwotCX0KLQll
bHNlCi0JewotCQkvLyBJbiBJQlNTIG1vZGUsIHBvd2VyIHN0YXRlIG9mIGRlc3RpbmF0aW9uIHNo
b3VsZCBiZSBjb25zaWRlcmVkLgotCQlQc01vZGUgPSBQV1JfQUNUSVZFOwkJLy8gRmFrZWQKLQkJ
aWYgKFBzTW9kZSA9PSBQV1JfQUNUSVZFKQotCQl7Ci0JCQkvLyBFbnF1ZXVlIE5kaXMgcGFja2V0
IHRvIGVuZCBvZiBUeCB3YWl0IHF1ZXVlCi0JCQlza2JfcXVldWVfdGFpbChwVHhRdWV1ZSwgc2ti
KTsKLQkJCVN0YXR1cyA9IE5ESVNfU1RBVFVTX1NVQ0NFU1M7Ci0JCX0KLQl9Ci0JCi0JTmRpc1Jl
bGVhc2VTcGluTG9jaygmcEFkYXB0ZXItPlNlbmRUeFdhaXRRdWV1ZUxvY2spOwotCXJldHVybiBT
dGF0dXM7Ci19Ci0KLVZPSUQJUlRVU0JEZVF1ZXVlUGFja2V0KAotCUlOCVBSVDI1NzBBREFQVEVS
CXBBZGFwdGVyKQotewotCi0JVUNIQVIJCQlGcmFnbWVudFJlcXVpcmVkOwotCU5ESVNfU1RBVFVT
CQlTdGF0dXMgPSBORElTX1NUQVRVU19TVUNDRVNTOwotCXN0cnVjdCBza19idWZmICAJKnNrYjsK
LQlzdHJ1Y3Qgc2tfYnVmZl9oZWFkICAgICAqcFF1ZXVlOwotCVVDSEFSCQkJQ291bnQgPSAwOwot
CS8vIE1ha2Ugc3VyZSBTZW5kVHhXYWl0IHF1ZXVlIHJlc291cmNlIHdvbid0IGJlIHVzZWQgYnkg
b3RoZXIgdGhyZWFkcwotCU5kaXNBY3F1aXJlU3BpbkxvY2soJnBBZGFwdGVyLT5TZW5kVHhXYWl0
UXVldWVMb2NrKTsKLQotCS8vIFNlbGVjdCBRdWV1ZQotCXBRdWV1ZSA9ICZwQWRhcHRlci0+U2Vu
ZFR4V2FpdFF1ZXVlOwotCi0JLy8gQ2hlY2sgcXVldWUgYmVmb3JlIGRlcXVldWUKLQl3aGlsZSAo
IXNrYl9xdWV1ZV9lbXB0eShwUXVldWUpICYmIChDb3VudCA8IE1BWF9UWF9QUk9DRVNTKSkKLQl7
Ci0JCS8vIFJlc2V0IGlzIGluIHByb2dyZXNzLCBzdG9wIGltbWVkaWF0ZWx5Ci0JCWlmICggUlRN
UF9URVNUX0ZMQUcocEFkYXB0ZXIsIGZSVE1QX0FEQVBURVJfUkVTRVRfSU5fUFJPR1JFU1MpIHx8
Ci0JCQkgUlRNUF9URVNUX0ZMQUcocEFkYXB0ZXIsIGZSVE1QX0FEQVBURVJfUkVNT1ZFX0lOX1BS
T0dSRVNTKSB8fAotCQkgICAgIFJUTVBfVEVTVF9GTEFHKHBBZGFwdGVyLCBmUlRNUF9BREFQVEVS
X0hBTFRfSU5fUFJPR1JFU1MpKQotCQl7Ci0JCQlicmVhazsKLQkJfQotCQkJCi0JCS8vIERlcXVl
dWUgdGhlIGZpcnN0IGVudHJ5IGZyb20gaGVhZCBvZiBxdWV1ZSBsaXN0Ci0JCXNrYiA9IHNrYl9k
ZXF1ZXVlKHBRdWV1ZSk7Ci0KLQotCQkvLyBSVFMgb3IgQ1RTLXRvLXNlbGYgZm9yIEIvRyBwcm90
ZWN0aW9uIG1vZGUgaGFzIGJlZW4gc2V0IGFscmVhZHkuCi0JCS8vIFRoZXJlIGlzIG5vIG5lZWQg
dG8gcmUtZG8gaXQgaGVyZS4gCi0JCS8vIFRvdGFsIGZyYWdtZW50IHJlcXVpcmVkID0gbnVtYmVy
IG9mIGZyYWdtZW50ICsgUlNUIGlmIHJlcXVpcmVkCi0JCUZyYWdtZW50UmVxdWlyZWQgPSBSVE1Q
X0dFVF9QQUNLRVRfRlJBR01FTlRTKHNrYikgKyBSVE1QX0dFVF9QQUNLRVRfUlRTKHNrYik7Ci0J
CQotCQlpZiAoUlRVU0JGcmVlRGVzY3JpcHRvclJlcXVlc3QocEFkYXB0ZXIsIFRYX1JJTkcsIEZy
YWdtZW50UmVxdWlyZWQpID09IE5ESVNfU1RBVFVTX1NVQ0NFU1MpCi0JCXsKLQkJCS8vIEF2YWxp
YWJsZSByaW5nIGRlc2NyaXB0b3JzIGFyZSBlbm91Z2ggZm9yIHRoaXMgZnJhbWUKLQkJCS8vIENh
bGwgaGFyZCB0cmFuc21pdAotCQkJLy8gTml0cm8gbW9kZSAvIE5vcm1hbCBtb2RlIHNlbGVjdGlv
bgotCQkJTmRpc1JlbGVhc2VTcGluTG9jaygmcEFkYXB0ZXItPlNlbmRUeFdhaXRRdWV1ZUxvY2sp
OwotCQkJaWYgKHBBZGFwdGVyLT5Qb3J0Q2ZnLkVuYWJsZVR4QnVyc3QgPT0gMSkKLQkJCQlTdGF0
dXMgPSBSVFVTQkhhcmRFbmNyeXB0KHBBZGFwdGVyLCBza2IsIEZyYWdtZW50UmVxdWlyZWQsIFRS
VUUpOwotCQkJZWxzZQkJCQkKLQkJCQlTdGF0dXMgPSBSVFVTQkhhcmRFbmNyeXB0KHBBZGFwdGVy
LCBza2IsIEZyYWdtZW50UmVxdWlyZWQsIEZBTFNFKTsKLQkJCS8vCi0JCQkvLyBBY3F1aXJlIHRo
ZSByZXNvdXJjZSBhZ2Fpbiwgc25pY2Ugd2UgbWF5IG5lZWQgdG8gcHJvY2VzcyBpdCBpbiB0aGlz
IHdoaWxlLWxvb3AuCi0JCQkvLwotCQkJTmRpc0FjcXVpcmVTcGluTG9jaygmcEFkYXB0ZXItPlNl
bmRUeFdhaXRRdWV1ZUxvY2spOwotCQkJaWYgKFN0YXR1cyA9PSBORElTX1NUQVRVU19GQUlMVVJF
KQotCQkJewotCQkJCS8vIFBhY2tldCBmYWlsZWQgZHVlIHRvIHZhcmlvdXMgTmRpcyBQYWNrZXQg
ZXJyb3IKLQkJCQlSVFVTQkZyZWVTa2JCdWZmZXIoc2tiKTsKLQkJCQlicmVhazsKLQkJCX0KLQkJ
CWVsc2UgaWYgKFN0YXR1cyA9PSBORElTX1NUQVRVU19SRVNPVVJDRVMpCi0JCQl7Ci0JCQkJLy8g
Tm90IGVub3VnaCBmcmVlIHR4IHJpbmcsIGl0IG1pZ2h0IGhhcHBlbiBkdWUgdG8gZnJlZSBkZXNj
cmlwdG9yIGlucXVlcnkgbWlnaHQgYmUgbm90IGNvcnJlY3QKLQkJCQkvLyBJdCBhbHNvIG1pZ2h0
IGNoYW5nZSB0byBORElTX1NUQVRVU19GQUlMVVJFIHRvIHNpbXBseSBkcm9wIHRoZSBmcmFtZQot
CQkJCS8vIFB1dCB0aGUgZnJhbWUgYmFjayBpbnRvIGhlYWQgb2YgcXVldWUKLQkJCQlza2JfcXVl
dWVfaGVhZChwUXVldWUsIHNrYik7Ci0JCQkJYnJlYWs7Ci0JCQl9CQkJCi0JCQlDb3VudCsrOwot
CQl9CQotCQllbHNlCi0JCXsKLQkJCXNrYl9xdWV1ZV9oZWFkKHBRdWV1ZSwgc2tiKTsKLQkJCWJy
ZWFrOwotCQl9Ci0JfQotCQotCU5kaXNSZWxlYXNlU3BpbkxvY2soJnBBZGFwdGVyLT5TZW5kVHhX
YWl0UXVldWVMb2NrKTsKLQlyZXR1cm47Ci0JCi19Ci0KLU5ESVNfU1RBVFVTCVJUVVNCRnJlZURl
c2NyaXB0b3JSZXF1ZXN0KAotCUlOCQlQUlQyNTcwQURBUFRFUglwQWRhcHRlciwKLQlJTgkJVUNI
QVIJCQlSaW5nVHlwZSwKLQlJTgkJVUNIQVIJCQlOdW1iZXJSZXF1aXJlZCkKLXsKLQlVQ0hBUgkJ
CUZyZWVOdW1iZXIgPSAwOwotCVVJTlQJCQlJbmRleDsKLQlORElTX1NUQVRVUwkJU3RhdHVzID0g
TkRJU19TVEFUVVNfRkFJTFVSRTsKLQotCXN3aXRjaCAoUmluZ1R5cGUpCi0JewotCQljYXNlIFRY
X1JJTkc6Ci0JCQlJbmRleCA9IHBBZGFwdGVyLT5OZXh0VHhJbmRleDsKLQkJCWRvCi0JCQl7Ci0J
CQkJUFRYX0NPTlRFWFQJcFR4RCAgPSAmcEFkYXB0ZXItPlR4Q29udGV4dFtJbmRleF07Ci0JCQkJ
Ci0JCQkJLy8gV2hpbGUgT3duZXIgYml0IGlzIE5JQywgb2J2aW91c2x5IEFTSUMgc3RpbGwgbmVl
ZCBpdC4KLQkJCQkvLyBJZiB2YWxpZCBiaXQgaXMgVFJVRSwgaW5kaWNhdGUgdGhhdCBUeERvbmUg
aGFzIG5vdCBwcm9jZXNzIHlldAotCQkJCS8vIFdlIHNob3VsZCBub3QgdXNlIGl0IHVudGlsIFR4
RG9uZSBmaW5pc2ggY2xlYW51cCBqb2IKLQkJCQlpZiAocFR4RC0+SW5Vc2UgPT0gRkFMU0UpCi0J
CQkJewotCQkJCQkvLyBUaGlzIG9uZSBpcyBmcmVlCi0JCQkJCUZyZWVOdW1iZXIrKzsKLQkJCQl9
Ci0JCQkJZWxzZQotCQkJCXsKLQkJCQkJYnJlYWs7Ci0JCQkJfQkJCQkJCi0JCQkJSW5kZXggPSAo
SW5kZXggKyAxKSAlIFRYX1JJTkdfU0laRTsJCQkJCi0JCQl9CXdoaWxlIChGcmVlTnVtYmVyIDwg
TnVtYmVyUmVxdWlyZWQpOwkvLyBRdWl0IGhlcmUgISBGcmVlIG51bWJlciBpcyBlbm91Z2ggIQot
CQkJCi0JCQlpZiAoRnJlZU51bWJlciA+PSBOdW1iZXJSZXF1aXJlZCkKLQkJCXsKLQkJCQlTdGF0
dXMgPSBORElTX1NUQVRVU19TVUNDRVNTOwotCQkJfQotCQkJCi0JCQlicmVhazsKLQkJCQotCQlj
YXNlIFBSSU9fUklORzoKLQkJCUluZGV4ID0gcEFkYXB0ZXItPk5leHRNTE1FSW5kZXg7Ci0JCQlk
bwotCQkJewotCQkJCVBUWF9DT05URVhUCXBUeEQgID0gJnBBZGFwdGVyLT5NTE1FQ29udGV4dFtJ
bmRleF07Ci0JCQkJCi0JCQkJLy8gV2hpbGUgT3duZXIgYml0IGlzIE5JQywgb2J2aW91c2x5IEFT
SUMgc3RpbGwgbmVlZCBpdC4KLQkJCQkvLyBJZiB2YWxpZCBiaXQgaXMgVFJVRSwgaW5kaWNhdGUg
dGhhdCBUeERvbmUgaGFzIG5vdCBwcm9jZXNzIHlldAotCQkJCS8vIFdlIHNob3VsZCBub3QgdXNl
IGl0IHVudGlsIFR4RG9uZSBmaW5pc2ggY2xlYW51cCBqb2IKLQkJCQlpZiAocFR4RC0+SW5Vc2Ug
PT0gRkFMU0UpCi0JCQkJewotCQkJCQkvLyBUaGlzIG9uZSBpcyBmcmVlCi0JCQkJCUZyZWVOdW1i
ZXIrKzsKLQkJCQl9Ci0JCQkJZWxzZQotCQkJCXsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJCQkK
LQkJCQlJbmRleCA9IChJbmRleCArIDEpICUgUFJJT19SSU5HX1NJWkU7CQkJCQotCQkJfQl3aGls
ZSAoRnJlZU51bWJlciA8IE51bWJlclJlcXVpcmVkKTsJLy8gUXVpdCBoZXJlICEgRnJlZSBudW1i
ZXIgaXMgZW5vdWdoICEKLQkJCQotCQkJaWYgKEZyZWVOdW1iZXIgPj0gTnVtYmVyUmVxdWlyZWQp
Ci0JCQl7Ci0JCQkJU3RhdHVzID0gTkRJU19TVEFUVVNfU1VDQ0VTUzsKLQkJCX0KLQkJCWJyZWFr
OwotCi0JCWRlZmF1bHQ6Ci0JCQlicmVhazsKLQotCi0JCi0JfQotCi0JcmV0dXJuIChTdGF0dXMp
OwotCi19Ci0vKgotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCQotCVJvdXRpbmUgRGVzY3JpcHRpb246Ci0K
LQlBcmd1bWVudHM6Ci0KLQlSZXR1cm4gVmFsdWU6Ci0KLQlJUlFMID0gCi0JCi0JTm90ZToKLQkK
LQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLSovCi1WT0lECVJUVVNCUmVqZWN0UGVuZGluZ1BhY2tldHMoCi0J
SU4JUFJUMjU3MEFEQVBURVIJcEFkYXB0ZXIpCi17Ci0JREJHUFJJTlRfUkFXKFJUX0RFQlVHX1RS
QUNFLCAiLS0tPlJlamVjdFBlbmRpbmdQYWNrZXRzXG4iKTsKLQotCU5kaXNBY3F1aXJlU3Bpbkxv
Y2soJnBBZGFwdGVyLT5TZW5kVHhXYWl0UXVldWVMb2NrKTsKLQlEQkdQUklOVF9SQVcoUlRfREVC
VUdfVFJBQ0UsICJQdXJnZSBTZW5kVHhXYWl0UXVldWVcbiIpOwotCXNrYl9xdWV1ZV9wdXJnZSgm
cEFkYXB0ZXItPlNlbmRUeFdhaXRRdWV1ZSk7Ci0JTmRpc1JlbGVhc2VTcGluTG9jaygmcEFkYXB0
ZXItPlNlbmRUeFdhaXRRdWV1ZUxvY2spOwotCi0JREJHUFJJTlRfUkFXKFJUX0RFQlVHX1RSQUNF
LCAiPC0tLVJlamVjdFBlbmRpbmdQYWNrZXRzXG4iKTsKLX0KLQotLyoKLQk9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLQotCVJvdXRpbmUJRGVzY3JpcHRpb246Ci0JCVN1c3BlbmQgTVNEVSB0cmFuc21pc3Npb24K
LQkJCi0JQXJndW1lbnRzOgotCQlwQWRhcHRlcgkJUG9pbnRlcgl0byBvdXIgYWRhcHRlcgotCQkK
LQlSZXR1cm4gVmFsdWU6Ci0JCU5vbmUKLQkJCi0JTm90ZToKLQkKLQk9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LSovCi1WT0lEICAgIFJUVVNCU3VzcGVuZE1zZHVUcmFuc21pc3Npb24oCi0JSU4JUFJUMjU3MEFE
QVBURVIJcEFkYXB0ZXIpCi17Ci0JREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsIlNDQU5OSU5HLCBz
dXNwZW5kIE1TRFUgdHJhbnNtaXNzaW9uIC4uLlxuIik7Ci0JUlRNUF9TRVRfRkxBRyhwQWRhcHRl
ciwgZlJUTVBfQURBUFRFUl9CU1NfU0NBTl9JTl9QUk9HUkVTUyk7Ci19Ci0KLS8qCi0JPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0KLQlSb3V0aW5lCURlc2NyaXB0aW9uOgotCQlSZXN1bWUgTVNEVSB0cmFuc21p
c3Npb24KLQkJCi0JQXJndW1lbnRzOgotCQlwQWRhcHRlcgkJUG9pbnRlcgl0byBvdXIgYWRhcHRl
cgotCQkKLQlSZXR1cm4gVmFsdWU6Ci0JCU5vbmUKLQkJCi0JTm90ZToKLQkKLQk9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLSovCi1WT0lEICAgIFJUVVNCUmVzdW1lTXNkdVRyYW5zbWlzc2lvbigKLQlJTglQUlQy
NTcwQURBUFRFUglwQWRhcHRlcikKLXsKLQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwiU0NBTk5J
TkcsIHJlc3VtZSBNU0RVIHRyYW5zbWlzc2lvbiAuLi5cbiIpOwotCVJUTVBfQ0xFQVJfRkxBRyhw
QWRhcHRlciwgZlJUTVBfQURBUFRFUl9CU1NfU0NBTl9JTl9QUk9HUkVTUyk7Ci0JaWYgKCghUlRN
UF9URVNUX0ZMQUcocEFkYXB0ZXIsIGZSVE1QX0FEQVBURVJfUkVTRVRfSU5fUFJPR1JFU1MpKSAm
JgotCQkoIVJUTVBfVEVTVF9GTEFHKHBBZGFwdGVyLCBmUlRNUF9BREFQVEVSX0hBTFRfSU5fUFJP
R1JFU1MpKSAmJgotCQkoIVJUTVBfVEVTVF9GTEFHKHBBZGFwdGVyLCBmUlRNUF9BREFQVEVSX1JF
TU9WRV9JTl9QUk9HUkVTUykpICYmCi0JCSghUlRNUF9URVNUX0ZMQUcocEFkYXB0ZXIsIGZSVE1Q
X0FEQVBURVJfUkFESU9fT0ZGKSkpCi0JewotCQkvLyBDYWxsIGRlcXVldWUgd2l0aG91dCBzZWxl
Y3RlZCBxdWV1ZSwgbGV0IHRoZSBzdWJyb3V0aW5lIHNlbGVjdCB0aGUgcmlnaHQgcHJpb3JpdHkK
LQkJLy8gVHggc29mdHdhcmUgcXVldWUKLQkJUlRVU0JEZVF1ZXVlUGFja2V0KHBBZGFwdGVyKTsK
LQl9Ci0KLQkvLyBLaWNrIGJ1bGsgb3V0Ci0JUlRVU0JLaWNrQnVsa091dChwQWRhcHRlcik7Ci0K
LX0KLS8qCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLQlSb3V0aW5lCURlc2NyaXB0aW9uOgotCQkKLQlB
cmd1bWVudHM6Ci0JCQotCVJldHVybiBWYWx1ZToKLQkJCi0JTm90ZToKLQkKLQk9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLSovCi1VU0hPUlQJUlRVU0JDYWxjRHVyYXRpb24oCi0JSU4JUFJUMjU3MEFEQVBURVIJ
cEFkYXB0ZXIsCi0JSU4JVUNIQVIJCQlSYXRlLAotCUlOCVVMT05HCQkJU2l6ZSkKLXsKLQlVTE9O
RwlEdXJhdGlvbiA9IDA7Ci0KLQlpZiAoUmF0ZSA8IFJBVEVfRklSU1RfT0ZETV9SQVRFKSAvLyBD
Q0sKLQl7Ci0JICAgIGlmICgoUmF0ZSA+IFJBVEVfMSkgJiYgKHBBZGFwdGVyLT5Qb3J0Q2ZnLlR4
UHJlYW1ibGVJblVzZWQgPT0gUnQ4MDJfMTFQcmVhbWJsZVNob3J0KSkKLQkJRHVyYXRpb24gPSA5
NjsgIC8vIDcyKzI0IHByZWFtYmxlK3BsY3AKLQkJZWxzZQotCSAgICBEdXJhdGlvbiA9IDE5Mjsg
Ly8gMTQ0KzQ4IHByZWFtYmxlK3BsY3AKLQkJCi0JCUR1cmF0aW9uICs9IChVU0hPUlQpKChTaXpl
IDw8IDQpIC8gUmF0ZUlkVG81MDBLYnBzW1JhdGVdKTsKLQkJaWYgKChTaXplIDw8IDQpICUgUmF0
ZUlkVG81MDBLYnBzW1JhdGVdKQotCQkJRHVyYXRpb24gKys7Ci0JfQotCWVsc2UgLy8gT0ZETSBy
YXRlcwotCXsKLQkJRHVyYXRpb24gPSAyMCArIDY7ICAgICAgLy8gMTYrNCBwcmVhbWJsZStwbGNw
ICsgU2lnbmFsIEV4dGVuc2lvbgotCQlEdXJhdGlvbiArPSA0ICogKFVTSE9SVCkoKDExICsgU2l6
ZSAqIDQpIC8gUmF0ZUlkVG81MDBLYnBzW1JhdGVdKTsKLQkJaWYgKCgxMSArIFNpemUgKiA0KSAl
IFJhdGVJZFRvNTAwS2Jwc1tSYXRlXSkKLQkJCUR1cmF0aW9uICs9IDQ7Ci0JfQotCQotCXJldHVy
biAoVVNIT1JUKUR1cmF0aW9uOwkKLX0KLQotLyoKLQk9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQkKLQlSb3V0
aW5lCURlc2NyaXB0aW9uOgotCQlDYWxjdWxhdGVzIHRoZSBkdXJhdGlvbiB3aGljaCBpcyByZXF1
aXJlZCB0byB0cmFuc21pdCBvdXQgZnJhbWVzIAotCXdpdGggZ2l2ZW4gc2l6ZSBhbmQgc3BlY2lm
aWVkIHJhdGUuCi0JCQotCUFyZ3VtZW50czoKLQkJcFR4RAkJUG9pbnRlciB0byB0cmFuc21pdCBk
ZXNjcmlwdG9yCi0JCUFjawkJCVNldHRpbmcgZm9yIEFjayByZXF1aXJlbWVudCBiaXQKLQkJRnJh
Z21lbnQJU2V0dGluZyBmb3IgRnJhZ21lbnQgYml0Ci0JCVJldHJ5TW9kZQlTZXR0aW5nIGZvciBy
ZXRyeSBtb2RlCi0JCUlmcwkJCVNldHRpbmcgZm9yIElGUyBnYXAKLQkJUmF0ZQkJU2V0dGluZyBm
b3IgdHJhbnNtaXQgcmF0ZQotCQlTZXJ2aWNlCQlTZXR0aW5nIGZvciBzZXJ2aWNlCi0JCUxlbmd0
aAkJRnJhbWUgbGVuZ3RoCi0JCQotCVJldHVybiBWYWx1ZToKLQkJTm9uZQotCQkKLQk9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLSovCi1WT0lECVJUVVNCV3JpdGVUeERlc2NyaXB0b3IoCi0JSU4JUFRYRF9TVFJV
QwlwVHhELAotCUlOCUJPT0xFQU4JCUZyYWdtZW50LAotCUlOCVVDSEFSCQlSZXRyeUxpbWl0LAot
CUlOCUJPT0xFQU4JCUFjaywKLQlJTiAgQk9PTEVBTiAgICAgSW5zVGltZXN0YW1wLAotCUlOICBC
T09MRUFOICAgICBuZXdfc2VxLAotCUlOCVVDSEFSCQlJZnMsCi0JSU4JVUlOVAkJTGVuZ3RoLAot
CUlOCUJPT0xFQU4JCUNpcGhlciwKLQlJTglVQ0hBUgkJS2V5SUQsCi0JSU4JVUNIQVIJCUNXTWlu
LAotCUlOCVVDSEFSCQlDV01heCwKLQlJTglVSU5UCQlQTENQTGVuZ3RoLAotCUlOCVVJTlQJCVJh
dGUsCi0JSU4JVUNIQVIJCVNlcnZpY2UsCi0JSU4gIFVTSE9SVCAgICAgIFR4UHJlYW1ibGUpCi17
Ci0JVUlOVAlSZXNpZHVhbDsKLQotCXBUeEQtPlJldHJ5TGltaXQgID0gUmV0cnlMaW1pdDsKLQlw
VHhELT5Nb3JlRnJhZyAgICA9IEZyYWdtZW50OwotCXBUeEQtPkFDSyAgICAgICAgID0gQWNrOwot
CXBUeEQtPlRpbWVzdGFtcCAgID0gSW5zVGltZXN0YW1wOwotCXBUeEQtPm5ld3NlcSAgICAgID0g
bmV3X3NlcTsKLQlwVHhELT5JRlMgICAgICAgICA9IElmczsKLQlwVHhELT5EYXRhQnl0ZUNudCA9
IExlbmd0aDsKLQlwVHhELT5DaXBoZXIJICA9IENpcGhlcjsKLQlwVHhELT5LZXlJRAkJICA9IEtl
eUlEOwotCXBUeEQtPkNXbWluICAgICAgID0gQ1dNaW47ICAgLy8gMl41LTEgPSAzMQotCXBUeEQt
PkNXbWF4ICAgICAgID0gQ1dNYXg7ICAvLyAyXjEwIC0xID0gMTAyMwotCXBUeEQtPkFpZnMgICAg
ICAgID0gMjsgICAvLyBUQzA6IFNJRlMgKyAyKlNsb3QgKyBSYW5kb20oQ1dtaW4sQ1dtYXgpKlNs
b3QKLQkJCi0JaWYgKFJhdGUgPCBSQVRFX0ZJUlNUX09GRE1fUkFURSkKLQkJcFR4RC0+T2ZkbSA9
IDA7Ci0JZWxzZQotCQlwVHhELT5PZmRtID0gMTsKLQotCS8vIGZpbGwgdXAgUExDUCBTSUdOQUwg
ZmllbGQKLQlwVHhELT5QbGNwU2lnbmFsID0gUGxjcFNpZ25hbFtSYXRlXTsKLQlpZiAoKChSYXRl
ID09IFJBVEVfMikgfHwgKFJhdGUgPT0gUkFURV81XzUpIHx8IChSYXRlID09IFJBVEVfMTEpKSAm
JiAoVHhQcmVhbWJsZSA9PSBSdDgwMl8xMVByZWFtYmxlU2hvcnQpKSAvLyBubyBzaG9ydCBwcmVh
bWJsZSBmb3IgUkFURV8xCi0JewotCQlwVHhELT5QbGNwU2lnbmFsIHw9IDB4MDAwODsKLQl9Ci0K
LQkvLyBmaWxsIHVwIFBMQ1AgU0VSVklDRSBmaWVsZCwgbm90IHVzZWQgZm9yIE9GRE0gcmF0ZXMK
LQlwVHhELT5QbGNwU2VydmljZSA9IFNlcnZpY2U7Ci0KLQkvLyBmaWxlIHVwIFBMQ1AgTEVOR1RI
X0xPVyBhbmQgTEVOR1RIX0hJR0ggZmllbGRzCi0JaWYgKFJhdGUgPCBSQVRFX0ZJUlNUX09GRE1f
UkFURSkgICAgLy8gMTFiIC0gUkFURV8xLCBSQVRFXzIsIFJBVEVfNV81LCBSQVRFXzExCi0Jewot
CQlpZiAoKFJhdGUgPT0gUkFURV8xKSB8fCAoIFJhdGUgPT0gUkFURV8yKSkKLQkJewotCQkJUExD
UExlbmd0aCA9IFBMQ1BMZW5ndGggKiA4IC8gKFJhdGUgKyAxKTsKLQkJfQotCQllbHNlCi0JCXsK
LQkJCVJlc2lkdWFsID0gKChQTENQTGVuZ3RoICogMTYpICUgKDExICogKDEgKyBSYXRlIC0gUkFU
RV81XzUpKSk7Ci0JCQlQTENQTGVuZ3RoID0gUExDUExlbmd0aCAqIDE2IC8gKDExICogKDEgKyBS
YXRlIC0gUkFURV81XzUpKTsKLQkJCWlmIChSZXNpZHVhbCAhPSAwKQotCQkJewotCQkJCVBMQ1BM
ZW5ndGgrKzsKLQkJCX0KLQkJCWlmIChSYXRlID09IFJBVEVfMTEpCi0JCQl7Ci0JCQlpZiAoKFJl
c2lkdWFsIDw9ICgzICogKDEgKyBSYXRlIC0gUkFURV81XzUpKSkgJiYgKFJlc2lkdWFsICE9IDAp
KQotCQkJewotCQkJCXBUeEQtPlBsY3BTZXJ2aWNlIHw9IDB4ODA7IC8vIDExYidzIFBMQ1AgTGVu
Z3RoIGV4dGVuc2lvbiBiaXQKLQkJCX0KLQkJCX0KLQkJfQotCi0JCXBUeEQtPlBsY3BMZW5ndGhI
aWdoID0gUExDUExlbmd0aCAvIDI1NjsKLQkJcFR4RC0+UGxjcExlbmd0aExvdyA9IFBMQ1BMZW5n
dGggJSAyNTY7Ci0JfQotCWVsc2UgICAgLy8gT0ZETSAtIFJBVEVfNiwgUkFURV85LCBSQVRFXzEy
LCBSQVRFXzE4LCBSQVRFXzI0LCBSQVRFXzM2LCBSQVRFXzQ4LCBSQVRFXzU0Ci0JewotCQlwVHhE
LT5QbGNwTGVuZ3RoSGlnaCA9IFBMQ1BMZW5ndGggLyA2NDsgIC8vIGhpZ2ggNi1iaXQgb2YgdG90
YWwgYnl0ZSBjb3VudAotCQlwVHhELT5QbGNwTGVuZ3RoTG93ID0gUExDUExlbmd0aCAlIDY0OyAg
IC8vIGxvdyA2LWJpdCBvZiB0b3RhbCBieXRlIGNvdW50Ci0JfQotfQotCi0vKgotCT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotCQotCVJvdXRpbmUJRGVzY3JpcHRpb246Ci0JCUNhbGN1bGF0ZXMgdGhlIGR1cmF0
aW9uIHdoaWNoIGlzIHJlcXVpcmVkIHRvIHRyYW5zbWl0IG91dCBmcmFtZXMgCi0Jd2l0aCBnaXZl
biBzaXplIGFuZCBzcGVjaWZpZWQgcmF0ZS4KLQkJCi0JQXJndW1lbnRzOgotCQlwVHhECQlQb2lu
dGVyIHRvIHRyYW5zbWl0IGRlc2NyaXB0b3IKLQkJQWNrCQkJU2V0dGluZyBmb3IgQWNrIHJlcXVp
cmVtZW50IGJpdAotCQlGcmFnbWVudAlTZXR0aW5nIGZvciBGcmFnbWVudCBiaXQKLQkJUmV0cnlN
b2RlCVNldHRpbmcgZm9yIHJldHJ5IG1vZGUKLQkJSWZzCQkJU2V0dGluZyBmb3IgSUZTIGdhcAot
CQlSYXRlCQlTZXR0aW5nIGZvciB0cmFuc21pdCByYXRlCi0JCVNlcnZpY2UJCVNldHRpbmcgZm9y
IHNlcnZpY2UKLQkJTGVuZ3RoCQlGcmFtZSBsZW5ndGgKLQkJCi0JUmV0dXJuIFZhbHVlOgotCQlO
b25lCi0JCQotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotKi8KLVZPSUQJUlRVU0JXcml0ZUJlYWNvbkRlc2Ny
aXB0b3IoCi0JSU4JUFRYRF9TVFJVQwlwVHhELAotCUlOCVVJTlQJCUxlbmd0aCwKLQlJTglVSU5U
CQlQTENQTGVuZ3RoLAotCUlOCVVJTlQJCVJhdGUsCi0JSU4JVUNIQVIJCVNlcnZpY2UsCi0JSU4g
IFVTSE9SVCAgICAgIFR4UHJlYW1ibGUpCi17Ci0JVUlOVAlSZXNpZHVhbDsKLQotCXBUeEQtPlJl
dHJ5TGltaXQJPSAwOwotCXBUeEQtPk1vcmVGcmFnICAgID0gMDsKLQlwVHhELT5BQ0sgICAgICAg
ICA9IDA7Ci0JcFR4RC0+VGltZXN0YW1wICAgPSAxOwotCXBUeEQtPm5ld3NlcSAgICAgID0gMTsK
LQlwVHhELT5JRlMgICAgICAgICA9IElGU19ORVdfQkFDS09GRjsKLQlwVHhELT5EYXRhQnl0ZUNu
dCA9IExlbmd0aDsKLQlwVHhELT5DaXBoZXIJICA9IDA7Ci0JcFR4RC0+S2V5SUQJCSAgPSAwOwot
CXBUeEQtPkNXbWluICAgICAgID0gQkVBQ09OX0NXX0lOX0JJVFM7ICAgLy8gMl41LTEgPSAzMQot
CXBUeEQtPkNXbWF4ICAgICAgID0gQkVBQ09OX0NXX0lOX0JJVFM7ICAvLyAyXjEwIC0xID0gMTAy
MwotCXBUeEQtPkFpZnMgICAgICAgID0gMjsgICAvLyBUQzA6IFNJRlMgKyAyKlNsb3QgKyBSYW5k
b20oQ1dtaW4sQ1dtYXgpKlNsb3QKLQkJCi0JaWYgKFJhdGUgPCBSQVRFX0ZJUlNUX09GRE1fUkFU
RSkKLQkJcFR4RC0+T2ZkbSA9IDA7Ci0JZWxzZQotCQlwVHhELT5PZmRtID0gMTsKLQotCS8vIGZp
bGwgdXAgUExDUCBTSUdOQUwgZmllbGQKLQlwVHhELT5QbGNwU2lnbmFsID0gUGxjcFNpZ25hbFtS
YXRlXTsKLQlpZiAoKChSYXRlID09IFJBVEVfMikgfHwgKFJhdGUgPT0gUkFURV81XzUpIHx8IChS
YXRlID09IFJBVEVfMTEpKSAmJiAoVHhQcmVhbWJsZSA9PSBSdDgwMl8xMVByZWFtYmxlU2hvcnQp
KSAvLyBubyBzaG9ydCBwcmVhbWJsZSBmb3IgUkFURV8xCi0JewotCQlwVHhELT5QbGNwU2lnbmFs
IHw9IDB4MDAwODsKLQl9Ci0KLQkvLyBmaWxsIHVwIFBMQ1AgU0VSVklDRSBmaWVsZCwgbm90IHVz
ZWQgZm9yIE9GRE0gcmF0ZXMKLQlwVHhELT5QbGNwU2VydmljZSA9IFNlcnZpY2U7Ci0KLQkvLyBm
aWxlIHVwIFBMQ1AgTEVOR1RIX0xPVyBhbmQgTEVOR1RIX0hJR0ggZmllbGRzCi0JaWYgKFJhdGUg
PCBSQVRFX0ZJUlNUX09GRE1fUkFURSkgICAgLy8gMTFiIC0gUkFURV8xLCBSQVRFXzIsIFJBVEVf
NV81LCBSQVRFXzExCi0JewotCQlpZiAoKFJhdGUgPT0gUkFURV8xKSB8fCAoIFJhdGUgPT0gUkFU
RV8yKSkKLQkJewotCQkJUExDUExlbmd0aCA9IFBMQ1BMZW5ndGggKiA4IC8gKFJhdGUgKyAxKTsK
LQkJfQotCQllbHNlCi0JCXsKLQkJCVJlc2lkdWFsID0gKChQTENQTGVuZ3RoICogMTYpICUgKDEx
ICogKDEgKyBSYXRlIC0gUkFURV81XzUpKSk7Ci0JCQlQTENQTGVuZ3RoID0gUExDUExlbmd0aCAq
IDE2IC8gKDExICogKDEgKyBSYXRlIC0gUkFURV81XzUpKTsKLQkJCWlmIChSZXNpZHVhbCAhPSAw
KQotCQkJewotCQkJCVBMQ1BMZW5ndGgrKzsKLQkJCX0KLQkJCWlmICgoUmVzaWR1YWwgPD0gKDMg
KiAoMSArIFJhdGUgLSBSQVRFXzVfNSkpKSAmJiAoUmVzaWR1YWwgIT0gMCkpCi0JCQl7Ci0JCQkJ
cFR4RC0+UGxjcFNlcnZpY2UgfD0gMHg4MDsgLy8gMTFiJ3MgUExDUCBMZW5ndGggZXh0ZW5zaW9u
IGJpdAotCQkJfQotCQl9Ci0KLQkJcFR4RC0+UGxjcExlbmd0aEhpZ2ggPSBQTENQTGVuZ3RoIC8g
MjU2OwotCQlwVHhELT5QbGNwTGVuZ3RoTG93ID0gUExDUExlbmd0aCAlIDI1NjsKLQl9Ci0JZWxz
ZSAgICAvLyBPRkRNIC0gUkFURV82LCBSQVRFXzksIFJBVEVfMTIsIFJBVEVfMTgsIFJBVEVfMjQs
IFJBVEVfMzYsIFJBVEVfNDgsIFJBVEVfNTQKLQl7Ci0JCXBUeEQtPlBsY3BMZW5ndGhIaWdoID0g
UExDUExlbmd0aCAvIDY0OyAgLy8gaGlnaCA2LWJpdCBvZiB0b3RhbCBieXRlIGNvdW50Ci0JCXBU
eEQtPlBsY3BMZW5ndGhMb3cgPSBQTENQTGVuZ3RoICUgNjQ7ICAgLy8gbG93IDYtYml0IG9mIHRv
dGFsIGJ5dGUgY291bnQKLQl9Ci19Ci0KLS8qCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLQlSb3V0aW5l
CURlc2NyaXB0aW9uOgotCQlDb3B5IGZyYW1lIGZyb20gd2FpdGluZyBxdWV1ZSBpbnRvIHJlbGF0
aXZlIHJpbmcgYnVmZmVyIGFuZCBzZXQgCi0JYXBwcm9wcmlhdGUgQVNJQyByZWdpc3RlciB0byBr
aWNrIGhhcmR3YXJlIGVuY3J5cHRpb24gYmVmb3JlIHJlYWxseQotCXNlbnQgb3V0IHRvIGFpci4K
LQkJCi0JQXJndW1lbnRzOgotCQlwQWRhcHRlcgkJUG9pbnRlcgl0byBvdXIgYWRhcHRlcgotCQlQ
TkRJU19QQUNLRVQJUG9pbnRlciB0byBvdXRnb2luZyBOZGlzIGZyYW1lCi0JCU51bWJlck9mRnJh
ZwlOdW1iZXIgb2YgZnJhZ21lbnQgcmVxdWlyZWQKLQkJCi0JUmV0dXJuIFZhbHVlOgotCQlOb25l
Ci0KLQlJUlFMID0gRElTUEFUQ0hfTEVWRUwKLQkKLQlOb3RlOgotCQotCT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotKi8KLU5ESVNfU1RBVFVTCVJUVVNCSGFyZEVuY3J5cHQoCi0JSU4JUFJUMjU3MEFEQVBURVIJ
cEFkYXB0ZXIsCi0JSU4gIHN0cnVjdCBza19idWZmICAqc2tiLAotCUlOCVVDSEFSCQkJTnVtYmVy
UmVxdWlyZWQsCi0JSU4JVUxPTkcJCQlFbmFibGVUeEJ1cnN0KQotewotCVBWT0lECQkJcFZpcnR1
YWxBZGRyZXNzOwotCVVJTlQJCQlOZGlzQnVmZmVyTGVuZ3RoOwotCVVJTlQJCQlCeXRlc0NvcGll
ZDsKLQlVSU5UCQkJVHhTaXplLCBQTENQTGVuZ3RoOwotCVVJTlQJCQlGcmVlRnJhZ1NpemU7Ci0J
VUlOVAkJCVJlbWFpblNpemU7Ci0JVVNIT1JUCQkJUHJvdG9jb2w7Ci0JVUNIQVIJCQlGcmFtZUdh
cDsKLQlIRUFERVJfODAyXzExCUhlYWRlcl84MDJfMTE7Ci0JUFVDSEFSCQkJcERlc3Q7Ci0JUFVD
SEFSCQkJcFNyYzsKLQlQVUNIQVIJCQlwRW5jYXAgPSBOVUxMOwotCVBUWF9DT05URVhUCQlwVHhD
b250ZXh0OwotCVBUWERfU1RSVUMJCXBUeEQ7Ci0JQk9PTEVBTgkJCVN0YXJ0T2ZGcmFtZTsKLQlC
T09MRUFOCQkJRUFQT0xGcmFtZTsKLQlCT09MRUFOCQkJRW5jYXBwZWQ7Ci0JVUxPTkcJCQlJdjE2
OwotCVVMT05HCQkJSXYzMjsKLQlCT09MRUFOCQkJTUlDRnJhZzsKLQlQV1BBX0tFWQkJcFdwYUtl
eSA9IChQV1BBX0tFWSkgTlVMTDsKLQlCT09MRUFOCQkJQ2lwaGVyOwotCVVDSEFSCQkJS2V5SUQg
PSAwOwotCVVMT05HCQkJVHJhbnNmZXJCdWZmZXJMZW5ndGg7Ci0JQk9PTEVBTgkJCU1vcmVGcmFn
bWVudDsKLSAgICBVQ0hBUiAgICAgICAgICAgQWNrUmF0ZSA9IFJBVEVfMjsKLSAgICBVU0hPUlQg
ICAgICAgICAgQWNrRHVyYXRpb24gPSAwOwotICAgIFVTSE9SVCAgICAgICAgICBFbmNyeXB0aW9u
T3ZlcmhlYWQgPSAwOwotCUJPT0xFQU4JCQlCY2FzdF84MDIzOwotCUJPT0xFQU4JCQlTaW5nbGVG
cmFnOwotLy9mb3IgcmUtY2FsY3VsYXRpbmcgdGhlIG51bWJlciBvZiBGcmFnbWVudCByZXF1aXJl
ZC4KLQlVSU5UCQkJQWxsb3dGcmFnU2l6ZTsKLQlVQ0hBUgkJCU51bWJlck9mRnJhZzsKLQlVSU5U
CQkJVG90YWxQYWNrZXRMZW5ndGg7IAotCS8vIFRvIGluZGljYXRlIGNpcGhlciB1c2VkIGZvciB0
aGlzIHBhY2tldAotCU5ESVNfODAyXzExX0VOQ1JZUFRJT05fU1RBVFVTCUNpcGhlclN1aXRlOwot
CQotCUNpcGhlclN1aXRlID0gcEFkYXB0ZXItPlBvcnRDZmcuV2VwU3RhdHVzOwotCWlmIChFbmFi
bGVUeEJ1cnN0ID09IDEpCi0JCUZyYW1lR2FwID0gSUZTX1NJRlM7Ci0JZWxzZQotCQlGcmFtZUdh
cCA9IElGU19CQUNLT0ZGOwkJLy8gRGVmYXVsdCBmcmFtZSBnYXAgbW9kZQotCS8vIFNlcXVlbmNl
IE51bWJlciBpcyBpZGVudGljYWwgZm9yIGFsbCBmcmFnbWVudHMgYmVsb25nZWQgdG8gdGhlIHNh
bWUgZnJhbWUKLQkvLyBTZXF1ZW5jZSBpcyAwIC0gNDA5NQotCXBBZGFwdGVyLT5TZXF1ZW5jZSA9
ICgocEFkYXB0ZXItPlNlcXVlbmNlKSArIDEpICYgKE1BWF9TRVFfTlVNQkVSKTsKLQlBY2tSYXRl
ID0gcEFkYXB0ZXItPlBvcnRDZmcuRXhwZWN0ZWRBQ0tSYXRlW3BBZGFwdGVyLT5Qb3J0Q2ZnLlR4
UmF0ZV07Ci0JQWNrRHVyYXRpb24gPSBSVFVTQkNhbGNEdXJhdGlvbihwQWRhcHRlciwgQWNrUmF0
ZSwgMTQpOwotCi0JcFZpcnR1YWxBZGRyZXNzID0gc2tiLT5kYXRhOwotCU5kaXNCdWZmZXJMZW5n
dGggPSBza2ItPmxlbjsKLQlpZihwVmlydHVhbEFkZHJlc3MgPT0gTlVMTCkKLQl7Ci0JCURCR1BS
SU5UKFJUX0RFQlVHX0VSUk9SLCAiRXJyb3IsIE51bGwgc2tiIGRhdGEgYnVmZmVyISEhXG4iKTsK
LQkJcmV0dXJuIChORElTX1NUQVRVU19GQUlMVVJFKTsKLQl9Ci0JaWYgKE5kaXNCdWZmZXJMZW5n
dGggPCAxNCkKLQl7Ci0JCURCR1BSSU5UX1JBVyhSVF9ERUJVR19FUlJPUiwgIlJUVVNCSGFyZEVu
Y3J5cHQgLS0+IE5kaXMgUGFja2V0IGJ1ZmZlciBlcnJvciAhISFcbiIpOwotCQlyZXR1cm4gKE5E
SVNfU1RBVFVTX0ZBSUxVUkUpOwotCX0KLQlpZiAoKCooKFBVQ0hBUikgcFZpcnR1YWxBZGRyZXNz
KSAmIDB4MDEpICE9IDApCS8vIE11bHRpY2FzdCBvciBCcm9hZGNhc3QKLQl7Ci0JCUlOQ19DT1VO
VEVSKHBBZGFwdGVyLT5XbGFuQ291bnRlcnMuTXVsdGljYXN0VHJhbnNtaXR0ZWRGcmFtZUNvdW50
KTsKLQkJQmNhc3RfODAyMyA9IFRSVUU7Ci0JfQotCWVsc2UKLQl7Ci0JCUJjYXN0XzgwMjMgPSBG
QUxTRTsKLQl9Ci0KLQkvLyBOZXcgY29udHJvbCBmbGFnIGZvciBzZW5kaW5nIERIQ1AgJiBCT09U
UCB1c2luZiAxTUIgcmF0ZQotCWlmICgoTnVtYmVyUmVxdWlyZWQgLSBSVFVTQl9HRVRfUEFDS0VU
X1JUUyhza2IpKSA9PSAxKQotCXsKLQkJU2luZ2xlRnJhZyA9IFRSVUU7Ci0JfQotCWVsc2UKLQl7
Ci0JCVNpbmdsZUZyYWcgPSBGQUxTRTsKLQl9Ci0KLQkvLyBBZGQgODAyLjExeCBwcm90b2NvbCBj
aGVjay4KLQkvLyBGb3Igbm9uLVdQQSBuZXR3b3JrLCA4MDIuMTF4IG1lc3NhZ2Ugc2hvdWxkIG5v
dCBlbmNyeXB0IGV2ZW4KLQkvLyB0aGUgcHJpdmFjeSBpcyBvbi4KLQlpZiAoKG1lbWNtcChFQVBP
TCwgKChQVUNIQVIpIHBWaXJ0dWFsQWRkcmVzcykgKyAxMiwgMikgPT0gMCkpCi0JewotCQlFQVBP
TEZyYW1lID0gVFJVRTsKLQkJaWYgKHBBZGFwdGVyLT5Qb3J0Q2ZnLk1pY0VyckNudCA+PSAyKS8v
c3RldmVuOj8/PwotCQkJcEFkYXB0ZXItPlBvcnRDZmcuTWljRXJyQ250Kys7Ci0JfQotCWVsc2UK
LQl7Ci0JCUVBUE9MRnJhbWUgPSBGQUxTRTsKLQl9CS8vIEluaXRpYWxpemUgODAyLjExIGhlYWRl
ciBmb3IgZWFjaCBmcmFtZQotCi0JLy8gV1BBIDgwMi4xeCBzZWN1cmVkIHBvcnQgY29udHJvbAot
CWlmICgoKHBBZGFwdGVyLT5Qb3J0Q2ZnLkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQ
QSkgfHwgCi0JCSAocEFkYXB0ZXItPlBvcnRDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhN
b2RlV1BBUFNLKSkgJiYKLQkJKChwQWRhcHRlci0+UG9ydENmZy5Qb3J0U2VjdXJlZCA9PSBXUEFf
ODAyXzFYX1BPUlRfTk9UX1NFQ1VSRUQpIHx8IAotCQkgKHBBZGFwdGVyLT5Qb3J0Q2ZnLk1pY0Vy
ckNudCA+PSAyKSkgJiYKLQkJKEVBUE9MRnJhbWUgPT0gRkFMU0UpKQotCXsKLQkJREJHUFJJTlRf
UkFXKFJUX0RFQlVHX0lORk8sICJSVFVTQkhhcmRFbmNyeXB0IC0tPiBEcm9wIHBhY2tldCBiZWZv
cmUgcG9ydCBzZWN1cmVkICEhIVxuIik7Ci0JCXJldHVybiAoTkRJU19TVEFUVVNfRkFJTFVSRSk7
Ci0JfQkJCi0JCi0JbWVtc2V0KCZIZWFkZXJfODAyXzExLCAwLCBzaXplb2YoSEVBREVSXzgwMl8x
MSkpOwotCS8vCi0JLy8gU3RhcnQgbWFraW5nIDgwMi4xMSBmcmFtZSBoZWFkZXIKLQkvLwotCWlm
IChJTkZSQV9PTihwQWRhcHRlcikpCi0JewotCQkvLyBJbiBCU1MgbW9kZSwgQVAncyBhZGRyZXNz
KEJTU0lEKSBpcyB0aGUgZGVzdGluYXRpb24gYWRkcmVzcyBvZiBhbGwgb3V0Z29pbmcgcGFja2V0
cwotCQkvLyBBZGRyZXNzIDEgLSBCU1NJRAotCQltZW1jcHkoJkhlYWRlcl84MDJfMTEuQ29udHJv
bGhlYWQuQWRkcjEsICZwQWRhcHRlci0+UG9ydENmZy5Cc3NpZCwgRVRIX0xFTkdUSF9PRl9BRERS
RVNTKTsKLQkJLy8gQWRkcmVzcyAzIC0gREEKLQkJbWVtY3B5KCZIZWFkZXJfODAyXzExLkFkZHIz
LCAoUFVDSEFSKSBwVmlydHVhbEFkZHJlc3MsIEVUSF9MRU5HVEhfT0ZfQUREUkVTUyk7Ci0JCUhl
YWRlcl84MDJfMTEuQ29udHJvbGhlYWQuRnJhbWUuVG9EcyA9IDE7Ci0JfQotCWVsc2UgCi0Jewot
CQkvLyBBZGRyZXNzIDEgLSBEQQotCQltZW1jcHkoJkhlYWRlcl84MDJfMTEuQ29udHJvbGhlYWQu
QWRkcjEsIChQVUNIQVIpIHBWaXJ0dWFsQWRkcmVzcywgRVRIX0xFTkdUSF9PRl9BRERSRVNTKTsK
LQkJLy8gQWRkcmVzcyAzIC0gQlNTSUQKLQkJbWVtY3B5KCZIZWFkZXJfODAyXzExLkFkZHIzLCAm
cEFkYXB0ZXItPlBvcnRDZmcuQnNzaWQsIEVUSF9MRU5HVEhfT0ZfQUREUkVTUyk7Ci0JfQotCS8v
IEFkZHJlc3MgMiAtIFNBIGluIGJvdGggaW5mcmFzdHJ1Y3R1cmUgJiBhZC1ob2MgbW9kZXMKLQlt
ZW1jcHkoJkhlYWRlcl84MDJfMTEuQ29udHJvbGhlYWQuQWRkcjIsIHBBZGFwdGVyLT5DdXJyZW50
QWRkcmVzcywgRVRIX0xFTkdUSF9PRl9BRERSRVNTKTsKLQkKLS8vCUhlYWRlcl84MDJfMTEuU2Vx
dWVuY2UgPSBwQWRhcHRlci0+U2VxdWVuY2U7CQkvLyBTZXF1ZW5jZSBudW1iZXIKLQlIZWFkZXJf
ODAyXzExLkNvbnRyb2xoZWFkLkZyYW1lLlR5cGUgPSBCVFlQRV9EQVRBOwkvLyBGcmFtZSB0eXBl
Ci0JSGVhZGVyXzgwMl8xMS5Db250cm9saGVhZC5GcmFtZS5Qd3JNZ3QgPSAocEFkYXB0ZXItPlBv
cnRDZmcuUHNtID09IFBXUl9TQVZFKTsKLQkKLQkvLyBGb3IgdGhlIHB1cnBvc2UgdG8gY2FsY3Vs
YXRlIGR1cmF0aW9uIGZvciB0aGUgc2Vjb25kIGxhc3QgZnJhZ21lbnQKLQlSZW1haW5TaXplID0g
c2tiLT5kYXRhX2xlbiAtIExFTkdUSF84MDJfMyArIExFTkdUSF9DUkM7Ci0KLQlNSUNGcmFnID0g
RkFMU0U7CS8vIEZsYWcgdG8gaW5kaWNhdGUgTUlDIHNoYWxsIHNwcmVhZCBpbnRvIHR3byBNUERV
cwotCUVuY2FwcGVkID0gRkFMU0U7Ci0JcEVuY2FwID0gTlVMTDsKLQlwU3JjID0gKFBVQ0hBUilw
VmlydHVhbEFkZHJlc3M7Ci0JUHJvdG9jb2wgPSAqKHBTcmMgKyAxMikgKiAyNTYgKyAqKHBTcmMg
KyAxMyk7Ci0KLQlpZiAoUHJvdG9jb2wgPiAxNTAwKQkvLyBDSGVjayBmb3IgTExDIGVuY2FwZWQK
LQl7Ci0JCS8vCi0JCS8vIExhcmdlIHRoYW4gMTUwMCBtZWFucyBpdCdzIGEgdHlwZSBmaWVsZCwg
YW5kIHRodXMgYSBEL0kvWCBwYWNrZXQuCi0JCS8vCi0JCXBFbmNhcCA9IFNOQVBfODAyXzFIOwot
CQlFbmNhcHBlZCA9IFRSVUU7Ci0JCWlmICgobWVtY21wKElQWCwgcFNyYyArIDEyLCAyKSA9PSAw
KSB8fCAKLQkJICAgIChtZW1jbXAoQVBQTEVfVEFMSywgcFNyYyArIDEyLCAyKSA9PSAwKSkKLQkJ
ewotCQkJcEVuY2FwID0gU05BUF9CUklER0VfVFVOTkVMOwotCQl9Ci0JfQotCWVsc2UKLQl7Ci0J
CS8vCi0JCS8vbWVhbnMgaXQncyBhIGxlbmd0aCBmaWVsZCwgdGh1cyBhbiA4MDIuMyBwYWNrZXQK
LQkJLy9BbmQgd2UgbmVlZCB0byByZS1jYWxjdWxhdGUgdGhlIG51bWJlciBvZiBGcmFnbWVudCBy
ZXF1aXJlZC4KLQkJVG90YWxQYWNrZXRMZW5ndGggPSBza2ItPmRhdGFfbGVuOwotCQkvLwotCQkv
L21lYW5zIGl0J3MgYSBsZW5ndGggZmllbGQsIHRodXMgYW4gODAyLjMgcGFja2V0Ci0JCS8vQW5k
IHdlIG5lZWQgdG8gcmUtY2FsY3VsYXRlIHRoZSBudW1iZXIgb2YgRnJhZ21lbnQgcmVxdWlyZWQu
Ci0JCS8vCi0JCS8vIEZvciBUS0lQLCBNSUMgdmFsdWUgaXMgdHJlYXRlZCBhcyBwYXlsb2FkLCBp
dCBtaWdodCBiZSBmcmFnbWVudGVkIHRocm91Z2gKLQkJLy8gZGlmZmVyZW50IE1QRFVzLgotCQlp
ZiAocEFkYXB0ZXItPlBvcnRDZmcuR3JvdXBDaXBoZXIgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24y
RW5hYmxlZCkKLQkJewotCQkJVG90YWxQYWNrZXRMZW5ndGggPSBza2ItPmRhdGFfbGVuICsgODsK
LQkJfQotCQkKLQkJLy8gQ2hlY2sgZm9yIHBheWxvYWQgYWxsb3dlZCBmb3IgZWFjaCBmcmFnbWVu
dAotCQlBbGxvd0ZyYWdTaXplID0gKHBBZGFwdGVyLT5Qb3J0Q2ZnLkZyYWdtZW50VGhyZXNob2xk
KSAtIExFTkdUSF84MDJfMTEgLSBMRU5HVEhfQ1JDOwotCi0JCS8vIENhbGN1bGF0ZSBmcmFnbWVu
dHMgcmVxdWlyZWQKLQkJTnVtYmVyT2ZGcmFnID0gKChUb3RhbFBhY2tldExlbmd0aCAtIExFTkdU
SF84MDJfMykgLyBBbGxvd0ZyYWdTaXplKSArIDE7Ci0JCS8vIE1pbnVzIDEgaWYgdGhlIHNpemUg
anVzdCBtYXRjaCB0byBhbGxvd2FibGUgZnJhZ21lbnQgc2l6ZQotCQlpZiAoKChza2ItPmRhdGFf
bGVuIC0gTEVOR1RIXzgwMl8zKSAlIEFsbG93RnJhZ1NpemUpID09IDApCi0JCXsKLQkJCU51bWJl
ck9mRnJhZy0tOwotCQl9Ci0KLQkJCi0JCWlmIChOdW1iZXJPZkZyYWcgIT0gUlRVU0JfR0VUX1BB
Q0tFVF9GUkFHTUVOVFMoc2tiKSkKLQkJewotCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICJP
cmlnaW5hbCBmcmFnbWVudCByZXF1aXJlZCA9ICVkLCBuZXcgZnJhZ21lbnQgcmVxdWlyZWQgPSAl
ZFxuIiwKLQkJCQkJCVJUVVNCX0dFVF9QQUNLRVRfRlJBR01FTlRTKHNrYiksIE51bWJlck9mRnJh
Zyk7CQotCQkJLy8KLQkJCS8vIFVwZGF0ZSBudW1iZXIgb2YgRnJhZ21lbnQKLQkJCS8vCi0JCQlS
VFVTQl9TRVRfUEFDS0VUX0ZSQUdNRU5UUyhza2IsIE51bWJlck9mRnJhZyk7Ci0JCQlOdW1iZXJS
ZXF1aXJlZCA9IFJUVVNCX0dFVF9QQUNLRVRfRlJBR01FTlRTKHNrYikgKyBSVFVTQl9HRVRfUEFD
S0VUX1JUUyhza2IpOwkKLQkJfQkJCi0JfQotCi0JLy8KLSAgICAvLyBjYWxjdWF0ZSB0aGUgb3Zl
cmhlYWQgYnl0ZXMgdGhhdCBlbmNyeXB0aW9uIGFsZ29yaXRobSBtYXkgYWRkLiBUaGlzCi0gICAg
Ly8gYWZmZWN0cyB0aGUgY2FsY3VsYXRlIG9mICJkdXJhdGlvbiIgZmllbGQKLSAgICAvLwotCWlm
ICgoQ2lwaGVyU3VpdGUgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24xRW5hYmxlZCkgJiYgCi0JCShw
QWRhcHRlci0+UG9ydENmZy5TaGFyZWRLZXlbcEFkYXB0ZXItPlBvcnRDZmcuRGVmYXVsdEtleUlk
XS5LZXlMZW4gIT0gMCkpCi0JCUVuY3J5cHRpb25PdmVyaGVhZCA9IDg7ICAgICAvLyBXRVA6IElW
ICsgSUNWCQkJCi0JZWxzZSBpZiAoQ2lwaGVyU3VpdGUgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24y
RW5hYmxlZCkKLQkJRW5jcnlwdGlvbk92ZXJoZWFkID0gMTI7ICAgIC8vIFRLSVA6IElWICsgRUlW
ICsgSUNWLCBNSUMgYWxyZWFkeSBhZGRlZCB0byBUb3RhbFBhY2tldExlbmd0aAotCWVsc2UgaWYg
KENpcGhlclN1aXRlID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uM0VuYWJsZWQpCi0JCUVuY3J5cHRp
b25PdmVyaGVhZCA9IDE2OyAgICAvLyBBRVM6IElWICsgRUlWICsgSGFyZHdhcmUgTUlDCi0JZWxz
ZQotCSAgICBFbmNyeXB0aW9uT3ZlcmhlYWQgPSAwOwotCi0JLy8KLQkvLyBNYWtlIFJUUyBmcmFt
ZSBpZiByZXF1aXJlZAotCS8vCi0JaWYgKFJUVVNCX0dFVF9QQUNLRVRfUlRTKHNrYikpCi0Jewot
CQlQQ09OVFJPTF9IRUFERVIJCXBDb250cm9sSGVhZGVyOwotCQlVTE9ORwkJCQlOZXh0RnJhZ1Np
emU7Ci0JCS8vVUlOVAkJCQlSVFNGcmFtZVNpemU7IC8vdXNlZCBvbmx5IHRvIGNhbGN1bGF0ZSBk
dXJhdGlvbgotCQkKLQkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX0lORk8sICJNYWtpbmcgUlRTIEZy
YW1lXG4iKTsKLQotCQlwVHhDb250ZXh0ICA9ICZwQWRhcHRlci0+VHhDb250ZXh0W3BBZGFwdGVy
LT5OZXh0VHhJbmRleF07Ci0JCXBUeENvbnRleHQtPkluVXNlICAgPSBUUlVFOwotCQlwVHhDb250
ZXh0LT5MYXN0T25lID0gRkFMU0U7Ci0JCQotCQkvLyBJbmNyZWFzZSAmIG1haW50YWluIFR4IFJp
bmcgSW5kZXgKLQkJcEFkYXB0ZXItPk5leHRUeEluZGV4Kys7Ci0JCWlmIChwQWRhcHRlci0+TmV4
dFR4SW5kZXggPj0gVFhfUklOR19TSVpFKQotCQl7Ci0JCQlwQWRhcHRlci0+TmV4dFR4SW5kZXgg
PSAwOwotCQl9Ci0KLQkJcFR4RCAgPSAmKHBUeENvbnRleHQtPlRyYW5zZmVyQnVmZmVyLT5UeERl
c2MpOwotCQltZW1zZXQocFR4RCwgMCwgc2l6ZW9mKFRYRF9TVFJVQykpOwotCQlwRGVzdCA9IHBU
eENvbnRleHQtPlRyYW5zZmVyQnVmZmVyLT5XaXJlbGVzc1BhY2tldDsgICAgICAgICAgICAgIAot
CQkJCQotCQlwQ29udHJvbEhlYWRlciA9IChQQ09OVFJPTF9IRUFERVIpcERlc3Q7Ci0JCW1lbXNl
dChwQ29udHJvbEhlYWRlciwgMCwgc2l6ZW9mKENPTlRST0xfSEVBREVSKSk7Ci0KLQkJLy9GcmFt
ZUNvbnRyb2wKLQkJcENvbnRyb2xIZWFkZXItPkZyYW1lLlR5cGUgICAgPSBCVFlQRV9DTlRMOwot
CQlpZiAocEFkYXB0ZXItPlBvcnRDZmcuQkdQcm90ZWN0aW9uSW5Vc2VkID09IDEpCi0JCXsKLQkJ
CXBDb250cm9sSGVhZGVyLT5GcmFtZS5TdWJ0eXBlID0gU1VCVFlQRV9DVFM7Ci0JCQltZW1jcHko
JnBDb250cm9sSGVhZGVyLT5BZGRyMSwgcEFkYXB0ZXItPkN1cnJlbnRBZGRyZXNzLCBFVEhfTEVO
R1RIX09GX0FERFJFU1MpOwotCQl9Ci0JCWVsc2UKLQkJewotCQkJcENvbnRyb2xIZWFkZXItPkZy
YW1lLlN1YnR5cGUgPSBTVUJUWVBFX1JUUzsKLQkJCS8vIFJBCi0JCQlpZiAoSU5GUkFfT04ocEFk
YXB0ZXIpKQotCQkJewotCQkJCW1lbWNweSgmcENvbnRyb2xIZWFkZXItPkFkZHIxLCAmcEFkYXB0
ZXItPlBvcnRDZmcuQnNzaWQsIEVUSF9MRU5HVEhfT0ZfQUREUkVTUyk7Ci0JCQl9Ci0JCQllbHNl
Ci0JCQl7Ci0JCQkJbWVtY3B5KCZwQ29udHJvbEhlYWRlci0+QWRkcjEsIChQVUNIQVIpIHBWaXJ0
dWFsQWRkcmVzcywgRVRIX0xFTkdUSF9PRl9BRERSRVNTKTsKLQkJCX0KLQkJCS8vIFRBCi0JCQlt
ZW1jcHkoJnBDb250cm9sSGVhZGVyLT5BZGRyMiwgcEFkYXB0ZXItPkN1cnJlbnRBZGRyZXNzLCBF
VEhfTEVOR1RIX09GX0FERFJFU1MpOwotCQl9Ci0KLQkJLy8gQ2FsY3VsYXRlIGR1cmF0aW9uID0g
MiBTSUZTICsgQ1RTICsgRGF0YSBGcmFtZSBzaXplCi0JCWlmIChSVFVTQl9HRVRfUEFDS0VUX0ZS
QUdNRU5UUyhza2IpID4gMSkKLQkJewotCQkJLy8gSWYgZnJhZ21lbnQgcmVxdWlyZWQsIHNpemUg
aXMgbWF4aW11bSBmcmFnbWVudCBzaXplCi0JCQlOZXh0RnJhZ1NpemUgPSBwQWRhcHRlci0+UG9y
dENmZy5GcmFnbWVudFRocmVzaG9sZDsKLQkJfQotCQllbHNlCi0JCXsKLQkJCS8vIFNpemUgc2hv
dWxkIGJlIGZyYW1lIHdpdGggODAyLjExIGhlYWRlciAmIENSQwotCQkJTmV4dEZyYWdTaXplID0g
c2tiLT5kYXRhX2xlbiArIExFTkdUSF84MDJfMTEgKyBMRU5HVEhfQ1JDIC0gTEVOR1RIXzgwMl8z
OwotCi0JCQlpZiAoRW5jYXBwZWQpCi0JCQkJTmV4dEZyYWdTaXplICs9IExFTkdUSF84MDJfMV9I
OwotCQl9Ci0JCXBDb250cm9sSGVhZGVyLT5EdXJhdGlvbiA9IDIgKiAocEFkYXB0ZXItPlBvcnRD
ZmcuRHNpZnMpCi0JCQkrIFJUVVNCQ2FsY0R1cmF0aW9uKHBBZGFwdGVyLCBwQWRhcHRlci0+UG9y
dENmZy5UeFJhdGUsIE5leHRGcmFnU2l6ZSArIEVuY3J5cHRpb25PdmVyaGVhZCkKLQkJCSsgQWNr
RHVyYXRpb247IAotCi0JCS8vIFdyaXRlIFR4IGRlc2NyaXB0b3IKLQkJLy8gRG9uJ3Qga2ljayB0
eCBzdGFydCB1bnRpbCBhbGwgZnJhbWVzIGFyZSBwcmVwYXJlZAotCQkvLyBSVFMgaGFzIHRvIHNl
dCBtb3JlIGZyYWdtZW50IGJpdCBmb3IgZnJhZ21lbnQgYnVyc3QKLQkJLy8gUlRTIGRpZCBub3Qg
ZW5jcnlwdAkJCi0JCWlmIChwQWRhcHRlci0+UG9ydENmZy5CR1Byb3RlY3Rpb25JblVzZWQgPT0g
MSkKLQkJewotCQkJUlRVU0JXcml0ZVR4RGVzY3JpcHRvcihwVHhELCBGQUxTRSwgNywgRkFMU0Us
IEZBTFNFLCBGQUxTRSwgRnJhbWVHYXAsIDEwLCBGQUxTRSwgMCwgQ1dfTUlOX0lOX0JJVFMsIENX
X01BWF9JTl9CSVRTLCAxNCwgcEFkYXB0ZXItPlBvcnRDZmcuUnRzUmF0ZSwgNCwgcEFkYXB0ZXIt
PlBvcnRDZmcuVHhQcmVhbWJsZUluVXNlZCk7Ci0JCX0KLQkJZWxzZQotCQl7Ci0JCQlSVFVTQldy
aXRlVHhEZXNjcmlwdG9yKHBUeEQsIEZBTFNFLCA3LCBUUlVFLCBGQUxTRSwgRkFMU0UsIEZyYW1l
R2FwLCBzaXplb2YoQ09OVFJPTF9IRUFERVIpLCBGQUxTRSwgMCwgQ1dfTUlOX0lOX0JJVFMsIENX
X01BWF9JTl9CSVRTLCBzaXplb2YoQ09OVFJPTF9IRUFERVIpICsgNCwgcEFkYXB0ZXItPlBvcnRD
ZmcuUnRzUmF0ZSwgNCwgcEFkYXB0ZXItPlBvcnRDZmcuVHhQcmVhbWJsZUluVXNlZCk7Ci0vL3N0
ZXZlbjpzaG91bGQgd2UgbmVlZCB0aGlzPwkJCXBUeEQtPlJUUyA9IDE7Ci0JCX0KLQotCQlUcmFu
c2ZlckJ1ZmZlckxlbmd0aCA9IHNpemVvZihDT05UUk9MX0hFQURFUikgKyBzaXplb2YoVFhEX1NU
UlVDKTsKLQkJaWYgKChUcmFuc2ZlckJ1ZmZlckxlbmd0aCAlIDIpID09IDEpCi0JCQlUcmFuc2Zl
ckJ1ZmZlckxlbmd0aCsrOwotCi0JCXBUeENvbnRleHQtPkJ1bGtPdXRTaXplID0gVHJhbnNmZXJC
dWZmZXJMZW5ndGg7Ci0KLQkJTnVtYmVyUmVxdWlyZWQtLTsKLQkJLy8KLQkJLy8gSW5jcmVhc2Ug
QnVsa091dCBzdGFuYnkgY291bnQuCi0JCS8vCi0JCWF0b21pY19pbmMoJnBBZGFwdGVyLT5UeENv
dW50KTsKLQotCQlSVFVTQl9TRVRfQlVMS19GTEFHKHBBZGFwdGVyLCBmUlRVU0JfQlVMS19PVVRf
REFUQV9OT1JNQUwpOwotCX0KLQkvLyBGaW5kIHRoZSBXUEEga2V5LCBlaXRoZXIgR3JvdXAgb3Ig
UGFpcndpc2UgS2V5Ly9zdGV2ZW46YWNjb3JkaW5nIHRvIENvbnRyb2xoZWFkLkFkZHIxIChvbmx5
IHdoZW4gQXV0aE1vZGUgPj0gTmRpczgwMl8xMUF1dGhNb2RlV1BBKQotCWlmIChwQWRhcHRlci0+
UG9ydENmZy5BdXRoTW9kZSA+PSBOZGlzODAyXzExQXV0aE1vZGVXUEEpCi0JewotCQlJTlQgCWlk
eDsKLQkJCQotCQlwV3BhS2V5ID0gKFBXUEFfS0VZKSBOVUxMOwotCQkvLyBGaXJzdCBsb2t1cCB0
aGUgREEsIGlmIGl0J3MgYSBncm91cCBhZGRyZXNzLCB1c2UgR1JPVVAga2V5Ci0JCWlmIChIZWFk
ZXJfODAyXzExLkNvbnRyb2xoZWFkLkFkZHIxLk9jdGV0WzBdICYgMHgwMSkKLQkJewotCQkJaWYg
KHBBZGFwdGVyLT5Qb3J0Q2ZnLkdyb3VwS2V5W3BBZGFwdGVyLT5Qb3J0Q2ZnLkRlZmF1bHRLZXlJ
ZF0uS2V5TGVuICE9IDApCi0JCQl7Ci0JCQkJcFdwYUtleSA9IChQV1BBX0tFWSkgJnBBZGFwdGVy
LT5Qb3J0Q2ZnLkdyb3VwS2V5W3BBZGFwdGVyLT5Qb3J0Q2ZnLkRlZmF1bHRLZXlJZF07Ci0JCQkJ
cFdwYUtleS0+VHlwZSA9IEdST1VQX0tFWTsKLQkJCQlLZXlJRCA9IHBBZGFwdGVyLT5Qb3J0Q2Zn
LkRlZmF1bHRLZXlJZDsvL2ZvciBUeCBkZXNjcmlwdG9yCi0JCQkJREJHUFJJTlQoUlRfREVCVUdf
SU5GTywgIlR4IFVzZSBHcm91cCBLZXlcbiIpOwotCQkJfQotCQl9Ci0JCS8vIFRyeSB0byBmaW5k
IHRoZSBQYWlyd2lzZSBLZXkKLQkJZWxzZQotCQl7Ci0JCQlmb3IgKGlkeCA9IDA7IGlkeCA8IFBB
SVJXSVNFX0tFWV9OTzsgaWR4KyspCi0JCQl7Ci0JCQkJaWYgKCgobWVtY21wKCZIZWFkZXJfODAy
XzExLkNvbnRyb2xoZWFkLkFkZHIxLCBwQWRhcHRlci0+UG9ydENmZy5QYWlyd2lzZUtleVtpZHhd
LkJzc0lkLCA2KT09IDApKSAmJgotCQkJCQkocEFkYXB0ZXItPlBvcnRDZmcuUGFpcndpc2VLZXlb
aWR4XS5LZXlMZW4gIT0gMCkpCi0JCQkJewotCQkJCQlwV3BhS2V5ID0gKFBXUEFfS0VZKSAmcEFk
YXB0ZXItPlBvcnRDZmcuUGFpcndpc2VLZXlbaWR4XTsKLQkJCQkJcFdwYUtleS0+VHlwZSA9IFBB
SVJXSVNFX0tFWTsKLQkJCQkJS2V5SUQgPSAoVUNIQVIpaWR4OwotCQkJCQlEQkdQUklOVChSVF9E
RUJVR19JTkZPLCAiVHggVXNlIFBhaXJ3aXNlIEtleVxuIik7Ci0JCQkJCWJyZWFrOwotCQkJCX0K
LQkJCX0KLQkJCS8vIFVzZSBkZWZhdWx0IEdyb3VwIEtleSBpZiB0aGVyZSBpcyBubyBQYWlyd2lz
ZSBrZXkgcHJlc2VudAotCQkJaWYgKChwQWRhcHRlci0+UG9ydENmZy5Hcm91cEtleVtwQWRhcHRl
ci0+UG9ydENmZy5EZWZhdWx0S2V5SWRdLktleUxlbiAhPSAwKSAmJiAocFdwYUtleSA9PSBOVUxM
KSkKLQkJCXsKLQkJCQlwV3BhS2V5ID0gKFBXUEFfS0VZKSAmcEFkYXB0ZXItPlBvcnRDZmcuR3Jv
dXBLZXlbcEFkYXB0ZXItPlBvcnRDZmcuRGVmYXVsdEtleUlkXTsKLQkJCQlwV3BhS2V5LT5UeXBl
ID0gR1JPVVBfS0VZOwotCQkJCUtleUlEID0gcEFkYXB0ZXItPlBvcnRDZmcuRGVmYXVsdEtleUlk
Oy8vZm9yIFR4IGRlc2NyaXB0b3IKLQkJCQlEQkdQUklOVChSVF9ERUJVR19JTkZPLCAiVHggVXNl
IEdyb3VwIEtleVxuIik7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQkJaWYgKHBXcGFLZXkgIT0gTlVMTCkK
LQkJewotCQkJSU5UIGk7Ci0JCQkJCi0JCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfSU5GTywgIlJU
TVBIYXJkRW5jcnlwdCBUS0lQIEtleSA9ICIpOwotCQkJZm9yIChpID0gMDsgaSA8IDE2OyBpKysp
Ci0JCQl7Ci0JCQkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX0lORk8sICIlMDJ4OiIsIHBXcGFLZXkt
PktleVtpXSk7Ci0JCQl9Ci0JCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfSU5GTywgIlxuIik7CQkJ
CQkJCi0JCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfSU5GTywgIlJUTVBIYXJkRW5jcnlwdCBUS0lQ
IFR4TWljID0gIik7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQotCQkJewotCQkJCURCR1BS
SU5UX1JBVyhSVF9ERUJVR19JTkZPLCAiJTAyeDoiLCBwV3BhS2V5LT5UeE1pY1tpXSk7Ci0JCQl9
Ci0JCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfSU5GTywgIlxuIik7CQkJCQkJCi0JCQlEQkdQUklO
VF9SQVcoUlRfREVCVUdfSU5GTywgIlJUTVBIYXJkRW5jcnlwdCBUS0lQIFR4VHNjID0gIik7Ci0J
CQlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKQotCQkJewotCQkJCURCR1BSSU5UX1JBVyhSVF9ERUJV
R19JTkZPLCAiJTAyeDoiLCBwV3BhS2V5LT5UeFRzY1tpXSk7Ci0JCQl9Ci0JCQlEQkdQUklOVF9S
QVcoUlRfREVCVUdfSU5GTywgIlxuIik7CQkJCQkJCi0JCX0KLQotCVN0YXJ0T2ZGcmFtZSA9IFRS
VUU7Ci0JLy8gU3RhcnQgQ29weSBOZGlzIFBhY2tldCBpbnRvIFJpbmcgYnVmZmVyLgotCS8vIEZv
ciBmcmFtZSByZXF1aXJlZCBtb3JlIHRoYW4gb25lIHJpbmcgYnVmZmVyIChmcmFnbWVudCksIGFs
bCByaW5nIGJ1ZmZlcnMKLQkvLyBoYXZlIHRvIGJlIGZpbGxlZCBiZWZvcmUga2lja2luZyBzdGFy
dCB0eCBiaXQuCi0JZG8KLQl7Ci0vLwkJTmRpc0FjcXVpcmVTcGluTG9jaygmcEFkYXB0ZXItPlR4
UmluZ0xvY2spOwotCQkvLyBHZXQgdGhlIFR4IFJpbmcgZGVzY3JpcHRvciAmIERtYSBCdWZmZXIg
YWRkcmVzcwotCQlwVHhDb250ZXh0ICA9ICZwQWRhcHRlci0+VHhDb250ZXh0W3BBZGFwdGVyLT5O
ZXh0VHhJbmRleF07Ci0JCXBUeENvbnRleHQtPkluVXNlICAgPSBUUlVFOwotCQlwVHhDb250ZXh0
LT5MYXN0T25lID0gRkFMU0U7Ci0JCQotCQkvLyBJbmNyZWFzZSAmIG1haW50YWluIFR4IFJpbmcg
SW5kZXgKLQkJcEFkYXB0ZXItPk5leHRUeEluZGV4Kys7Ci0JCWlmIChwQWRhcHRlci0+TmV4dFR4
SW5kZXggPj0gVFhfUklOR19TSVpFKQotCQl7Ci0JCQlwQWRhcHRlci0+TmV4dFR4SW5kZXggPSAw
OwotCQl9Ci0vLwkJTmRpc1JlbGVhc2VTcGluTG9jaygmcEFkYXB0ZXItPlR4UmluZ0xvY2spOwot
Ci0JCXBUeEQgID0gJihwVHhDb250ZXh0LT5UcmFuc2ZlckJ1ZmZlci0+VHhEZXNjKTsKLQkJbWVt
c2V0KHBUeEQsIDAsIHNpemVvZihUWERfU1RSVUMpKTsKLQkJcERlc3QgPSBwVHhDb250ZXh0LT5U
cmFuc2ZlckJ1ZmZlci0+V2lyZWxlc3NQYWNrZXQ7ICAgICAgICAgICAgICAKLQkJLy8gTWF4aW11
bSBhbGxvd2FibGUgcGF5bG9hZCB3aXRoIG9uZSByaW5nIGJ1ZmZlciwgYm91bmQgYnkgZnJhZ21l
bnQgc2l6ZQotCQlGcmVlRnJhZ1NpemUgPSBwQWRhcHRlci0+UG9ydENmZy5GcmFnbWVudFRocmVz
aG9sZCAtIExFTkdUSF9DUkM7Ci0JCQotCQkvLyBNYWtlIGZyYWdtZW50IG51bWJlciAmIG1vcmUg
ZnJhZ21lbnQgYml0IG9mIDgwMi4xMSBoZWFkZXIKLQkJaWYgKFN0YXJ0T2ZGcmFtZSA9PSBUUlVF
KQotCQl7Ci0JCQlIZWFkZXJfODAyXzExLkZyYWcgPSAwOwkJCS8vIFN0YXJ0IG9mIGZyYWdtZW50
IGJ1cnN0IC8gU2luZ2xlIEZyYW1lCi0JCX0KLQkJZWxzZQotCQl7Ci0JCQlIZWFkZXJfODAyXzEx
LkZyYWcrKzsJCQkvLyBSZXN0IG9mIGZyYWdtZW50ZWQgZnJhbWVzLgotCQl9Ci0JCQotCQkvLyBU
dXJuIG9uIHdpdGggbm8gZnJhbWVzIGFmdGVyIHRoaXMgb25lCi0JCWlmIChOdW1iZXJSZXF1aXJl
ZCA+IDEpCi0JCXsKLQkJICAgIFVMT05HIE5leHRGcmFnU2l6ZTsKLS8vCQkgICAgVUxPTkcgRnJh
Z1NpemU7Ci0JCSAgICAKLQkJCUhlYWRlcl84MDJfMTEuQ29udHJvbGhlYWQuRnJhbWUuTW9yZUZy
YWcgPSAxOwotCQkJTW9yZUZyYWdtZW50ID0gVFJVRTsKLQkJCQotCQkJaWYgKE51bWJlclJlcXVp
cmVkID09IDIpCi0JCQlOZXh0RnJhZ1NpemUgPSBSZW1haW5TaXplIC0gcEFkYXB0ZXItPlBvcnRD
ZmcuRnJhZ21lbnRUaHJlc2hvbGQgKyBMRU5HVEhfODAyXzExICsgTEVOR1RIXzgwMl8xMSArIExF
TkdUSF9DUkM7Ci0JCQllbHNlCi0JCQkgICAgTmV4dEZyYWdTaXplID0gcEFkYXB0ZXItPlBvcnRD
ZmcuRnJhZ21lbnRUaHJlc2hvbGQ7Ci0JCQkKLQkJCUhlYWRlcl84MDJfMTEuQ29udHJvbGhlYWQu
RHVyYXRpb24gPSAzICogcEFkYXB0ZXItPlBvcnRDZmcuRHNpZnMKLQkJCQkrIDIgKiBBY2tEdXJh
dGlvbgotCQkJCSsgUlRVU0JDYWxjRHVyYXRpb24ocEFkYXB0ZXIsIHBBZGFwdGVyLT5Qb3J0Q2Zn
LlR4UmF0ZSwgTmV4dEZyYWdTaXplICsgRW5jcnlwdGlvbk92ZXJoZWFkKTsKLQkJfQotCQllbHNl
Ci0JCXsKLQkJCUhlYWRlcl84MDJfMTEuQ29udHJvbGhlYWQuRnJhbWUuTW9yZUZyYWcgPSAwOwot
CQkJTW9yZUZyYWdtZW50ID0gRkFMU0U7Ci0JCQkKLQkJCWlmIChIZWFkZXJfODAyXzExLkNvbnRy
b2xoZWFkLkFkZHIxLk9jdGV0WzBdICYgMHgwMSkKLQkJCXsKLQkJCQkvLyBObyBBQ0sgZXhwZWN0
ZWQgZm9yIG11bHRpY2FzdCBmcmFtZQkJCi0JCQkJSGVhZGVyXzgwMl8xMS5Db250cm9saGVhZC5E
dXJhdGlvbiA9IDA7Ci0JCQl9Ci0JCQllbHNlCi0JCQl7Ci0JCQkJLy8gQUNLIHNpemUgaXMgMTQg
aW5jbHVkZSBDUkMsIGFuZCBpdHMgcmF0ZSBpcyAyTWIKLQkJCQlIZWFkZXJfODAyXzExLkNvbnRy
b2xoZWFkLkR1cmF0aW9uID0gcEFkYXB0ZXItPlBvcnRDZmcuRHNpZnMgKyBBY2tEdXJhdGlvbjsK
LQkJCX0KLQkJfQotCi0JCS8vIENoZWNrIGZvciBXRVAgZW5hYmxlIGJpdCBhbmQgcHJlcGFyZSBm
b3Igc29mdHdhcmUgV0VQCi0JCWlmICgoQ2lwaGVyU3VpdGUgPT0gTmRpczgwMl8xMUVuY3J5cHRp
b24xRW5hYmxlZCkgJiYgKEVBUE9MRnJhbWUgPT0gRkFMU0UpICYmCi0JCQkocEFkYXB0ZXItPlBv
cnRDZmcuU2hhcmVkS2V5W3BBZGFwdGVyLT5Qb3J0Q2ZnLkRlZmF1bHRLZXlJZF0uS2V5TGVuICE9
IDApKQotCQl7Ci0JCQlIZWFkZXJfODAyXzExLkNvbnRyb2xoZWFkLkZyYW1lLldlcCA9IDE7Ci0J
CQlDaXBoZXIgPSBUUlVFOwotCQl9Ci0JCWVsc2UgaWYgKChDaXBoZXJTdWl0ZSA9PSBOZGlzODAy
XzExRW5jcnlwdGlvbjJFbmFibGVkKSAmJiAocFdwYUtleSAhPSBOVUxMKSkKLQkJewotCQkJSGVh
ZGVyXzgwMl8xMS5Db250cm9saGVhZC5GcmFtZS5XZXAgPSAxOwotCQkJQ2lwaGVyID0gVFJVRTsK
LQkJfQotCQllbHNlIGlmICgoQ2lwaGVyU3VpdGUgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24zRW5h
YmxlZCkgJiYgKHBXcGFLZXkgIT0gTlVMTCkpCi0JCXsKLQkJCUhlYWRlcl84MDJfMTEuQ29udHJv
bGhlYWQuRnJhbWUuV2VwID0gMTsKLQkJCUNpcGhlciA9IFRSVUU7Ci0JCX0KLQkJZWxzZQotCQl7
Ci0JCQlIZWFkZXJfODAyXzExLkNvbnRyb2xoZWFkLkZyYW1lLldlcCA9IDA7Ci0JCQlDaXBoZXIg
PSBGQUxTRTsKLQkJfQotCQkKLQkJLy8gQ29weSA4MDIuMTEgaGVhZGVyIHRvIFR4IHJpbmcgYnVm
ZmVyCi0JCW1lbWNweShwRGVzdCwgJkhlYWRlcl84MDJfMTEsIHNpemVvZihIZWFkZXJfODAyXzEx
KSk7Ci0JCXBEZXN0ICAgICAgICArPSBzaXplb2YoSGVhZGVyXzgwMl8xMSk7Ci0JCUZyZWVGcmFn
U2l6ZSAtPSBzaXplb2YoSGVhZGVyXzgwMl8xMSk7Ci0KLQkJaWYgKChDaXBoZXJTdWl0ZSA9PSBO
ZGlzODAyXzExRW5jcnlwdGlvbjFFbmFibGVkKSAmJiAoRUFQT0xGcmFtZSA9PSBGQUxTRSkgJiYK
LQkJCShwQWRhcHRlci0+UG9ydENmZy5TaGFyZWRLZXlbcEFkYXB0ZXItPlBvcnRDZmcuRGVmYXVs
dEtleUlkXS5LZXlMZW4gIT0gMCkpCi0JCXsKLQkJCS8vIFByZXBhcmUgSVYsIElWIG9mZnNldCwg
S2V5IGZvciBIYXJkd2FyZSBlbmNyeXB0aW9uCi0JCQlSVE1QSW5pdFdlcEVuZ2luZSgKLQkJCQlw
QWRhcHRlciwKLQkJCQlwQWRhcHRlci0+UG9ydENmZy5TaGFyZWRLZXlbcEFkYXB0ZXItPlBvcnRD
ZmcuRGVmYXVsdEtleUlkXS5LZXksCi0JCQkJcEFkYXB0ZXItPlBvcnRDZmcuRGVmYXVsdEtleUlk
LAotCQkJCXBBZGFwdGVyLT5Qb3J0Q2ZnLlNoYXJlZEtleVtwQWRhcHRlci0+UG9ydENmZy5EZWZh
dWx0S2V5SWRdLktleUxlbiwKLQkJCQkoUFVDSEFSKSAmcFR4RC0+SXYpOwotCQkJS2V5SUQgPSBw
QWRhcHRlci0+UG9ydENmZy5EZWZhdWx0S2V5SWQ7Ci0JCQkvLyBTZXQgSXYgb2Zmc2V0IGluIFR4
RAotCQkJcFR4RC0+SXZPZmZzZXQgPSBMRU5HVEhfODAyXzExOwotCi0JCQltZW1jcHkocERlc3Qs
ICZwVHhELT5JdiwgNCk7Ci0JCQlwRGVzdCArPSA0OwotCQl9Ci0JCWVsc2UgaWYgKChDaXBoZXJT
dWl0ZSA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjJFbmFibGVkKSAmJiAocFdwYUtleSAhPSBOVUxM
KSkKLQkJewotCQkJSU5UCQlpOwotCi0JCQlpID0gMDsKLQkJCS8vIFByZXBhcmUgSVYsIEVJViwg
SVYgb2Zmc2V0LCBLZXkgZm9yIGhhcmR3YXJlIGVuY3J5cHRpb24KLQkJCVJUTVBJbml0VGtpcEVu
Z2luZSgKLQkJCQlwQWRhcHRlciwKLQkJCQlwV3BhS2V5LT5LZXksCi0JCQkJcEFkYXB0ZXItPlBv
cnRDZmcuRGVmYXVsdEtleUlkLAkJLy8gVGhpcyBtaWdodCBjYXVzZSBwcm9ibGVtIHdoZW4gdXNp
bmcgcGVlciBrZXkKLQkJCQlIZWFkZXJfODAyXzExLkNvbnRyb2xoZWFkLkFkZHIyLk9jdGV0LAot
CQkJCXBXcGFLZXktPlR4TWljLAotCQkJCXBXcGFLZXktPlR4VHNjLAotCQkJCTAsCi0JCQkJJkl2
MTYsCi0JCQkJJkl2MzIsCi0JCQkJcERlc3QpOwotCi0JCQkvLyBJbmNyZWFzZSBUeFRzYyB2YWx1
ZSBmb3IgbmV4dCB0cmFuc21pc3Npb24KLQkJCXdoaWxlICgrK3BXcGFLZXktPlR4VHNjW2ldID09
IDB4MCkKLQkJCXsKLQkJCQlpKys7Ci0JCQkJaWYgKGkgPT0gNikKLQkJCQkJYnJlYWs7Ci0JCQl9
Ci0JCQlpZiAoaSA9PSA2KQotCQkJewotCQkJCS8vIFRPRE86IFRTQyBoYXMgZG9uZSBvbmUgZnVs
bCBjeWNsZSwgZG8gcmUta2V5aW5nIHN0dWZmIGZvbGxvdyBzcGVjcwotCQkJCS8vIFNob3VsZCBz
ZW5kIGEgc3BlY2lhbCBldmVudCBtaWNyb3NvZnQgZGVmaW5lZCB0byByZXF1ZXN0IHJlLWtleQot
CQkJfQotCQkJCi0JCQkvLyBDb3B5IElWCi0JCQltZW1jcHkoJnBUeEQtPkl2LCAmSXYxNiwgNCk7
Ci0JCQkKLQkJCS8vIENvcHkgRUlWCi0JCQltZW1jcHkoJnBUeEQtPkVpdiwgJkl2MzIsIDQpOwot
CQkJCi0JCQkvLyBTZXQgSVYgb2Zmc2V0Ci0JCQlwVHhELT5Jdk9mZnNldCA9IExFTkdUSF84MDJf
MTE7Ci0KLQkJCW1lbWNweShwRGVzdCwgJkl2MTYsIDQpOwotCQkJcERlc3QgKz0gNDsKLQkJCW1l
bWNweShwRGVzdCwgJkl2MzIsIDQpOwotCQkJcERlc3QgKz0gNDsKLQkJCQotCQl9Ci0JCWVsc2Ug
aWYgKChDaXBoZXJTdWl0ZSA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjNFbmFibGVkKSAmJiAocFdw
YUtleSAhPSBOVUxMKSkKLQkJewotCQkJSU5UCQlpOwotCQkJUFVDSEFSCXBUbXA7Ci0KLQkJCWkg
PSAwOwotCQkJcFRtcCA9IChQVUNIQVIpICZJdjE2OwotCQkJKnBUbXAgICAgICAgPSBwV3BhS2V5
LT5UeFRzY1swXTsKLQkJCSoocFRtcCArIDEpID0gcFdwYUtleS0+VHhUc2NbMV07Ci0JCQkqKHBU
bXAgKyAyKSA9IDA7Ci0JCQkqKHBUbXAgKyAzKSA9IChwQWRhcHRlci0+UG9ydENmZy5EZWZhdWx0
S2V5SWQgPDwgNikgfCAweDIwOwotCQkJCi0JCQlJdjMyID0gKihQVUxPTkcpKCZwV3BhS2V5LT5U
eFRzY1syXSk7Ci0JCQkKLQkJCS8vIEluY3JlYXNlIFR4VHNjIHZhbHVlIGZvciBuZXh0IHRyYW5z
bWlzc2lvbgotCQkJd2hpbGUgKCsrcFdwYUtleS0+VHhUc2NbaV0gPT0gMHgwKQotCQkJewotCQkJ
CWkrKzsKLQkJCQlpZiAoaSA9PSA2KQotCQkJCQlicmVhazsKLQkJCX0KLQkJCWlmIChpID09IDYp
Ci0JCQl7Ci0JCQkJLy8gVE9ETzogVFNDIGhhcyBkb25lIG9uZSBmdWxsIGN5Y2xlLCBkbyByZS1r
ZXlpbmcgc3R1ZmYgZm9sbG93IHNwZWNzCi0JCQkJLy8gU2hvdWxkIHNlbmQgYSBzcGVjaWFsIGV2
ZW50IG1pY3Jvc29mdCBkZWZpbmVkIHRvIHJlcXVlc3QgcmUta2V5Ci0JCQl9Ci0JCQkKLQkJCS8v
IENvcHkgSVYKLQkJCW1lbWNweSgmcFR4RC0+SXYsICZJdjE2LCA0KTsKLQkJCQotCQkJLy8gQ29w
eSBFSVYKLQkJCW1lbWNweSgmcFR4RC0+RWl2LCAmSXYzMiwgNCk7Ci0JCQkKLQkJCS8vIFNldCBJ
ViBvZmZzZXQKLQkJCXBUeEQtPkl2T2Zmc2V0ID0gTEVOR1RIXzgwMl8xMTsKLQotCQkJbWVtY3B5
KHBEZXN0LCAmSXYxNiwgNCk7Ci0JCQlwRGVzdCArPSA0OwotCQkJbWVtY3B5KHBEZXN0LCAmSXYz
MiwgNCk7Ci0JCQlwRGVzdCArPSA0OwotCi0JCX0KLQkJCi0JCS8vCi0JCS8vIE9ubHkgdGhlIGZp
cnN0IGZyYWdtZW50IHJlcXVpcmVkIExMQy1TTkFQIGhlYWRlciAhISEKLQkJLy8KLQkJaWYgKChT
dGFydE9mRnJhbWUgPT0gVFJVRSkgJiYgKEVuY2FwcGVkID09IFRSVUUpKQotCQl7Ci0JCQkvLyBG
b3IgV0VQICYgbm8gZW5jcnlwdGlvbiByZXF1aXJlZCBmcmFtZSwganVzdCBjb3B5IExMQyBoZWFk
ZXIgaW50byBidWZmZXIsCi0JCQkvLyBIYXJkd2FyZSB3aWxsIGRvIHRoZSBlbmNyeXB0aW9uIGpv
Yi4KLQkJCS8vIEZvciBUS0lQLCB3ZSBoYXZlIHRvIGNhbGN1bGF0ZSBNSUMgYW5kIHN0b3JlIGl0
IGZpcnN0Ci0JCQlpZiAoKENpcGhlclN1aXRlID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uMkVuYWJs
ZWQpICYmIChwV3BhS2V5ICE9IE5VTEwpKQotCQkJewotCQkJCS8vIENhbGN1bGF0ZSBNU0RVIE1J
QyBWYWx1ZQotCQkJCVJUTVBDYWxjdWxhdGVNSUNWYWx1ZShwQWRhcHRlciwgc2tiLCBwRW5jYXAs
IDYsIHBXcGFLZXkpOwotCQkJfQotCQkJLy8gRm9yIFdFUCAmIG5vIGVuY3J5cHRpb24gcmVxdWly
ZWQgZnJhbWUsIGp1c3QgY29weSBMTEMgaGVhZGVyIGludG8gYnVmZmVyLAotCQkJLy8gSGFyZHdh
cmUgd2lsbCBkbyB0aGUgZW5jcnlwdGlvbiBqb2IuCi0JCQkvLyBGb3IgVEtJUCwgd2UgaGF2ZSB0
byBjYWxjdWxhdGUgTUlDIGFuZCBzdG9yZSBpdCBmaXJzdAotCQkJCi0JCQkvLyBDb3B5IExMQyBo
ZWFkZXIKLQkJCW1lbWNweShwRGVzdCwgcEVuY2FwLCA2KTsKLQkJCXBEZXN0ICs9IDY7Ci0KLQkJ
CS8vIENvcHkgcHJvdG9jb2wgdHlwZQotCQkJcFNyYyA9IChQVUNIQVIpIHBWaXJ0dWFsQWRkcmVz
czsKLQkJCW1lbWNweShwRGVzdCwgcFNyYyArIDEyLCAyKTsKLQkJCXBEZXN0ICs9IDI7Ci0JCQkK
LQkJCS8vIEV4Y2x1ZGUgODAyLjMgaGVhZGVyIHNpemUsIHdlIHdpbGwgcmVjYWxjdWxhdGUgdGhl
IHNpemUgYXQKLQkJCS8vIHRoZSBlbmQgb2YgZnJhZ21lbnQgcHJlcGFyYXRpb24uCi0JCQlOZGlz
QnVmZmVyTGVuZ3RoIC09IExFTkdUSF84MDJfMzsKLQkJCXBTcmMgKz0gTEVOR1RIXzgwMl8zOwot
CQkJRnJlZUZyYWdTaXplIC09IExFTkdUSF84MDJfMV9IOwotCQl9Ci0JCWVsc2UgaWYgKChTdGFy
dE9mRnJhbWUgPT0gVFJVRSkgJiYgKEVuY2FwcGVkID09IEZBTFNFKSkKLQkJewotCQkJaWYgKChw
QWRhcHRlci0+UG9ydENmZy5XZXBTdGF0dXMgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24yRW5hYmxl
ZCkgJiYgKHBXcGFLZXkgIT0gTlVMTCkpCi0JCQl7Ci0JCQkJLy8gQ2FsY3VsYXRlIE1TRFUgTUlD
IFZhbHVlCi0JCQkJUlRNUENhbGN1bGF0ZU1JQ1ZhbHVlKHBBZGFwdGVyLCBza2IsIHBFbmNhcCwg
MCwgcFdwYUtleSk7Ci0JCQl9Ci0JCQkKLSAgIAkJCXBTcmMgPSAoUFVDSEFSKSBwVmlydHVhbEFk
ZHJlc3MgKyBMRU5HVEhfODAyXzM7Ci0JICAgIAkJTmRpc0J1ZmZlckxlbmd0aCAtPSBMRU5HVEhf
ODAyXzM7Ci0JCX0KLQkJCi0JCS8vIFN0YXJ0IGNvcHlpbmcgcGF5bG9hZAotCQlCeXRlc0NvcGll
ZCA9IDA7Ci0JCWRvCi0JCXsKLQkJCWlmIChOZGlzQnVmZmVyTGVuZ3RoID49IEZyZWVGcmFnU2l6
ZSkKLQkJCXsKLQkJCQkvLyBDb3B5IG9ubHkgdGhlIGZyZWUgZnJhZ21lbnQgc2l6ZSwgYW5kIHNh
dmUgdGhlIHBvaW50ZXIKLQkJCQkvLyBvZiBjdXJyZW50IGJ1ZmZlciBkZXNjcmlwdG9yIGZvciBu
ZXh0IGZyYWdtZW50IGJ1ZmZlci4KLQkJCQltZW1jcHkocERlc3QsIHBTcmMsIEZyZWVGcmFnU2l6
ZSk7Ci0JCQkJQnl0ZXNDb3BpZWQgKz0gRnJlZUZyYWdTaXplOwotCQkJCXBTcmMgICAgICAgICs9
IEZyZWVGcmFnU2l6ZTsKLQkJCQlwRGVzdCAgICAgICArPSBGcmVlRnJhZ1NpemU7Ci0JCQkJTmRp
c0J1ZmZlckxlbmd0aCAgICAgIC09IEZyZWVGcmFnU2l6ZTsKLQkJCQlicmVhazsKLQkJCX0KLQkJ
CWVsc2UKLQkJCXsKLQkJCQkvLyBDb3B5IHRoZSByZXN0IG9mIHRoaXMgYnVmZmVyIGRlc2NyaXB0
b3IgcG9pbnRlZCBkYXRhCi0JCQkJLy8gaW50byByaW5nIGJ1ZmZlci4KLQkJCQltZW1jcHkocERl
c3QsIHBTcmMsIE5kaXNCdWZmZXJMZW5ndGgpOwotCQkJCUJ5dGVzQ29waWVkICArPSBOZGlzQnVm
ZmVyTGVuZ3RoOwotCQkJCXBEZXN0ICAgICAgICArPSBOZGlzQnVmZmVyTGVuZ3RoOwotCQkJCUZy
ZWVGcmFnU2l6ZSAtPSBOZGlzQnVmZmVyTGVuZ3RoOwotCQkJfQotCQkJCS8vIE5vIG1vcmUgYnVm
ZmVyIGRlc2NyaXB0b3IKLQkJCQkvLyBBZGQgTUlDIHZhbHVlIGlmIG5lZWRlZAotCQkJCWlmICgo
Q2lwaGVyU3VpdGUgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24yRW5hYmxlZCkgJiYgCi0JCQkJCShN
SUNGcmFnID09IEZBTFNFKSAmJgotCQkJCQkocFdwYUtleSAhPSBOVUxMKSkKLQkJCQl7Ci0JCQkJ
CUlOVCBpOwotCi0JCQkJCU5kaXNCdWZmZXJMZW5ndGggPSA4OwkJLy8gU2V0IGxlbmd0aCB0byBN
SUMgbGVuZ3RoCi0JCQkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19JTkZPLCAiQ2FsY3VsYXRlZCBU
WCBNSUMgdmFsdWUgPSIpOyAgCi0JCQkJCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCi0JCQkJCXsK
LQkJCQkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19JTkZPLCAiJTAyeDoiLCBwQWRhcHRlci0+UHJp
dmF0ZUluZm8uVHguTUlDW2ldKTsgIAotCQkJCQl9Ci0JCQkJCURCR1BSSU5UX1JBVyhSVF9ERUJV
R19JTkZPLCAiXG4iKTsgCi0JCQkJCQkJCQotCQkJCQlpZiAoRnJlZUZyYWdTaXplID49IE5kaXNC
dWZmZXJMZW5ndGgpCi0JCQkJCXsKLQkJCQkJCW1lbWNweShwRGVzdCwgcEFkYXB0ZXItPlByaXZh
dGVJbmZvLlR4Lk1JQywgTmRpc0J1ZmZlckxlbmd0aCk7Ci0JCQkJCQlCeXRlc0NvcGllZCAgKz0g
TmRpc0J1ZmZlckxlbmd0aDsKLQkJCQkJCXBEZXN0CQkgKz0gTmRpc0J1ZmZlckxlbmd0aDsKLQkJ
CQkJCUZyZWVGcmFnU2l6ZSAtPSBOZGlzQnVmZmVyTGVuZ3RoOwotCQkJCQkJTmRpc0J1ZmZlckxl
bmd0aCA9IDA7Ci0JCQkJCQlSZW1haW5TaXplICAgKz0gODsJLy8gTmVlZCB0byBhZGQgTUlDIGFz
IHBheWxvYWQKLQkJCQkJfQotCQkJCQllbHNlCi0JCQkJCXsKLQkJCQkJCW1lbWNweShwRGVzdCwg
cEFkYXB0ZXItPlByaXZhdGVJbmZvLlR4Lk1JQywgRnJlZUZyYWdTaXplKTsKLQkJCQkJCUJ5dGVz
Q29waWVkICArPSBGcmVlRnJhZ1NpemU7Ci0JCQkJCQlwU3JjCQkgID0gcEFkYXB0ZXItPlByaXZh
dGVJbmZvLlR4Lk1JQyArIEZyZWVGcmFnU2l6ZTsKLQkJCQkJCXBEZXN0CQkgKz0gRnJlZUZyYWdT
aXplOwotCQkJCQkJTmRpc0J1ZmZlckxlbmd0aAkJIC09IEZyZWVGcmFnU2l6ZTsKLQkJCQkJCU1J
Q0ZyYWcgCSAgPSBUUlVFOwotCQkJCQkJUmVtYWluU2l6ZSAgICs9ICg4IC0gRnJlZUZyYWdTaXpl
KTsJLy8gTmVlZCB0byBhZGQgTUlDIGFzIHBheWxvYWQKLQkJCQkJfQotCQkJCX0KLQkJfQl3aGls
ZSAoRkFMU0UpOwkJLy8gRW5kIG9mIGNvcHlpbmcgcGF5bG9hZAotCQkJCQotCQkvLyBSZWFsIHBh
Y2tldCBzaXplLCBObyA4MDIuMUggaGVhZGVyIGZvciBmcmFnbWVudHMgZXhjZXB0IHRoZSBmaXJz
dCBvbmUuCi0JCWlmICgoU3RhcnRPZkZyYW1lID09IFRSVUUpICYmIChFbmNhcHBlZCA9PSBUUlVF
KSkKLQkJewotCQkJVHhTaXplID0gQnl0ZXNDb3BpZWQgKyBMRU5HVEhfODAyXzExICsgTEVOR1RI
XzgwMl8xX0g7Ci0JCX0KLQkJZWxzZQotCQl7Ci0JCQlUeFNpemUgPSBCeXRlc0NvcGllZCArIExF
TkdUSF84MDJfMTE7Ci0JCX0KLQotCQlSZW1haW5TaXplID0gUmVtYWluU2l6ZSAtIEJ5dGVzQ29w
aWVkOwotCQkJCi0JCWlmICgoQ2lwaGVyU3VpdGUgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24xRW5h
YmxlZCkgJiYgKEhlYWRlcl84MDJfMTEuQ29udHJvbGhlYWQuRnJhbWUuV2VwID09IDEpKQotCQl7
Ci0JCQkvLyBJViArIElDViB3aGljaCBBU0lDIGFkZGVkIGFmdGVyIGVuY3J5cHRpb24gZG9uZQot
CQkJVHhTaXplICs9IDQ7Ci0JCQlQTENQTGVuZ3RoID0gVHhTaXplICsgODsKLQkJfQotCQllbHNl
IGlmICgoQ2lwaGVyU3VpdGUgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24yRW5hYmxlZCkgJiYgKHBX
cGFLZXkgIT0gTlVMTCkpCi0JCXsKLQkJCS8vIElWICsgRUlWICsgSUNWIHdoaWNoIEFTSUMgYWRk
ZWQgYWZ0ZXIgZW5jcnlwdGlvbiBkb25lCi0JCQlUeFNpemUgKz0gODsKLQkJCVBMQ1BMZW5ndGgg
PSBUeFNpemUgKyA4OwotCQl9Ci0JCWVsc2UgaWYgKChDaXBoZXJTdWl0ZSA9PSBOZGlzODAyXzEx
RW5jcnlwdGlvbjNFbmFibGVkKSAmJiAocFdwYUtleSAhPSBOVUxMKSkKLQkJewotCQkJLy8gSVYg
KyBFSVYgKyBIVyBNSUMKLQkJCVR4U2l6ZSArPSA4OwotCQkJUExDUExlbmd0aCA9IFR4U2l6ZSAr
IDEyOwotCQl9Ci0JCWVsc2UKLQkJewotCQkJUExDUExlbmd0aCA9IFR4U2l6ZSArIDQ7Ci0JCX0K
LQkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX0lORk8sICJUeFNpemUgPSAlZCwgUExDUExlbmd0aCA9
ICVkXG4iLCBUeFNpemUsIFBMQ1BMZW5ndGgpOy8vc3RldmVuOmZvciBkZWJ1ZwotCQkJCQotCQkv
LyBQcmVwYXJlIFR4IGRlc2NyaXB0b3JzIGJlZm9yZSBraWNraW5nIHR4LgotCQkvLyBUaGUgQkJQ
IHJlZ2lzdGVyIGluZGV4IGluIFR4IGRlc2NyaXB0b3IgaGFzIHRvIGJlIGNvbmZpZ3VyZWQgdG9v
LgotCQlpZiAoSGVhZGVyXzgwMl8xMS5Db250cm9saGVhZC5BZGRyMS5PY3RldFswXSAmIDB4MDEp
Ci0JCXsKLQkJCUlOQ19DT1VOVEVSKHBBZGFwdGVyLT5XbGFuQ291bnRlcnMuTXVsdGljYXN0VHJh
bnNtaXR0ZWRGcmFtZUNvdW50KTsKLQkJCS8vIE11bHRpY2FzdCwgcmV0cnkgYml0IGlzIG9mZgot
CQkJaWYgKFN0YXJ0T2ZGcmFtZSA9PSBUUlVFKQotCQkJewotCQkJCWlmIChSVFVTQl9HRVRfUEFD
S0VUX1JUUyhza2IpICE9IDEpCi0JCQkJCVJUVVNCV3JpdGVUeERlc2NyaXB0b3IocFR4RCwgRkFM
U0UsIDAsIEZBTFNFLCBGQUxTRSwgVFJVRSwgRnJhbWVHYXAsIFR4U2l6ZSwgQ2lwaGVyLCBLZXlJ
RCwgQ1dfTUlOX0lOX0JJVFMsIENXX01BWF9JTl9CSVRTLCBQTENQTGVuZ3RoLCBwQWRhcHRlci0+
UG9ydENmZy5UeFJhdGUsIDQsIHBBZGFwdGVyLT5Qb3J0Q2ZnLlR4UHJlYW1ibGVJblVzZWQpOwot
CQkJCWVsc2UKLQkJCQkJUlRVU0JXcml0ZVR4RGVzY3JpcHRvcihwVHhELCBGQUxTRSwgMCwgRkFM
U0UsIEZBTFNFLCBUUlVFLCBGcmFtZUdhcCwgVHhTaXplLCBDaXBoZXIsIEtleUlELCAwLCAwLCBQ
TENQTGVuZ3RoLCBwQWRhcHRlci0+UG9ydENmZy5UeFJhdGUsIDQsIHBBZGFwdGVyLT5Qb3J0Q2Zn
LlR4UHJlYW1ibGVJblVzZWQpOwotCQkJfQotCQkJZWxzZQotCQkJCVJUVVNCV3JpdGVUeERlc2Ny
aXB0b3IocFR4RCwgRkFMU0UsIDAsIEZBTFNFLCBGQUxTRSwgRkFMU0UsIEZyYW1lR2FwLCBUeFNp
emUsIENpcGhlciwgS2V5SUQsIDAsIDAsIFBMQ1BMZW5ndGgsIHBBZGFwdGVyLT5Qb3J0Q2ZnLlR4
UmF0ZSwgNCwgcEFkYXB0ZXItPlBvcnRDZmcuVHhQcmVhbWJsZUluVXNlZCk7Ci0JCX0KLQkJZWxz
ZQotCQl7Ci0JCQlpZiAoU3RhcnRPZkZyYW1lID09IFRSVUUpCi0JCQl7Ci0JCQkJaWYgKFJUVVNC
X0dFVF9QQUNLRVRfUlRTKHNrYikgIT0gMSkKLQkJCQkJUlRVU0JXcml0ZVR4RGVzY3JpcHRvcihw
VHhELCBNb3JlRnJhZ21lbnQsIDcsIFRSVUUsIEZBTFNFLCBUUlVFLCBGcmFtZUdhcCwgVHhTaXpl
LCBDaXBoZXIsIEtleUlELCBDV19NSU5fSU5fQklUUywgQ1dfTUFYX0lOX0JJVFMsIFBMQ1BMZW5n
dGgsIHBBZGFwdGVyLT5Qb3J0Q2ZnLlR4UmF0ZSwgNCwgcEFkYXB0ZXItPlBvcnRDZmcuVHhQcmVh
bWJsZUluVXNlZCk7Ci0JCQkJZWxzZQotCQkJCQlSVFVTQldyaXRlVHhEZXNjcmlwdG9yKHBUeEQs
IE1vcmVGcmFnbWVudCwgNywgVFJVRSwgRkFMU0UsIFRSVUUsIEZyYW1lR2FwLCBUeFNpemUsIENp
cGhlciwgS2V5SUQsIDAsIDAsIFBMQ1BMZW5ndGgsIHBBZGFwdGVyLT5Qb3J0Q2ZnLlR4UmF0ZSwg
NCwgcEFkYXB0ZXItPlBvcnRDZmcuVHhQcmVhbWJsZUluVXNlZCk7Ci0JCQl9Ci0JCQllbHNlCi0J
CQkJUlRVU0JXcml0ZVR4RGVzY3JpcHRvcihwVHhELCBNb3JlRnJhZ21lbnQsIDcsIFRSVUUsIEZB
TFNFLCBGQUxTRSwgRnJhbWVHYXAsIFR4U2l6ZSwgQ2lwaGVyLCBLZXlJRCwgMCwgMCwgUExDUExl
bmd0aCwgcEFkYXB0ZXItPlBvcnRDZmcuVHhSYXRlLCA0LCBwQWRhcHRlci0+UG9ydENmZy5UeFBy
ZWFtYmxlSW5Vc2VkKTsKLQkJfQotCi0JCVRyYW5zZmVyQnVmZmVyTGVuZ3RoID0gVHhTaXplICsg
c2l6ZW9mKFRYRF9TVFJVQyk7Ci0JCWlmICgoVHJhbnNmZXJCdWZmZXJMZW5ndGggJSAyKSA9PSAx
KS8vYWx3YXlzIGJ1bGsgb3V0IGV2ZW4gbnVtYmVyIG9mIGJ5dGVzCi0JCQlUcmFuc2ZlckJ1ZmZl
ckxlbmd0aCsrOwotCQlpZiAoKFRyYW5zZmVyQnVmZmVyTGVuZ3RoICUgcEFkYXB0ZXItPkJ1bGtP
dXRNYXhQYWNrZXRTaXplKSA9PSAwKQotCQkJVHJhbnNmZXJCdWZmZXJMZW5ndGggKz0gMjsKLQot
CQlwVHhDb250ZXh0LT5CdWxrT3V0U2l6ZSA9IFRyYW5zZmVyQnVmZmVyTGVuZ3RoOwotCQlSVFVT
Ql9TRVRfQlVMS19GTEFHKHBBZGFwdGVyLCBmUlRVU0JfQlVMS19PVVRfREFUQV9OT1JNQUwpOwot
CQkKLQkJLy8gU2V0IGZyYW1lIGdhcCBmb3IgdGhlIHJlc3Qgb2YgZnJhZ21lbnQgYnVyc3QuCi0J
CS8vIEl0IHdvbid0IG1hdHRlciBpZiB0aGVyZSBpcyBvbmx5IG9uZSBmcmFnbWVudCAoc2luZ2xl
IGZyYWdtZW50IGZyYW1lKS4KLQkJU3RhcnRPZkZyYW1lID0gRkFMU0U7Ci0JCU51bWJlclJlcXVp
cmVkLS07Ci0JCWlmIChOdW1iZXJSZXF1aXJlZCA9PSAwKQotCQl7Ci0JCQlwVHhDb250ZXh0LT5M
YXN0T25lID0gVFJVRTsKLQkJfQotCQllbHNlCi0JCXsKLQkJCXBUeENvbnRleHQtPkxhc3RPbmUg
PSBGQUxTRTsKLQkJfQotLy9zdGV2ZW46dXNlIEFTSUMgY291bnRlcnMgdG8gZGVyaXZlIHRoaXMg
Y291bnQgaW5zdGVhZAkJSU5DX0NPVU5URVIocEFkYXB0ZXItPldsYW5Db3VudGVycy5UcmFuc21p
dHRlZEZyYWdtZW50Q291bnQpOwotCQkvLwotCQkvLyBJbmNyZWFzZSBCdWxrT3V0IHN0YW5ieSBj
b3VudC4KLQkJLy8JCQotCQlhdG9taWNfaW5jKCZwQWRhcHRlci0+VHhDb3VudCk7Ci0JfQl3aGls
ZSAoTnVtYmVyUmVxdWlyZWQgPiAwKTsKLQotI2lmIDAKLQkvLyBBZGQgZHVwbGljYXRlIDFtYiBi
cm9hZGNhc3QgZnJhbWVzCi0JZG8KLQl7Ci0JCWlmICgocEFkYXB0ZXItPlBvcnRDZmcuVHhSYXRl
ICE9IFJBVEVfMSkgJiYgKEJjYXN0XzgwMjMgPT0gVFJVRSkgJiYgKFNpbmdsZUZyYWcgPT0gVFJV
RSkpCi0JCXsKLQkJCVBUWF9DT05URVhUCQlwVG1wQ29udGV4dDsKLQkJCVBUWERfU1RSVUMJCXBU
bXBUeEQ7Ci0JCQlVTE9ORwkJCURhdGFPZmZzZXQgPSAwOwotCi0JCQlwU3JjID0gcFR4Q29udGV4
dC0+VHJhbnNmZXJCdWZmZXItPldpcmVsZXNzUGFja2V0OwotCQkJLy8KLQkJCS8vIENoZWNrIHRo
ZSBvZmZzZXQgb2YgdGhlIG9yaWdpbmFsIDgwMi4zIGRhdGEgcGFja2V0Ci0JCQkvLwotCQkJaWYg
KENpcGhlclN1aXRlID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uRGlzYWJsZWQpCi0JCQkJRGF0YU9m
ZnNldCA9IDA7Ci0JCQllbHNlIGlmIChDaXBoZXJTdWl0ZSA9PSBOZGlzODAyXzExRW5jcnlwdGlv
bjFFbmFibGVkKQotCQkJCURhdGFPZmZzZXQgKz0gNDsgLy9BZGQgSVYKLQkJCWVsc2UgaWYgKENp
cGhlclN1aXRlID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uMkVuYWJsZWQpCi0JCQkJRGF0YU9mZnNl
dCArPSA4OyAvL0FkZCBFSVYKLQkJCWVsc2UgaWYgKENpcGhlclN1aXRlID09IE5kaXM4MDJfMTFF
bmNyeXB0aW9uM0VuYWJsZWQpCQotCQkJCURhdGFPZmZzZXQgKz0gODsgLy9BZGQgRUlWCi0JCQkJ
Ci0JCQkvLyBDaGVjayBmb3IgREhDUCAmIEJPT1RQIHByb3RvY29sCi0JCQlpZiAoKCoocFNyYyAr
IDB4MzUgKyBEYXRhT2Zmc2V0KSAhPSAweDQ0KSB8fCAoKihwU3JjICsgMHgzNyArIERhdGFPZmZz
ZXQpICE9IDB4NDMpKQotCQkJewotCQkJCS8vIAotCQkJCS8vIDIwNTQgKGhleCAwODA2KSBmb3Ig
QVJQIGRhdGFncmFtcwotCQkJCS8vIGlmIHRoaXMgcGFja2V0IGlzIG5vdCBBUlAgZGF0YWdyYW1z
LCB0aGVuIGRvIG5vdGhpbmcKLQkJCQkvLyBBUlAgZGF0YWdyYW1zIHdpbGwgYWxzbyBiZSBkdXBs
aWNhdGUgYXQgMW1iIGJyb2FkY2FzdCBmcmFtZXMKLQkJCQkvLwotCQkJCWlmIChQcm90b2NvbCAh
PSAweDA4MDYgKQotCQkJCQlicmVhazsKLQkJCX0KLQotCQkJLy8gR2V0IHRoZSBUeCBSaW5nIGRl
c2NyaXB0b3IgJiBEbWEgQnVmZmVyIGFkZHJlc3MKLQkJCXBUbXBDb250ZXh0ID0gJnBBZGFwdGVy
LT5UeENvbnRleHRbcEFkYXB0ZXItPk5leHRUeEluZGV4XTsKLQkJCXBEZXN0ID0gcFRtcENvbnRl
eHQtPlRyYW5zZmVyQnVmZmVyLT5XaXJlbGVzc1BhY2tldDsKLQkJCQotCQkJaWYgKHBUbXBDb250
ZXh0LT5JblVzZSA9PSBUUlVFKQotCQkJCWJyZWFrOyAgLy9ObyBhdmFpbGFibGUgVHggUmluZyBm
b3IgU2VuZCAxbWIgYnJvYWRjYXN0IGZyYW1lcy4KLQotCQkJLy8gSW5jcmVhc2UgJiBtYWludGFp
biBUeCBSaW5nIEluZGV4Ci0JCQlwQWRhcHRlci0+TmV4dFR4SW5kZXgrKzsKLQkJCWlmIChwQWRh
cHRlci0+TmV4dFR4SW5kZXggPj0gVFhfUklOR19TSVpFKQotCQkJewotCQkJCXBBZGFwdGVyLT5O
ZXh0VHhJbmRleCA9IDA7Ci0JCQl9Ci0JCQkKLQkJCS8vCi0JCQkvLyBSZXNldCBMYXN0T25lIFR4
IFJpbmcgZGVzY3JpcHRvcgotCQkJLy8KLQkJCXBUbXBDb250ZXh0LT5JblVzZSAgID0gVFJVRTsK
LQkJCXBUbXBDb250ZXh0LT5MYXN0T25lID0gVFJVRTsKLQotCQkJcFRtcFR4RCAgPSAmKHBUbXBD
b250ZXh0LT5UcmFuc2ZlckJ1ZmZlci0+VHhEZXNjKTsKLQkJCS8vCi0JCQkvLyBEdXBsaWNhdGUg
VHhEIGRlc2NyaXB0b3IsIGFuZCB3ZSB3aWxsIHJlc2V0IHRoZSBpdHMgdmFsdWUgbGF0ZXIuCi0J
CQkvLwotCQkJbWVtY3B5KHBUbXBUeEQsIHBUeEQsIHNpemVvZihUWERfU1RSVUMpKTsKLQkJCS8v
IFN0YXJ0IGNvcGluZyBkYXRhIHRvIG5ldyByaW5nIAotCQkJbWVtY3B5KHBEZXN0LCBwU3JjLCBw
VHhDb250ZXh0LT5CdWxrT3V0U2l6ZSk7Ci0JCQlwVG1wQ29udGV4dC0+QnVsa091dFNpemUgPSBw
VHhDb250ZXh0LT5CdWxrT3V0U2l6ZTsKLQkJCVJUVVNCV3JpdGVUeERlc2NyaXB0b3IocFRtcFR4
RCwgRkFMU0UsIDcsIFRSVUUsIEZBTFNFLCBGQUxTRSwgRnJhbWVHYXAsIFR4U2l6ZSwgQ2lwaGVy
LCBLZXlJRCwgMCwgMCwgUExDUExlbmd0aCwgUkFURV8xLCA0LCBwQWRhcHRlci0+UG9ydENmZy5U
eFByZWFtYmxlSW5Vc2VkKTsJCi0JCQkvLwotCQkJLy8gSW5jcmVhc2UgQnVsa091dCBzdGFuYnkg
Y291bnQuCi0JCQkvLwkJCQotCQkJYXRvbWljX2luYygmcEFkYXB0ZXItPlR4Q291bnQpOwotCQkJ
REJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICJTZW5kIDFNIGJyb2FkY2FzdCBmcmFtZSFcbiIpOwot
CQl9Ci0JfSB3aGlsZSAoRkFMU0UpOwotI2VuZGlmCi0KLQkvLyBBY2tub3dsZWRnZSBwcm90b2Nv
bCBzZW5kIGNvbXBsZXRlIG9mIHBlbmRpbmcgcGFja2V0LgotCVJUVVNCRnJlZVNrYkJ1ZmZlcihz
a2IpOwotCXJldHVybiAoTkRJU19TVEFUVVNfU1VDQ0VTUyk7Ci0KLX0KLQotVk9JRCBSVFVTQlJ4
UGFja2V0KHVuc2lnbmVkIGxvbmcgZGF0YSkKLS8vVk9JRCBSVFVTQlJ4UGFja2V0KHB1cmJiX3Qg
cFVyYikKLXsKLQkvL1BSVDI1NzBBREFQVEVSIHBBZGFwdGVyID0gKFBSVDI1NzBBREFQVEVSKWRh
dGE7Ci0JcHVyYmJfdCBwVXJiID0gKHB1cmJiX3QpZGF0YTsKLQlQUlQyNTcwQURBUFRFUiBwQWRh
cHRlcjsKLQlQUlhfQ09OVEVYVCBwUnhDb250ZXh0OwotCVBSWERfU1RSVUMJCXBSeEQ7Ci0JTkRJ
U19TVEFUVVMJCVN0YXR1czsKLQlQSEVBREVSXzgwMl8xMQlwSGVhZGVyOwotCVBVQ0hBUgkJCXBE
YXRhOwotCVBVQ0hBUgkJCXBEZXN0TWFjLCBwU3JjTWFjOwotCVVDSEFSCQkJS2V5SWR4OwotCVVM
T05HCQkJaTsKLQlVSU5UCQkJUGFja2V0U2l6ZSA9IDA7Ci0JUFVDSEFSCQkJcEVuY2FwOwotCVVD
SEFSCQkJTExDX0xlblsyXTsKLQlVQ0hBUgkJCUhlYWRlcjgwMl8zWzE0XTsKLQlQV1BBX0tFWQkJ
cFdwYUtleSA9IE5VTEw7Ci0JLy8gVG8gaW5kaWNhdGUgY2lwaGVyIHVzZWQgZm9yIHRoaXMgcGFj
a2V0Ci0JTkRJU184MDJfMTFfRU5DUllQVElPTl9TVEFUVVMJQ2lwaGVyOwotCXN0cnVjdCBza19i
dWZmICAqc2tiOwotCVBWT0lECQkJcE1hbmFnZTsKLQotCXBSeENvbnRleHQ9IChQUlhfQ09OVEVY
VClwVXJiLT5jb250ZXh0OwotCXBBZGFwdGVyID0gcFJ4Q29udGV4dC0+cEFkYXB0ZXI7Ci0JCi0J
aWYoIFJUTVBfVEVTVF9GTEFHKHBBZGFwdGVyLCBmUlRNUF9BREFQVEVSX1JFTU9WRV9JTl9QUk9H
UkVTUykgKQotCQlyZXR1cm47Ci0KLQlkbwotCXsKLQkJaWYgKHBSeENvbnRleHQtPnBVcmItPmFj
dHVhbF9sZW5ndGggPj0gKHNpemVvZihSWERfU1RSVUMpICsgTEVOR1RIXzgwMl8xMSkpLy9ibHVl
Ci0JCXsKLQkJCXBEYXRhID0gcFJ4Q29udGV4dC0+VHJhbnNmZXJCdWZmZXI7Ci0JCQlwTWFuYWdl
ID0gKFBWT0lEKSBwRGF0YTsKLQotCQkJcFJ4RCA9IChQUlhEX1NUUlVDKShwRGF0YSArIHBSeENv
bnRleHQtPnBVcmItPmFjdHVhbF9sZW5ndGggLSBzaXplb2YoUlhEX1NUUlVDKSk7Ci0JCQlwSGVh
ZGVyCT0gKFBIRUFERVJfODAyXzExKXBEYXRhOwotCQkJCi0KLQkJCWlmIChwUnhELT5EYXRhQnl0
ZUNudCA8IDQpCi0JCQkJU3RhdHVzID0gTkRJU19TVEFUVVNfRkFJTFVSRTsKLQkJCWVsc2UKLQkJ
CXsKLQkJCQlwQWRhcHRlci0+UG9ydENmZy5Qc3MgPSBQV1JfQUNUSVZFOwotCi0JCQkJLy8gSW5j
cmVhc2UgVG90YWwgcmVjZWl2ZSBieXRlIGNvdW50ZXIgYWZ0ZXIgcmVhbCBkYXRhIHJlY2VpdmVk
IG5vIG1hdGVyIGFueSBlcnJvciBvciBub3QKLQkJCQlwQWRhcHRlci0+UmFsaW5rQ291bnRlcnMu
UmVjZWl2ZWRCeXRlQ291bnQgKz0gKHBSeEQtPkRhdGFCeXRlQ250IC0gNCk7Ci0KLQkJCQkvLyBD
aGVjayBmb3IgYWxsIFJ4RCBlcnJvcnMKLQkJCQlTdGF0dXMgPSBSVE1QQ2hlY2tSeERlc2NyaXB0
b3IocEFkYXB0ZXIsIHBSeEQpOwotCQkJfQotCi0JCQkvKiBPbmx5IHJlY2lldmUgdmFsaWQgcGFj
a2V0cyBpbiB0byBtb25pdG9yIG1vZGUgKi8KLQkJCWlmIChwQWRhcHRlci0+UG9ydENmZy5Cc3NU
eXBlID09IEJTU19NT05JVE9SICYmIFN0YXR1cyA9PSBORElTX1NUQVRVU19TVUNDRVNTKQotICAg
ICAgICAgCQl7Ci0gCSAgICAgICAgCQlzdHJ1Y3Qgc2tfYnVmZiAgKnNrYjsKLSAJICAgICAgIAkJ
CWlmICgoc2tiID0gX19kZXZfYWxsb2Nfc2tiKDIwNDgsIEdGUF9ETUF8R0ZQX0FUT01JQykpICE9
IE5VTEwpCi0gCSAgICAgICAgCQl7Ci0gCSAgICAgIAkJCQlza2ItPmRldiA9IHBBZGFwdGVyLT5u
ZXQ7Ci0gCSAgICAgIAkJCQltZW1jcHkoc2tiX3B1dChza2IsIHBSeEQtPkRhdGFCeXRlQ250LTQp
LCBwRGF0YSwgcFJ4RC0+RGF0YUJ5dGVDbnQtNCk7Ci0gCSAgICAgICAJCQkJc2tiLT5tYWMucmF3
ID0gc2tiLT5kYXRhOwotIAkgICAgICAJCQkJc2tiLT5wa3RfdHlwZSA9IFBBQ0tFVF9PVEhFUkhP
U1Q7Ci0gCSAgICAgCQkJCXNrYi0+cHJvdG9jb2wgPSBodG9ucyhFVEhfUF84MDJfMik7Ci0gCSAg
ICAgICAgCQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOwotIAkgICAgICAgICAgICAg
ICAgCQluZXRpZl9yeChza2IpOwotIAkgICAgICAgICAgICAJCX0JCi0gICAgICAgICAgICAgICAg
ICAgCQotCQkJCWlmICgoIVJUTVBfVEVTVF9GTEFHKHBBZGFwdGVyLCBmUlRNUF9BREFQVEVSX1JF
U0VUX0lOX1BST0dSRVNTKSkgJiYKLQkJCQkoIVJUTVBfVEVTVF9GTEFHKHBBZGFwdGVyLCBmUlRN
UF9BREFQVEVSX0JVTEtJTl9SRVNFVCkpICYmCi0JCQkJKCFSVE1QX1RFU1RfRkxBRyhwQWRhcHRl
ciwgZlJUTVBfQURBUFRFUl9SQURJT19PRkYpKSAmJgotCQkJCSghUlRNUF9URVNUX0ZMQUcocEFk
YXB0ZXIsIGZSVE1QX0FEQVBURVJfSEFMVF9JTl9QUk9HUkVTUykpICYmCi0JCQkJKCFSVE1QX1RF
U1RfRkxBRyhwQWRhcHRlciwgZlJUTVBfQURBUFRFUl9SRU1PVkVfSU5fUFJPR1JFU1MpKSkKLQkJ
CQlSVFVTQkJ1bGtSZWNlaXZlKHBBZGFwdGVyKTsKLSAgICAgICAgIAkJCWNvbnRpbnVlOwotCQkJ
fQotCQkJCi0JCQlpZiAoU3RhdHVzID09IE5ESVNfU1RBVFVTX1NVQ0NFU1MpCi0JCQl7Ci0JCQkJ
Ly8gQXBwbHkgcGFja2V0IGZpbHRlcmluZyBydWxlIGJhc2VkIG9uIG1pY3Jvc29mdCByZXF1aXJl
bWVudHMuCi0JCQkJU3RhdHVzID0gUlRNUEFwcGx5UGFja2V0RmlsdGVyKHBBZGFwdGVyLCBwUnhE
LCBwSGVhZGVyKTsKLQkJCX0JCi0JCQotCQkJLy8gQWRkIHJlY2VpdmUgY291bnRlcnMKLQkJCWlm
IChTdGF0dXMgPT0gTkRJU19TVEFUVVNfU1VDQ0VTUykKLQkJCXsKLQkJCQkvLyBJbmNyZWFzZSA4
MDIuMTEgY291bnRlcnMgJiBnZW5lcmFsIHJlY2VpdmUgY291bnRlcnMKLQkJCQlJTkNfQ09VTlRF
UihwQWRhcHRlci0+V2xhbkNvdW50ZXJzLlJlY2VpdmVkRnJhZ21lbnRDb3VudCk7Ci0JCQl9Ci0J
CQllbHNlCi0JCQl7Ci0JCQkJLy8gSW5jcmVhc2UgZ2VuZXJhbCBjb3VudGVycwotCQkJCXBBZGFw
dGVyLT5Db3VudGVycy5SeEVycm9ycysrOwotCQkJfQotCQkJCi0KLQkJCS8vIENoZWNrIGZvciBy
ZXRyeSBiaXQsIGlmIHRoaXMgYml0IGlzIG9uLCBzZWFyY2ggdGhlIGNhY2hlIHdpdGggU0EgJiBz
ZXF1ZW5jZQotCQkJLy8gYXMgaW5kZXgsIGlmIG1hdGNoZWQsIGRpc2NhcmQgdGhpcyBmcmFtZSwg
b3RoZXJ3aXNlLCB1cGRhdGUgY2FjaGUKLQkJCS8vIFRoaXMgY2hlY2sgb25seSBhcHBseSB0byB1
bmljYXN0IGRhdGEgJiBtYW5hZ2VtZW50IGZyYW1lcwotCQkJaWYgKChwUnhELT5VMk0pICYmIChT
dGF0dXMgPT0gTkRJU19TVEFUVVNfU1VDQ0VTUykgJiYgKHBIZWFkZXItPkNvbnRyb2xoZWFkLkZy
YW1lLlR5cGUgIT0gQlRZUEVfQ05UTCkpCi0JCQl7Ci0JCQkJaWYgKHBIZWFkZXItPkNvbnRyb2xo
ZWFkLkZyYW1lLlJldHJ5KQotCQkJCXsKLQkJCQkJaWYgKFJUTVBTZWFyY2hUdXBsZUNhY2hlKHBB
ZGFwdGVyLCBwSGVhZGVyKSA9PSBUUlVFKQotCQkJCQl7Ci0JCQkJCQkvLyBGb3VuZCByZXRyeSBm
cmFtZSBpbiB0dXBsZSBjYWNoZSwgRGlzY2FyZCB0aGlzIGZyYW1lIC8gZnJhZ21lbnQKLQkJCQkJ
CS8vIEluY3JlYXNlIDgwMi4xMSBjb3VudGVycwotCQkJCQkJSU5DX0NPVU5URVIocEFkYXB0ZXIt
PldsYW5Db3VudGVycy5GcmFtZUR1cGxpY2F0ZUNvdW50KTsKLQkJCQkJCURCR1BSSU5UX1JBVyhS
VF9ERUJVR19JTkZPLCAiZHVwbGljYXRlIGZyYW1lXG4iKTsvL3N0ZXZlbjpmb3IgZGVidWcKLQkJ
CQkJCVN0YXR1cyA9IE5ESVNfU1RBVFVTX0ZBSUxVUkU7Ci0JCQkJCX0KLQkJCQkJZWxzZQotCQkJ
CQl7Ci0JCQkJCQlSVE1QVXBkYXRlVHVwbGVDYWNoZShwQWRhcHRlciwgcEhlYWRlcik7Ci0JCQkJ
CX0KLQkJCQl9Ci0JCQkJZWxzZQkvLyBVcGRhdGUgVHVwbGUgQ2FjaGUKLQkJCQl7Ci0JCQkJCVJU
TVBVcGRhdGVUdXBsZUNhY2hlKHBBZGFwdGVyLCBwSGVhZGVyKTsKLQkJCQl9Ci0JCQl9Ci0JCQkK
LQkJCS8vIENoZWNrIGFuZCBzZXQgdGhlIGNpcGhlciB2YXJpYWJsZQotCQkJaWYgKHBSeEQtPlUy
TSkKLQkJCQlDaXBoZXIgPSBwQWRhcHRlci0+UG9ydENmZy5QYWlyQ2lwaGVyOwotCQkJZWxzZQot
CQkJCUNpcGhlciA9IHBBZGFwdGVyLT5Qb3J0Q2ZnLkdyb3VwQ2lwaGVyOwkJCi0JCQkJQ2lwaGVy
ID0gcEFkYXB0ZXItPlBvcnRDZmcuV2VwU3RhdHVzOwotCi0JCQkvLwotCQkJLy8gRG8gUnhEIHJl
bGVhc2Ugb3BlcmF0aW9uCWZvcglhbGwJZmFpbHVyZQlmcmFtZXMKLQkJCS8vCi0JCQlpZiAoU3Rh
dHVzID09IE5ESVNfU1RBVFVTX1NVQ0NFU1MpCi0JCQl7Ci0JCQkJLy8KLQkJCQkvLyBTdGFydCBv
ZgltYWluIGxvb3AgdG8gcGFyc2UgcmVjZWl2aW5nIGZyYW1lcy4KLQkJCQkvLyBUaGUgc2VxdWVu
Y2UJd2lsbCBiZQlUeXBlIGZpcnN0LAl0aGVuIHN1YnR5cGUuLi4KLQkJCQkvLwotCQkJCXN3aXRj
aCAocEhlYWRlci0+Q29udHJvbGhlYWQuRnJhbWUuVHlwZSkKLQkJCQkJewotCQkJCQkJLy8gRnJh
bWUgd2l0aCBkYXRhIHR5cGUKLQkJCQkJCWNhc2UgQlRZUEVfREFUQToKLQkJCQkJCQkvLyBwRGF0
YSA6IFBvaW50ZXIgc2tpcAl0aGUJZmlyc3QgMjQgYnl0ZXMsCTgwMi4xMSBIRUFERVIKLQkJCQkJ
CQlwRGF0YSArPSBMRU5HVEhfODAyXzExOwotCi0JCQkJCQkJUGFja2V0U2l6ZSA9IHBSeEQtPkRh
dGFCeXRlQ250IC0gTEVOR1RIXzgwMl8xMSAtIDQ7CSAvL01pbnVzIEZDU1s0XS4gIGRlZmF1bHQg
Zm9yIE5vbmVXZXAuCi0JCQkJCQkJLy8gRHJvcCBub3QgbXkgQlNTIGZyYW1lCi0JCQkJCQkJaWYg
KElORlJBX09OKHBBZGFwdGVyKSkKLQkJCQkJCQl7Ci0JCQkJCQkJCS8vIEluZnJhc3RydWN0dXJl
IG1vZGUsIGNoZWNrIGFkZHJlc3MgMiBmb3IgQlNTSUQKLQkJCQkJCQkJaWYgKG1lbWNtcCgmcEhl
YWRlci0+Q29udHJvbGhlYWQuQWRkcjIsICZwQWRhcHRlci0+UG9ydENmZy5Cc3NpZCwgNikgIT0g
MCkKLQkJCQkJCQkJCWJyZWFrOwkvLyBSZWNlaXZlIGZyYW1lIG5vdCBteSBCU1NJRAotCQkJCQkJ
CQllbHNlCi0JCQkJCQkJCQlhdG9taWNfaW5jKCYocEFkYXB0ZXItPlBvcnRDZmcuRGF0YVBhY2tl
dHNGcm9tQVApKTsKLQkJCQkJCQl9Ci0JCQkJCQkJZWxzZQkvLyBBZC1Ib2MgbW9kZSBvciBOb3Qg
YXNzb2NpYXRlZAotCQkJCQkJCXsKLQkJCQkJCQkJLy8gQWQtSG9jIG1vZGUsIGNoZWNrIGFkZHJl
c3MgMyBmb3IgQlNTSUQKLQkJCQkJCQkJaWYgKG1lbWNtcCgmcEhlYWRlci0+QWRkcjMsICZwQWRh
cHRlci0+UG9ydENmZy5Cc3NpZCwgNikgIT0gMCkKLQkJCQkJCQkJCWJyZWFrOwkvLyBSZWNlaXZl
IGZyYW1lIG5vdCBteSBCU1NJRAotCi0JCQkJCQkJCS8vIERyb3AgZnJhbWUgZnJvbSBBUCB3aGls
ZSB3ZSBhcmUgaW4gQWQtaG9jIG1vZGUgb3Igbm90IGFzc29jaWF0ZWQKLQkJCQkJCQkJaWYgKHBI
ZWFkZXItPkNvbnRyb2xoZWFkLkZyYW1lLkZyRHMpCi0JCQkJCQkJCQlicmVhazsKLQkJCQkJCQl9
Ci0KLQkJCQkJCQkvLyBEcm9wIE51bGwgZGF0YSBmcmFtZSwgb3IgQ0Ygd2l0aCBOVUxMIGRhdGEg
ZnJhbWUKLQkJCQkJCQlpZiAoKHBIZWFkZXItPkNvbnRyb2xoZWFkLkZyYW1lLlN1YnR5cGUgPT0g
U1VCVFlQRV9OVUxMX0ZVTkMpIHx8Ci0JCQkJCQkJCShwSGVhZGVyLT5Db250cm9saGVhZC5GcmFt
ZS5TdWJ0eXBlID09IFNVQlRZUEVfQ0ZBQ0spICAgICB8fAotCQkJCQkJCQkocEhlYWRlci0+Q29u
dHJvbGhlYWQuRnJhbWUuU3VidHlwZSA9PSBTVUJUWVBFX0NGUE9MTCkgICAgfHwKLQkJCQkJCQkJ
KHBIZWFkZXItPkNvbnRyb2xoZWFkLkZyYW1lLlN1YnR5cGUgPT0gU1VCVFlQRV9DRkFDS19DRlBP
TEwpKQotCQkJCQkJCXsKLQkJCQkJCQkJYnJlYWs7Ci0JCQkJCQkJfQotCi0JCQkJCQkJLy8gUHJv
Y2VzcyBCcm9hZGNhc3QgJiBNdWx0aWNhc3QgZGF0YSBmcmFtZQotCQkJCQkJCWlmIChwUnhELT5C
Y2FzdCB8fCBwUnhELT5NY2FzdCkKLQkJCQkJCQl7Ci0JCQkJCQkJCS8vIE11bHRpY2FzdCA4MDIu
MTEgQ291bnRlcgotCQkJCQkJCQlJTkNfQ09VTlRFUihwQWRhcHRlci0+V2xhbkNvdW50ZXJzLk11
bHRpY2FzdFJlY2VpdmVkRnJhbWVDb3VudCk7Ci0JCQkJCQkJCURCR1BSSU5UKFJUX0RFQlVHX0lO
Rk8sIlJlY2VpdmluZyBtdWx0aWNhc3QgZnJhbWVcbiIpOwotCQkJCQkJCQkvLyBEcm9wIE1jYXN0
IC8gQmNhc3QgZnJhbWUgd2l0aCBmcmFnbWVudCBiaXQgb24KLQkJCQkJCQkJaWYgKHBIZWFkZXIt
PkNvbnRyb2xoZWFkLkZyYW1lLk1vcmVGcmFnKQotCQkJCQkJCQl7Ci0JCQkJCQkJCQlEQkdQUklO
VF9SQVcoUlRfREVCVUdfRVJST1IsIlJlY2VpdmluZyBtdWx0aWNhc3QgZnJhbWUgd2l0aCBmcmFn
bWVudCBiaXQgb25cbiIpOwkJCQkJCQkKLQkJCQkJCQkJCWJyZWFrOwotCQkJCQkJCQl9CQotCQkJ
CQkJCQkKLQkJCQkJCQkJLy8gRmlsdGVyIG91dCBCY2FzdCBmcmFtZSB3aGljaCBBUCByZWxheWVk
IGZvciB1cwotCQkJCQkJCQlpZiAoKChtZW1jbXAoJnBIZWFkZXItPkFkZHIzLCBwQWRhcHRlci0+
Q3VycmVudEFkZHJlc3MsIDYpID09IDApKSAmJiBwSGVhZGVyLT5Db250cm9saGVhZC5GcmFtZS5G
ckRzKQotCQkJCQkJCQkJYnJlYWs7Ci0JCQkJCQkJCQotCQkJCQkJCQkvLyBXRVAgZW5jcnlwdGVk
IGZyYW1lCi0JCQkJCQkJCWlmIChwSGVhZGVyLT5Db250cm9saGVhZC5GcmFtZS5XZXApCi0JCQkJ
CQkJCXsKLQkJCQkJCQkJCS8vIENoZWNrIG91ciBXRVAgc2V0dGluZywgaWYgbm8gV0VQIHR1cm5p
bmcgb24sIGp1c3QgZHJvcCB0aGlzIGZyYW1lCi0JCQkJCQkJCQlpZiAoQ2lwaGVyID09IE5kaXM4
MDJfMTFFbmNyeXB0aW9uMUVuYWJsZWQpCS8vIFdFUAotCQkJCQkJCQkJewotCQkJCQkJCQkJCWlm
IChwUnhELT5DaUVycikKLQkJCQkJCQkJCQkJYnJlYWs7Ci0JCQkJCQkJCQkJZWxzZQotCQkJCQkJ
CQkJCXsKLQkJCQkJCQkJCQkJcERhdGEgPSBwRGF0YSArIDQ7ICAvL09mZnNldCBza2lwIElWWzRd
Ci0JCQkJCQkJCQkJCXBSeEQtPkRhdGFCeXRlQ250ID0gcFJ4RC0+RGF0YUJ5dGVDbnQgLSA4OyAv
L01pbnVzIElDVls0XSAmIEZDU1s0XS4KLQkJCQkJCQkJCQl9Ci0KLQkJCQkJCQkJCQlQYWNrZXRT
aXplID0gcFJ4RC0+RGF0YUJ5dGVDbnQgLSBMRU5HVEhfODAyXzExIC0gNDsJLy9NaW51cyBJVls0
XS4KLQkJCQkJCQkJCX0KLQkJCQkJCQkJCWVsc2UgaWYgKENpcGhlciA9PSBOZGlzODAyXzExRW5j
cnlwdGlvbjJFbmFibGVkKQkvLyBUS0lQCi0JCQkJCQkJCQl7Ci0JCQkJCQkJCQkJaWYgKHBSeEQt
PkNpRXJyKQotCQkJCQkJCQkJCQl7Ci0JCQkJCQkJCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfRVJS
T1IsInBSeEQtPkNpRXJyXG4iKTsJCQkJCQkJCi0JCQkJCQkJCQkJCWJyZWFrOwotCQkJCQkJCQkJ
CQl9Ci0JCQkJCQkJCQkJZWxzZQotCQkJCQkJCQkJCXsKLQkJCQkJCQkJCQkJcERhdGEgPSBwRGF0
YSArIDg7IC8vT2Zmc2V0IHNraXAgSVZbOF0KLQkJCQkJCQkJCQkJLy8KLQkJCQkJCQkJCQkJLy8g
dGhlIE1JQyBpcyBzdG9yZWQgb24gdGhlIGxhc3Qgb25lIG5vIG1vcmUgRnJhZ21lbnQuCi0JCQkJ
CQkJCQkJCS8vIHRoYXQgaXMgb25seSBsYXN0IE1QRFUgb25seSBuZWVkIHRvIGNoZWNrIE1JQy4K
LQkJCQkJCQkJCQkJLy8KLQkJCQkJCQkJCQkJaWYgKHBIZWFkZXItPkNvbnRyb2xoZWFkLkZyYW1l
Lk1vcmVGcmFnID09IFRSVUUpCi0JCQkJCQkJCQkJCXsJCQkJCQkJCQkKLQkJCQkJCQkJCQkJCS8v
IE5vIE1JQyBoZXJlLgotCQkJCQkJCQkJCQkJcFJ4RC0+RGF0YUJ5dGVDbnQgPSBwUnhELT5EYXRh
Qnl0ZUNudCAtIDg7IC8vSUNWWzRdICZGQ1NbNF0uCi0JCQkJCQkJCQkJCX0KLQkJCQkJCQkJCQkJ
ZWxzZQotCQkJCQkJCQkJCQl7Ci0JCQkJCQkJCQkJCQlpZiAocEhlYWRlci0+RnJhZyAhPSAwKQot
CQkJCQkJCQkJCQkJCXBSeEQtPkRhdGFCeXRlQ250ID0gcFJ4RC0+RGF0YUJ5dGVDbnQgLSA4OyAv
L01JQyBiZWVuIGZyYWcgSUNWWzRdICYgRkNTWzRdCi0JCQkJCQkJCQkJCQllbHNlCQkJCQkJCQkJ
CQotCQkJCQkJCQkJCQkJCXBSeEQtPkRhdGFCeXRlQ250ID0gcFJ4RC0+RGF0YUJ5dGVDbnQgLSAx
NjsgLy9NaW51cyBNSUNbOF0gJiBJQ1ZbNF0gJkZDU1s0XS4KLQkJCQkJCQkJCQkJfQkJCQkJCQkJ
Ci0JCQkJCQkJCQkJfQotCi0JCQkJCQkJCQkJUGFja2V0U2l6ZSA9IHBSeEQtPkRhdGFCeXRlQ250
IC0gTEVOR1RIXzgwMl8xMSAtIDg7CS8vTWludXMgSVYrRUlWWzhdLgotCQkJCQkJCQkJfQotCQkJ
CQkJCQkJZWxzZSBpZiAoQ2lwaGVyID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uM0VuYWJsZWQpCS8v
IEFFUwotCQkJCQkJCQkJewotCQkJCQkJCQkJCWlmIChwUnhELT5DaUVycikKLQkJCQkJCQkJCQkJ
YnJlYWs7Ci0JCQkJCQkJCQkJZWxzZQotCQkJCQkJCQkJCXsKLQkJCQkJCQkJCQkJcERhdGEgPSBw
RGF0YSArIDg7IC8vT2Zmc2V0IHNraXAgUlNOWzhdCi0JCQkJCQkJCQkJCXBSeEQtPkRhdGFCeXRl
Q250ID0gcFJ4RC0+RGF0YUJ5dGVDbnQgLSAxMjsgIC8vTWludXMgTUlDWzhdICYgSUNWWzRdCi0J
CQkJCQkJCQkJfQotCi0JCQkJCQkJCQkJUGFja2V0U2l6ZSA9IHBSeEQtPkRhdGFCeXRlQ250IC0g
TEVOR1RIXzgwMl8xMSAtIDg7CS8vTWludXMgUlNOWzhdCi0JCQkJCQkJCQl9Ci0JCQkJCQkJCQll
bHNlCi0JCQkJCQkJCQkJYnJlYWs7Ci0JCQkJCQkJCX0KLQkJCQkJCQl9Ly9pZiAocFJ4RC0+QmNh
c3QgfHwgcFJ4RC0+TWNhc3QpCQkJCQotCQkJCQkJCS8vIEJlZ2luIHByb2Nlc3MgdW5pY2FzdCB0
bwltZSBmcmFtZQotCQkJCQkJCWVsc2UgaWYJKHBSeEQtPlUyTSkKLQkJCQkJCQl7CQkJCQkKLQkJ
CQkJCQkJLy8KLQkJCQkJCQkJLy8gQmVnaW4gZnJhbWUgcHJvY2Vzc2luZwotCQkJCQkJCQkvLwot
CQkJCQkJCQkvLyBEQSBpcyBhbHdheXMJYWRkcmVzcwkxCi0JCQkJCQkJCXBEZXN0TWFjID0gKFBV
Q0hBUikJJihwSGVhZGVyLT5Db250cm9saGVhZC5BZGRyMSk7Ci0JCQkJCQkJCS8vIFNlY2xlY3Qg
U0EgYnkgZGlmZmVyZW50IG1vZGUKLQkJCQkJCQkJaWYgKElORlJBX09OKHBBZGFwdGVyKSkJCS8v
IEZvciBpbmZyYXN0cnVjdHVyZSwgU0EgaXMgYWRkcmVzcyAzCi0JCQkJCQkJCXsKLQkJCQkJCQkJ
CXBTcmNNYWMJPSAoUFVDSEFSKSAmKHBIZWFkZXItPkFkZHIzKTsKLQkJCQkJCQkJfQotCQkJCQkJ
CQllbHNlCQkJCQkJCQkJLy8gRm9yIElCU1MJbW9kZSwgU0EgaXMJYWRkcmVzcwkyCi0JCQkJCQkJ
CXsKLQkJCQkJCQkJCXBTcmNNYWMJPSAoUFVDSEFSKSAmKHBIZWFkZXItPkNvbnRyb2xoZWFkLkFk
ZHIyKTsKLQkJCQkJCQkJfQotCQkJCQkJCQkvLyBXRVAgZW5jcnlwdGVkIGZyYW1lCi0JCQkJCQkJ
CWlmIChDaXBoZXIgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24xRW5hYmxlZCkJLy8gV0VQCi0JCQkJ
CQkJCXsKLQkJCQkJCQkJCWlmIChwSGVhZGVyLT5Db250cm9saGVhZC5GcmFtZS5XZXApCi0JCQkJ
CQkJCQl7Ci0JCQkJCQkJCQkJaWYgKHBSeEQtPkNpRXJyKQotCQkJCQkJCQkJCQlicmVhazsKLQkJ
CQkJCQkJCQllbHNlCi0JCQkJCQkJCQkJewotCQkJCQkJCQkJCQlwRGF0YSA9IHBEYXRhICsgNDsg
Ly9PZmZzZXQgc2tpcCBJVls0XQotCQkJCQkJCQkJCQlwUnhELT5EYXRhQnl0ZUNudCA9IHBSeEQt
PkRhdGFCeXRlQ250IC0gODsgLy9NaW51cyBJQ1ZbNF0gJiBGQ1NbNF0uCi0JCQkJCQkJCQkJfQot
Ci0JCQkJCQkJCQkJUGFja2V0U2l6ZSA9IHBSeEQtPkRhdGFCeXRlQ250IC0gTEVOR1RIXzgwMl8x
MSAtIDQ7CS8vTWludXMgSVZbNF0uCi0JCQkJCQkJCQl9Ci0JCQkJCQkJCQllbHNlIGlmICgocEFk
YXB0ZXItPlBvcnRDZmcuUHJpdmFjeUZpbHRlciA9PSBOZGlzODAyXzExUHJpdkZpbHRlcjgwMjF4
V0VQKSAmJgotCQkJCQkJCQkJCQkgKHBIZWFkZXItPkZyYWcgPT0gMCkpCi0JCQkJCQkJCQl7Ci0J
CQkJCQkJCQkJLy8gQ2hlY2sgODAyLjF4IGZyYW1lLCBpZiBub3QgZHJvcCBpdC4KLQkJCQkJCQkJ
CQlpZiAobWVtY21wKEVBUE9MLCBwRGF0YSArIDYsIDIpICE9IDApCi0JCQkJCQkJCQkJewotCQkJ
CQkJCQkJCQkvLyBOb3QgODAyLjFYIGZyYW1lcwotCQkJCQkJCQkJCQkvLyBBZGQgZXJyb3IgY291
bnRlcgotCQkJCQkJCQkJCQlicmVhazsKLQkJCQkJCQkJCQl9CQkJCQkJCQotCQkJCQkJCQkJfQkJ
CQkJCQotCQkJCQkJCQl9Ci0JCQkJCQkJCWVsc2UgaWYgKENpcGhlciA9PSBOZGlzODAyXzExRW5j
cnlwdGlvbjJFbmFibGVkKQkvLyBUS0lQCi0JCQkJCQkJCXsKLQkJCQkJCQkJCWlmIChwSGVhZGVy
LT5Db250cm9saGVhZC5GcmFtZS5XZXApCi0JCQkJCQkJCQl7Ci0JCQkJCQkJCQkJaWYgKHBSeEQt
PkNpRXJyKQotCQkJCQkJCQkJCQl7CQkJCQkJCQkJCQotCQkJCQkJCQlEQkdQUklOVChSVF9ERUJV
R19URU1QLCJwUnhELT5DaUVyclxuIik7Ci0JCQkJCQkJCQkJCWJyZWFrOwotCi0KLQkJCQkJCQkJ
CQkJfQotCQkJCQkJCQkJCWVsc2UKLQkJCQkJCQkJCQl7Ci0JCQkJCQkJCQkJCXBEYXRhID0gcERh
dGEgKyA4OyAgLy9PZmZzZXQgc2tpcCBJVls4XQotCQkJCQkJCQkJCQkvLwotCQkJCQkJCQkJCQkv
LyB0aGUgTUlDIGlzIHN0b3JlZCBvbiB0aGUgbGFzdCBvbmUgbm8gbW9yZSBGcmFnbWVudC4KLQkJ
CQkJCQkJCQkJLy8gdGhhdCBpcyBvbmx5IGxhc3QgTVBEVSBvbmx5IG5lZWQgdG8gY2hlY2sgTUlD
LgotCQkJCQkJCQkJCQkvLwotCQkJCQkJCQkJCQlpZiAocEhlYWRlci0+Q29udHJvbGhlYWQuRnJh
bWUuTW9yZUZyYWcgPT0gVFJVRSkKLQkJCQkJCQkJCQkJewotCQkJCQkJCQkJCQkJLy9ObyBNSUMg
aGVyZS4KLQkJCQkJCQkJCQkJCXBSeEQtPkRhdGFCeXRlQ250ID0gcFJ4RC0+RGF0YUJ5dGVDbnQg
LSA4OyAvL0lDVls0XSAmRkNTWzRdLgotCQkJCQkJCQkJCQl9Ci0JCQkJCQkJCQkJCWVsc2UKLQkJ
CQkJCQkJCQkJewotCQkJCQkJCQkJCQkJaWYgKHBIZWFkZXItPkZyYWcgIT0gMCkKLQkJCQkJCQkJ
CQkJCQlwUnhELT5EYXRhQnl0ZUNudCA9IHBSeEQtPkRhdGFCeXRlQ250IC0gODsgLy9NSUMgYmVl
biBmcmFnIElDVls0XSAmIEZDU1s0XQotCQkJCQkJCQkJCQkJZWxzZQotCQkJCQkJCQkJCQkJCXBS
eEQtPkRhdGFCeXRlQ250ID0gcFJ4RC0+RGF0YUJ5dGVDbnQgLSAxNjsgLy9NaW51cyBNSUNbOF0g
JiBJQ1ZbNF0gJiBGQ1NbNF0uCi0JCQkJCQkJCQkJCX0KLQkJCQkJCQkJCQl9Ci0KLQkJCQkJCQkJ
CQlQYWNrZXRTaXplID0gcFJ4RC0+RGF0YUJ5dGVDbnQgLSBMRU5HVEhfODAyXzExIC0gODsJLy9N
aW51cyBJVitFSVZbOF0uCi0JCQkJCQkJCQl9Ci0JCQkJCQkJCQllbHNlIGlmICgocEFkYXB0ZXIt
PlBvcnRDZmcuUHJpdmFjeUZpbHRlciA9PSBOZGlzODAyXzExUHJpdkZpbHRlcjgwMjF4V0VQKSAm
JgotCQkJCQkJCQkJCQkgKHBIZWFkZXItPkZyYWcgPT0gMCkpCi0JCQkJCQkJCQl7Ci0JCQkJCQkJ
CQkJLy8gQ2hlY2sgODAyLjF4IGZyYW1lLCBpZiBub3QgZHJvcCBpdC4KLQkJCQkJCQkJCQlpZiAo
bWVtY21wKEVBUE9MLCBwRGF0YSArIDYsIDIpICE9IDApCi0JCQkJCQkJCQkJewotCQkJCQkJCQlE
QkdQUklOVChSVF9ERUJVR19URU1QLCJOb3QgODAyLjFYIGZyYW1lc1xuIik7Ci0JCQkJCQkJCQkJ
CS8vIE5vdCA4MDIuMVggZnJhbWVzCi0JCQkJCQkJCQkJCS8vIEFkZCBlcnJvciBjb3VudGVyCi0J
CQkJCQkJCQkJCWJyZWFrOwotCQkJCQkJCQkJCX0KLQkJCQkJCQkJCQlEQkdQUklOVChSVF9ERUJV
R19URU1QLCIgODAyLjFYIEVBUE9MIGZyYW1lc1xuIik7Ci0JCQkJCQkJCQl9Ci0JCQkJCQkJCX0K
LQkJCQkJCQkJZWxzZSBpZiAoQ2lwaGVyID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uM0VuYWJsZWQp
CS8vIEFFUwotCQkJCQkJCQl7Ci0JCQkJCQkJCQlpZiAocEhlYWRlci0+Q29udHJvbGhlYWQuRnJh
bWUuV2VwKQotCQkJCQkJCQkJewotCQkJCQkJCQkJCWlmIChwUnhELT5DaUVycikKLQkJCQkJCQkJ
CQkJYnJlYWs7Ci0JCQkJCQkJCQkJZWxzZQotCQkJCQkJCQkJCXsKLQkJCQkJCQkJCQkJcERhdGEg
PSBwRGF0YSArIDg7IC8vT2Zmc2V0IHNraXAgSVZbOF0KLQkJCQkJCQkJCQkJcFJ4RC0+RGF0YUJ5
dGVDbnQgPSBwUnhELT5EYXRhQnl0ZUNudCAtIDEyOyAgLy9NaW51cyBNSUNbOF0gJiBJQ1ZbNF0K
LQkJCQkJCQkJCQl9Ci0KLQkJCQkJCQkJCQlQYWNrZXRTaXplID0gcFJ4RC0+RGF0YUJ5dGVDbnQg
LSBMRU5HVEhfODAyXzExIC0gODsJLy9NaW51cyBSU05bOF0KLQkJCQkJCQkJCX0KLQkJCQkJCQkJ
CWVsc2UgaWYgKChwQWRhcHRlci0+UG9ydENmZy5Qcml2YWN5RmlsdGVyID09IE5kaXM4MDJfMTFQ
cml2RmlsdGVyODAyMXhXRVApICYmCi0JCQkJCQkJCQkJCSAocEhlYWRlci0+RnJhZyA9PSAwKSkK
LQkJCQkJCQkJCXsKLQkJCQkJCQkJCQkvLyBDaGVjayA4MDIuMXggZnJhbWUsIGlmIG5vdCBkcm9w
IGl0LgotCQkJCQkJCQkJCWlmIChtZW1jbXAoRUFQT0wsIHBEYXRhICsgNiwgMikgIT0gMCkKLQkJ
CQkJCQkJCQl7Ci0JCQkJCQkJCQkJCS8vIE5vdCA4MDIuMVggZnJhbWVzCi0JCQkJCQkJCQkJCS8v
IEFkZCBlcnJvciBjb3VudGVyCi0JCQkJCQkJCQkJCWJyZWFrOwotCQkJCQkJCQkJCX0KLQkJCQkJ
CQkJCX0KLQkJCQkJCQkJfQotCQkJCQkJCQllbHNlIGlmIChwSGVhZGVyLT5Db250cm9saGVhZC5G
cmFtZS5XZXApCi0JCQkJCQkJCXsKLQkJCQkJCQkJCS8vIERyb3AgV0VQIGZyYW1lIHdoZW4gUHJp
dmFjeUludm9rZWQgaXMgRkFMU0UKLQkJCQkJCQkJCWJyZWFrOwotCQkJCQkJCQl9CQkJCQkJCi0J
CQkJCQkJfS8vZWxzZSBpZgkocFJ4RC0+VTJNKQotCQkJCi0JCQkJCQkJLy8gVGhlIHRvdGFsIGF2
YWlsYWJsZSBwYXlsb2FkIHNob3VsZCBleGNsdWRlIDI0LWJ5dGUgODAyLjExIEhlYWRlcgotCQkJ
CQkJCS8vcGFja2V0U2l6ZSA9IHBSeEQtPkRhdGFCeXRlQ250IC0gTEVOR1RIXzgwMl8xMSAtIDQ7
CQkJCQkKLQotCQkJCQkJCS8vIEZpbmQgdGhlIFdQQSBrZXksIGVpdGhlciBHcm91cCBvciBQYWly
d2lzZSBLZXkKLQkJCQkJCQkvLyBBbHRob3VnaCB0aGUgZGF0YSBoYXMgYmVlbiBkZWNyeXB0ZWQg
YnkgQVNJQywKLQkJCQkJCQkvLyBkcml2ZXIgaGFzIHRvIGNhbGN1bGF0ZSB0aGUgUnhNSUMgd2hp
Y2ggcmVxdWlyZWQgdGhlIGtleS4KLQkJCQkJCQkvLyBUaGUgZmFpbGVkIGNhc2Ugc2hvdWxkIG5v
dCBoYXBwZW4uIElmIGl0IGRpZCwgZHJvcCBpdC4KLQkJCQkJCQlpZiAoKHBBZGFwdGVyLT5Qb3J0
Q2ZnLkNpcGhlckFsZyA9PSBDSVBIRVJfVEtJUCkgJiYgKHBIZWFkZXItPkNvbnRyb2xoZWFkLkZy
YW1lLldlcCkpCi0JCQkJCQkJewotCQkJCQkJCQlJTlQgCWlkeDsKLQotCQkJCQkJCQlwV3BhS2V5
ID0gKFBXUEFfS0VZKSBOVUxMOwotCQkJCQkJCQkvLyBGaXJzdCBsb29rdXAgdGhlIERBLCBpZiBp
dCdzIGEgZ3JvdXAgYWRkcmVzcywgdXNlIEdST1VQIGtleQotCQkJCQkJCQlpZiAocFJ4RC0+QmNh
c3QgfHwgcFJ4RC0+TWNhc3QpCi0JCQkJCQkJCXsKLSNpZmRlZiBCSUdfRU5ESUFOCi0JCQkJCQkJ
CQlpZHggPSAocFJ4RC0+SXYgJiAweGMwMDAwMDAwKSA+PiAzMDsKLSNlbHNlCi0JCQkJCQkJCQlp
ZHggPSAocFJ4RC0+SXYgJiAweDAwMDAwMGMwKSA+PiA2OwotI2VuZGlmCi0JCQkJCQkJCQlpZiAo
KHBBZGFwdGVyLT5Qb3J0Q2ZnLkdyb3VwS2V5W2lkeF0uS2V5TGVuICE9IDApICYmIAotCQkJCQkJ
CQkJCSgoSU5GUkFfT04ocEFkYXB0ZXIpICYmICgobWVtY21wKCZwSGVhZGVyLT5Db250cm9saGVh
ZC5BZGRyMiwgJnBBZGFwdGVyLT5Qb3J0Q2ZnLkJzc2lkLCA2KSA9PSAwKSkpIHx8Ci0JCQkJCQkJ
CQkJKEFESE9DX09OKHBBZGFwdGVyKSAmJiAoKG1lbWNtcCgmcEhlYWRlci0+QWRkcjMsICZwQWRh
cHRlci0+UG9ydENmZy5Cc3NpZCwgNikgPT0gMCkpKSkpCi0JCQkJCQkJCQl7Ci0JCQkJCQkJCQkJ
cFdwYUtleSA9IChQV1BBX0tFWSkgJnBBZGFwdGVyLT5Qb3J0Q2ZnLkdyb3VwS2V5W2lkeF07Ci0J
CQkJCQkJCQkJcFdwYUtleS0+VHlwZSA9IEdST1VQX0tFWTsKLQkJCQkJCQkJCQlEQkdQUklOVChS
VF9ERUJVR19JTkZPLCAiUnggVXNlIEdyb3VwIEtleSAlZFxuIiwgaWR4KTsKLQkJCQkJCQkJCX0K
LQkJCQkJCQkJfQotCQkJCQkJCQkvLyBUcnkgdG8gZmluZCB0aGUgUGFpcndpc2UgS2V5Ci0JCQkJ
CQkJCWVsc2UKLQkJCQkJCQkJewotCQkJCQkJCQkJZm9yIChpZHggPSAwOyBpZHggPCBQQUlSV0lT
RV9LRVlfTk87IGlkeCsrKQotCQkJCQkJCQkJewotCQkJCQkJCQkJCWlmICgoKG1lbWNtcCgmcEhl
YWRlci0+Q29udHJvbGhlYWQuQWRkcjIsIHBBZGFwdGVyLT5Qb3J0Q2ZnLlBhaXJ3aXNlS2V5W2lk
eF0uQnNzSWQsIDYpID09IDApKSAmJgotCQkJCQkJCQkJCQkocEFkYXB0ZXItPlBvcnRDZmcuUGFp
cndpc2VLZXlbaWR4XS5LZXlMZW4gIT0gMCkpCi0JCQkJCQkJCQkJewotCQkJCQkJCQkJCQlwV3Bh
S2V5ID0gKFBXUEFfS0VZKSAmcEFkYXB0ZXItPlBvcnRDZmcuUGFpcndpc2VLZXlbaWR4XTsKLQkJ
CQkJCQkJCQkJcFdwYUtleS0+VHlwZSA9IFBBSVJXSVNFX0tFWTsKLQkJCQkJCQkJCQkJREJHUFJJ
TlQoUlRfREVCVUdfVEVNUCwgIlJ4IFVzZSBQYWlyd2lzZSBLZXkgJWRcbiIsaWR4KTsKLQkJCQkJ
CQkJCQkJYnJlYWs7Ci0JCQkJCQkJCQkJfQotCQkJCQkJCQkJfQotCQkJCQkJCQkJLy8gVXNlIGRl
ZmF1bHQgR3JvdXAgS2V5IGlmIHRoZXJlIGlzIG5vIFBhaXJ3aXNlIGtleSBwcmVzZW50Ci0JCQkJ
CQkJCQlpZiAoKHBXcGFLZXkgPT0gTlVMTCkgJiYgKHBBZGFwdGVyLT5Qb3J0Q2ZnLkdyb3VwS2V5
W3BBZGFwdGVyLT5Qb3J0Q2ZnLkRlZmF1bHRLZXlJZF0uS2V5TGVuICE9IDApKQotCQkJCQkJCQkJ
ewotCQkJCQkJCQkJCXBXcGFLZXkgPSAoUFdQQV9LRVkpICZwQWRhcHRlci0+UG9ydENmZy5Hcm91
cEtleVtwQWRhcHRlci0+UG9ydENmZy5EZWZhdWx0S2V5SWRdOwotCQkJCQkJCQkJCXBXcGFLZXkt
PlR5cGUgPSBHUk9VUF9LRVk7Ci0JCQkJCQkJCQkJREJHUFJJTlQoUlRfREVCVUdfSU5GTywgIlJ4
IFVzZSBHcm91cCBLZXlcbiIpOwotCQkJCQkJCQkJfQotCQkJCQkJCQl9Ci0JCQkJCQkJCQotCQkJ
CQkJCQlpZiAocFdwYUtleSA9PSBOVUxMKQotCQkJCQkJCQkJYnJlYWs7Ci0JCQkJCQkJfQotCi0J
CQkJCQkJLy8gREEgaXMgYWx3YXlzIGFkZHJlc3MgMQotCQkJCQkJCXBEZXN0TWFjID0gKFBVQ0hB
UikgJihwSGVhZGVyLT5Db250cm9saGVhZC5BZGRyMSk7Ci0JCQkJCQkJLy8gU2VjbGVjdCBTQSBi
eSBkaWZmZXJlbnQgbW9kZQotCQkJCQkJCWlmIChJTkZSQV9PTihwQWRhcHRlcikpCi0JCQkJCQkJ
ewotCQkJCQkJCQkvLyBGb3IgaW5mcmFzdHJ1Y3R1cmUsIFNBIGlzIGFkZHJlc3MgMwotCQkJCQkJ
CQlwU3JjTWFjID0gKFBVQ0hBUikgJihwSGVhZGVyLT5BZGRyMyk7Ci0JCQkJCQkJfQotCQkJCQkJ
CWVsc2UKLQkJCQkJCQl7Ci0JCQkJCQkJCS8vIEZvciBJQlNTIG1vZGUsIFNBIGlzIGFkZHJlc3Mg
MgotCQkJCQkJCQlwU3JjTWFjID0gKFBVQ0hBUikgJihwSGVhZGVyLT5Db250cm9saGVhZC5BZGRy
Mik7Ci0JCQkJCQkJfQotCQkJCi0JCQkJCQkJLy8gUHJvY2VzcyBCcm9hZGNhc3QgJiBNdWx0aWNh
c3QgZGF0YSBmcmFtZQotCQkJCQkJCWlmIChwUnhELT5CY2FzdCB8fCBwUnhELT5NY2FzdCkKLQkJ
CQkJCQl7CQkJCQkJCQotCQkJCQkJCQkvLyBTYXZlIGVuY2FwYXR1cmF0aW9uIHN0YXJ0aW5nIHBv
aW50ZXIKLQkJCQkJCQkJcEVuY2FwID0gcERhdGE7Ci0KLQkJCQkJCQkJLy8gRm9yIFRLSVAgZnJh
bWUsIGNhbGN1bGF0ZSB0aGUgTUlDIHZhbHVlCi0JCQkJCQkJCWlmICgocEFkYXB0ZXItPlBvcnRD
ZmcuQ2lwaGVyQWxnID09IENJUEhFUl9US0lQKSAmJiAocEhlYWRlci0+Q29udHJvbGhlYWQuRnJh
bWUuV2VwKSkKLQkJCQkJCQkJewotCQkJCQkJCQkJaSA9IDA7Ci0KLQkJCQkJCQkJCWlmIChSVE1Q
VGtpcENvbXBhcmVNSUNWYWx1ZShwQWRhcHRlciwJCQkJCQkJCQkJCQkJCQkKLQkJCQkJCQkJCQkJ
CQkJCQlwRGF0YSwKLQkJCQkJCQkJCQkJCQkJCQlwRGVzdE1hYywKLQkJCQkJCQkJCQkJCQkJCQlw
U3JjTWFjLAotCQkJCQkJCQkJCQkJCQkJCXBXcGFLZXktPlJ4TWljLAotCQkJCQkJCQkJCQkJCQkJ
CVBhY2tldFNpemUpID09IEZBTFNFKQotCQkJCQkJCQkJewotCQkJCQkJCQkJCURCR1BSSU5UX1JB
VyhSVF9ERUJVR19FUlJPUiwiQnJvYWRDYXN0L011bHRpY2FzdCBSeCBNSUMgVmFsdWUgZXJyb3Jc
biIpOwotCQkJCQkJCQkJCVJUTVBSZXBvcnRNaWNFcnJvcihwQWRhcHRlciwgcFdwYUtleSk7Ci0J
CQkJCQkJCQkJU3RhdHVzID0gTkRJU19TVEFUVVNfRkFJTFVSRTsKLQkJCQkJCQkJCQlicmVhazsK
LQkJCQkJCQkJCX0KLQotCQkJCQkJCQkJLy8gU2Vjb25kLCBpbmNyZWFzZSBSeFRzYyB2YWx1ZSBm
b3IgbmV4dCB0cmFuc21pc3Npb24KLQkJCQkJCQkJCXdoaWxlICgrK3BXcGFLZXktPlJ4VHNjW2ld
ID09IDB4MCkKLQkJCQkJCQkJCXsKLQkJCQkJCQkJCQlpKys7Ci0JCQkJCQkJCQkJaWYgKGkgPT0g
NikKLQkJCQkJCQkJCQkJYnJlYWs7Ci0JCQkJCQkJCQl9Ci0JCQkJCQkJCQkvLyBSeCBUU0MgaGFz
IGRvbmUgb25lIGZ1bGwgY3ljbGUsIHNpbmNlIHJlLWtleSBpcyBkb25lIGJ5IHRyYW5zbWl0dGVy
Ci0JCQkJCQkJCQkvLyBXZSBkaWQgbm90IGRvIGFueXRoaW5nIGZvciBSeCBwYXRoCi0JCQkJCQkJ
CX0KLQkJCQkJCQkJLy8gRm9yIFdQQTIgbWl4ZXIgbW9kZSBQYWlyQ2lwaGVyID0gQUVTLCBHcm91
cENpcGhlciA9IFRLSVAKLQkJCQkJCQkJZWxzZSBpZiAoKHBBZGFwdGVyLT5Qb3J0Q2ZnLlBhaXJD
aXBoZXIgID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uM0VuYWJsZWQpICYmIAotCQkJCQkJCQkJCSAo
cEFkYXB0ZXItPlBvcnRDZmcuR3JvdXBDaXBoZXIgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24yRW5h
YmxlZCkgJiYKLQkJCQkJCQkJCQkgKHBIZWFkZXItPkNvbnRyb2xoZWFkLkZyYW1lLldlcCkpCi0J
CQkJCQkJCXsKLQkJCQkJCQkJCS8vVXNlIFNvZnR3YXJlIHRvIGRlY3JpcHQgVEtJUCBwYWNrZXQu
Ci0JCQkJCQkJCQlpZiAoUlRNUFNvZnREZWNyeXB0VEtJUChwQWRhcHRlciwgcFJ4Q29udGV4dC0+
VHJhbnNmZXJCdWZmZXIsIHBSeEQtPkRhdGFCeXRlQ250ICsgMTIsIHBBZGFwdGVyLT5Qb3J0Q2Zn
Lkdyb3VwS2V5KSkKLQkJCQkJCQkJCXsKLQkJCQkJCQkJCQlEQkdQUklOVChSVF9ERUJVR19JTkZP
LCAiV1BBMjo6UlRNUFNvZnREZWNyeXB0VEtJUCBDb21wbGV0ZVxuIik7Ci0JCQkJCQkJCQkJcERh
dGEgPSBwUnhDb250ZXh0LT5UcmFuc2ZlckJ1ZmZlciArIExFTkdUSF84MDJfMTE7Ci0JCQkJCQkJ
CQkJUGFja2V0U2l6ZSA9IHBSeEQtPkRhdGFCeXRlQ250IC0gOCAtIExFTkdUSF84MDJfMTE7ICAv
LzggYnl0ZXMgTUlDLCA0IGJ5dGVzIElDVgotCQkJCQkJCQkJCXBFbmNhcCA9IHBEYXRhOwkJCQkJ
CQkJCi0JCQkJCQkJCQl9Ci0JCQkJCQkJCX0KLQkJCQkJCQkKLQkJCQkJCQkJLy8gQ2hlY2sgZm9y
IGVuY2Fwc3VsYXRhaW9uIG90aGVyIHRoYW4gUkZDMTA0MiAmIEJyaWRnZSB0dW5uZWwKLQkJCQkJ
CQkJaWYgKChtZW1jbXAoU05BUF84MDJfMUgsIHBFbmNhcCwgNikgIT0gMCkgJiYgKG1lbWNtcChT
TkFQX0JSSURHRV9UVU5ORUwsIHBFbmNhcCwgNikgIT0gMCkpCi0JCQkJCQkJCXsKLQkJCQkJCQkJ
CUxMQ19MZW5bMF0gPSBQYWNrZXRTaXplIC8gMjU2OwotCQkJCQkJCQkJTExDX0xlblsxXSA9IFBh
Y2tldFNpemUgJSAyNTY7Ci0JCQkJCQkJCQlNQUtFXzgwMl8zX0hFQURFUihIZWFkZXI4MDJfMywg
cERlc3RNYWMsIHBTcmNNYWMsICgoUFVDSEFSKSBMTENfTGVuKSk7Ci0JCQkJCQkJCX0KLQkJCQkJ
CQkJZWxzZQotCQkJCQkJCQl7Ci0JCQkJCQkJCQkvLyBSZW1vdmUgODAyLjExIEggaGVhZGVyICYg
cmVjb25zdHJ1Y3QgODAyLjMgaGVhZGVyCi0JCQkJCQkJCQlwRGF0YSArPSAoTEVOR1RIXzgwMl8x
X0ggLSBMRU5HVEhfODAyXzNfVFlQRSk7Ci0JCQkJCQkJCQkvLyBQYXRjaCBmb3IgV0hRbCBvbmx5
LCB3aGljaCBkaWQgbm90IHR1cm4gb24gTmV0YmlvcyBidXQgdXNlIElQWCB3aXRoaW4gaXRzIHBh
eWxvYWQKLQkJCQkJCQkJCWlmICgoKG1lbWNtcChJUFgsIHBEYXRhLCAyKSA9PSAwKSB8fCAobWVt
Y21wKEFQUExFX1RBTEssIHBEYXRhLCAyKSA9PSAwKSkgJiYgKG1lbWNtcChTTkFQXzgwMl8xSCwg
cEVuY2FwLCA2KSA9PSAwKSkKLQkJCQkJCQkJCXsKLQkJCQkJCQkJCQlMTENfTGVuWzBdID0gUGFj
a2V0U2l6ZSAvIDI1NjsKLQkJCQkJCQkJCQlMTENfTGVuWzFdID0gUGFja2V0U2l6ZSAlIDI1NjsK
LQkJCQkJCQkJCQlwRGF0YSA9IHBEYXRhIC0gTEVOR1RIXzgwMl8xX0g7Ci0JCQkJCQkJCQkJTUFL
RV84MDJfM19IRUFERVIoSGVhZGVyODAyXzMsIHBEZXN0TWFjLCBwU3JjTWFjLCAoKFBVQ0hBUikg
TExDX0xlbikpOwotCQkJCQkJCQkJfQotCQkJCQkJCQkJZWxzZQotCQkJCQkJCQkJewotCQkJCQkJ
CQkJCU1BS0VfODAyXzNfSEVBREVSKEhlYWRlcjgwMl8zLCBwRGVzdE1hYywgcFNyY01hYywgcERh
dGEpOwotCQkJCQkJCQkJCS8vIFRoZSB0b3RhbCBhdmFpbGFibGUgcGF5bG9hZCBzaG91bGQgZXhj
bHVkZSAyNC1ieXRlIDgwMi4xMSBIZWFkZXIKLQkJCQkJCQkJCQkvLyBhbmQgOC1ieXRlIDgwMi4y
IExMQwotCQkJCQkJCQkJCVBhY2tldFNpemUgLT0gTEVOR1RIXzgwMl8xX0g7Ci0JCQkJCQkJCQl9
Ci0JCQkJCQkJCQotCQkJCQkJCQkJLy8gUG9pbnQgdG8gcmVhZCA4MDIuMyBwYXlsb2FkCi0JCQkJ
CQkJCQlwRGF0YSArPSBMRU5HVEhfODAyXzNfVFlQRTsKLQkJCQkJCQkJfQotCQkJCi0JCQkJCQkJ
CS8vIEZvciBtaW5pcG9ydFRyYW5zZmVyRGF0YQotCQkJCQkJCQlwQWRhcHRlci0+cFJ4RGF0YSA9
IHBEYXRhOwotCi0JCQkJCQkJCXBBZGFwdGVyLT5Qb3J0Q2ZnLkxlZENudGwuZlJ4QWN0aXZpdHkg
PSBUUlVFOyAvLyBmb3IgUlggQUNUSVZJVFkgTEVECi0KLQkJCQkJCQkJLy8gQWNrbm9sd2RnZSB1
cHBlciBsYXllciB0aGUgcmVjZWl2ZWQgZnJhbWUKLQkJCQkJCQkJLy8gQ29weSBoZWFkZXIgdG8g
aGVhZCBvZiBkYXRhIGZvciBjb21wYXRpYmlsaXR5IHdpdGggb2xkZXIgcHJvdG9jb2wKLQkJCQkJ
CQkJLy8gZWFyaWxlciB0aGFuIFcySwotCQkJCQkJCQkvL21lbWNweShwRGF0YSAtIExFTkdUSF84
MDJfMywgSGVhZGVyODAyXzMsIExFTkdUSF84MDJfMyk7Ci0JCQkJCQkJCS8vIEFja25vd2xlZGdl
IHVwcGVyIGxheWVyIHRoZSByZWNlaXZlZCBmcmFtZQotCQkJCQkJCQlpZiAoKHNrYiA9IGRldl9h
bGxvY19za2IoUGFja2V0U2l6ZSArIExFTkdUSF84MDJfMyArIDIpKSAhPSBOVUxMKQotCQkJCQkJ
CQl7Ci0JCQkJCQkJCSAgICBza2ItPmRldiA9IHBBZGFwdGVyLT5uZXQ7Ci0JCQkJCQkJCSAgICBz
a2JfcmVzZXJ2ZShza2IsIDIpOyAgICAvLyAxNiBieXRlIGFsaWduIHRoZSBJUCBoZWFkZXIKLQkJ
CQkJCQkJICAgIG1lbWNweShza2JfcHV0KHNrYiwgTEVOR1RIXzgwMl8zKSwgSGVhZGVyODAyXzMs
IExFTkdUSF84MDJfMyk7Ci0JCQkJCQkJCSAgICBtZW1jcHkoc2tiX3B1dChza2IsIFBhY2tldFNp
emUpLCBwRGF0YSwgUGFja2V0U2l6ZSk7Ci0JCQkJCQkJCSAgICBza2ItPnByb3RvY29sID0gZXRo
X3R5cGVfdHJhbnMoc2tiLCBwQWRhcHRlci0+bmV0KTsKLQkJCQkJCQkJICAgIG5ldGlmX3J4KHNr
Yik7Ci0JCQkJCQkJCSAgICBwQWRhcHRlci0+bmV0LT5sYXN0X3J4ID0gamlmZmllczsKLQkJCQkJ
CQkJICAgIHBBZGFwdGVyLT5uZXRzdGF0cy5yeF9wYWNrZXRzKys7Ci0JCQkJCQkJCX0KLQkJCQkJ
CQkJLy9tZW1zZXQoSGVhZGVyODAyXzMsIDAsIExFTkdUSF84MDJfMyk7Ci0JCQkJCQkJCURCR1BS
SU5UX1JBVyhSVF9ERUJVR19JTkZPLCAiISEhIEJyb2FkY2FzdCBFdGhlbmV0IHJ4IEluZGljYXRl
ZCAhISFcbiIpOwotCQkJCQkJCX0gLy9pZiAocFJ4RC0+QmNhc3QgfHwgcFJ4RC0+TWNhc3QpCQkJ
CQkJCQkJCQkKLQkJCQkJCQkvLyBCZWdpbiBwcm9jZXNzIHVuaWNhc3QgdG8gbWUgZnJhbWUKLQkJ
CQkJCQllbHNlIGlmIChwUnhELT5VMk0pIAotCQkJCQkJCXsKLQkJCQkJCQkJLy8gVXBkYXRlIFJ4
IGRhdGEgcmF0ZSBmaXJzdC4KLQkJCQkJCQkJaWYgKHBSeEQtPk9mZG0gPT0gMSkKLQkJCQkJCQkJ
ewotCQkJCQkJCQkJZm9yIChpID0gNDsgaSA8IDEyOyBpKyspCi0JCQkJCQkJCQl7Ci0JCQkJCQkJ
CQkJaWYgKHBSeEQtPkJCUjAgPT0gUGxjcFNpZ25hbFtpXSkKLQkJCQkJCQkJCQkJYnJlYWs7Ci0J
CQkJCQkJCQl9Ci0JCQkJCQkJCQlpZiAoaSA8IDEyKQotCQkJCQkJCQkJCXBBZGFwdGVyLT5MYXN0
UnhSYXRlID0gaTsKLQkJCQkJCQkJfQotCQkJCQkJCQllbHNlCS8vIHJlY2VpdmUgQ0NLIGVuY29k
aW5nCi0JCQkJCQkJCXsKLQkJCQkJCQkJCWlmIChwUnhELT5CQlIwID09IDEwKQotCQkJCQkJCQkJ
CXBBZGFwdGVyLT5MYXN0UnhSYXRlID0gMDsKLQkJCQkJCQkJCWVsc2UgaWYgKHBSeEQtPkJCUjAg
PT0gMjApCi0JCQkJCQkJCQkJcEFkYXB0ZXItPkxhc3RSeFJhdGUgPSAxOwotCQkJCQkJCQkJZWxz
ZSBpZiAocFJ4RC0+QkJSMCA9PSA1NSkKLQkJCQkJCQkJCQlwQWRhcHRlci0+TGFzdFJ4UmF0ZSA9
IDI7Ci0JCQkJCQkJCQllbHNlIGlmIChwUnhELT5CQlIwID09IDExMCkKLQkJCQkJCQkJCQlwQWRh
cHRlci0+TGFzdFJ4UmF0ZSA9IDM7Ci0JCQkJCQkJCX0KLQotCQkJCQkJCQkvLyBTZW5kIFBTLVBv
bGwgZm9yIEFQIHRvIHNlbmQgbmV4dCBkYXRhIGZyYW1lCQkJCQkKLQkJCQkJCQkJaWYgKChwSGVh
ZGVyLT5Db250cm9saGVhZC5GcmFtZS5Nb3JlRGF0YSkgJiYgSU5GUkFfT04ocEFkYXB0ZXIpICYm
IChwQWRhcHRlci0+UG9ydENmZy5Qc20gPT0gUFdSX1NBVkUpKQotCQkJCQkJCQl7Ci0JCQkJCQkJ
CQkvL1NlbmQgUFMtUG9sbCBmcmFtZQotCQkJCQkJCQkJRW5xdWV1ZVBzUG9sbChwQWRhcHRlcik7
Ci0JCQkJCQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgIlNlbmRpbmcgUFMtUE9MTFxuIik7
Ci0JCQkJCQkJCX0KLQotCQkJCQkJCQkvLwotCQkJCQkJCQkvLyBCZWdpbiBmcmFtZSBwcm9jZXNz
aW5nCi0JCQkJCQkJCS8vCi0JCQkJCQkJCWlmIChwSGVhZGVyLT5GcmFnID09IDApIC8vIEZpcnN0
IG9yIE9ubHkgZnJhZ21lbnQKLQkJCQkJCQkJewotCQkJCQkJCQkJLy8gRm9yIFRLSVAgZnJhbWUs
IGNhbGN1bGF0ZSB0aGUgTUlDIHZhbHVlCi0JCQkJCQkJCQlpZiAocEhlYWRlci0+Q29udHJvbGhl
YWQuRnJhbWUuTW9yZUZyYWcgPT0gRkFMU0UpCi0JCQkJCQkJCQl7Ci0JCQkJCQkJCQkJaWYgKChw
QWRhcHRlci0+UG9ydENmZy5DaXBoZXJBbGcgPT0gQ0lQSEVSX1RLSVApICYmIChwSGVhZGVyLT5D
b250cm9saGVhZC5GcmFtZS5XZXApKQotCQkJCQkJCQkJCXsKLQkJCQkJCQkJCQkJLy8KLQkJCQkJ
CQkJCQkJLy8gVXNlIFNvZnR3YXJlIHRvIGRlc2NyeXB0IGlmIHRyYW5zbWl0aW9uIGtleUlEIG5v
dCAwIG9uIEFESE9DIG1vZGUuCi0JCQkJCQkJCQkJCS8vIFNpbmNlIEFTSUMgYWxsb3dzIGhhcmR3
YXJlIGRlc2NyeXB0IG9ubHkgS2V5SUQ9MCBhcyB0aGVpciBwYWlyd2lzZWtleS4KLQkJCQkJCQkJ
CQkJLy8KLQkJCQkJCQkJCQkJLy8gQ2hlY2sgVTJNIGFuZCBLZXlJRCBub3QgcGFpcndpc2Uga2V5
LCB1c2VkIFNvZnR3YXJlIGRlY3lwdCAKLQkJCQkJCQkJCQkJLy8KLQkJCQkJCQkJCQkJS2V5SWR4
PSAqKChQVUNIQVIpKHBSeENvbnRleHQtPlRyYW5zZmVyQnVmZmVyICsgTEVOR1RIXzgwMl8xMSAr
IDMpKTsKLQkJCQkJCQkJCQkJS2V5SWR4ID0gS2V5SWR4ID4+IDY7Ci0KLQkJCQkJCQkJCQkJaWYo
S2V5SWR4ICE9IDApCi0JCQkJCQkJCQkJCXsKLQkJCQkJCQkJCQkJCS8vVXNlIFNvZnR3YXJlIHRv
IGRlY3JpcHQgVEtJUCBwYWNrZXQuCi0JCQkJCQkJCQkJCQlpZiAoUlRNUFNvZnREZWNyeXB0VEtJ
UChwQWRhcHRlciwgcFJ4Q29udGV4dC0+VHJhbnNmZXJCdWZmZXIsIHBSeEQtPkRhdGFCeXRlQ250
ICsgMTIsIHBBZGFwdGVyLT5Qb3J0Q2ZnLkdyb3VwS2V5KSkKLQkJCQkJCQkJCQkJCXsKLQkJCQkJ
CQkJCQkJCQlEQkdQUklOVChSVF9ERUJVR19URU1QLCAiVTJNIFVzZSBHcm91cGtleSBSVE1QU29m
dERlY3J5cHRUS0lQIENvbXBsZXRlXG4iKTsKLQkJCQkJCQkJCQkJCQlwRGF0YSA9IHBSeENvbnRl
eHQtPlRyYW5zZmVyQnVmZmVyICsgTEVOR1RIXzgwMl8xMTsKLQkJCQkJCQkJCQkJCQlQYWNrZXRT
aXplID0gcFJ4RC0+RGF0YUJ5dGVDbnQgLSA4IC0gTEVOR1RIXzgwMl8xMTsgIC8vOCBieXRlcyBN
SUMsIDQgYnl0ZXMgSUNWCi0JCQkJCQkJCQkJCQl9Ci0JCQkJCQkJCQkJCQllbHNlCi0JCQkJCQkJ
CQkJCQl7Ci0JCQkJCQkJCQkJCQkJREJHUFJJTlQoUlRfREVCVUdfVEVNUCwgIlJUTVBTb2Z0RGVj
cnlwdFRLSVAgZmFpbGVkXG4iKTsKLQkJCQkJCQkJCQkJCQlicmVhazsKLQkJCQkJCQkJCQkJCX0K
LQkJCQkJCQkJCQkJfQotCQkJCQkJCQkJCQllbHNlCi0JCQkJCQkJCQkJCXsKLQkJCQkJCQkJCQkJ
CWlmIChSVE1QVGtpcENvbXBhcmVNSUNWYWx1ZShwQWRhcHRlciwJCQkJCQkJCQkJCQkJCQkJCQkK
LQkJCQkJCQkJCQkJCQkJCQkJCQlwRGF0YSwKLQkJCQkJCQkJCQkJCQkJCQkJCQlwRGVzdE1hYywK
LQkJCQkJCQkJCQkJCQkJCQkJCQlwU3JjTWFjLAotCQkJCQkJCQkJCQkJCQkJCQkJCXBXcGFLZXkt
PlJ4TWljLC8vc3RldmVuOndoZXJlIGlzIHRoaXMgZnJvbSBpbiBSVDI1NzAKLQkJCQkJCQkJCQkJ
CQkJCQkJCQlQYWNrZXRTaXplKSA9PSBGQUxTRSkKLQkJCQkJCQkJCQkJCXsKLQkJCQkJCQkJCQkJ
CQlEQkdQUklOVF9SQVcoUlRfREVCVUdfRVJST1IsIlUyTSBSeCBNSUMgVmFsdWUgZXJyb3IxXG4i
KTsKLQkJCQkJCQkJCQkJCQlSVE1QUmVwb3J0TWljRXJyb3IocEFkYXB0ZXIsIHBXcGFLZXkpOwot
CQkJCQkJCQkJCQkJCVN0YXR1cyA9IE5ESVNfU1RBVFVTX0ZBSUxVUkU7Ci0JCQkJCQkJCQkJCQkJ
YnJlYWs7Ci0JCQkJCQkJCQkJCQl9Ci0JCQkJCQkJCQkJCX0KLQotCQkJCQkJCQkJCQkvLyBUT0RP
OgotCQkJCQkJCQkJCQkvLyBHZXR0aW5nIFJ4VFNDIGZyb20gUnggZGVzY3JpcHRvcgotCQkJCQkJ
CQkJCX0KLQkJCQkJCQkJCX0KLQkJCQkJCQkJCQotCQkJCQkJCQkJLy8gU2F2ZSBlbmNhcGF0dXJh
dGlvbiBzdGFydGluZyBwb2ludGVyCi0JCQkJCQkJCQlwRW5jYXAgPSBwRGF0YTsJCQkJCQkJCQot
CQkJCQkJCQkJcEFkYXB0ZXItPkZyYWdGcmFtZS5GbGFncyAmPSAweEZGRkZGRkZFOwotCQkJCQkJ
CQkJCi0JCQkJCQkJCQkvLyBDaGVjayBmb3IgZW5jYXBzdWxhdGFpb24gb3RoZXIgdGhhbiBSRkMx
MDQyICYgQnJpZGdlIHR1bm5lbAotCQkJCQkJCQkJaWYgKChtZW1jbXAoU05BUF84MDJfMUgsIHBF
bmNhcCwgNikgIT0gMCkgJiYgKG1lbWNtcChTTkFQX0JSSURHRV9UVU5ORUwsIHBFbmNhcCwgNikg
IT0gMCkpCi0JCQkJCQkJCQl7Ci0JCQkJCQkJCQkJTExDX0xlblswXSA9IFBhY2tldFNpemUgLyAy
NTY7Ci0JCQkJCQkJCQkJTExDX0xlblsxXSA9IFBhY2tldFNpemUgJSAyNTY7Ci0JCQkJCQkJCQkJ
TUFLRV84MDJfM19IRUFERVIoSGVhZGVyODAyXzMsIHBEZXN0TWFjLCBwU3JjTWFjLCAoKFBVQ0hB
UikgTExDX0xlbikpOwotCQkJCQkJCQkJfQotCQkJCQkJCQkJZWxzZQotCQkJCQkJCQkJewotCQkJ
CQkJCQkJCS8vIFJlbW92ZSA4MDIuMTEgSCBoZWFkZXIgJiByZWNvbnN0cnVjdCA4MDIuMyBoZWFk
ZXIKLQkJCQkJCQkJCQlwRGF0YSArPSAoTEVOR1RIXzgwMl8xX0ggLSBMRU5HVEhfODAyXzNfVFlQ
RSk7Ci0JCQkJCQkJCWlmICgobWVtY21wKEVBUE9MLCBwRGF0YSwgMikgPT0gMCkpCi0JCQkJCQkJ
CXsKLQkJCQkJCQkJCVBhY2tldFNpemUgKz0gTEVOR1RIXzgwMl8xMTsKLQkJCQkJCQlEQkdQUklO
VF9SQVcoUlRfREVCVUdfVEVNUCwgImluZGljYXRlZCBwYWNrZXQgRUFQT0wgIFBhY2tldFNpemUl
ZFxuIiwgUGFja2V0U2l6ZSk7Ly9zdGV2ZW46Zm9yIGRlYnVnCi0JCQkJCQkJCQkvLyBFbnF1ZXVl
IHRoaXMgZnJhbWUgdG8gTUxNRSBlbmdpbmUKLQkJCQkJCQkJCU1sbWVFbnF1ZXVlRm9yUmVjdigK
LQkJCQkJCQkJCQlwQWRhcHRlciwKLQkJCQkJCQkJCQkmcEFkYXB0ZXItPk1sbWUuUXVldWUsCQot
CQkJCQkJCQkJCShVQ0hBUilwUnhELT5CQlIxLCAKLQkJCQkJCQkJCQlQYWNrZXRTaXplICsgTEVO
R1RIXzgwMl8xX0gsIAotCQkJCQkJCQkJCXBNYW5hZ2UpOwkJCQkJCi0JCQkJCQkJCQlicmVhazsK
LQkJCQkJCQkJfQotCQkJCQkJCQkJCS8vIFBhdGNoIGZvciBXSFFsIG9ubHksIHdoaWNoIGRpZCBu
b3QgdHVybiBvbiBOZXRiaW9zIGJ1dCB1c2UgSVBYIHdpdGhpbiBpdHMgcGF5bG9hZAotCQkJCQkJ
CQkJCWlmICgoKChtZW1jbXAoSVBYLCBwRGF0YSwgMikgIT0gMCkgfHwgKG1lbWNtcChBUFBMRV9U
QUxLLCBwRGF0YSwgMikgIT0gMCkpICYmIG1lbWNtcChTTkFQXzgwMl8xSCwgcEVuY2FwLCA2KSA9
PSAwKSkKLQkJCQkJCQkJCQl7Ci0JCQkJCQkJCQkJCUxMQ19MZW5bMF0gPSBQYWNrZXRTaXplIC8g
MjU2OwotCQkJCQkJCQkJCQlMTENfTGVuWzFdID0gUGFja2V0U2l6ZSAlIDI1NjsKLQkJCQkJCQkJ
CQkJcERhdGEgPSBwRGF0YSAtIExFTkdUSF84MDJfMV9IOwotCQkJCQkJCQkJCQlNQUtFXzgwMl8z
X0hFQURFUihIZWFkZXI4MDJfMywgcERlc3RNYWMsIHBTcmNNYWMsICgoUFVDSEFSKSBMTENfTGVu
KSk7Ci0JCQkJCQkJCQkJfQotCQkJCQkJCQkJCWVsc2UKLQkJCQkJCQkJCQl7Ci0JCQkJCQkJCQkJ
CQkKLQkJCQkJCQkJCQkJTUFLRV84MDJfM19IRUFERVIoSGVhZGVyODAyXzMsIHBEZXN0TWFjLCBw
U3JjTWFjLCBwRGF0YSk7Ci0JCQkJCQkJCQkJCS8vIFRoZSB0b3RhbCBhdmFpbGFibGUgcGF5bG9h
ZCBzaG91bGQgZXhjbHVkZSAyNC1ieXRlIDgwMi4xMSBIZWFkZXIKLQkJCQkJCQkJCQkJLy8gYW5k
IDgtYnl0ZSA4MDIuMiBMTEMKLQkJCQkJCQkJCQkJUGFja2V0U2l6ZSAtPSBMRU5HVEhfODAyXzFf
SDsKLQkJCQkJCQkJCQkJbWVtY3B5KHBBZGFwdGVyLT5GcmFnRnJhbWUuSGVhZGVyX0xMQywgcEVu
Y2FwLCA4KTsKLQkJCQkJCQkJCQkJcEFkYXB0ZXItPkZyYWdGcmFtZS5GbGFncyB8PSAweDAxOwot
CQkJCQkJCQkJCX0KLQkJCQkJCQkJCQkKLQkJCQkJCQkJCQkvLyBQb2ludCB0byByZWFkIDgwMi4z
IHBheWxvYWQKLQkJCQkJCQkJCQlwRGF0YSArPSBMRU5HVEhfODAyXzNfVFlQRTsJCQkJCQkJCQot
CQkJCQkJCQkJfQotCQkJCQkJCQkJCQotCQkJCQkJCQkJLy8gT25lICYgVGhlIG9ubHkgZnJhZ21l
bnQKLQkJCQkJCQkJCWlmIChwSGVhZGVyLT5Db250cm9saGVhZC5GcmFtZS5Nb3JlRnJhZyA9PSBG
QUxTRSkKLQkJCQkJCQkJCXsKLQkJCQkJCQkJCQkvLyBGb3IgbWluaXBvcnRUcmFuc2ZlckRhdGEK
LQkJCQkJCQkJCQlwQWRhcHRlci0+cFJ4RGF0YSA9IHBEYXRhOwotCi0JCQkJCQkJCQkJcEFkYXB0
ZXItPlBvcnRDZmcuTGVkQ250bC5mUnhBY3Rpdml0eSA9IFRSVUU7IC8vIGZvciBSWCBBQ1RJVklU
WSBMRUQKLQotCQkJCQkJCQkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19JTkZPLCAiaW5kaWNhdGVk
IHBhY2tldCBzaXplID0gJWRcbiIsIFBhY2tldFNpemUpOy8vc3RldmVuOmZvciBkZWJ1ZwotCQkJ
CQkJCQkJCS8vIEFja25vbHdkZ2UgdXBwZXIgbGF5ZXIgdGhlIHJlY2VpdmVkIGZyYW1lCi0JCQkJ
CQkJCQkJLy9tZW1jcHkoKFBVQ0hBUikgcERhdGEgLSBMRU5HVEhfODAyXzMsIEhlYWRlcjgwMl8z
LCBMRU5HVEhfODAyXzMpOwotCi0JCQkJCQkJCQkJaWYgKChza2IgPSBkZXZfYWxsb2Nfc2tiKFBh
Y2tldFNpemUgKyBMRU5HVEhfODAyXzMgKyAyKSkgIT0gTlVMTCkKLQkJCQkJCQkJCQl7Ci0JCQkJ
CQkJCQkJICAgIHNrYi0+ZGV2ID0gcEFkYXB0ZXItPm5ldDsKLQkJCQkJCQkJCQkgICAgc2tiX3Jl
c2VydmUoc2tiLCAyKTsgICAgLy8gMTYgYnl0ZSBhbGlnbiB0aGUgSVAgaGVhZGVyCi0JCQkJCQkJ
CQkJICAgIG1lbWNweShza2JfcHV0KHNrYiwgTEVOR1RIXzgwMl8zKSwgSGVhZGVyODAyXzMsIExF
TkdUSF84MDJfMyk7Ci0JCQkJCQkJCQkJICAgIG1lbWNweShza2JfcHV0KHNrYiwgUGFja2V0U2l6
ZSksIHBEYXRhLCBQYWNrZXRTaXplKTsKLQkJCQkJCQkJCQkgICAgc2tiLT5wcm90b2NvbCA9IGV0
aF90eXBlX3RyYW5zKHNrYiwgcEFkYXB0ZXItPm5ldCk7Ci0JCQkJCQkJCQkJICAgIG5ldGlmX3J4
KHNrYik7Ci0JCQkJCQkJCQkJICAgIHBBZGFwdGVyLT5uZXQtPmxhc3RfcnggPSBqaWZmaWVzOwot
CQkJCQkJCQkJCSAgICBwQWRhcHRlci0+bmV0c3RhdHMucnhfcGFja2V0cysrOwotCQkJCQkJCQkJ
CX0KLQkJCQkJCQkJCQkvLyBJbmNyZWFzZSBnZW5lcmFsIGNvdW50ZXJzCi0JCQkJCQkJCQkJcEFk
YXB0ZXItPkNvdW50ZXJzLkdvb2RSZWNlaXZlcysrOwotCi0JCQkJCQkJCQkJREJHUFJJTlRfUkFX
KFJUX0RFQlVHX0lORk8sICIhISEgRnJhbWUgd2l0aG91dCBGcmFnbWVudCBJbmRpY2F0ZWQJISEh
XG4iKTsKLQkJCQkJCQkJCX0KLQkJCQkJCQkJCS8vIEZpcnN0IGZyYWdtZW50IG9mIGZyYWdtZW50
ZWQgZnJhbWVzCi0JCQkJCQkJCQllbHNlCi0JCQkJCQkJCQl7Ci0JCQkJCQkJCQkJbWVtY3B5KHBB
ZGFwdGVyLT5GcmFnRnJhbWUuQnVmZmVyLAlwRGF0YSwgUGFja2V0U2l6ZSk7Ci0JCQkJCQkJCQkJ
bWVtY3B5KHBBZGFwdGVyLT5GcmFnRnJhbWUuSGVhZGVyODAyXzMsIEhlYWRlcjgwMl8zLCBMRU5H
VEhfODAyXzMpOwotCQkJCQkJCQkJCXBBZGFwdGVyLT5GcmFnRnJhbWUuUnhTaXplCSA9IFBhY2tl
dFNpemU7Ci0JCQkJCQkJCQkJcEFkYXB0ZXItPkZyYWdGcmFtZS5TZXF1ZW5jZSA9IHBIZWFkZXIt
PlNlcXVlbmNlOwotCQkJCQkJCQkJCXBBZGFwdGVyLT5GcmFnRnJhbWUuTGFzdEZyYWcgPSBwSGVh
ZGVyLT5GcmFnOwkJLy8gU2hvdWxkIGJlIDAKLQkJCQkJCQkJCX0KLQkJCQkJCQkJfQotCQkJCQkJ
CQkvLyBNaWRkbGUgJiBFbmQgb2YgZnJhZ21lbnQgYnVyc3QgZnJhZ21lbnRzCi0JCQkJCQkJCWVs
c2UKLQkJCQkJCQkJewotCQkJCQkJCQkJLy8gTm8gTExDLVNOQVAgaGVhZGVyIGluIGV4Y2VwdCB0
aGUgZmlyc3QgZnJhZ21lbnQgZnJhbWUKLQotCQkJCQkJCQkJaWYgKChwSGVhZGVyLT5TZXF1ZW5j
ZSAhPSBwQWRhcHRlci0+RnJhZ0ZyYW1lLlNlcXVlbmNlKSB8fAotCQkJCQkJCQkJCShwSGVhZGVy
LT5GcmFnICE9IChwQWRhcHRlci0+RnJhZ0ZyYW1lLkxhc3RGcmFnICsgMSkpKQotCQkJCQkJCQkJ
ewotCQkJCQkJCQkJCS8vIEZyYWdtZW50IGlzIG5vdCB0aGUgc2FtZSBzZXF1ZW5jZSBvciBvdXQg
b2YgZnJhZ21lbnQgbnVtYmVyIG9yZGVyCi0JCQkJCQkJCQkJLy8gQ2xlYXIgRnJhZ21lbnQgZnJh
bWUgY29udGVudHMKLQkJCQkJCQkJCQltZW1zZXQoJnBBZGFwdGVyLT5GcmFnRnJhbWUsIDAsIHNp
emVvZihGUkFHTUVOVF9GUkFNRSkpOwotCQkJCQkJCQkJCVN0YXR1cyA9IE5ESVNfU1RBVFVTX0ZB
SUxVUkU7Ci0JCQkJCQkJCQkJYnJlYWs7Ci0JCQkJCQkJCQl9CQotCQkJCQkJCQkJZWxzZSBpZiAo
KHBBZGFwdGVyLT5GcmFnRnJhbWUuUnhTaXplICsgUGFja2V0U2l6ZSkgPiBNQVhfRlJBTUVfU0la
RSkKLQkJCQkJCQkJCXsKLQkJCQkJCQkJCQkvLyBGcmFnbWVudCBmcmFtZSBpcyB0b28gbGFyZ2Us
IGl0IGV4ZWVkcyB0aGUgbWF4aW11bSBmcmFtZSBzaXplLgotCQkJCQkJCQkJCS8vIFdlIGhhdmUg
dG8gZHJvcCBpdC4KLQkJCQkJCQkJCQkvLyBDbGVhciBGcmFnbWVudCBmcmFtZSBjb250ZW50cwot
CQkJCQkJCQkJCW1lbXNldCgmcEFkYXB0ZXItPkZyYWdGcmFtZSwgMCwgc2l6ZW9mKEZSQUdNRU5U
X0ZSQU1FKSk7Ci0JCQkJCQkJCQkJU3RhdHVzID0gTkRJU19TVEFUVVNfRkFJTFVSRTsKLQkJCQkJ
CQkJCQlicmVhazsKLQkJCQkJCQkJCX0KLQotCQkJCQkJCQkJbWVtY3B5KCZwQWRhcHRlci0+RnJh
Z0ZyYW1lLkJ1ZmZlcltwQWRhcHRlci0+RnJhZ0ZyYW1lLlJ4U2l6ZV0sIHBEYXRhLCBQYWNrZXRT
aXplKTsKLQkJCQkJCQkJCXBBZGFwdGVyLT5GcmFnRnJhbWUuUnhTaXplCSs9IFBhY2tldFNpemU7
Ci0JCQkJCQkJCQlwRGF0YSArPSBQYWNrZXRTaXplOwotCQkJCQkJCQkJcEFkYXB0ZXItPkZyYWdG
cmFtZS5MYXN0RnJhZyA9IHBIZWFkZXItPkZyYWc7CQkvLyBVcGRhdGUgZnJhZ21lbnQgbnVtYmVy
Ci0JCQkJCQkJCQkJCi0JCQkJCQkJCQkvLyBMYXN0IGZyYWdtZW50Ci0JCQkJCQkJCQlpZiAocEhl
YWRlci0+Q29udHJvbGhlYWQuRnJhbWUuTW9yZUZyYWcgPT0gRkFMU0UpCi0JCQkJCQkJCQl7Ci0J
CQkJCQkJCQkJLy8gRm9yIG1pbmlwb3J0VHJhbnNmZXJEYXRhCi0JCQkJCQkJCQkJcEFkYXB0ZXIt
PnBSeERhdGEgPSBwQWRhcHRlci0+RnJhZ0ZyYW1lLkJ1ZmZlcjsKLQotCQkJCQkJCQkJCXBBZGFw
dGVyLT5Qb3J0Q2ZnLkxlZENudGwuZlJ4QWN0aXZpdHkgPSBUUlVFOyAvLyBmb3IgUlggQUNUSVZJ
VFkgTEVECi0KLQkJCQkJCQkJCQkvLyBGb3IgVEtJUCBmcmFtZSwgY2FsY3VsYXRlIHRoZSBNSUMg
dmFsdWUKLQkJCQkJCQkJCQlpZiAoKHBBZGFwdGVyLT5Qb3J0Q2ZnLkNpcGhlckFsZyA9PSBDSVBI
RVJfVEtJUCkgJiYgKHBIZWFkZXItPkNvbnRyb2xoZWFkLkZyYW1lLldlcCkpCi0JCQkJCQkJCQkJ
ewotCQkJCQkJCQkJCQlpZiAocFdwYUtleSA9PSBOVUxMKQotCQkJCQkJCQkJCQl7Ci0JCQkJCQkJ
CQkJCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfRVJST1IsIk5vIG1hdGNoZWQgVEtJUCBpbiBkZWNy
eXB0aW9uIGRvbmUgY2FsY3VsYXRlIE1JQyByb3V0aW5lISEhXG4iKTsgCQkJCQkJCi0JCQkJCQkJ
CQkJCQlTdGF0dXMgPSBORElTX1NUQVRVU19GQUlMVVJFOwotCQkJCQkJCQkJCQkJYnJlYWs7Ci0J
CQkJCQkJCQkJCX0KLQotCQkJCQkJCQkJCQkvLwotCQkJCQkJCQkJCQkvLyBGb3IgdGhlIGxhc3Qg
ZnJhZ21lbnQsIHdlIGFsc28gbmVlZCB0byBjb3B5IHRoZSBNSUMgCi0JCQkJCQkJCQkJCS8vIHRv
IHRoZSBlbmQgb2YgcEFkYXB0ZXItPkZyYWdGcmFtZS5CdWZmZXIKLQkJCQkJCQkJCQkJLy8gZm9y
IFJUTVBUa2lwQ29tcGFyZU1JQ1ZhbHVlV2l0aExMQyB1c2VkLgotCQkJCQkJCQkJCQkvLwotCQkJ
CQkJCQkJCQlwQWRhcHRlci0+RnJhZ0ZyYW1lLlJ4U2l6ZSAtPSA4OyAvL1dlIG5lZWQgdG8gTWlu
dXMgTUlDWzhdIG9uIEZyYWdtZW50IGNhc2UuCi0JCQkJCQkJCQkJCQkKLQkJCQkJCQkJCQkJaWYg
KHBBZGFwdGVyLT5GcmFnRnJhbWUuRmxhZ3MgJiAweDAwMDAwMDAxKQotCQkJCQkJCQkJCQl7Ci0J
CQkJCQkJCQkJCQlpZiAoUlRNUFRraXBDb21wYXJlTUlDVmFsdWVXaXRoTExDKHBBZGFwdGVyLAkJ
CQkJCQkJCQkJCQkJCQkJCQkJCi0JCQkJCQkJCQkJCQkJCQkJCQkJCQlwQWRhcHRlci0+RnJhZ0Zy
YW1lLkhlYWRlcl9MTEMsCi0JCQkJCQkJCQkJCQkJCQkJCQkJCQlwQWRhcHRlci0+RnJhZ0ZyYW1l
LkJ1ZmZlciwKLQkJCQkJCQkJCQkJCQkJCQkJCQkJCXBEZXN0TWFjLAotCQkJCQkJCQkJCQkJCQkJ
CQkJCQkJcFNyY01hYywKLQkJCQkJCQkJCQkJCQkJCQkJCQkJCXBXcGFLZXktPlJ4TWljLAotCQkJ
CQkJCQkJCQkJCQkJCQkJCQkJcEFkYXB0ZXItPkZyYWdGcmFtZS5SeFNpemUpID09IEZBTFNFKQot
CQkJCQkJCQkJCQkJewotCQkJCQkJCQkJCQkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX0VSUk9SLCJS
eCBNSUMgVmFsdWUgZXJyb3IgMlxuIik7CQkJCQkJCQotCQkJCQkJCQkJCQkJUlRNUFJlcG9ydE1p
Y0Vycm9yKHBBZGFwdGVyLCBwV3BhS2V5KTsKLQkJCQkJCQkJCQkJCVN0YXR1cyA9IE5ESVNfU1RB
VFVTX0ZBSUxVUkU7Ci0JCQkJCQkJCQkJCQlicmVhazsKLQkJCQkJCQkJCQkJCX0KLQkJCQkJCQkJ
CQkJfQotCQkJCQkJCQkJCQllbHNlCi0JCQkJCQkJCQkJCXsKLQkJCQkJCQkJCQkJCWlmIChSVE1Q
VGtpcENvbXBhcmVNSUNWYWx1ZShwQWRhcHRlciwJCQkJCQkJCQkJCQkJCQkJCQkKLQkJCQkJCQkJ
CQkJCQkJCQkJCQlwQWRhcHRlci0+RnJhZ0ZyYW1lLkJ1ZmZlciwKLQkJCQkJCQkJCQkJCQkJCQkJ
CQlwRGVzdE1hYywKLQkJCQkJCQkJCQkJCQkJCQkJCQlwU3JjTWFjLAotCQkJCQkJCQkJCQkJCQkJ
CQkJCXBXcGFLZXktPlJ4TWljLAotCQkJCQkJCQkJCQkJCQkJCQkJCXBBZGFwdGVyLT5GcmFnRnJh
bWUuUnhTaXplKSA9PSBGQUxTRSkKLQkJCQkJCQkJCQkJCXsKLQkJCQkJCQkJCQkJCQlEQkdQUklO
VF9SQVcoUlRfREVCVUdfRVJST1IsIlJ4IE1JQyBWYWx1ZSBlcnJvciAyXG4iKTsJCQkJCQkJCi0J
CQkJCQkJCQkJCQkJUlRNUFJlcG9ydE1pY0Vycm9yKHBBZGFwdGVyLCBwV3BhS2V5KTsKLQkJCQkJ
CQkJCQkJCQlTdGF0dXMgPSBORElTX1NUQVRVU19GQUlMVVJFOwotCQkJCQkJCQkJCQkJCWJyZWFr
OwotCQkJCQkJCQkJCQkJfQotCQkJCQkJCQkJCQl9Ci0JCQkJCQkJCQkJfQkJCi0KLQkJCQkJCQkJ
CQkvLyBBY2tub2x3ZGdlIHVwcGVyIGxheWVyIHRoZSByZWNlaXZlZCBmcmFtZQotCSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChza2IgPSBkZXZfYWxsb2Nfc2tiKHBBZGFwdGVy
LT5GcmFnRnJhbWUuUnhTaXplICsgTEVOR1RIXzgwMl8zICsgMikpICE9IE5VTEwpCi0JICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0KLQkgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBza2ItPmRldiA9IHBBZGFwdGVyLT5uZXQ7Ci0JICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2tiX3Jlc2VydmUoc2tiLCAyKTsgICAgLyogMTYgYnl0ZSBhbGln
biB0aGUgSVAgaGVhZGVyICovCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bWVtY3B5KHNrYl9wdXQoc2tiLCBMRU5HVEhfODAyXzMpLCAoUFZPSUQpIHBBZGFwdGVyLT5GcmFn
RnJhbWUuSGVhZGVyODAyXzMsIExFTkdUSF84MDJfMyk7Ci0JICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbWVtY3B5KHNrYl9wdXQoc2tiLCBwQWRhcHRlci0+RnJhZ0ZyYW1lLlJ4
U2l6ZSksIChQVk9JRCkgJnBBZGFwdGVyLT5GcmFnRnJhbWUuQnVmZmVyWzBdLCBwQWRhcHRlci0+
RnJhZ0ZyYW1lLlJ4U2l6ZSk7Ci0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgcEFkYXB0ZXItPm5ldCk7Ci0JICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0aWZfcngoc2tiKTsKLQkgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwQWRhcHRlci0+bmV0LT5sYXN0X3J4ID0gamlm
ZmllczsKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwQWRhcHRlci0+bmV0
c3RhdHMucnhfcGFja2V0cysrOwotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQot
CQkJCQkJCQkJCS8vIEluY3JlYXNlIGdlbmVyYWwgY291bnRlcnMKLQkJCQkJCQkJCQlwQWRhcHRl
ci0+Q291bnRlcnMuR29vZFJlY2VpdmVzKys7Ci0KLQkJCQkJCQkJCQkvLyBDbGVhciBGcmFnbWVu
dCBmcmFtZSBjb250ZW50cwotCQkJCQkJCQkJCS8vbWVtc2V0KCZwQWRhcHRlci0+RnJhZ0ZyYW1l
LCAwLCBzaXplb2YoRlJBR01FTlRfRlJBTUUpKTsKLQkJCQkJCQkJCQlEQkdQUklOVF9SQVcoUlRf
REVCVUdfSU5GTywgIiEhISBGcmFtZSB3aXRoIEZyYWdtZW50IEluZGljYXRlZCAhISFcbiIpOwot
CQkJCQkJCQkJfSAvL0xhc3QgZnJhZ21lbnQgLy9pZiAocEhlYWRlci0+Q29udHJvbGhlYWQuRnJh
bWUuTW9yZUZyYWcgPT0gRkFMU0UpCi0JCQkJCQkJCX0gLy9NaWRkbGUgJiBFbmQgb2YgZnJhZ21l
bnQgYnVyc3QgZnJhZ21lbnRzCi0JCQkJCQkJfS8vZWxzZSBpZiAocFJ4RC0+VTJNKQotCQkJCQkJ
CWJyZWFrOwotCi0JCQkJCQljYXNlIEJUWVBFX01HTVQ6Ci0JCQkJCQkJLy8gRW5xdWV1ZSB0aGlz
IGZyYW1lIHRvIE1MTUUgZW5naW5lCi0JCQkJCQkJTWxtZUVucXVldWVGb3JSZWN2KHBBZGFwdGVy
LAotCQkJCQkJCQkJCQkJJnBBZGFwdGVyLT5NbG1lLlF1ZXVlLAotCQkJCQkJCQkJCQkJKFVDSEFS
KXBSeEQtPkJCUjEsCi0JCQkJCQkJCQkJCQlwUnhELT5EYXRhQnl0ZUNudCAtIDQsCi0JCQkJCQkJ
CQkJCQlwRGF0YSk7Ci0JCQkJCQkJYnJlYWs7Ci0JCQkJCi0JCQkJCQljYXNlIEJUWVBFX0NOVEw6
Ci0JCQkJCQkJLy8gSWdub3JlID8/PwotCQkJCQkJCWJyZWFrOwotCQkJCQotCQkJCQkJZGVmYXVs
dAk6Ci0JCQkJCQkJYnJlYWs7Ci0JCQkJCX0vL3N3aXRjaCAocEhlYWRlci0+Q29udHJvbGhlYWQu
RnJhbWUuVHlwZSkJCi0JCQkJcEFkYXB0ZXItPlJhbGlua0NvdW50ZXJzLlJ4Q291bnQgKys7Ci0K
LQkJCX0KLQkJCWVsc2UgaWYgKFN0YXR1cyA9PSBORElTX1NUQVRVU19SRVNFVCkKLQkJCXsKLQkJ
CQlSVFVTQkVucXVldWVJbnRlcm5hbENtZChwQWRhcHRlciwgUlRfT0lEX1VTQl9SRVNFVF9CVUxL
X0lOKTsKLQkJCQlyZXR1cm47Ci0JCQl9Ci0JCX0KLQotCQlwUnhDb250ZXh0LT5JblVzZSA9IEZB
TFNFOwotCi0JaWYgKCghUlRNUF9URVNUX0ZMQUcocEFkYXB0ZXIsIGZSVE1QX0FEQVBURVJfUkVT
RVRfSU5fUFJPR1JFU1MpKSAmJgotCQkoIVJUTVBfVEVTVF9GTEFHKHBBZGFwdGVyLCBmUlRNUF9B
REFQVEVSX0JVTEtJTl9SRVNFVCkpICYmCi0JCSghUlRNUF9URVNUX0ZMQUcocEFkYXB0ZXIsIGZS
VE1QX0FEQVBURVJfUkFESU9fT0ZGKSkgJiYKLQkJKCFSVE1QX1RFU1RfRkxBRyhwQWRhcHRlciwg
ZlJUTVBfQURBUFRFUl9IQUxUX0lOX1BST0dSRVNTKSkgJiYKLQkJKCFSVE1QX1RFU1RfRkxBRyhw
QWRhcHRlciwgZlJUTVBfQURBUFRFUl9SRU1PVkVfSU5fUFJPR1JFU1MpKSkKLQkJCVJUVVNCQnVs
a1JlY2VpdmUocEFkYXB0ZXIpOwotCX13aGlsZSgwKTsKLQkKLQotfQotLyoKLQk9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLQkKLQlSb3V0aW5lIERlc2NyaXB0aW9uOgotCi0JQXJndW1lbnRzOgotCi0JUmV0dXJu
IFZhbHVlOgotCi0JSVJRTCA9IAotCQotCU5vdGU6Ci0JCi0JPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qLwot
Vk9JRAlSVFVTQkRlcXVldWVNTE1FUGFja2V0KAotCUlOCVBSVDI1NzBBREFQVEVSCXBBZGFwdGVy
KQotewotCVBNR01UX1NUUlVDCQlwTWdtdDsKLQotCURCR1BSSU5UKFJUX0RFQlVHX0lORk8sICJS
VFVTQkRlcXVldWVNTE1FUGFja2V0XG4iKTsKLQlOZGlzQWNxdWlyZVNwaW5Mb2NrKCZwQWRhcHRl
ci0+TUxNRVdhaXRRdWV1ZUxvY2spOwotCXdoaWxlICgocEFkYXB0ZXItPlBvcE1nbXRJbmRleCAh
PSBwQWRhcHRlci0+UHVzaE1nbXRJbmRleCkgfHwgKGF0b21pY19yZWFkKCZwQWRhcHRlci0+TWdt
dFF1ZXVlU2l6ZSkgPiAwKSkKLQl7Ci0JCXBNZ210ID0gJnBBZGFwdGVyLT5NZ210UmluZ1twQWRh
cHRlci0+UG9wTWdtdEluZGV4XTsKLQotCQlpZiAoUlRVU0JGcmVlRGVzY3JpcHRvclJlcXVlc3Qo
cEFkYXB0ZXIsIFBSSU9fUklORywgMSkgPT0gTkRJU19TVEFUVVNfU1VDQ0VTUykKLQkJewotCQkJ
YXRvbWljX2RlYygmcEFkYXB0ZXItPk1nbXRRdWV1ZVNpemUpOwotCQkJcEFkYXB0ZXItPlBvcE1n
bXRJbmRleCA9IChwQWRhcHRlci0+UG9wTWdtdEluZGV4ICsgMSkgJSBNR01UX1JJTkdfU0laRTsK
LQkJCU5kaXNSZWxlYXNlU3BpbkxvY2soJnBBZGFwdGVyLT5NTE1FV2FpdFF1ZXVlTG9jayk7Ci0K
LQkJCVJUVVNCTWxtZUhhcmRUcmFuc21pdChwQWRhcHRlciwgcE1nbXQpOwotCi0JCQlNbG1lRnJl
ZU1lbW9yeShwQWRhcHRlciwgcE1nbXQtPnBCdWZmZXIpOwotCQkJcE1nbXQtPnBCdWZmZXIgPSBO
VUxMOwotCQkJcE1nbXQtPlZhbGlkID0gRkFMU0U7Ci0KLQkJCU5kaXNBY3F1aXJlU3BpbkxvY2so
JnBBZGFwdGVyLT5NTE1FV2FpdFF1ZXVlTG9jayk7Ci0JCX0KLQkJZWxzZQotCQl7Ci0JCQlEQkdQ
UklOVChSVF9ERUJVR19UUkFDRSwgIlJUVVNCRGVxdWV1ZU1MTUVQYWNrZXQ6OlByaW9SaW5nRmly
c3RJbmRleCA9ICVkLCBQcmlvUmluZ1R4Q250ID0gJWQsIFBvcE1nbXRJbmRleCA9ICVkLCBQdXNo
TWdtdEluZGV4ID0gJWQsIE5leHRNTE1FSW5kZXggPSAlZFxuIiwgCi0JCQlwQWRhcHRlci0+UHJp
b1JpbmdGaXJzdEluZGV4LCBwQWRhcHRlci0+UHJpb1JpbmdUeENudCwgCi0JCQlwQWRhcHRlci0+
UG9wTWdtdEluZGV4LCBwQWRhcHRlci0+UHVzaE1nbXRJbmRleCwgcEFkYXB0ZXItPk5leHRNTE1F
SW5kZXgpOwkKLQkJCWJyZWFrOwotCQl9Ci0JfQotCU5kaXNSZWxlYXNlU3BpbkxvY2soJnBBZGFw
dGVyLT5NTE1FV2FpdFF1ZXVlTG9jayk7Ci19ICAgIAotCi0vKgotCT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
CQotCVJvdXRpbmUgRGVzY3JpcHRpb246Ci0KLQlBcmd1bWVudHM6Ci0KLQlSZXR1cm4gVmFsdWU6
Ci0KLQlJUlFMID0gCi0JCi0JTm90ZToKLQkKLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSovCi1WT0lECVJU
VVNCQ2xlYW5VcE1MTUVXYWl0UXVldWUoCi0JSU4JUFJUMjU3MEFEQVBURVIJcEFkYXB0ZXIpCi17
Ci0JUE1HTVRfU1RSVUMJCXBNZ210OwotCi0JREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICItLS0+
Q2xlYW5VcE1MTUVXYWl0UXVldWVcbiIpOwotCi0JTmRpc0FjcXVpcmVTcGluTG9jaygmcEFkYXB0
ZXItPk1MTUVXYWl0UXVldWVMb2NrKTsKLQl3aGlsZSAocEFkYXB0ZXItPlBvcE1nbXRJbmRleCAh
PSBwQWRhcHRlci0+UHVzaE1nbXRJbmRleCkKLQl7Ci0JCXBNZ210ID0gKFBNR01UX1NUUlVDKSZw
QWRhcHRlci0+TWdtdFJpbmdbcEFkYXB0ZXItPlBvcE1nbXRJbmRleF07Ci0JCU1sbWVGcmVlTWVt
b3J5KHBBZGFwdGVyLCBwTWdtdC0+cEJ1ZmZlcik7Ci0JCXBNZ210LT5wQnVmZmVyID0gTlVMTDsK
LQkJcE1nbXQtPlZhbGlkID0gRkFMU0U7Ci0JCWF0b21pY19kZWMoJnBBZGFwdGVyLT5NZ210UXVl
dWVTaXplKTsKLQotCQlwQWRhcHRlci0+UG9wTWdtdEluZGV4Kys7Ci0JCWlmIChwQWRhcHRlci0+
UG9wTWdtdEluZGV4ID49IE1HTVRfUklOR19TSVpFKQotCQl7Ci0JCQlwQWRhcHRlci0+UG9wTWdt
dEluZGV4ID0gMDsKLQkJfQotCX0KLQlOZGlzUmVsZWFzZVNwaW5Mb2NrKCZwQWRhcHRlci0+TUxN
RVdhaXRRdWV1ZUxvY2spOwotCi0JREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICI8LS0tQ2xlYW5V
cE1MTUVXYWl0UXVldWVcbiIpOwotfQotCi0KLS8qCi0JPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLQlSb3V0
aW5lCURlc2NyaXB0aW9uOgotCQlBUEkgZm9yIE1MTUUgdG8gdHJhbnNtaXQgbWFuYWdlbWVudCBm
cmFtZSB0byBBUCAoQlNTIE1vZGUpCi0Jb3Igc3RhdGlvbiAoSUJTUyBNb2RlKQotCQotCUFyZ3Vt
ZW50czoKLQkJcEFkYXB0ZXIJUG9pbnRlcgl0byBvdXIgYWRhcHRlcgotCQlCdWZmZXIJCVBvaW50
ZXIgdG8gIG1lbW9yeSBvZiBvdXRnb2luZyBmcmFtZQotCQlMZW5ndGgJCVNpemUgb2Ygb3V0Z29p
bmcgbWFuYWdlbWVudCBmcmFtZQotCQkKLQlSZXR1cm4gVmFsdWU6Ci0JCU5ESVNfU1RBVFVTX0ZB
SUxVUkUKLQkJTkRJU19TVEFUVVNfUEVORElORwotCQlORElTX1NUQVRVU19TVUNDRVNTCi0KLQlO
b3RlOgotCQotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotKi8KLVZPSUQJTWluaXBvcnRNTVJlcXVlc3QoCi0J
SU4JUFJUMjU3MEFEQVBURVIJcEFkYXB0ZXIsCi0JSU4JUFZPSUQJCQlwQnVmZmVyLAotCUlOCVVM
T05HCQkJTGVuZ3RoKQotewotCi0JaWYgKHBCdWZmZXIpCi0JewotCQlQTUdNVF9TVFJVQwlwTWdt
dDsKLQotCQkvLyBDaGVjayBtYW5hZ2VtZW50IHJpbmcgZnJlZSBhdmFsaWFiaWxpdHkKLQkJTmRp
c0FjcXVpcmVTcGluTG9jaygmcEFkYXB0ZXItPk1MTUVXYWl0UXVldWVMb2NrKTsKLQkJcE1nbXQg
PSAoUE1HTVRfU1RSVUMpJnBBZGFwdGVyLT5NZ210UmluZ1twQWRhcHRlci0+UHVzaE1nbXRJbmRl
eF07Ci0JCS8vIFRoaXMgbWFuYWdlbWVudCBjZWxsIGhhcyBiZWVuIG9jY3VwaWVkCi0JCWlmIChw
TWdtdC0+VmFsaWQgPT0gVFJVRSkKLQkJewotCQkJTmRpc1JlbGVhc2VTcGluTG9jaygmcEFkYXB0
ZXItPk1MTUVXYWl0UXVldWVMb2NrKTsKLQkJCU1sbWVGcmVlTWVtb3J5KHBBZGFwdGVyLCBwQnVm
ZmVyKTsKLQkJCXBBZGFwdGVyLT5SYWxpbmtDb3VudGVycy5NZ210UmluZ0Z1bGxDb3VudCsrOwot
CQkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX1dBUk4sICJNaW5pcG9ydE1NUmVxdWVzdCAoZXJyb3I6
OiBNZ210UmluZyBmdWxsKVxuIik7Ci0JCX0KLQkJLy8gSW5zZXJ0IHRoaXMgcmVxdWVzdCBpbnRv
IHNvZnR3YXJlIG1hbmFnZW1uZXQgcmluZwotCQllbHNlCi0JCXsKLQkJCXBNZ210LT5wQnVmZmVy
ID0gcEJ1ZmZlcjsKLQkJCXBNZ210LT5MZW5ndGggID0gTGVuZ3RoOwotCQkJcE1nbXQtPlZhbGlk
ICAgPSBUUlVFOwotCQkJcEFkYXB0ZXItPlB1c2hNZ210SW5kZXgrKzsKLQkJCWF0b21pY19pbmMo
JnBBZGFwdGVyLT5NZ210UXVldWVTaXplKTsKLQkJCWlmIChwQWRhcHRlci0+UHVzaE1nbXRJbmRl
eCA+PSBNR01UX1JJTkdfU0laRSkKLQkJCXsKLQkJCQlwQWRhcHRlci0+UHVzaE1nbXRJbmRleCA9
IDA7Ci0JCQl9Ci0JCQlOZGlzUmVsZWFzZVNwaW5Mb2NrKCZwQWRhcHRlci0+TUxNRVdhaXRRdWV1
ZUxvY2spOwotCQl9Ci0JfQotCWVsc2UKLQkJREJHUFJJTlQoUlRfREVCVUdfV0FSTiwgIk1pbmlw
b3J0TU1SZXF1ZXN0IChlcnJvcjo6IE5VTEwgbXNnKVxuIik7Ci0JCi0JUlRVU0JEZXF1ZXVlTUxN
RVBhY2tldChwQWRhcHRlcik7Ci0JCi0JLy8gSWYgcEFkYXB0ZXItPlByaW9SaW5nVHhDbnQgaXMg
bGFyZ2VyIHRoYW4gMCwgdGhpcyBtZWFucyB0aGF0IHByaW9fcmluZyBoYXZlIHNvbWV0aGluZyB0
byB0cmFuc21pdC4KLQkvLyBUaGVuIGNhbGwgS2lja0J1bGtPdXQgdG8gdHJhbnNtaXQgaXQKLQlp
ZiAocEFkYXB0ZXItPlByaW9SaW5nVHhDbnQgPiAwKQotCXsKLQkJREJHUFJJTlQoUlRfREVCVUdf
SU5GTywgIk1pbmlwb3J0TU1SZXF1ZXN0OjpQcmlvUmluZ0ZpcnN0SW5kZXggPSAlZCwgUHJpb1Jp
bmdUeENudCA9ICVkLCBQb3BNZ210SW5kZXggPSAlZCwgUHVzaE1nbXRJbmRleCA9ICVkLCBOZXh0
TUxNRUluZGV4ID0gJWRcbiIsIAotCQlwQWRhcHRlci0+UHJpb1JpbmdGaXJzdEluZGV4LCBwQWRh
cHRlci0+UHJpb1JpbmdUeENudCwgCi0JCXBBZGFwdGVyLT5Qb3BNZ210SW5kZXgsIHBBZGFwdGVy
LT5QdXNoTWdtdEluZGV4LCBwQWRhcHRlci0+TmV4dE1MTUVJbmRleCk7CQotCi0JCUFzaWNGb3Jj
ZVdha2V1cChwQWRhcHRlcik7Ci0JCVJUVVNCS2lja0J1bGtPdXQocEFkYXB0ZXIpOwotCX0KLQkK
LX0KLQotLyoKLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotCVJvdXRpbmUJRGVzY3JpcHRpb246Ci0JCVNl
YXJjaCB0dXBsZSBjYWNoZSBmb3IgcmVjZWl2ZSBkdXBsaWNhdGUgZnJhbWUgZnJvbSB1bmljYXN0
IGZyYW1lcy4KLQkJCi0JQXJndW1lbnRzOgotCQlwQWRhcHRlcgkJUG9pbnRlcgl0byBvdXIgYWRh
cHRlcgotCQlwSGVhZGVyCQkJODAyLjExIGhlYWRlciBvZiByZWNlaXZpbmcgZnJhbWUKLQkJCi0J
UmV0dXJuIFZhbHVlOgotCQlUUlVFCQkJZm91bmQgbWF0Y2hlZCB0dXBsZSBjYWNoZQotCQlGQUxT
RQkJCW5vIG1hdGNoZWQgZm91bmQKLQotCU5vdGU6Ci0JCi0JPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qLwot
Qk9PTEVBTglSVE1QU2VhcmNoVHVwbGVDYWNoZSgKLQlJTglQUlQyNTcwQURBUFRFUglwQWRhcHRl
ciwKLQlJTglQSEVBREVSXzgwMl8xMQlwSGVhZGVyKQotewotCUlOVAlJbmRleDsKLQotCWZvciAo
SW5kZXggPSAwOyBJbmRleCA8IE1BWF9DTElFTlQ7IEluZGV4KyspCi0JewotCQlpZiAocEFkYXB0
ZXItPlR1cGxlQ2FjaGVbSW5kZXhdLlZhbGlkID09IEZBTFNFKQotCQkgICAgY29udGludWU7Ci0J
CQotCQlpZiAoKG1lbWNtcCgmcEFkYXB0ZXItPlR1cGxlQ2FjaGVbSW5kZXhdLk1BQywgJnBIZWFk
ZXItPkNvbnRyb2xoZWFkLkFkZHIyLCA2KT09IDApICYmCi0JCQkocEFkYXB0ZXItPlR1cGxlQ2Fj
aGVbSW5kZXhdLlNlcXVlbmNlID09IHBIZWFkZXItPlNlcXVlbmNlKSAmJgotCQkJKHBBZGFwdGVy
LT5UdXBsZUNhY2hlW0luZGV4XS5GcmFnID09IHBIZWFkZXItPkZyYWcpKQotCQl7Ci0JCQlyZXR1
cm4gKFRSVUUpOwotCQl9Ci0JfQotCXJldHVybiAoRkFMU0UpOwotfQotCi0vKgotCT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotCi0JUm91dGluZQlEZXNjcmlwdGlvbjoKLQkJVXBkYXRlIHR1cGxlIGNhY2hlIGZv
ciBuZXcgcmVjZWl2ZWQgdW5pY2FzdCBmcmFtZXMuCi0JCQotCUFyZ3VtZW50czoKLQkJcEFkYXB0
ZXIJCVBvaW50ZXIJdG8gb3VyIGFkYXB0ZXIKLQkJcEhlYWRlcgkJCTgwMi4xMSBoZWFkZXIgb2Yg
cmVjZWl2aW5nIGZyYW1lCi0JCQotCVJldHVybiBWYWx1ZToKLQkJTm9uZQotCQkKLQlOb3RlOgot
CQotCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotKi8KLVZPSUQJUlRNUFVwZGF0ZVR1cGxlQ2FjaGUoCi0JSU4J
UFJUMjU3MEFEQVBURVIJcEFkYXB0ZXIsCi0JSU4JUEhFQURFUl84MDJfMTEJcEhlYWRlcikKLXsK
LQlVQ0hBUglJbmRleDsKLQotCWZvciAoSW5kZXggPSAwOyBJbmRleCA8IE1BWF9DTElFTlQ7IElu
ZGV4KyspCi0JewotCQlpZiAocEFkYXB0ZXItPlR1cGxlQ2FjaGVbSW5kZXhdLlZhbGlkID09IEZB
TFNFKQotCQl7Ci0JCQkvLyBBZGQgbmV3IGVudHJ5Ci0JCQltZW1jcHkoJnBBZGFwdGVyLT5UdXBs
ZUNhY2hlW0luZGV4XS5NQUMsICZwSGVhZGVyLT5Db250cm9saGVhZC5BZGRyMiwgNik7Ci0JCQlw
QWRhcHRlci0+VHVwbGVDYWNoZVtJbmRleF0uU2VxdWVuY2UgPSBwSGVhZGVyLT5TZXF1ZW5jZTsK
LQkJCXBBZGFwdGVyLT5UdXBsZUNhY2hlW0luZGV4XS5GcmFnICAgICA9IHBIZWFkZXItPkZyYWc7
Ci0JCQlwQWRhcHRlci0+VHVwbGVDYWNoZVtJbmRleF0uVmFsaWQgICAgPSBUUlVFOwotCQkJcEFk
YXB0ZXItPlR1cGxlQ2FjaGVMYXN0VXBkYXRlSW5kZXggID0gSW5kZXg7Ci0JCQlEQkdQUklOVChS
VF9ERUJVR19JTkZPLCJEVVBDSEVDSyAtIEFkZCBFbnRyeSAlZCwgTUFDPSUwMng6JTAyeDolMDJ4
OiUwMng6JTAyeDolMDJ4XG4iLCAKLQkJCSAgICBJbmRleCwgcEFkYXB0ZXItPlR1cGxlQ2FjaGVb
SW5kZXhdLk1BQy5PY3RldFswXSwgcEFkYXB0ZXItPlR1cGxlQ2FjaGVbSW5kZXhdLk1BQy5PY3Rl
dFsxXSwKLQkJCSAgICBwQWRhcHRlci0+VHVwbGVDYWNoZVtJbmRleF0uTUFDLk9jdGV0WzJdLCBw
QWRhcHRlci0+VHVwbGVDYWNoZVtJbmRleF0uTUFDLk9jdGV0WzNdLAotCQkJICAgIHBBZGFwdGVy
LT5UdXBsZUNhY2hlW0luZGV4XS5NQUMuT2N0ZXRbNF0sIHBBZGFwdGVyLT5UdXBsZUNhY2hlW0lu
ZGV4XS5NQUMuT2N0ZXRbNV0pOwotCQkJcmV0dXJuOwotCQl9Ci0JCWVsc2UgaWYgKChtZW1jbXAo
JnBBZGFwdGVyLT5UdXBsZUNhY2hlW0luZGV4XS5NQUMsICZwSGVhZGVyLT5Db250cm9saGVhZC5B
ZGRyMiwgNik9PSAwKSkKLQkJewotCQkJLy8gVXBkYXRlIG9sZCBlbnRyeQotCQkJcEFkYXB0ZXIt
PlR1cGxlQ2FjaGVbSW5kZXhdLlNlcXVlbmNlID0gcEhlYWRlci0+U2VxdWVuY2U7Ci0JCQlwQWRh
cHRlci0+VHVwbGVDYWNoZVtJbmRleF0uRnJhZyAgICAgPSBwSGVhZGVyLT5GcmFnOwotCQkJcmV0
dXJuOwotCQl9Ci0JfQotCi0gICAgLy8gdHVwbGUgY2FjaGUgZnVsbCwgcmVwbGFjZSB0aGUgZmly
c3QgaW5zZXJ0ZWQgb25lIChldmVuIHRob3VnaCBpdCBtYXkgbm90IGJlCi0gICAgLy8gbGVhc3Qg
cmVmZXJlbmNlZCBvbmUpCi0JaWYgKEluZGV4ID09IE1BWF9DTElFTlQpCi0JewotCSAgICBwQWRh
cHRlci0+VHVwbGVDYWNoZUxhc3RVcGRhdGVJbmRleCArKzsKLQkgICAgaWYgKHBBZGFwdGVyLT5U
dXBsZUNhY2hlTGFzdFVwZGF0ZUluZGV4ID49IE1BWF9DTElFTlQpCi0JCXBBZGFwdGVyLT5UdXBs
ZUNhY2hlTGFzdFVwZGF0ZUluZGV4ID0gMDsKLQkgICAgSW5kZXggPSBwQWRhcHRlci0+VHVwbGVD
YWNoZUxhc3RVcGRhdGVJbmRleDsKLQotCQkvLyByZXBsYWNlIHdpdGggbmV3IGVudHJ5Ci0JCW1l
bWNweSgmcEFkYXB0ZXItPlR1cGxlQ2FjaGVbSW5kZXhdLk1BQywgJnBIZWFkZXItPkNvbnRyb2xo
ZWFkLkFkZHIyLCA2KTsKLQkJcEFkYXB0ZXItPlR1cGxlQ2FjaGVbSW5kZXhdLlNlcXVlbmNlID0g
cEhlYWRlci0+U2VxdWVuY2U7Ci0JCXBBZGFwdGVyLT5UdXBsZUNhY2hlW0luZGV4XS5GcmFnICAg
ICA9IHBIZWFkZXItPkZyYWc7Ci0JCXBBZGFwdGVyLT5UdXBsZUNhY2hlW0luZGV4XS5WYWxpZCAg
ICA9IFRSVUU7Ci0JCURCR1BSSU5UKFJUX0RFQlVHX0lORk8sIkRVUENIRUNLIC0gcmVwbGFjZSBF
bnRyeSAlZCwgTUFDPSUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4XG4iLCAKLQkJICAgIElu
ZGV4LCBwQWRhcHRlci0+VHVwbGVDYWNoZVtJbmRleF0uTUFDLk9jdGV0WzBdLCBwQWRhcHRlci0+
VHVwbGVDYWNoZVtJbmRleF0uTUFDLk9jdGV0WzFdLAotCQkgICAgcEFkYXB0ZXItPlR1cGxlQ2Fj
aGVbSW5kZXhdLk1BQy5PY3RldFsyXSwgcEFkYXB0ZXItPlR1cGxlQ2FjaGVbSW5kZXhdLk1BQy5P
Y3RldFszXSwKLQkJICAgIHBBZGFwdGVyLT5UdXBsZUNhY2hlW0luZGV4XS5NQUMuT2N0ZXRbNF0s
IHBBZGFwdGVyLT5UdXBsZUNhY2hlW0luZGV4XS5NQUMuT2N0ZXRbNV0pOwotCX0KLX0KLQotLyoK
LQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLQotCVJvdXRpbmUJRGVzY3JpcHRpb246Ci0JCUFwcGx5IHBhY2tl
dCBmaWx0ZXIgcG9saWN5LCByZXR1cm4gTkRJU19TVEFUVVNfRkFJTFVSRSBpZiB0aGlzIGZyYW1l
Ci0JCXNob3VsZCBiZSBkcm9wcGVkLgotCQkKLQlBcmd1bWVudHM6Ci0JCXBBZGFwdGVyCQlQb2lu
dGVyCXRvIG91ciBhZGFwdGVyCi0JCXBSeEQJCQlQb2ludGVyCXRvIHRoZSBSeCBkZXNjcmlwdG9y
Ci0JCXBIZWFkZXIJCQlQb2ludGVyIHRvIHRoZSA4MDIuMTEgZnJhbWUgaGVhZGVyCi0JCQotCVJl
dHVybiBWYWx1ZToKLQkJTkRJU19TVEFUVVNfU1VDQ0VTUwkJQWNjZXB0IGZyYW1lCi0JCU5ESVNf
U1RBVFVTX0ZBSUxVUkUJCURyb3AgRnJhbWUKLQkJCi0JTm90ZToKLQkJTWFnYW5lbWVudCBmcmFt
ZSBzaG91bGQgYnlwYXNzIHRoaXMgZmlsdGVyaW5nIHJ1bGUuCi0JCi0JPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0qLwotTkRJU19TVEFUVVMJUlRNUEFwcGx5UGFja2V0RmlsdGVyKAotCUlOCVBSVDI1NzBBREFQ
VEVSCXBBZGFwdGVyLCAKLQlJTglQUlhEX1NUUlVDCQlwUnhELCAKLQlJTglQSEVBREVSXzgwMl8x
MQlwSGVhZGVyKQotewotCVVDSEFSCWk7Ci0JCi0JLy8gMC4gTWFuYWdlbWVudCBmcmFtZSBzaG91
bGQgYnlwYXNzIGFsbCB0aGVzZSBmaWx0ZXJpbmcgcnVsZXMuCi0JaWYgKHBIZWFkZXItPkNvbnRy
b2xoZWFkLkZyYW1lLlR5cGUgPT0gQlRZUEVfTUdNVCkKLQl7Ci0JCWlmICgocFJ4RC0+VTJNKSB8
fCAocFJ4RC0+QmNhc3QpIHx8IChwUnhELT5NY2FzdCkpLy9zdGV2ZW46Zm9yIEFTSUMgQnVnIFdv
cmthcm91bmQKLQkJcmV0dXJuKE5ESVNfU1RBVFVTX1NVQ0NFU1MpOwotCX0KLQkKLQkvLyAwLjEJ
RHJvcCBhbGwgUnggZnJhbWVzIGlmIE1JQyBjb3VudGVybWVhc3VyZXMga2lja3MgaW4KLQlpZiAo
cEFkYXB0ZXItPlBvcnRDZmcuTWljRXJyQ250ID49IDIpCi0JewotCQlyZXR1cm4oTkRJU19TVEFU
VVNfRkFJTFVSRSk7Ci0JfQotCQotCS8vIDEuIERyb3AgdW5pY2FzdCB0byBtZSBwYWNrZXQgaWYg
TkRJU19QQUNLRVRfVFlQRV9ESVJFQ1RFRCBpcyBGQUxTRQotCWlmIChwUnhELT5VMk0pCi0Jewot
CQlpZiAocEFkYXB0ZXItPmJBY2NlcHREaXJlY3QgPT0gRkFMU0UpCi0JCXsKLQkJCURCR1BSSU5U
X1JBVyhSVF9ERUJVR19JTkZPLCAidW5pY2FzdCBub3QgYWNjZXB0ZWRcbiIpOy8vc3RldmVuOmZv
ciBkZWJ1ZwotCQkJcmV0dXJuKE5ESVNfU1RBVFVTX0ZBSUxVUkUpOwotCQl9Ci0JfQotCQkKLQkv
LyAyLiBEcm9wIGJyb2FkY2FzdCBwYWNrZXQgaWYgTkRJU19QQUNLRVRfVFlQRV9CUk9BRENBU1Qg
aXMgRkFMU0UKLQllbHNlIGlmIChwUnhELT5CY2FzdCkKLQl7Ci0JCWlmIChwQWRhcHRlci0+YkFj
Y2VwdEJyb2FkY2FzdCA9PSBGQUxTRSkKLQkJewotCQkJREJHUFJJTlQoUlRfREVCVUdfSU5GTywg
ImJyb2FkY2FzdCBub3QgYWNjZXB0ZWRcbiIpOy8vc3RldmVuOmZvciBkZWJ1ZwotCQkJcmV0dXJu
KE5ESVNfU1RBVFVTX0ZBSUxVUkUpOwotCQl9Ci0JfQotCQkJCi0JLy8gMy4gRHJvcCBtdWx0aWNh
c3QgcGFja2V0IGlmIE5ESVNfUEFDS0VUX1RZUEVfQUxMX01VTFRJQ0FTVCBpcyBmYWxzZQotCS8v
ICAgIGFuZCBORElTX1BBQ0tFVF9UWVBFX01VTFRJQ0FTVCBpcyBmYWxzZS4KLQkvLyAgICBJZiBO
RElTX1BBQ0tFVF9UWVBFX01VTFRJQ0FTVCBpcyB0cnVlLCBidXQgTkRJU19QQUNLRVRfVFlQRV9B
TExfTVVMVElDQVNUIGlzIGZhbHNlLgotCS8vICAgIFdlIGhhdmUgdG8gZGVhbCB3aXRoIG11bHRp
Y2FzdCB0YWJsZSBsb29rdXAgJiBkcm9wIG5vdCBtYXRjaGVkIHBhY2tldHMuCi0JZWxzZSBpZiAo
cFJ4RC0+TWNhc3QpCi0JewotCQlpZiAocEFkYXB0ZXItPmJBY2NlcHRBbGxNdWx0aWNhc3QgPT0g
RkFMU0UpCi0JCXsKLQkJCWlmIChwQWRhcHRlci0+YkFjY2VwdE11bHRpY2FzdCA9PSBGQUxTRSkK
LQkJCXsKLQkJCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfSU5GTywgIm11bHRpY2FzdCBub3QgYWNj
ZXB0ZWRcbiIpOy8vc3RldmVuOmZvciBkZWJ1ZwotCQkJCXJldHVybihORElTX1NUQVRVU19GQUlM
VVJFKTsKLQkJCX0KLQkJCWVsc2UKLQkJCXsKLQkJCQkvLyBTZWxlY3RlZCBhY2NlcHQgbXVsdGlj
YXN0IHBhY2tldCBiYXNlZCBvbiBtdWx0aWNhc3QgdGFibGUKLQkJCQlmb3IgKGkgPSAwOyBpIDwg
cEFkYXB0ZXItPk51bWJlck9mTWNBZGRyZXNzZXM7IGkrKykKLQkJCQl7Ci0JCQkJCWlmICgobWVt
Y21wKCZwSGVhZGVyLT5Db250cm9saGVhZC5BZGRyMSwgcEFkYXB0ZXItPk1jYXN0VGFibGVbaV0s
IEVUSF9MRU5HVEhfT0ZfQUREUkVTUyk9PSAwKSkKLQkJCQkJewotCQkJCQkJYnJlYWs7CQkvLyBN
YXRjaGVkCi0JCQkJCX0KLQkJCQl9Ci0KLQkJCQkvLyBOb3QgbWF0Y2hlZAotCQkJCWlmIChpID09
IHBBZGFwdGVyLT5OdW1iZXJPZk1jQWRkcmVzc2VzKQotCQkJCXsKLQkJCQkJREJHUFJJTlQoUlRf
REVCVUdfSU5GTywiRHJvcCBtdWx0aWNhc3QgJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnhc
biIsCi0JCQkJCQlwSGVhZGVyLT5Db250cm9saGVhZC5BZGRyMS5PY3RldFswXSwgcEhlYWRlci0+
Q29udHJvbGhlYWQuQWRkcjEuT2N0ZXRbMV0sCi0JCQkJCQlwSGVhZGVyLT5Db250cm9saGVhZC5B
ZGRyMS5PY3RldFsyXSwgcEhlYWRlci0+Q29udHJvbGhlYWQuQWRkcjEuT2N0ZXRbM10sCi0JCQkJ
CQlwSGVhZGVyLT5Db250cm9saGVhZC5BZGRyMS5PY3RldFs0XSwgcEhlYWRlci0+Q29udHJvbGhl
YWQuQWRkcjEuT2N0ZXRbNV0pOwotCQkJCQlEQkdQUklOVChSVF9ERUJVR19MT1VELCAibXVsdGlj
YXN0IG5vdCBtYXRjaGVkXG4iKTsKLQkJCQkJcmV0dXJuKE5ESVNfU1RBVFVTX0ZBSUxVUkUpOwot
CQkJCX0KLQkJCQllbHNlCi0JCQkJewotCQkJCQlEQkdQUklOVChSVF9ERUJVR19JTkZPLCJBY2Nl
cHQgbXVsdGljYXN0ICUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4XG4iLAotCQkJCQkJcEhl
YWRlci0+Q29udHJvbGhlYWQuQWRkcjEuT2N0ZXRbMF0sIHBIZWFkZXItPkNvbnRyb2xoZWFkLkFk
ZHIxLk9jdGV0WzFdLAotCQkJCQkJcEhlYWRlci0+Q29udHJvbGhlYWQuQWRkcjEuT2N0ZXRbMl0s
IHBIZWFkZXItPkNvbnRyb2xoZWFkLkFkZHIxLk9jdGV0WzNdLAotCQkJCQkJcEhlYWRlci0+Q29u
dHJvbGhlYWQuQWRkcjEuT2N0ZXRbNF0sIHBIZWFkZXItPkNvbnRyb2xoZWFkLkFkZHIxLk9jdGV0
WzVdKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9Ci0KLQkvLyA0LiBOb3QgVTJNLCBub3QgTWNhc3Qs
IG5vdCBCY2FzdCwgbXVzdCBiZSB1bmljYXN0IHRvIG90aGVyIERBLgotCS8vICAgIFNpbmNlIHdl
IGRpZCBub3QgaW1wbGVtZW50IHByb21pc2N1b3VzIG1vZGUsIGp1c3QgZHJvcCB0aGlzIGtpbmQg
b2YgcGFja2V0IGZvciBub3cuCi0JZWxzZQotCXsKLQkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX1RS
QUNFLCAibm90LXRvLW1lIHVuaWNhc3RcbiIpOy8vc3RldmVuOmZvciBkZWJ1ZwotCQlyZXR1cm4o
TkRJU19TVEFUVVNfRkFJTFVSRSk7Ci0JfQotCQotCXJldHVybihORElTX1NUQVRVU19TVUNDRVNT
KTsJCi19Ci0KLS8qCi0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLQlSb3V0aW5lCURlc2NyaXB0aW9uOgot
CQlDaGVjayBSeCBkZXNjcmlwdG9yLCByZXR1cm4gTkRJU19TVEFUVVNfRkFJTFVSRSBpZiBhbnkg
ZXJyb3IgZG91bmQKLQkJCi0JQXJndW1lbnRzOgotCQlwUnhECQlQb2ludGVyCXRvIHRoZSBSeCBk
ZXNjcmlwdG9yCi0JCQotCVJldHVybiBWYWx1ZToKLQkJTkRJU19TVEFUVVNfU1VDQ0VTUwkJTm8g
ZXJyCi0JCU5ESVNfU1RBVFVTX0ZBSUxVUkUJCUVycm9yCi0JCQotCU5vdGU6Ci0JCi0JPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0qLwotTkRJU19TVEFUVVMJUlRNUENoZWNrUnhEZXNjcmlwdG9yKAotCUlOCVBS
VDI1NzBBREFQVEVSCXBBZGFwdGVyLAotCUlOCVBSWERfU1RSVUMJcFJ4RCkKLXsKLQkvLyBQaHkg
ZXJyb3JzCi0JaWYgKHBSeEQtPlBoeUVycikKLQl7Ci0JCURCR1BSSU5UX1JBVyhSVF9ERUJVR19F
UlJPUiwgInBSeEQtPlBoeUVyciAweCV4LCAweCV4LCAweCV4LCAweCV4XG4iLCAqKFVMT05HKilw
UnhELCAqKChVTE9ORyopcFJ4RCsxKSwgKigoVUxPTkcqKXBSeEQrMiksICooKFVMT05HKilwUnhE
KzMpKTsKLQkJcmV0dXJuKE5ESVNfU1RBVFVTX0ZBSUxVUkUpOwotCX0KLQkKLQkvLyBDUkMgZXJy
b3JzCi0JaWYgKHBSeEQtPkNyYykKLQl7Ci0JCURCR1BSSU5UX1JBVyhSVF9ERUJVR19FUlJPUiwg
InBSeEQtPkNyY1xuIik7Ci0JCXJldHVybihORElTX1NUQVRVU19GQUlMVVJFKTsKLQl9Ci0JCi0J
Ly8gUGF1bCAwNC0wMyBmb3IgT0ZETSBSeCBsZW5ndGggaXNzdWUKLQlpZiAocFJ4RC0+RGF0YUJ5
dGVDbnQgPiAxNjA0KQotCXsKLQkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX0VSUk9SLCAicmVjZWl2
ZWQgdG9vIGxvbmcsIERhdGFCeXRlQ250ID0gJWRcbiIsIHBSeEQtPkRhdGFCeXRlQ250KTsKLQkJ
cmV0dXJuIE5ESVNfU1RBVFVTX1JFU0VUOwotCX0KLQotCXJldHVybihORElTX1NUQVRVU19TVUND
RVNTKTsKLX0KLQotLyoKLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotCVJvdXRpbmUJRGVzY3JpcHRpb246
Ci0JCVByb2Nlc3MgTUlDIGVycm9yIGluZGljYXRpb24gYW5kIHJlY29yZCBNSUMgZXJyb3IgdGlt
ZXIuCi0JCQotCUFyZ3VtZW50czoKLQkJcEFkYXB0ZXIJCVBvaW50ZXIJdG8gb3VyIGFkYXB0ZXIK
LQkJcFdwYUtleQkJCVBvaW50ZXIJdG8gdGhlIFdQQSBrZXkgc3RydWN0dXJlCi0JCQotCVJldHVy
biBWYWx1ZToKLQkJTm9uZQotCQkKLQlOb3RlOgotCQotCT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKi8KLVZP
SUQJUlRNUFJlcG9ydE1pY0Vycm9yKAotCUlOCVBSVDI1NzBBREFQVEVSCXBBZGFwdGVyLCAKLQlJ
TglQV1BBX0tFWQkJcFdwYUtleSkKLXsKLQlVTE9ORwlOb3c7Ci0Jc3RydWN0Ci0JewotCQlORElT
XzgwMl8xMV9TVEFUVVNfSU5ESUNBVElPTgkJU3RhdHVzOwotCQlORElTXzgwMl8xMV9BVVRIRU5U
SUNBVElPTl9SRVFVRVNUCVJlcXVlc3Q7Ci0JfQlSZXBvcnQ7Ci0KLQkvLyAwLiBTZXQgU3RhdHVz
IHRvIGluZGljYXRlIGF1dGggZXJyb3IKLQlSZXBvcnQuU3RhdHVzLlN0YXR1c1R5cGUgPSBOZGlz
ODAyXzExU3RhdHVzVHlwZV9BdXRoZW50aWNhdGlvbjsKLQkKLQkvLyAxLiBDaGVjayBmb3IgR3Jv
dXAgb3IgUGFpcndpc2UgTUlDIGVycm9yCi0JaWYgKHBXcGFLZXktPlR5cGUgPT0gUEFJUldJU0Vf
S0VZKQotCQlSZXBvcnQuUmVxdWVzdC5GbGFncyA9IE5ESVNfODAyXzExX0FVVEhfUkVRVUVTVF9Q
QUlSV0lTRV9FUlJPUjsKLQllbHNlCi0JCVJlcG9ydC5SZXF1ZXN0LkZsYWdzID0gTkRJU184MDJf
MTFfQVVUSF9SRVFVRVNUX0dST1VQX0VSUk9SOwotCi0JLy8gMi4gQ29weSBBUCBNQUMgYWRkcmVz
cwotCW1lbWNweShSZXBvcnQuUmVxdWVzdC5Cc3NpZCwgcFdwYUtleS0+QnNzSWQsIDYpOwotCi0J
Ly8gMy4gQ2FsY3VsYXRlIGxlbmd0aAotCVJlcG9ydC5SZXF1ZXN0Lkxlbmd0aCA9IHNpemVvZihO
RElTXzgwMl8xMV9BVVRIRU5USUNBVElPTl9SRVFVRVNUKTsKLQotCS8vIDQuIEluZGljYXRlIHRv
IE5ESVMKLQlOZGlzTUluZGljYXRlU3RhdHVzKHBBZGFwdGVyLT5BZGFwdGVySGFuZGxlLCBORElT
X1NUQVRVU19NRURJQV9TUEVDSUZJQ19JTkRJQ0FUSU9OLCAoUFZPSUQpICZSZXBvcnQsIHNpemVv
ZihSZXBvcnQpKTsKLQlOZGlzTUluZGljYXRlU3RhdHVzQ29tcGxldGUocEFkYXB0ZXItPkFkYXB0
ZXJIYW5kbGUpOwotCi0JLy8gNS4gUmVjb3JkIExhc3QgTUlDIGVycm9yIHRpbWUgYW5kIGNvdW50
Ci0JTm93ID0gamlmZmllczsKLQlpZiAocEFkYXB0ZXItPlBvcnRDZmcuTWljRXJyQ250ID09IDAp
Ci0JewotCQlwQWRhcHRlci0+UG9ydENmZy5NaWNFcnJDbnQrKzsKLQkJcEFkYXB0ZXItPlBvcnRD
ZmcuTGFzdE1pY0Vycm9yVGltZSA9IE5vdzsKLQl9Ci0JZWxzZSBpZiAocEFkYXB0ZXItPlBvcnRD
ZmcuTWljRXJyQ250ID09IDEpCi0JewotCQlpZiAoKHBBZGFwdGVyLT5Qb3J0Q2ZnLkxhc3RNaWNF
cnJvclRpbWUgKyAoNjAgKiAxMDAwKSkgPCBOb3cpCi0JCXsKLQkJCS8vIFVwZGF0ZSBMYXN0IE1J
QyBlcnJvciB0aW1lLCB0aGlzIGRpZCBub3QgdmlvbGF0ZSB0d28gTUlDIGVycm9ycyB3aXRoaW4g
NjAgc2Vjb25kcwotCQkJcEFkYXB0ZXItPlBvcnRDZmcuTGFzdE1pY0Vycm9yVGltZSA9IE5vdzsJ
CQkKLQkJfQotCQllbHNlCi0JCXsKLQkJCXBBZGFwdGVyLT5Qb3J0Q2ZnLkxhc3RNaWNFcnJvclRp
bWUgPSBOb3c7CQkJCi0JCQkvLyBWaW9sYXRlIE1JQyBlcnJvciBjb3VudHMsIE1JQyBjb3VudGVy
bWVhc3VyZXMga2lja3MgaW4KLQkJCXBBZGFwdGVyLT5Qb3J0Q2ZnLk1pY0VyckNudCsrOwkJCQot
CQkJLy8gV2Ugc2hhbGwgYmxvY2sgYWxsIHJlY2VwdGlvbgotCQkJLy8gV2Ugc2hhbGwgY2xlYW4g
YWxsIFR4IHJpbmcgYW5kIGRpc2Fzc29pY2F0ZSBmcm9tIEFQIGFmdGVyIG5leHQgRUFQT0wgZnJh
bWUKLQkJCVJUVVNCUmVqZWN0UGVuZGluZ1BhY2tldHMocEFkYXB0ZXIpOwotCQkJUlRVU0JDbGVh
blVwRGF0YUJ1bGtPdXRRdWV1ZShwQWRhcHRlcik7Ci0JCX0KLQl9Ci0JZWxzZQotCXsKLQkJLy8g
TUlDIGVycm9yIGNvdW50ID49IDIKLQkJLy8gVGhpcyBzaG91bGQgbm90IGhhcHBlbgotCQk7Ci0J
fQotfQotLyoKLQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotCVJvdXRpbmUJRGVzY3JpcHRpb246Ci0JCUNv
cHkgZnJhbWUgZnJvbSB3YWl0aW5nIHF1ZXVlIGludG8gcmVsYXRpdmUgcmluZyBidWZmZXIgYW5k
IHNldCAKLQlhcHByb3ByaWF0ZSBBU0lDIHJlZ2lzdGVyIHRvIGtpY2sgaGFyZHdhcmUgdHJhbnNt
aXQgZnVuY3Rpb24KLQkKLQlBcmd1bWVudHM6Ci0JCXBBZGFwdGVyCVBvaW50ZXIJdG8gb3VyIGFk
YXB0ZXIKLQkJcEJ1ZmZlcgkJUG9pbnRlciB0byAgbWVtb3J5IG9mIG91dGdvaW5nIGZyYW1lCi0J
CUxlbmd0aAkJU2l6ZSBvZiBvdXRnb2luZyBtYW5hZ2VtZW50IGZyYW1lCi0JCQotCVJldHVybiBW
YWx1ZToKLQkJTkRJU19TVEFUVVNfRkFJTFVSRQotCQlORElTX1NUQVRVU19QRU5ESU5HCi0JCU5E
SVNfU1RBVFVTX1NVQ0NFU1MKLQotCU5vdGU6Ci0JCi0JPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qLwotVk9J
RAlSVFVTQk1sbWVIYXJkVHJhbnNtaXQoCi0JSU4JUFJUMjU3MEFEQVBURVIJcEFkYXB0ZXIsCi0J
SU4JUE1HTVRfU1RSVUMJCXBNZ210KQotewotCVBUWF9DT05URVhUCQlwTUxNRUNvbnRleHQ7Ci0J
UFRYRF9TVFJVQwkJcFR4RDsKLQlQVUNIQVIJCQlwRGVzdDsJCi0JUEhFQURFUl84MDJfMTEJcEhl
YWRlcl84MDJfMTE7Ci0JQk9PTEVBTiAgICAgICAgIEFja1JlcXVpcmVkLCBJbnNlcnRUaW1lc3Rh
bXA7Ci0JVUxPTkcJCQlUcmFuc2ZlckJ1ZmZlckxlbmd0aDsKLQlQVk9JRAkJCXBCdWZmZXIgPSBw
TWdtdC0+cEJ1ZmZlcjsKLQlVTE9ORwkJCUxlbmd0aCA9IHBNZ210LT5MZW5ndGg7Ci0JCi0JREJH
UFJJTlRfUkFXKFJUX0RFQlVHX0lORk8sICItLS0+TWxtZUhhcmRUcmFuc21pdFxuIik7Ci0JCi0J
cEFkYXB0ZXItPlByaW9SaW5nVHhDbnQrKzsKLQotCXBNTE1FQ29udGV4dCA9ICZwQWRhcHRlci0+
TUxNRUNvbnRleHRbcEFkYXB0ZXItPk5leHRNTE1FSW5kZXhdOwotCXBNTE1FQ29udGV4dC0+SW5V
c2UgPSBUUlVFOwotCi0JLy8gSW5jcmVhc2UgJiBtYWludGFpbiBUeCBSaW5nIEluZGV4Ci0JcEFk
YXB0ZXItPk5leHRNTE1FSW5kZXgrKzsKLQlpZiAocEFkYXB0ZXItPk5leHRNTE1FSW5kZXggPj0g
UFJJT19SSU5HX1NJWkUpCi0JewotCQlwQWRhcHRlci0+TmV4dE1MTUVJbmRleCA9IDA7Ci0JfQot
Ci0JcERlc3QJCQkJPSBwTUxNRUNvbnRleHQtPlRyYW5zZmVyQnVmZmVyLT5XaXJlbGVzc1BhY2tl
dDsgICAgICAgICAgICAgIAotCXBUeEQJCQkJPSAoUFRYRF9TVFJVQykocE1MTUVDb250ZXh0LT5U
cmFuc2ZlckJ1ZmZlcik7Ci0JbWVtc2V0KHBUeEQsIDAsIHNpemVvZihUWERfU1RSVUMpKTsKLQkK
LQlwSGVhZGVyXzgwMl8xMSA9IChQSEVBREVSXzgwMl8xMSkgcEJ1ZmZlcjsKLQlJbnNlcnRUaW1l
c3RhbXAgPSBGQUxTRTsKLQlpZiAocEhlYWRlcl84MDJfMTEtPkNvbnRyb2xoZWFkLkZyYW1lLlR5
cGUgPT0gQlRZUEVfQ05UTCkgLy8gbXVzdCBiZSBQUy1QT0xMCi0JewotCQlBY2tSZXF1aXJlZCA9
IEZBTFNFOwotCX0KLQllbHNlIC8vIEJUWVBFX01HTVQgb3IgQk1HTVRfREFUQShtdXN0IGJlIE5V
TEwgZnJhbWUpCi0JewotCQlwQWRhcHRlci0+U2VxdWVuY2UgICAgICAgPSAoKHBBZGFwdGVyLT5T
ZXF1ZW5jZSkgKyAxKSAmIChNQVhfU0VRX05VTUJFUik7Ci0JCXBIZWFkZXJfODAyXzExLT5TZXF1
ZW5jZSA9IHBBZGFwdGVyLT5TZXF1ZW5jZTsKLQotCQlpZiAocEhlYWRlcl84MDJfMTEtPkNvbnRy
b2xoZWFkLkFkZHIxLk9jdGV0WzBdICYgMHgwMSkgLy8gTVVMVElDQVNULCBCUk9BRENBU1QKLQkJ
ewotCQkJSU5DX0NPVU5URVIocEFkYXB0ZXItPldsYW5Db3VudGVycy5NdWx0aWNhc3RUcmFuc21p
dHRlZEZyYW1lQ291bnQpOwotCQkJQWNrUmVxdWlyZWQgPSBGQUxTRTsKLQkJCXBIZWFkZXJfODAy
XzExLT5Db250cm9saGVhZC5EdXJhdGlvbiA9IDA7Ci0JCX0KLQkJZWxzZQotCQl7Ci0JCQlBY2tS
ZXF1aXJlZCA9IFRSVUU7Ci0JCQlwSGVhZGVyXzgwMl8xMS0+Q29udHJvbGhlYWQuRHVyYXRpb24g
PSBSVFVTQkNhbGNEdXJhdGlvbihwQWRhcHRlciwgcEFkYXB0ZXItPlBvcnRDZmcuTWxtZVJhdGUs
IDE0KTsKLQkJCWlmIChwSGVhZGVyXzgwMl8xMS0+Q29udHJvbGhlYWQuRnJhbWUuU3VidHlwZSA9
PSBTVUJUWVBFX1BST0JFX1JTUCkKLQkJCXsKLQkJCQlJbnNlcnRUaW1lc3RhbXAgPSBUUlVFOwot
CQkJfQotCQl9Ci0JfQotCQotCW1lbWNweShwRGVzdCwgcEJ1ZmZlciwgTGVuZ3RoKTsKLSAgIAot
CS8vIEluaXRpYWxpemUgUHJpb3JpdHkgRGVzY3JpcHRvcgotCS8vIEZvciBpbnRlci1mcmFtZSBn
YXAsIHRoZSBudW1iZXIgaXMgZm9yIHRoaXMgZnJhbWUgYW5kIG5leHQgZnJhbWUKLQkvLyBGb3Ig
TUxNRSByYXRlLCB3ZSB3aWxsIGZpeCBhcyAyTWIgdG8gbWF0Y2ggb3RoZXIgdmVuZG9yJ3MgaW1w
bGVtZW50Ci0JUlRVU0JXcml0ZVR4RGVzY3JpcHRvcihwVHhELCBGQUxTRSwgMCwgQWNrUmVxdWly
ZWQsIEluc2VydFRpbWVzdGFtcCwKLQkJVFJVRSwgSUZTX0JBQ0tPRkYsIExlbmd0aCwgRkFMU0Us
IDAsIENXX01JTl9JTl9CSVRTLCBDV19NQVhfSU5fQklUUywKLQkJTGVuZ3RoICsgNCwgcEFkYXB0
ZXItPlBvcnRDZmcuTWxtZVJhdGUsIDQsIHBBZGFwdGVyLT5Qb3J0Q2ZnLlR4UHJlYW1ibGVJblVz
ZWQpOwotCi0JLy8gQnVpbGQgb3VyIFVSQiBmb3IgVVNCRAotCVRyYW5zZmVyQnVmZmVyTGVuZ3Ro
ID0gc2l6ZW9mKFRYRF9TVFJVQykgKyBMZW5ndGg7Ci0JaWYgKChUcmFuc2ZlckJ1ZmZlckxlbmd0
aCAlIDIpID09IDEpCi0JCVRyYW5zZmVyQnVmZmVyTGVuZ3RoKys7Ci0JaWYgKChUcmFuc2ZlckJ1
ZmZlckxlbmd0aCAlIHBBZGFwdGVyLT5CdWxrT3V0TWF4UGFja2V0U2l6ZSkgPT0gMCkKLQkJVHJh
bnNmZXJCdWZmZXJMZW5ndGggKz0gMjsKLQkKLQlwTUxNRUNvbnRleHQtPkJ1bGtPdXRTaXplID0g
VHJhbnNmZXJCdWZmZXJMZW5ndGg7Ci0JUlRVU0JfU0VUX0JVTEtfRkxBRyhwQWRhcHRlciwgZlJU
VVNCX0JVTEtfT1VUX01MTUUpOwotCQotCURCR1BSSU5UKFJUX0RFQlVHX0lORk8sICI8LS0tTWxt
ZUhhcmRUcmFuc21pdFxuIik7Ci19ICAgCi0KZGlmZiAtcnVOIHJ0MjU3MC0xLjEuMC1iMS9Nb2R1
bGUvcnR1c2IuaCBydDI1NzAtY3ZzLTIwMDUxMjI2MTYvTW9kdWxlL3J0dXNiLmgKLS0tIHJ0MjU3
MC0xLjEuMC1iMS9Nb2R1bGUvcnR1c2IuaAkyMDA1LTA3LTMwIDExOjQ0OjMwLjAwMDAwMDAwMCAt
MDUwMAorKysgcnQyNTcwLWN2cy0yMDA1MTIyNjE2L01vZHVsZS9ydHVzYi5oCTIwMDUtMTAtMjEg
MTI6MzE6MjIuMDAwMDAwMDAwIC0wNTAwCkBAIC0zOCw3ICszOCw3IEBACiAvLwogLy8gTUFDUk8g
ZGVmaW5pdGlvbnMKIC8vCi0jaWYgKF9XSU4zMl9XSU5OVCA+PSAweDA1MDEpCisjaWYgZGVmaW5l
ZChfV0lOMzJfV0lOTlQpICYmIChfV0lOMzJfV0lOTlQgPj0gMHgwNTAxKQogI2RlZmluZQlORElT
X1FVRVJZX0JVRkZFUihfTmRpc0J1ZiwgX3BwVkEsIF9wQnVmTGVuKSAgICAgICAgICAgICAgICAg
ICAgXAogICAgIE5kaXNRdWVyeUJ1ZmZlclNhZmUoX05kaXNCdWYsIF9wcFZBLCBfcEJ1Zkxlbiwg
Tm9ybWFsUGFnZVByaW9yaXR5KQogI2Vsc2UKZGlmZiAtcnVOIHJ0MjU3MC0xLjEuMC1iMS9Nb2R1
bGUvcnR1c2JfaW5mby5jIHJ0MjU3MC1jdnMtMjAwNTEyMjYxNi9Nb2R1bGUvcnR1c2JfaW5mby5j
Ci0tLSBydDI1NzAtMS4xLjAtYjEvTW9kdWxlL3J0dXNiX2luZm8uYwkyMDA1LTA3LTMwIDExOjQ0
OjMwLjAwMDAwMDAwMCAtMDUwMAorKysgcnQyNTcwLWN2cy0yMDA1MTIyNjE2L01vZHVsZS9ydHVz
Yl9pbmZvLmMJMjAwNS0xMi0wMiAwNjo1NToxNS4wMDAwMDAwMDAgLTA2MDAKQEAgLTIwMCw2ICsy
MDAsMTQgQEAKIAlwQWRhcHRlci0+UG9ydENmZy5JYnNzQ29uZmlnLkNoYW5uZWwgPSBjaGFuOwog
CURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAiPD09U0lPQ1NJV0ZSRVFbY21kPTB4JXhdIChDaGFu
bmVsPSVkKVxuIiwgU0lPQ1NJV0ZSRVEsIHBBZGFwdGVyLT5Qb3J0Q2ZnLklic3NDb25maWcuQ2hh
bm5lbCk7CiAKKwkvLyBDRDogc2V0dGluZyB0aGUgY2hhbm5lbCBpbiBNb25pdG9yIG1vZGUgaXMg
dW5yZWxhdGVkIHRvIFJGTU9OVHgKKworCWlmIChwQWRhcHRlci0+UG9ydENmZy5Cc3NUeXBlID09
IEJTU19NT05JVE9SKQorCXsKKwkJcEFkYXB0ZXItPlBvcnRDZmcuQ2hhbm5lbCA9IHBBZGFwdGVy
LT5Qb3J0Q2ZnLklic3NDb25maWcuQ2hhbm5lbDsKKwkJQXNpY1N3aXRjaENoYW5uZWwocEFkYXB0
ZXIsIHBBZGFwdGVyLT5Qb3J0Q2ZnLkNoYW5uZWwpOworCQlBc2ljTG9ja0NoYW5uZWwocEFkYXB0
ZXIsIHBBZGFwdGVyLT5Qb3J0Q2ZnLkNoYW5uZWwpOworCX0KIAogCXJldHVybiAwOwogfQpAQCAt
MjY5LDcgKzI3NywxMCBAQAogCQkJcEFkYXB0ZXItPlBvcnRDZmcuQnNzVHlwZT1CU1NfTU9OSVRP
UjsKIAkJCVJUVVNCRW5xdWV1ZUludGVybmFsQ21kKHBBZGFwdGVyLCBSVF9PSURfTElOS19ET1dO
KTsKIAkJCXBBZGFwdGVyLT5iQ29uZmlnQ2hhbmdlZCA9IFRSVUU7Ci0JCSAgICAgICAgcEFkYXB0
ZXItPm5ldC0+dHlwZSA9IDgwMTsKKwkJCWlmIChwQWRhcHRlci0+UG9ydENmZy5NYWxsb3dSRk1P
TlR4ID09IFRSVUUpCisJCQkJcEFkYXB0ZXItPm5ldC0+dHlwZSA9IDgwMTsgLy8gQVJQSFJEX0lF
RUU4MDIxMQorCQkJZWxzZQorCQkJCXBBZGFwdGVyLT5uZXQtPnR5cGUgPSA4MDI7IC8vIEFSUEhS
RF9JRUVFODAyMTFfUFJJU00KIAkJCVJUVVNCV3JpdGVNQUNSZWdpc3RlcihwQWRhcHRlciwgVFhS
WF9DU1IyLCAweDRlKTsKIAkJCWJyZWFrOwkKIAkJZGVmYXVsdDoKQEAgLTI4OCwxMCArMjk5LDE1
IEBACiAJCSAgIF9fdTMyICptb2RlLCBjaGFyICpleHRyYSkKIHsKIAlQUlQyNTcwQURBUFRFUiBw
QWRhcHRlciA9IChQUlQyNTcwQURBUFRFUikgZGV2LT5wcml2OwotCWlmIChBREhPQ19PTihwQWRh
cHRlcikpCi0JCSptb2RlID0gSVdfTU9ERV9BREhPQzsKKwlpZiAocEFkYXB0ZXItPlBvcnRDZmcu
QnNzVHlwZSA9PSBCU1NfTU9OSVRPUikKKwkJKm1vZGUgPSBJV19NT0RFX01PTklUT1I7CiAJZWxz
ZQotCQkqbW9kZSA9IElXX01PREVfSU5GUkE7CisJeworCQlpZiAoQURIT0NfT04ocEFkYXB0ZXIp
KQorCQkJKm1vZGUgPSBJV19NT0RFX0FESE9DOworCQllbHNlCisJCQkqbW9kZSA9IElXX01PREVf
SU5GUkE7CisJfQogCURCR1BSSU5UKFJUX0RFQlVHX1RFTVAsIi0tLT5ydHVzYl9pb2N0bF9naXdt
b2RlXG4iKTsJCQogCXJldHVybiAwOwogfQpAQCAtMzcyLDkgKzM4OCw3IEBACiAJCWJyZWFrOwog
CX0KIAotCXJhbmdlLT5tYXhfcXVhbC5xdWFsID0gNzA7IC8qIHdoYXQgaXMgY29ycmVjdCBtYXg/
IFRoaXMgd2FzIG5vdAotCQkJCQkqIGRvY3VtZW50ZWQgZXhhY3RseS4gQXQgbGVhc3QKLQkJCQkJ
KiA2OSBoYXMgYmVlbiBvYnNlcnZlZC4gKi8KKwlyYW5nZS0+bWF4X3F1YWwucXVhbCA9IDEwMDsg
LyogcGVyY2VudGFnZSAqLyAKIAlyYW5nZS0+bWF4X3F1YWwubGV2ZWwgPSAwOyAvKiBkQiAqLwog
CXJhbmdlLT5tYXhfcXVhbC5ub2lzZSA9IDA7IC8qIGRCICovCiAKQEAgLTUwMiw3ICs1MTYsMTEg
QEAKIAkJaWYgKFJUTVBfVEVTVF9GTEFHKHBBZGFwdGVyLCBmUlRNUF9BREFQVEVSX1JBRElPX09G
RikpCiAJCQlyZXR1cm4gMDsKIAorI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJT
SU9OKDIsIDUsIDApCiAJCWlmICgocEFkYXB0ZXItPk1sbWUuQ250bE1hY2hpbmUuQ3VyclN0YXRl
ICE9IENOVExfSURMRSkgJiYgKHBBZGFwdGVyLT5NTE1FVGhyX3BpZCA+IDApKQorI2Vsc2UKKwkJ
aWYgKChwQWRhcHRlci0+TWxtZS5DbnRsTWFjaGluZS5DdXJyU3RhdGUgIT0gQ05UTF9JRExFKSAm
JiAocEFkYXB0ZXItPk1MTUVUaHJfYWN0aXZlKSkKKyNlbmRpZgogCQl7CiAJCQlEQkdQUklOVChS
VF9ERUJVR19FUlJPUiwgIiEhISBNTE1FIGJ1c3ksIHJlc2V0IE1MTUUgc3RhdGUgbWFjaGluZSAh
ISFcbiIpOwogCQkJTWxtZVJlc3RhcnRTdGF0ZU1hY2hpbmUocEFkYXB0ZXIpOwpAQCAtNTM5LDYg
KzU1NywxMyBAQAogCWNoYXIgKmN1cnJlbnRfdmFsOwogCXN0cnVjdCBpd19ldmVudCBpd2U7CiAK
KyAgICAgICAgaWYgKFJUTVBfVEVTVF9GTEFHKHBBZGFwdGVyLCBmUlRNUF9BREFQVEVSX0JTU19T
Q0FOX0lOX1BST0dSRVNTKSl7CisgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAg
KiBTdGlsbCBzY2FubmluZywgaW5kaWNhdGUgdGhlIGNhbGxlciBzaG91bGQgdHJ5IGFnYWluLgor
ICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIHJldHVybiAtRUFHQUlOOworICAg
ICAgICB9CisKIAlmb3IgKGkgPSAwOyBpIDwgcEFkYXB0ZXItPlBvcnRDZmcuQnNzVGFiLkJzc05y
OyBpKyspIAogCXsKIAkJaWYgKGN1cnJlbnRfZXYgPj0gZW5kX2J1ZikKQEAgLTY0NCw4ICs2Njks
MTEgQEAKIAkvLyB0aGlzIHJlcXVlc3QsIGJlY2F1c2UgdGhpcyByZXF1ZXN0IGlzIGluaXRpYXRl
ZCBieSBORElTLgogCXBBZGFwdGVyLT5NbG1lLkNudGxBdXguQ3VyclJlcUlzRnJvbU5kaXMgPSBG
QUxTRTsgCiAJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsIi0tLT5Tc2lkLlNzaWRMZW5ndGggPSAl
ZCwgJXNcbiIsU3NpZC5Tc2lkTGVuZ3RoLCBTc2lkLlNzaWQpOwkJCi0KKyNpZiBMSU5VWF9WRVJT
SU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLCA1LCAwKQogCWlmIChwQWRhcHRlci0+TUxNRVRo
cl9waWQgPiAwKQorI2Vsc2UKKwlpZiAoIUlTX0VSUihwQWRhcHRlci0+TUxNRVRocikpCisjZW5k
aWYKIAkJTWxtZUVucXVldWUocEFkYXB0ZXIsIAogCQkJCU1MTUVfQ05UTF9TVEFURV9NQUNISU5F
LCAKIAkJCQlPSURfODAyXzExX1NTSUQsCkBAIC05MDksOSArOTM3LDkgQEAKIAkJCSB2b2lkICp3
LCBjaGFyICpleHRyYSkKIHsKIAlQUlQyNTcwQURBUFRFUiBwQWRhcHRlciA9IChQUlQyNTcwQURB
UFRFUikgZGV2LT5wcml2OwotCWludCAqcGFyYW0gPSAoaW50ICopIGV4dHJhOworCWludCBwYXJh
bSA9ICooaW50ICopIGV4dHJhOwogICAKLQlzd2l0Y2gocGFyYW1bMF0pCisJc3dpdGNoKHBhcmFt
KQogCXsKIAkJY2FzZSAxOgogCQkJcEFkYXB0ZXItPlBvcnRDZmcuQXV0aE1vZGUgPSBOZGlzODAy
XzExQXV0aE1vZGVPcGVuOwpAQCAtOTM2LDcgKzk2NCw3IEBACiAJfQogCiAKLSAgICBwQWRhcHRl
ci0+UG9ydENmZy5Qb3J0U2VjdXJlZCA9IFdQQV84MDJfMVhfUE9SVF9OT1RfU0VDVVJFRDsKKwlw
QWRhcHRlci0+UG9ydENmZy5Qb3J0U2VjdXJlZCA9IFdQQV84MDJfMVhfUE9SVF9OT1RfU0VDVVJF
RDsKIAogCXJldHVybiAwOwogfQpAQCAtOTQ2LDEwICs5NzQsMTAgQEAKIHsKIAogCVBSVDI1NzBB
REFQVEVSIHBBZGFwdGVyID0gKFBSVDI1NzBBREFQVEVSKSBkZXYtPnByaXY7Ci0gIAlpbnQgKnBh
cmFtID0gKGludCAqKSBleHRyYTsKKyAgCWludCBwYXJhbSA9ICooaW50ICopZXh0cmE7CiAJVVNI
T1JUCVZhbHVlOwogCi0Jc3dpdGNoKHBhcmFtWzBdKQorCXN3aXRjaChwYXJhbSkKIAl7CiAJCWNh
c2UgMToKIAkJCXBBZGFwdGVyLT5Qb3J0Q2ZnLkRlZmF1bHRLZXlJZCA9IDA7CkBAIC05OTAsMTIg
KzEwMTgsMTIgQEAKIHsKIAogCVBSVDI1NzBBREFQVEVSIHBBZGFwdGVyID0gKFBSVDI1NzBBREFQ
VEVSKSBkZXYtPnByaXY7Ci0JaW50ICpwYXJhbSA9IChpbnQgKikgZXh0cmE7CisJaW50IHBhcmFt
ID0gKihpbnQgKilleHRyYTsKIAlORElTXzgwMl8xMV9XRVBfU1RBVFVTCQkJCVdlcFN0YXR1czsv
L3NldCBieSBPSURfODAyXzExX1dFUF9TVEFUVVMKIAlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwg
Ij09PT5zZXRlbmNyeXBcbiIpOwogCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAiPT09PmluZm8t
PmNtZCAweCV4ICAgXG4iLChpbmZvLT5jbWQpKTsKLQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwg
Ij09PT5pbmZvLT5mbGFncyAweCV4ICAsIHBhcmFtICV4ICwgZXh0cmEgJXhcbiIsKGluZm8tPmZs
YWdzKSwgcGFyYW1bMF0sKmV4dHJhKTsKLQlzd2l0Y2gocGFyYW1bMF0pCisJREJHUFJJTlQoUlRf
REVCVUdfVFJBQ0UsICI9PT0+aW5mby0+ZmxhZ3MgMHgleCAgLCBwYXJhbSAleCAsIGV4dHJhICV4
XG4iLChpbmZvLT5mbGFncyksIHBhcmFtLCpleHRyYSk7CisJc3dpdGNoKHBhcmFtKQogCXsKIAkJ
Y2FzZSAxOgogCQkJcEFkYXB0ZXItPlBvcnRDZmcuV2VwU3RhdHVzPSBOZGlzODAyXzExV0VQRGlz
YWJsZWQ7CkBAIC0xMTAwLDE0ICsxMTI4LDc0IEBACiAJcmV0dXJuIDA7CiAKIH0KKworc3RhdGlj
IGludCBydHVzYl9pb2N0bF9zZXRyZm1vbnR4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5m
bywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXdfcG9pbnQgKmRh
dGEsIGNoYXIgKmV4dHJhKQoreworCVBSVDI1NzBBREFQVEVSIHBBZGFwdGVyID0gKFBSVDI1NzBB
REFQVEVSKSBkZXYtPnByaXY7CisJaW50IHBhcmFtOworCWNoYXIgdmFsdWU7CQorCisgICAgICAg
IGlmIChleHRyYSkgeyAvKiBDaGFuZ2UgdGhlIHN0YXRlIGlmIHRoZXJlJ3MgcGFyYW0uICovCisg
ICAgICAgICAgIHBhcmFtID0gKihpbnQgKilleHRyYTsKKyAgICAgICAgICAgc3dpdGNoKHBhcmFt
KQorICAgICAgICAgICB7CisgICAgICAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgICAgIHBB
ZGFwdGVyLT5Qb3J0Q2ZnLk1hbGxvd1JGTU9OVHggPSBUUlVFOworICAgICAgICAgICAgICAgIHBB
ZGFwdGVyLT5uZXQtPnR5cGUgPSA4MDE7IC8vIEFSUEhSRF9JRUVFODAyMTEKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgICAgcEFkYXB0
ZXItPlBvcnRDZmcuTWFsbG93UkZNT05UeCA9IEZBTFNFOworICAgICAgICAgICAgICAgIHBBZGFw
dGVyLT5uZXQtPnR5cGUgPSA4MDI7IC8vIEFSUEhSRF9JRUVFODAyMTFfUFJJU00KKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJl
dHVybiAtRU9QTk9UU1VQUDsKKyAgICAgICAgICAgfQorCX0KKworICAgICAgICB2YWx1ZSA9IHBB
ZGFwdGVyLT5Qb3J0Q2ZnLk1hbGxvd1JGTU9OVHggPT0gVFJVRSA/ICcxJyA6ICcwJzsKKworICAg
ICAgICBkYXRhLT5sZW5ndGggPSBzaXplb2YgKGNoYXIpOworICAgICAgICBpZiAoZGF0YS0+cG9p
bnRlciAhPSBOVUxMICYmIGNvcHlfdG9fdXNlciAoZGF0YS0+cG9pbnRlciwgJnZhbHVlLCBkYXRh
LT5sZW5ndGgpKQorICAgICAgICAgICAgIERCR1BSSU5UIChSVF9ERUJVR19FUlJPUiwgInJ0dXNi
X2lvY3RsX3NldHJmbW9udHggLSBjb3B5IHRvIHVzZXIgZmFpbHVyZS5cbiIpOworCisJcmV0dXJu
IDA7Cit9CisKK3N0YXRpYyBpbnQgcnR1c2JfaW9jdGxfc2V0YWRob2Ntb2RlKHN0cnVjdCBuZXRf
ZGV2aWNlICpkZXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl3
X3JlcXVlc3RfaW5mbyAqaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dHJ1Y3QgaXdfcG9pbnQgKmRhdGEsIGNoYXIgKmV4dHJhKQoreworCVBSVDI1NzBBREFQVEVSIHBB
ZGFwdGVyID0gKFBSVDI1NzBBREFQVEVSKSBkZXYtPnByaXY7CisJaW50IHBhcmFtID0gKihpbnQg
KilleHRyYTsKKworCXN3aXRjaChwYXJhbSkKKwl7CisJY2FzZSAwOgorCQkJcEFkYXB0ZXItPlBv
cnRDZmcuQWRob2NNb2RlID0gMDsKKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQlwQWRhcHRlci0+
UG9ydENmZy5BZGhvY01vZGUgPSAxOworCQkJYnJlYWs7CisJCWNhc2UgMjoKKwkJCXBBZGFwdGVy
LT5Qb3J0Q2ZnLkFkaG9jTW9kZSA9IDI7CisJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJu
IC1FT1BOT1RTVVBQOworCX0KKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IHJ0dXNiX2lv
Y3RsX3NldHBzbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZv
ICppbmZvLAogCQkJIHZvaWQgKncsIGNoYXIgKmV4dHJhKQogewogCiAJUFJUMjU3MEFEQVBURVIg
cEFkYXB0ZXIgPSAoUFJUMjU3MEFEQVBURVIpIGRldi0+cHJpdjsKLQlpbnQgKnBhcmFtID0gKGlu
dCAqKSBleHRyYTsKKwlpbnQgcGFyYW0gPSAqKGludCAqKWV4dHJhOwogCi0Jc3dpdGNoKHBhcmFt
WzBdKQorCXN3aXRjaChwYXJhbSkKIAl7CiAJCWNhc2UgMDoKIAkJCS8vIGNsZWFyIFBTTSBiaXQg
aW1tZWRpYXRlbHkKQEAgLTExODcsMzAgKzEyNzUsMzAgQEAKIAkoaXdfaGFuZGxlcikgTlVMTCwJ
CS8qIFNJT0NHSVdQT1dFUiAyZCovCiB9Owogc3RhdGljIGNvbnN0IGl3X2hhbmRsZXIgcnR1c2Jf
cHJpdl9oYW5kbGVyc1tdID0gewotCShpd19oYW5kbGVyKSBOVUxMLAkJLyogU0lPQ1dGSVJTVFBS
SVYrMCAqLwotCShpd19oYW5kbGVyKSBOVUxMLAkJLyogU0lPQ1dGSVJTVFBSSVYrMyAqLwotCShp
d19oYW5kbGVyKSBydHVzYl9pb2N0bF9zZXRhdXRoLAkJLyogU0lPQ1dGSVJTVFBSSVYrMiAqLwot
CShpd19oYW5kbGVyKSBOVUxMLAkJLyogU0lPQ1dGSVJTVFBSSVYrMyAqLwotCShpd19oYW5kbGVy
KSBydHVzYl9pb2N0bF9zZXRlbmNyeXAsCQkvKiBTSU9DV0ZJUlNUUFJJVis0ICovCi0JKGl3X2hh
bmRsZXIpIHJ0dXNiX2lvY3RsX3NldHdwYXBzaywJCS8qIFNJT0NXRklSU1RQUklWKzUgKi8KLQko
aXdfaGFuZGxlcikgcnR1c2JfaW9jdGxfc2V0cHNtLAkJLyogU0lPQ1dGSVJTVFBSSVYrNiAqLwot
Ly8JKGl3X2hhbmRsZXIpIHJ0dXNiX2lvY3RsX3NldGtleWlkLAkJLyogU0lPQ1dGSVJTVFBSSVYr
MSAqLworCShpd19oYW5kbGVyKSBydHVzYl9pb2N0bF9zZXRhdXRoLAkJLyogU0lPQ1dGSVJTVFBS
SVYrMCAqLworCShpd19oYW5kbGVyKSBydHVzYl9pb2N0bF9zZXRlbmNyeXAsCQkvKiBTSU9DV0ZJ
UlNUUFJJVisxICovCisJKGl3X2hhbmRsZXIpIHJ0dXNiX2lvY3RsX3NldHdwYXBzaywJCS8qIFNJ
T0NXRklSU1RQUklWKzIgKi8KKwkoaXdfaGFuZGxlcikgcnR1c2JfaW9jdGxfc2V0cHNtLAkJLyog
U0lPQ1dGSVJTVFBSSVYrMyAqLworCShpd19oYW5kbGVyKSBydHVzYl9pb2N0bF9zZXRhZGhvY21v
ZGUsCQkvKiBTSU9DV0ZJUlNUUFJJVis0ICovCisJKGl3X2hhbmRsZXIpIHJ0dXNiX2lvY3RsX3Nl
dHJmbW9udHgsCQkvKiBTSU9DV0ZJUlNUUFJJVis1ICovCiB9Owotc3RydWN0IGl3X3ByaXZfYXJn
cyBwcml2dGFiW10gPSB7Ci0vLwl7IFJUUFJJVl9JT0NUTF9TRVQsIAotLy8JICBJV19QUklWX1RZ
UEVfSU5UICB8MSwgMCwgICIifSwgIC8vIFZhcmlhYmxlIGFyZyBjb3VudCAgCi0JeyAxLCAKLQkg
IElXX1BSSVZfVFlQRV9JTlQgIHwxLCAwLCAgIiJ9LCAgLy8gVmFyaWFibGUgYXJnIGNvdW50ICAK
LS8vCXsgUlRQUklWX0lPQ1RMX0tFWUlELCAKLS8vCSAgSVdfUFJJVl9UWVBFX0lOVCAgfDEsIDAs
ICAia2lkIn0sICAvLyBWYXJpYWJsZSBhcmcgY291bnQgIAorCisjZGVmaW5lIE1BWF9XUEFQU0tf
U1RSSU5HIDY0CitzdGF0aWMgY29uc3Qgc3RydWN0IGl3X3ByaXZfYXJncyBwcml2dGFiW10gPSB7
CiAJeyBSVFBSSVZfSU9DVExfQVVUSCwgCi0JICBJV19QUklWX1RZUEVfSU5UICB8MSwgMCwgICJh
dXRoIn0sICAvLyBWYXJpYWJsZSBhcmcgY291bnQgIAorCSAgSVdfUFJJVl9UWVBFX0lOVCB8IElX
X1BSSVZfU0laRV9GSVhFRCB8IDEsIDAsICAiYXV0aCJ9LAogCXsgUlRQUklWX0lPQ1RMX1dFUFNU
QVRVUywgCi0JICBJV19QUklWX1RZUEVfSU5UICB8MSwgMCwgICJlbmMifSwgIC8vIFZhcmlhYmxl
IGFyZyBjb3VudCAgCisJICBJV19QUklWX1RZUEVfSU5UIHwgSVdfUFJJVl9TSVpFX0ZJWEVEIHwg
MSwgMCwgICJlbmMifSwKIAl7IFJUUFJJVl9JT0NUTF9XUEFQU0ssIAotCSAgSVdfUFJJVl9UWVBF
X0NIQVIgfDY0LCAwLCAgIndwYXBzayJ9LCAgLy8gVmFyaWFibGUgYXJnIGNvdW50ICAKKwkgIElX
X1BSSVZfVFlQRV9DSEFSIHwgSVdfUFJJVl9TSVpFX0ZJWEVEIHwgTUFYX1dQQVBTS19TVFJJTkcs
CisJICAwLCAgIndwYXBzayJ9LCAgLy8gVmFyaWFibGUgYXJnIGNvdW50ICAKIAl7IFJUUFJJVl9J
T0NUTF9QU00sIAotCSAgSVdfUFJJVl9UWVBFX0lOVCAgfDEsIDAsICAicHNtIn0sICAvLyBWYXJp
YWJsZSBhcmcgY291bnQgIAorCSAgSVdfUFJJVl9UWVBFX0lOVCB8IElXX1BSSVZfU0laRV9GSVhF
RCB8IDEsIDAsICAicHNtIn0sICAvLyBWYXJpYWJsZSBhcmcgY291bnQgIAorCXsgUlRQUklWX0lP
Q1RMX0FESE9DTU9ERSwKKwkgIElXX1BSSVZfVFlQRV9JTlQgfCBJV19QUklWX1NJWkVfRklYRUQg
fCAxLCAwLCAgImFkaG9jbW9kZSJ9LAorCXsgUlRQUklWX0lPQ1RMX1JGTU9OVFgsCisJICBJV19Q
UklWX1RZUEVfSU5UIHwgSVdfUFJJVl9TSVpFX0ZJWEVEIHwgMSwKKwkgIElXX1BSSVZfVFlQRV9D
SEFSIHwgSVdfUFJJVl9TSVpFX0ZJWEVEIHwgc2l6ZW9mKGNoYXIpLCAicmZtb250eCJ9LCAKICNp
ZiAwCiAJeyBSVFBSSVZfSU9DVExfQkJQLAogCSAgSVdfUFJJVl9UWVBFX0NIQVIgfCAxMDI0LCBJ
V19QUklWX1RZUEVfQ0hBUiB8IDEwMjQsCkBAIC0xMjIzLDE0ICsxMzExLDE0IEBACiAKIGNvbnN0
IHN0cnVjdCBpd19oYW5kbGVyX2RlZiBydDI1MDB1c2JfaXdfaGFuZGxlcl9kZWYgPQogewotI2Rl
ZmluZQlOKGEpCShzaXplb2YgKGEpIC8gc2l6ZW9mIChhWzBdKSkKLQkuc3RhbmRhcmQJPSAoaXdf
aGFuZGxlciAqKSBydHVzYl9oYW5kbGVyLAotCS5udW1fc3RhbmRhcmQJPSBzaXplb2YocnR1c2Jf
aGFuZGxlcikgLyBzaXplb2YoaXdfaGFuZGxlciksCi0JLnByaXZhdGUJPSAoaXdfaGFuZGxlciAq
KSBydHVzYl9wcml2X2hhbmRsZXJzLAotCS5udW1fcHJpdmF0ZQkJPSBOKHJ0dXNiX3ByaXZfaGFu
ZGxlcnMpLAotCS5wcml2YXRlX2FyZ3MJPSAoc3RydWN0IGl3X3ByaXZfYXJncyAqKSBwcml2dGFi
LAotCS5udW1fcHJpdmF0ZV9hcmdzCT0gTihwcml2dGFiKSwKKwkuc3RhbmRhcmQJCT0gKGl3X2hh
bmRsZXIgKikgcnR1c2JfaGFuZGxlciwKKwkubnVtX3N0YW5kYXJkCQk9IHNpemVvZihydHVzYl9o
YW5kbGVyKSAvIHNpemVvZihpd19oYW5kbGVyKSwKKwkucHJpdmF0ZQkJPSAoaXdfaGFuZGxlciAq
KSBydHVzYl9wcml2X2hhbmRsZXJzLAorCS5udW1fcHJpdmF0ZQkJPSBBUlJBWV9TSVpFKHJ0dXNi
X2hhbmRsZXIpLAorCS5wcml2YXRlX2FyZ3MJCT0gKHN0cnVjdCBpd19wcml2X2FyZ3MgKikgcHJp
dnRhYiwKKwkubnVtX3ByaXZhdGVfYXJncwk9IEFSUkFZX1NJWkUocHJpdnRhYiksCiB9OworCiBJ
TlQgUlRNUFF1ZXJ5SW5mb3JtYXRpb24oCiAJSU4JUFJUMjU3MEFEQVBURVIgcEFkYXB0ZXIsCiAJ
SU4JT1VUIHN0cnVjdCBpZnJlcQkqcnEsCkBAIC0yMTc0LDE0ICsyMjYyLDE3IEBACiAjaWZkZWYg
UlQyNTAwX0RCRwogCXsKIAkJCQkJCWludAlpOwotCQkJCQkJcHJpbnRrKCJSVF9PSURfODAyXzEx
X0FERF9XUEEgS2V5ID0+IFxuIik7CisJCQkJCQlEQkdQUklOVChSVF9ERUJVR19MT1VELCAiUlRf
T0lEXzgwMl8xMV9BRERfV1BBIEtleSA9PiBcbiIpOworCQkJCQkJREJHUFJJTlQoUlRfREVCVUdf
TE9VRCwgIiAgICAiKTsKIAkJCQkJCWZvciAoaSA9IDA7IGkgPCBLZXkuS2V5TGVuZ3RoOyBpKysp
CiAJCQkJCQl7Ci0JCQkJCQkJcHJpbnRrKCIlMDJ4OiIsIHBBZGFwdGVyLT5Qb3J0Q2ZnLlBza0tl
eS5LZXlbaV0pOwotCQkJCQkJCWlmIChpJTE2ID09IDE1KQotCQkJCQkJCQlwcmludGsoIlxuIik7
CisJCQkJCQkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX0xPVUQsICIlMDJ4OiIsIHBBZGFwdGVyLT5Q
b3J0Q2ZnLlBza0tleS5LZXlbaV0pOworCQkJCQkJCWlmIChpJTE2ID09IDE1KSB7CisJCQkJCQkJ
CURCR1BSSU5UX1JBVyhSVF9ERUJVR19MT1VELCAiXG4iKTsKKwkJCQkJCQkJREJHUFJJTlQoUlRf
REVCVUdfTE9VRCwgIiAgICAiKTsKKwkJCQkJCQl9CiAJCQkJCQl9Ci0JCQkJCQlwcmludGsoIlxu
Iik7CisJCQkJCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfTE9VRCwgIlxuIik7CiAJfQogI2VuZGlm
CiAJCQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgIlNldDo6UlRfT0lEXzgwMl8xMV9BRERf
V1BBIChpZD0weCV4LCBMZW49JWQtYnl0ZSlcbiIsIEtleS5LZXlJbmRleCwgS2V5LktleUxlbmd0
aCk7CkBAIC0yMjM4LDEwICsyMzI5LDEwIEBACiAJVFhSWF9DU1IwX1NUUlVDICBUeFJ4Q3NyMDsK
IAlVQ0hBUgkJWmVyb0tleVs0ICogMTZdOwogCQotCURCR1BSSU5UX1JBVyhSVF9ERUJVR19URU1Q
LCI9PT0+UlRNUFdQQUFkZEtleVByb2NcbiIgKTsKKwlEQkdQUklOVChSVF9ERUJVR19URU1QLCI9
PT0+UlRNUFdQQUFkZEtleVByb2NcbiIgKTsKIAlwS2V5ID0gKFBORElTXzgwMl8xMV9LRVkpIHBC
dWY7CiAJS2V5SWR4ID0gcEtleS0+S2V5SW5kZXggJiAweGZmOwotCURCR1BSSU5UX1JBVyhSVF9E
RUJVR19URU1QLCJSVE1QV1BBQWRkS2V5UHJvYyBLZXlJZHggPSAleFxuIiwgcEtleS0+S2V5SW5k
ZXggKTsKKwlEQkdQUklOVChSVF9ERUJVR19URU1QLCJSVE1QV1BBQWRkS2V5UHJvYyBLZXlJZHgg
PSAleFxuIiwgcEtleS0+S2V5SW5kZXggKTsKIAkvLyBCaXQgMzEgb2YgQWRkLWtleSwgVHggS2V5
CiAJYlR4S2V5CQkgICA9IChwS2V5LT5LZXlJbmRleCAmIDB4ODAwMDAwMDApID8gVFJVRSA6IEZB
TFNFOwogCS8vIEJpdCAzMCBvZiBBZGQta2V5IFBhaXJ3aXNlS2V5CkBAIC0yMzM3LDMyICsyNDI4
LDMyIEBACiAKIAkJU3RhdHVzID0gTkRJU19TVEFUVVNfU1VDQ0VTUzsKIAkJCi0JCURCR1BSSU5U
X1JBVyhSVF9ERUJVR19URU1QLCJBZGQgUGFpcndpc2UgVEtJUCBLZXkgJWQ9ICIsUGFpcndpc2VJ
ZHgpOwotCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfVEVNUCwiUGFpcndpc2UgVEtJUCBLZXkgPSAi
KTsKKwkJREJHUFJJTlQoUlRfREVCVUdfVEVNUCwiQWRkIFBhaXJ3aXNlIFRLSVAgS2V5ICVkPSAi
LFBhaXJ3aXNlSWR4KTsKKwkJREJHUFJJTlQoUlRfREVCVUdfVEVNUCwiUGFpcndpc2UgVEtJUCBL
ZXkgPSAiKTsKIAkJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspCiAJCXsKIAkJCURCR1BSSU5UX1JB
VyhSVF9ERUJVR19JTkZPLCIlMDJ4OiIsIHBBZGFwdGVyLT5Qb3J0Q2ZnLlBhaXJ3aXNlS2V5W1Bh
aXJ3aXNlSWR4XS5LZXlbaV0pOwogCQl9CiAJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19JTkZPLCJc
biIpOwkJCQkJCQotCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfSU5GTywiVEtJUCBSeCBNSUMgS2V5
ID0gIik7CisJCURCR1BSSU5UKFJUX0RFQlVHX0lORk8sIlRLSVAgUnggTUlDIEtleSA9ICIpOwog
CQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQogCQl7CiAJCQlEQkdQUklOVF9SQVcoUlRfREVCVUdf
SU5GTywiJTAyeDoiLCBwQWRhcHRlci0+UG9ydENmZy5QYWlyd2lzZUtleVtQYWlyd2lzZUlkeF0u
UnhNaWNbaV0pOwogCQl9CiAJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19JTkZPLCJcbiIpOwkJCQkJ
CQotCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfSU5GTywiVEtJUCBUeCBNSUMgS2V5ID0gIik7CisJ
CURCR1BSSU5UKFJUX0RFQlVHX0lORk8sIlRLSVAgVHggTUlDIEtleSA9ICIpOwogCQlmb3IgKGkg
PSAwOyBpIDwgODsgaSsrKQogCQl7CiAJCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfSU5GTywiJTAy
eDoiLCBwQWRhcHRlci0+UG9ydENmZy5QYWlyd2lzZUtleVtQYWlyd2lzZUlkeF0uVHhNaWNbaV0p
OwogCQl9CiAJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19JTkZPLCJcbiIpOwkJCQkJCQotCQlEQkdQ
UklOVF9SQVcoUlRfREVCVUdfSU5GTywiVEtJUCBSeFRTQyA9ICIpOworCQlEQkdQUklOVChSVF9E
RUJVR19JTkZPLCJUS0lQIFJ4VFNDID0gIik7CiAJCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspCiAJ
CXsKIAkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19JTkZPLCIlMDJ4OiIsIHBBZGFwdGVyLT5Qb3J0
Q2ZnLlBhaXJ3aXNlS2V5W1BhaXJ3aXNlSWR4XS5SeFRzY1tpXSk7CiAJCX0KIAkJREJHUFJJTlRf
UkFXKFJUX0RFQlVHX0lORk8sIlxuIik7CQkJCQkJCi0JCURCR1BSSU5UX1JBVyhSVF9ERUJVR19J
TkZPLCJCU1NJRDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeCBcbiIsCisJCURCR1BSSU5U
KFJUX0RFQlVHX0lORk8sIkJTU0lEOiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4IFxuIiwK
IAkJCXBLZXktPkJTU0lEWzBdLHBLZXktPkJTU0lEWzFdLHBLZXktPkJTU0lEWzJdLHBLZXktPkJT
U0lEWzNdLHBLZXktPkJTU0lEWzRdLHBLZXktPkJTU0lEWzVdKTsKIAkJCiAJfQpAQCAtMjQ1Mywx
MyArMjU0NCwxMyBAQAogCQl7CiAJCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfRVJST1IsIiUwMng6
IiwgcEFkYXB0ZXItPlBvcnRDZmcuR3JvdXBLZXlbS2V5SWR4XS5LZXlbaV0pOwogCQl9Ci0JCURC
R1BSSU5UKFJUX0RFQlVHX0VSUk9SLCJcbiIpOwkJCQkJCQorCQlEQkdQUklOVF9SQVcoUlRfREVC
VUdfRVJST1IsIlxuIik7CQkJCQkJCiAJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCJUS0lQIFJ4
IE1JQyBLZXkgPSBcbiIpOwogCQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQogCQl7CiAJCQlEQkdQ
UklOVF9SQVcoUlRfREVCVUdfVFJBQ0UsIiUwMng6IiwgcEFkYXB0ZXItPlBvcnRDZmcuR3JvdXBL
ZXlbS2V5SWR4XS5SeE1pY1tpXSk7CiAJCX0KLQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsIlxu
Iik7CQkJCQkJCisJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19UUkFDRSwiXG4iKTsJCQkJCQkKIAkJ
REJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsIlRLSVAgVHggTUlDIEtleSA9IFxuIik7CiAJCWZvciAo
aSA9IDA7IGkgPCA4OyBpKyspCiAJCXsKQEAgLTI0NzEsNyArMjU2Miw3IEBACiAJCXsKIAkJCURC
R1BSSU5UX1JBVyhSVF9ERUJVR19UUkFDRSwiJTAyeDoiLCBwQWRhcHRlci0+UG9ydENmZy5Hcm91
cEtleVtLZXlJZHhdLlJ4VHNjW2ldKTsKIAkJfQotCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwi
XG4iKTsJCQkJCQkKKwkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX1RSQUNFLCJcbiIpOwkJCQkJCQog
CQlEQkdQUklOVChSVF9ERUJVR19JTkZPLCJCU1NJRDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6
JTAyeCBcbiIsCiAJCQlwS2V5LT5CU1NJRFswXSxwS2V5LT5CU1NJRFsxXSxwS2V5LT5CU1NJRFsy
XSxwS2V5LT5CU1NJRFszXSxwS2V5LT5CU1NJRFs0XSxwS2V5LT5CU1NJRFs1XSk7CiAJCkBAIC0z
ODE0LDE0ICszOTA1LDE3IEBACiAJLy8gU3RhcnQgU1RBIHN1cHBsaWNhbnQgc3RhdGUgbWFjaGlu
ZQogCXBBZGFwdGVyLT5Qb3J0Q2ZnLldwYVN0YXRlID0gU1NfU1RBUlQ7CiAjaWZkZWYgUlQyNTAw
X0RCRwotCXByaW50aygiU2V0X1dQQVBTS19Qcm9jIFdQQVBTSyBLZXkgPT4gXG4iKTsKKwlEQkdQ
UklOVChSVF9ERUJVR19MT1VELCAiU2V0X1dQQVBTS19Qcm9jIFdQQVBTSyBLZXkgPT4gXG4iKTsK
KwlEQkdQUklOVChSVF9ERUJVR19MT1VELCAiICAgICIpOwogCWZvciAoaSA9IDA7IGkgPCAzMjsg
aSsrKQogCXsKLQkJcHJpbnRrKCIlMDJ4OiIsIHBBZGFwdGVyLT5Qb3J0Q2ZnLlBza0tleS5LZXlb
aV0pOwotCQlpZiAoaSUxNiA9PSAxNSkKLQkJCXByaW50aygiXG4iKTsKKwkJREJHUFJJTlRfUkFX
KFJUX0RFQlVHX0xPVUQsICIlMDJ4OiIsIHBBZGFwdGVyLT5Qb3J0Q2ZnLlBza0tleS5LZXlbaV0p
OworCQlpZiAoaSUxNiA9PSAxNSkgeworCQkgIERCR1BSSU5UX1JBVyhSVF9ERUJVR19MT1VELCAi
XG4iKTsKKwkJICBEQkdQUklOVChSVF9ERUJVR19MT1VELCAiICAgICIpOworCQl9CiAJfQotCXBy
aW50aygiXG4iKTsKKwlEQkdQUklOVF9SQVcoUlRfREVCVUdfTE9VRCwgIlxuIik7CiAjZW5kaWYK
ICNlbmRpZgogcmV0dXJuIFRSVUU7CkBAIC0zODQxLDcgKzM5MzUsNiBAQAogCU5ESVNfODAyXzEx
X0ZSQUdNRU5UQVRJT05fVEhSRVNIT0xEIEZyYWdUaHJlc2g7CiAJTkRJU184MDJfMTFfTUFDX0FE
RFJFU1MgCQkJQnNzaWQ7CiAJSU5UIAkJCQkJCQkJU3RhdHVzID0gTkRJU19TVEFUVVNfU1VDQ0VT
UzsJCi0JVVNIT1JUCQkJCQkJCQlzdWJjbWQ7CiAJQk9PTEVBTiAJCQkJCQkJU3RhdGVNYWNoaW5l
VG91Y2hlZCA9IEZBTFNFOwogCWludCAJCQkJCQkJCSBjaGFuID0gLTEsIGluZGV4ID0gMCwgbGVu
ID0gMDsKIAlVU0hPUlQJVmFsdWU7CkBAIC0zODUxLDggKzM5NDQsMTMgQEAKIAkJREJHUFJJTlQo
UlRfREVCVUdfVFJBQ0UsIklORk86OnJlbW92ZSBpbiBwcm9ncmVzcyFcbiIpOwogCQlyZXR1cm4g
LUVORVRET1dOOwogCX0KKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigy
LCA1LCAwKQogCWlmIChwQWRhcHRlci0+UlRVU0JDbWRUaHJfcGlkIDwgMCkKIAkJcmV0dXJuIC1F
TkVURE9XTjsKKyNlbHNlCisJaWYgKCFwQWRhcHRlci0+UlRVU0JDbWRUaHJfYWN0aXZlKQorCQly
ZXR1cm4gLUVORVRET1dOOworI2VuZGlmCiAJCiAJc3dpdGNoKGNtZCkgewogCkBAIC00MDkxLDc0
ICs0MTg5LDE2IEBACiAJCQlEQkdQUklOVChSVF9ERUJVR19URU1QLCAiUXVlcnk6OlNJT0NHSVdB
UExJU1QgKCVkIEJTUyByZXR1cm5lZClcbiIscEFkYXB0ZXItPlBvcnRDZmcuQnNzVGFiLkJzc05y
KTsKIAkJCURCR1BSSU5UKFJUX0RFQlVHX1RFTVAsIjw9PT5XSVJFTEVTU19FWFQ9JWQgIElPQ1RM
OjpTSU9DR0lXQVBMSVNUIFxuIixXSVJFTEVTU19FWFQpOwogCQkJYnJlYWs7Ci0JCWNhc2UgUlRf
UFJJVl9JT0NUTDoKLQkJCXN1YmNtZCA9IHdycS0+dS5kYXRhLmZsYWdzOwotCQkJaWYoIHN1YmNt
ZCAmIE9JRF9HRVRfU0VUX1RPR0dMRSkKLQkJCQlTdGF0dXMgPSBSVE1QU2V0SW5mb3JtYXRpb24o
cEFkYXB0ZXIsIHJxLCBzdWJjbWQpOwotCQkJZWxzZQotCQkJCVN0YXR1cyA9IFJUTVBRdWVyeUlu
Zm9ybWF0aW9uKHBBZGFwdGVyLCBycSwgc3ViY21kKTsKLQkJCWJyZWFrOwogCiAJCWNhc2UgU0lP
Q0dJV1BSSVY6CiAJCQlpZiAod3JxLT51LmRhdGEucG9pbnRlcikgewotCQkJCWlmICggdmVyaWZ5
X2FyZWEoVkVSSUZZX1dSSVRFLCB3cnEtPnUuZGF0YS5wb2ludGVyLCBzaXplb2YocHJpdnRhYikp
ICkKKwkJCQlpZiAoICFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCB3cnEtPnUuZGF0YS5wb2ludGVy
LCBzaXplb2YocHJpdnRhYikpICkKIAkJCQkJYnJlYWs7CiAJCQkJd3JxLT51LmRhdGEubGVuZ3Ro
ID0gc2l6ZW9mKHByaXZ0YWIpIC8gc2l6ZW9mKHByaXZ0YWJbMF0pOwogCQkJCWlmIChjb3B5X3Rv
X3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgcHJpdnRhYiwgc2l6ZW9mKHByaXZ0YWIpKSkKIAkJ
CQkJU3RhdHVzID0gLUVGQVVMVDsKIAkJCX0KIAkJCWJyZWFrOwotCQljYXNlIFJUUFJJVl9JT0NU
TF9TRVQ6Ci0jaWYgMAotCQkJewkJCQkKLQkJCQlpbnQgaTsKLQkJCQlpZiggdmVyaWZ5X2FyZWEo
VkVSSUZZX1JFQUQsIHdycS0+dS5kYXRhLnBvaW50ZXIsIHdycS0+dS5kYXRhLmxlbmd0aCkgKQot
CQkJCQlicmVhazsKLQotCQkJREJHUFJJTlQoUlRfREVCVUdfVEVNUCwgIlJUUFJJVl9JT0NUTF9T
RVQgMHglMDh4LCB3cnEtPnUuZGF0YS5sZW5ndGggPSAlZFxuIiwgY21kLHdycS0+dS5kYXRhLmxl
bmd0aCwgd3JxLT51LmRhdGEubGVuZ3RoKTsKLQkJCQkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19U
UkFDRSwgIlxuIik7Ci0JCQlmb3IgKGk9MDtpPHdycS0+dS5kYXRhLmxlbmd0aDtpKyspCi0JCQkJ
CQlEQkdQUklOVF9SQVcoUlRfREVCVUdfVFJBQ0UsICJbJWNdIiwgKHdycS0+dS5kYXRhLmxlbmd0
aCtpKSk7Ci0JCQkJCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfVFJBQ0UsICJcbiIpOwotCQkJCQkJ
I2lmIDAKLQkJCQljaGFyICp0aGlzX2NoYXI7Ci0JCQkJY2hhciAqdmFsdWU7Ci0JCQkJY2hhciAq
cG9pID0gd3JxLT51LmRhdGEucG9pbnRlcjsKLQkJCQl3aGlsZSAoKHRoaXNfY2hhciA9IHN0cnNl
cCgmcG9pLCAiLCIpKSAhPSBOVUxMKSAKLQkJCQl7Ci0JCQkJCWlmICghKnRoaXNfY2hhcikKLQkJ
CQkJCSBjb250aW51ZTsKLQotCQkJCQlpZiAoKHZhbHVlID0gc3RyY2hyKHRoaXNfY2hhciwgJz0n
KSkgIT0gTlVMTCkKLQkJCQkJCSp2YWx1ZSsrID0gMDsKLQotCQkJCQlpZiAoIXZhbHVlIHx8ICEq
dmFsdWUpCi0JCQkJCQljb250aW51ZTsKLQotCQkJCQlmb3IgKFBSVE1QX1BSSVZBVEVfU0VUX1BS
T0MgPSBSVE1QX1BSSVZBVEVfU1VQUE9SVF9QUk9DOyBQUlRNUF9QUklWQVRFX1NFVF9QUk9DLT5u
YW1lOyBQUlRNUF9QUklWQVRFX1NFVF9QUk9DKyspCi0JCQkJCXsKLQkJCQkJCWlmIChzdHJjbXAo
dGhpc19jaGFyLCBQUlRNUF9QUklWQVRFX1NFVF9QUk9DLT5uYW1lKSA9PSAwKSAKLQkJCQkJCXsJ
CQkJCQkKLQkJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAiaW9jdGw6Oihpd3ByaXYpIFsl
c11cbiIsIFBSVE1QX1BSSVZBVEVfU0VUX1BST0MtPm5hbWUpOwotCQkJCQkJCWlmKCFQUlRNUF9Q
UklWQVRFX1NFVF9QUk9DLT5zZXRfcHJvYyhwQWRhcHRlciwgdmFsdWUpKQotCQkJCQkJCXsJLy9G
QUxTRTpTZXQgcHJpdmF0ZSBmYWlsZWQgdGhlbiByZXR1cm4gSW52YWxpZCBhcmd1bWVudAotCQkJ
CQkJCQlTdGF0dXMgPSAtRUlOVkFMOwotCQkJCQkJCX0KLQkJCQkJCQlicmVhazsJLy9FeGl0IGZv
ciBsb29wLgotCQkJCQkJfQotCQkJCQl9Ci0KLQkJCQkJaWYoUFJUTVBfUFJJVkFURV9TRVRfUFJP
Qy0+bmFtZSA9PSBOVUxMKQotCQkJCQl7ICAvL05vdCBmb3VuZCBhcmd1bWVudAotCQkJCQkJU3Rh
dHVzID0gLUVJTlZBTDsKLQkJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAiaW9jdGw6Oihp
d3ByaXYpIE5vdCBTdXBwb3J0IFNldCBDb21tYW5kIFslcz0lc11cbiIsIHRoaXNfY2hhciwgdmFs
dWUpOwotCQkJCQkJYnJlYWs7Ci0JCQkJCX0KLQkJCQl9Ci0JCQkJI2VuZGlmCi0JCQl9Ci0jZW5k
aWYKLQkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJREJHUFJJTlQoUlRfREVCVUdfSU5GTywgIklP
Q1RMOjp1bmtub3duIElPQ1RMJ3MgY21kID0gMHglMDh4XG4iLCBjbWQpOwogCQkJU3RhdHVzID0g
LUVPUE5PVFNVUFA7CmRpZmYgLXJ1TiBydDI1NzAtMS4xLjAtYjEvTW9kdWxlL3J0dXNiX2luaXQu
YyBydDI1NzAtY3ZzLTIwMDUxMjI2MTYvTW9kdWxlL3J0dXNiX2luaXQuYwotLS0gcnQyNTcwLTEu
MS4wLWIxL01vZHVsZS9ydHVzYl9pbml0LmMJMjAwNS0wNy0zMCAxMTo0NDozMC4wMDAwMDAwMDAg
LTA1MDAKKysrIHJ0MjU3MC1jdnMtMjAwNTEyMjYxNi9Nb2R1bGUvcnR1c2JfaW5pdC5jCTIwMDUt
MTItMDggMTE6Mjg6MDMuMDAwMDAwMDAwIC0wNjAwCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVk
ZQkicnRfY29uZmlnLmgiCiAKICNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJ
T04oMiw1LDApCisjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgogI2RlZmluZSBSVDI1NzBfVVNC
X0FMTE9DX1VSQihpc28pCXVzYl9hbGxvY191cmIoaXNvLCBHRlBfQVRPTUlDKTsJCiAjZWxzZQog
I2RlZmluZSBSVDI1NzBfVVNCX0FMTE9DX1VSQihpc28pCXVzYl9hbGxvY191cmIoaXNvKTsKQEAg
LTM2NywxNCArMzY4LDE2IEBACiAJCQkJCQkJLy8gVXNlIFJhQ29uZmlnIGFzIFBTSyBhZ2VudC4K
IAkJCQkJCQkvLyBTdGFydCBTVEEgc3VwcGxpY2FudCBzdGF0ZSBtYWNoaW5lCiAJCQkJCQkJcEFk
LT5Qb3J0Q2ZnLldwYVN0YXRlID0gU1NfU1RBUlQ7Ci0JCQkJCQkJcHJpbnRrKCIlcyBXUEFQU0sg
S2V5ID0+IFxuIiwgX19GVU5DVElPTl9fKTsKKwkJCQkJCQlEQkdQUklOVChSVF9ERUJVR19MT1VE
LCAiJXMgV1BBUFNLIEtleSA9PiBcbiIsIF9fRlVOQ1RJT05fXyk7CisJCQkJCQkJREJHUFJJTlQo
UlRfREVCVUdfTE9VRCwgIiAgICAiKTsKIAkJCQkJCQlmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykK
IAkJCQkJCQl7Ci0JCQkJCQkJCXByaW50aygiJTAyeDoiLCBwQWQtPlBvcnRDZmcuUHNrS2V5Lktl
eVtpXSk7Ci0JCQkJCQkJCWlmIChpJTE2ID09IDE1KQotCQkJCQkJCQkJcHJpbnRrKCJcbiIpOwor
CQkJCQkJCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfTE9VRCwgIiUwMng6IiwgcEFkLT5Qb3J0Q2Zn
LlBza0tleS5LZXlbaV0pOworCQkJCQkJCQlpZiAoaSUxNiA9PSAxNSkgeworCQkJCQkJCQkgIERC
R1BSSU5UX1JBVyhSVF9ERUJVR19MT1VELCAiXG4iKTsKKwkJCQkJCQkJICBEQkdQUklOVChSVF9E
RUJVR19MT1VELCAiICAgICIpOwogCQkJCQkJCX0KLQkJCQkJCQlwcmludGsoIlxuIik7CisJCQkJ
CQkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX0xPVUQsICJcbiIpOwogCQkJCQkJfQogCQkJCQl9CiAJ
CQkJCS8vRGVmYXVsdEtleUlECkBAIC0xMTE5LDcgKzExMjIsNyBAQAogCQogCQlSVFVTQldyaXRl
TUFDUmVnaXN0ZXIocEFkYXB0ZXIsIE1BQ19DU1IxLCA0KTsKIAkJUlRVU0JSZWFkTUFDUmVnaXN0
ZXIocEFkYXB0ZXIsIE1BQ19DU1IwLCAmdGVtcCk7Ci0JCWlmICggdGVtcCA9PSAzKXsKKwkJaWYg
KCB0ZW1wID49IDMpewogCQkgICBSVFVTQlJlYWRNQUNSZWdpc3RlcihwQWRhcHRlciwgUEhZX0NT
UjIsICZ0ZW1wKTsKIAkJICAgUlRVU0JXcml0ZU1BQ1JlZ2lzdGVyKHBBZGFwdGVyLCBQSFlfQ1NS
MiwgdGVtcCAmIDB4RkZGRCk7CQkgICAKIAkJfQpAQCAtMTI0NCwyNSArMTI0NywzMiBAQAogCVBS
VDI1NzBBREFQVEVSIHBBZGFwdGVyID0gKFBSVDI1NzBBREFQVEVSKSBuZXRfZGV2LT5wcml2Owog
CiAJLy8gQ3JlYXQgTUxNRSBUaHJlYWQKKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxf
VkVSU0lPTigyLCA1LCAwKQorCS8vIENyZWF0IE1MTUUgVGhyZWFkCiAJcEFkYXB0ZXItPk1MTUVU
aHJfcGlkPSAtMTsKIAogCXBBZGFwdGVyLT5NTE1FVGhyX3BpZCA9IGtlcm5lbF90aHJlYWQoTWxt
ZVRocmVhZCwgcEFkYXB0ZXIsIENMT05FX1ZNKTsKLQlpZiAocEFkYXB0ZXItPk1MTUVUaHJfcGlk
IDwgMCkgewotCQlwcmludGsgKEtFUk5fV0FSTklORyAiJXM6IHVuYWJsZSB0byBzdGFydCBtbG1l
IHRocmVhZFxuIixwQWRhcHRlci0+bmV0LT5uYW1lKTsKLQl9CisJaWYgKHBBZGFwdGVyLT5NTE1F
VGhyX3BpZCA8IDApCisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiB1bmFibGUgdG8gc3RhcnQg
bWxtZSB0aHJlYWRcbiIscEFkYXB0ZXItPm5ldC0+bmFtZSk7CiAKIAkvLyBDcmVhdCBDb21tYW5k
IFRocmVhZAogCXBBZGFwdGVyLT5SVFVTQkNtZFRocl9waWQ9IC0xOwotCiAJcEFkYXB0ZXItPlJU
VVNCQ21kVGhyX3BpZCA9IGtlcm5lbF90aHJlYWQoUlRVU0JDbWRUaHJlYWQsIHBBZGFwdGVyLCBD
TE9ORV9WTSk7Ci0JaWYgKHBBZGFwdGVyLT5SVFVTQkNtZFRocl9waWQgPCAwKSB7Ci0JCXByaW50
ayAoS0VSTl9XQVJOSU5HICIlczogdW5hYmxlIHRvIHN0YXJ0IFJUVVNCQ21kIHRocmVhZFxuIixw
QWRhcHRlci0+bmV0LT5uYW1lKTsKLQl9CisJaWYgKHBBZGFwdGVyLT5SVFVTQkNtZFRocl9waWQg
PCAwKQorCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogdW5hYmxlIHRvIHN0YXJ0IFJUVVNCQ21k
IHRocmVhZFxuIixwQWRhcHRlci0+bmV0LT5uYW1lKTsKKyNlbHNlCisJLy8gQ3JlYXQgTUxNRSBU
aHJlYWQKKwlwQWRhcHRlci0+TUxNRVRociA9IGt0aHJlYWRfcnVuKE1sbWVUaHJlYWQsIHBBZGFw
dGVyLCAicnR1c2ItbWxtZSIpOworCWlmIChJU19FUlIocEFkYXB0ZXItPk1MTUVUaHIpKQorCQlw
cmludGsoS0VSTl9XQVJOSU5HICIlczogdW5hYmxlIHRvIHN0YXJ0IG1sbWUgdGhyZWFkXG4iLHBB
ZGFwdGVyLT5uZXQtPm5hbWUpOworCS8vIENyZWF0IENvbW1hbmQgVGhyZWFkCisJcEFkYXB0ZXIt
PlJUVVNCQ21kVGhyID0ga3RocmVhZF9ydW4oUlRVU0JDbWRUaHJlYWQsIHBBZGFwdGVyLCAicnR1
c2ItdXNiY21kIik7CisJaWYgKElTX0VSUihwQWRhcHRlci0+UlRVU0JDbWRUaHIpKQorCQlwcmlu
dGsoS0VSTl9XQVJOSU5HICIlczogdW5hYmxlIHRvIHN0YXJ0IFJUVVNCQ21kIHRocmVhZFxuIixw
QWRhcHRlci0+bmV0LT5uYW1lKTsKKyNlbmRpZgorfQogCi0JLyogV2FpdCBmb3IgdGhlIHRocmVh
ZCB0byBzdGFydCAqLwotCS8vd2FpdF9mb3JfY29tcGxldGlvbigmKHBBZGFwdGVyLT5ub3RpZnkp
KTsKIAotfQogTkRJU19TVEFUVVMgUlRNUEFsbG9jQWRhcHRlckJsb2NrKCBQUlQyNTcwQURBUFRF
UgkqcHBBZGFwdGVyCSkKIHsKIAlORElTX1NUQVRVUyAJU3RhdHVzPU5ESVNfU1RBVFVTX1NVQ0NF
U1M7CkBAIC0xNjM5LDcgKzE2NDksOSBAQAogCQlpbml0X01VVEVYKCYocEFkYXB0ZXItPnVzYmRl
dl9zZW1hcGhvcmUpKTsKIAkJaW5pdF9NVVRFWF9MT0NLRUQoJihwQWRhcHRlci0+bWxtZV9zZW1h
cGhvcmUpKTsKIAkJaW5pdF9NVVRFWF9MT0NLRUQoJihwQWRhcHRlci0+UlRVU0JDbWRfc2VtYXBo
b3JlKSk7CisjaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiwgNSwgMCkK
IAkJaW5pdF9jb21wbGV0aW9uICgmcEFkYXB0ZXItPm5vdGlmeSk7CisjZW5kaWYKIAkJTmRpc0Fs
bG9jYXRlU3BpbkxvY2soJnBBZGFwdGVyLT5DbWRRTG9jayk7CiAJCU5kaXNBbGxvY2F0ZVNwaW5M
b2NrKCZwQWRhcHRlci0+U2VuZFR4V2FpdFF1ZXVlTG9jayk7CiAJCU5kaXNBbGxvY2F0ZVNwaW5M
b2NrKCZwQWRhcHRlci0+QnVsa091dExvY2spOwpAQCAtMTg4Niw2ICsxODk4LDcgQEAKIAlwQWRh
cHRlci0+UG9ydENmZy5NaWJzcyA9IEZBTFNFOwogCXBBZGFwdGVyLT5Qb3J0Q2ZnLk1hc3NvYyA9
IEZBTFNFOwogCXBBZGFwdGVyLT5Qb3J0Q2ZnLk1hdXRoID0gRkFMU0U7CisJcEFkYXB0ZXItPlBv
cnRDZmcuTWFsbG93UkZNT05UeCA9IEZBTFNFOwogCiAJLy8gUEhZIHNwZWNpZmljYXRpb24KIAlw
QWRhcHRlci0+UG9ydENmZy5QaHlNb2RlID0gUEhZXzExQkdfTUlYRUQ7CkBAIC0xOTIwLDExICsx
OTMzLDEyIEBACiAJcEFkYXB0ZXItPlBvcnRDZmcuYkh3UmFkaW8JPSBUUlVFOwogCXBBZGFwdGVy
LT5Qb3J0Q2ZnLmJTd1JhZGlvCT0gVFJVRTsKIAlwQWRhcHRlci0+UG9ydENmZy5iUmFkaW8JPSBU
UlVFOwotCXByaW50aygiSU5JVCBiUmFkaW89JWRcbiIsIHBBZGFwdGVyLT5Qb3J0Q2ZnLmJSYWRp
byk7CisJREJHUFJJTlQoUlRfREVCVUdfVEVNUCwgIklOSVQgYlJhZGlvPSVkXG4iLCBwQWRhcHRl
ci0+UG9ydENmZy5iUmFkaW8pOwogCXBBZGFwdGVyLT5Qb3J0Q2ZnLmJIYXJkd2FyZVJhZGlvID0g
RkFMU0U7CQkvLyBEZWZhdWx0IGlzIE9GRgogCXBBZGFwdGVyLT5Qb3J0Q2ZnLmJBdXRvVHhBZ2Mg
PSBGQUxTRTsJCQkvLyBEZWZhdWx0IGlzIE9GRgogCXBBZGFwdGVyLT5Qb3J0Q2ZnLmJTaG93SGlk
ZGVuU1NJRCA9IEZBTFNFOwkJLy8gRGVmYXVsdCBubyBzaG93Ci0KKwlwQWRhcHRlci0+UG9ydENm
Zy5BZGhvY01vZGUgPSAwOyAvLyBiL2cgaW4gYWRob2MKKwkKIAkvLyBOaXRybyBtb2RlIGNvbnRy
b2wKIAlwQWRhcHRlci0+UG9ydENmZy5FbmFibGVUeEJ1cnN0ID0gMDsJCQogCXBBZGFwdGVyLT5Q
b3J0Q2ZnLkF1dG9SZWNvbm5lY3QgPSBUUlVFOwpAQCAtMjEwNiw0ICsyMTIwLDMgQEAKIAlkZWxf
dGltZXJfc3luYygmcFRpbWVyLT5UaW1lcik7CiB9CiAKLQpkaWZmIC1ydU4gcnQyNTcwLTEuMS4w
LWIxL01vZHVsZS9ydHVzYl9pby5jIHJ0MjU3MC1jdnMtMjAwNTEyMjYxNi9Nb2R1bGUvcnR1c2Jf
aW8uYwotLS0gcnQyNTcwLTEuMS4wLWIxL01vZHVsZS9ydHVzYl9pby5jCTIwMDUtMDctMzAgMTE6
NDQ6MzAuMDAwMDAwMDAwIC0wNTAwCisrKyBydDI1NzAtY3ZzLTIwMDUxMjI2MTYvTW9kdWxlL3J0
dXNiX2lvLmMJMjAwNS0xMi0wMiAwNjo1NToxNS4wMDAwMDAwMDAgLTA2MDAKQEAgLTcyNSwxMCAr
NzI1LDE0IEBACiAJSU4JVUxPTkcJCQlJbmZvcm1hdGlvbkJ1ZmZlckxlbmd0aCkKIHsKIAlQQ21k
UUVsbXQJY21kcWVsbXQgPSBOVUxMOwotCQotCWlmIChwQWRhcHRlci0+UlRVU0JDbWRUaHJfcGlk
IDwgMCkgCi0JCXJldHVybiBORElTX1NUQVRVU19SRVNPVVJDRVM7CiAKKyNpZiBMSU5VWF9WRVJT
SU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLCA1LCAwKQorCWlmIChwQWRhcHRlci0+UlRVU0JD
bWRUaHJfcGlkIDwgMCkKKwkJcmV0dXJuIE5ESVNfU1RBVFVTX1JFU09VUkNFUzsKKyNlbHNlCisJ
aWYgKCFwQWRhcHRlci0+UlRVU0JDbWRUaHJfYWN0aXZlKSAKKwkJcmV0dXJuIE5ESVNfU1RBVFVT
X1JFU09VUkNFUzsKKyNlbmRpZgogCWNtZHFlbG10ID0gKFBDbWRRRWxtdCkga21hbGxvYyhzaXpl
b2YoQ21kUUVsbXQpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWNtZHFlbG10KSAKIAl7CkBAIC04MTUs
OCArODE5LDEzIEBACiB7CiAJUENtZFFFbG10CWNtZHFlbG10ID0gTlVMTDsKIAotCWlmIChwQWRh
cHRlci0+UlRVU0JDbWRUaHJfcGlkIDwgMCkgCi0JCXJldHVybjsKKyNpZiBMSU5VWF9WRVJTSU9O
X0NPREUgPCBLRVJORUxfVkVSU0lPTigyLCA1LCAwKQorCWlmIChwQWRhcHRlci0+UlRVU0JDbWRU
aHJfcGlkIDwgMCkKKwkJcmV0dXJuIE5ESVNfU1RBVFVTX1JFU09VUkNFUzsKKyNlbHNlCisJaWYg
KCFwQWRhcHRlci0+UlRVU0JDbWRUaHJfYWN0aXZlKSAKKwkJcmV0dXJuIE5ESVNfU1RBVFVTX1JF
U09VUkNFUzsKKyNlbmRpZgogCQogCXN3aXRjaCAoT2lkKQogCXsKQEAgLTg2NSw3ICs4NzQsMTEg
QEAKIAkJCWJyZWFrOwogCX0KIAorI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJT
SU9OKDIsIDUsIDApCiAJaWYgKChjbWRxZWxtdCAhPSBOVUxMKSAmJiAoY21kcWVsbXQtPkluVXNl
ID09IEZBTFNFKSAmJiAocEFkYXB0ZXItPlJUVVNCQ21kVGhyX3BpZCA+IDApKQorI2Vsc2UKKwlp
ZiAoKGNtZHFlbG10ICE9IE5VTEwpICYmIChjbWRxZWxtdC0+SW5Vc2UgPT0gRkFMU0UpICYmIChw
QWRhcHRlci0+UlRVU0JDbWRUaHJfYWN0aXZlKSkKKyNlbmRpZgogCXsKIAkJY21kcWVsbXQtPklu
VXNlID0gVFJVRTsKIAkJY21kcWVsbXQtPmNvbW1hbmQgPSBPaWQ7CmRpZmYgLXJ1TiBydDI1NzAt
MS4xLjAtYjEvTW9kdWxlL3J0dXNiX21haW4uYyBydDI1NzAtY3ZzLTIwMDUxMjI2MTYvTW9kdWxl
L3J0dXNiX21haW4uYwotLS0gcnQyNTcwLTEuMS4wLWIxL01vZHVsZS9ydHVzYl9tYWluLmMJMjAw
NS0wNy0zMCAxMTo0NDozMC4wMDAwMDAwMDAgLTA1MDAKKysrIHJ0MjU3MC1jdnMtMjAwNTEyMjYx
Ni9Nb2R1bGUvcnR1c2JfbWFpbi5jCTIwMDUtMTItMTggMTU6NTk6NTkuMDAwMDAwMDAwIC0wNjAw
CkBAIC00MywxMiArNDMsMTQgQEAKICNkZWZpbmUgS0VSTkVMXzIwNDI0CTB4MjA0MTgKICNkZWZp
bmUgS0VSTkVMXzIwNDE4CTB4MjA0MTIKIAorI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5F
TF9WRVJTSU9OKDIsIDUsIDApCiAvKiBLZXJuZWwgdGhyZWFkIGFuZCB2YXJzLCB3aGljaCBoYW5k
bGVzIHBhY2tldHMgdGhhdCBhcmUgY29tcGxldGVkLiBPbmx5CiAgKiBwYWNrZXRzIHRoYXQgaGF2
ZSBhICJjb21wbGV0ZSIgZnVuY3Rpb24gYXJlIHNlbnQgaGVyZS4gVGhpcyB3YXksIHRoZQogICog
Y29tcGxldGlvbiBpcyBydW4gb3V0IG9mIGtlcm5lbCBjb250ZXh0LCBhbmQgZG9lc24ndCBibG9j
ayB0aGUgcmVzdCBvZgogICogdGhlIHN0YWNrLiAqLwogc3RhdGljIGludCBtbG1lX2tpbGw7CiBz
dGF0aWMgaW50IFJUVVNCQ21kX2tpbGw7CisjZW5kaWYgLyogTElOVVhfVkVSU0lPTl9DT0RFIDwg
S0VSTkVMX1ZFUlNJT04oMiwgNSwgMCkgKi8KIAogZXh0ZXJuCWNvbnN0IHN0cnVjdCBpd19oYW5k
bGVyX2RlZiBydDI1MDB1c2JfaXdfaGFuZGxlcl9kZWY7CiAKQEAgLTE5OSw3ICsyMDEsNyBAQAog
CiAgICAgcEFkLT5pd19zdGF0cy5zdGF0dXMgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgLy8g
U3RhdHVzIC0gZGV2aWNlIGRlcGVuZGVudCBmb3Igbm93CiAKLSAgICBwQWQtPml3X3N0YXRzLnF1
YWwucXVhbCA9IDA7Ly9wQWQtPk1sbWUuUm9hbUNxaTsgICAgICAgICAgICAvLyBsaW5rIHF1YWxp
dHkgKCVyZXRyaWVzLCBTTlIsICVtaXNzZWQgYmVhY29ucyBvciBiZXR0ZXIuLi4pCisgICAgcEFk
LT5pd19zdGF0cy5xdWFsLnF1YWwgPSBwQWQtPk1sbWUuQ2hhbm5lbFF1YWxpdHk7Ly9wQWQtPk1s
bWUuUm9hbUNxaTsgICAgICAgICAgICAvLyBsaW5rIHF1YWxpdHkgKCVyZXRyaWVzLCBTTlIsICVt
aXNzZWQgYmVhY29ucyBvciBiZXR0ZXIuLi4pCiAgICAgcEFkLT5pd19zdGF0cy5xdWFsLmxldmVs
ID0gcEFkLT5Qb3J0Q2ZnLkxhc3RSc3NpIC0gUlNTSV9UT19EQk1fT0ZGU0VUOyAgIC8vIHNpZ25h
bCBsZXZlbCAoZEJtKQogICAgICAgICAKICAgICBwQWQtPml3X3N0YXRzLnF1YWwubm9pc2UgPSAo
cEFkLT5Qb3J0Q2ZnLkxhc3RSMTdWYWx1ZSA+IEJCUF9SMTdfRFlOQU1JQ19VUF9CT1VORCkgPyBC
QlBfUjE3X0RZTkFNSUNfVVBfQk9VTkQgOiAoKFVMT05HKSBwQWQtPlBvcnRDZmcuTGFzdFIxN1Zh
bHVlKTsgICAgICAgICAgIC8vIG5vaXNlIGxldmVsIChkQm0pCkBAIC0yNDQsMjIgKzI0Niw2IEBA
CiAJTUxNRV9RVUVVRV9FTEVNICAgICAgICAgIE1zZ0VsZW07CiAJCiAJREJHUFJJTlQoUlRfREVC
VUdfVFJBQ0UsICI9PT09PiBSVFVTQkhhbHRcbiIpOwotCS8vIGtpbGwgTWxtZSB0aHJlYWQgaW4g
Y2xvc2UgaGFuZGxlcgotI2lmIDAKLQlpZiAocEFkYXB0ZXItPk1MTUVUaHJfcGlkID49IDApIHsK
LQkJcHJpbnRrKCJraWxsIE1MTUUgdGhyZWFkIFByb2Nlc3NcbiIpOwotCQltbG1lX2tpbGwgPSAx
OwotCQl1cCgmcEFkYXB0ZXItPm1sbWVfc2VtYXBob3JlKTsKLQkJd21iKCk7IC8vIG5lZWQgdG8g
Y2hlY2sKLQkJcmV0ID0ga2lsbF9wcm9jIChwQWRhcHRlci0+TUxNRVRocl9waWQsIFNJR1RFUk0s
IDEpOwotCQlpZiAocmV0KSB7Ci0JCQlwcmludGsgKEtFUk5fRVJSICIlczogdW5hYmxlIHRvIHNp
Z25hbCB0aHJlYWRcbiIsIHBBZGFwdGVyLT5uZXQtPm5hbWUpOwotCQkJcmV0dXJuOwotCQl9Ci0J
CXdhaXRfZm9yX2NvbXBsZXRpb24gKCZwQWRhcHRlci0+bm90aWZ5KTsKLQl9Ci0jZW5kaWYKLQkv
LwogCS8vIGJlZm9yZSBzZXQgZmxhZyBmUlRNUF9BREFQVEVSX0hBTFRfSU5fUFJPR1JFU1MsIAog
CS8vIHdlIHNob3VsZCBzZW5kIGEgZGlzYXNzb2MgZnJhbWUgdG8gb3VyIEFQLgogCS8vCkBAIC0x
MDkwLDEzICsxMDc2LDEzIEBACiAJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAiU2V0OjpP
SURfODAyXzExX0FERF9LRVkgIFxuIik7CQkJCQkJCQkKIHsKIAlpbnQJaSA9IDA7Ci0JUE5ESVNf
ODAyXzExX0tFWQlwa2V5ID0gKFBORElTXzgwMl8xMV9LRVkpcERhdGE7Ci0JCURCR1BSSU5UKFJU
X0RFQlVHX0lORk8sInBLZXktPktleU1hdGVyaWFsID1cbiAiKTsKKwkJREJHUFJJTlQoUlRfREVC
VUdfSU5GTywicEtleS0+S2V5TWF0ZXJpYWwgPSAiKTsKIAkJZm9yIChpID0gMDsgaSA8IDE2OyBp
KyspCiAJCXsKLQkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19JTkZPLCIlMDJ4OiIsIHBrZXktPktl
eU1hdGVyaWFsW2ldKTsKKwkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19JTkZPLCIlMDJ4OiIsCisJ
CQkgICgoUE5ESVNfODAyXzExX0tFWSlwRGF0YSktPktleU1hdGVyaWFsW2ldKTsKIAkJfQotCQlE
QkdQUklOVChSVF9ERUJVR19JTkZPLCJcbiIpOwkJCQkJCQorCQlEQkdQUklOVF9SQVcoUlRfREVC
VUdfSU5GTywiXG4iKTsJCQkJCQkKIH0KIAkJCQkJTmRpc1N0YXR1cyA9IFJUTVBXUEFBZGRLZXlQ
cm9jKHBBZGFwdGVyLCBwRGF0YSk7CiAJCQkJCQkJUlRVU0JCdWxrUmVjZWl2ZShwQWRhcHRlcik7
CkBAIC0xMTM1LDcgKzExMjEsNyBAQAogCQkJaWYgKChjbWRxZWxtdC0+Y29tbWFuZCAhPSBSVF9P
SURfU0lOR0xFX1JFQURfTUFDKSAmJgogCQkJCShjbWRxZWxtdC0+Y29tbWFuZCAhPSBSVF9PSURf
TVVMVElfUkVBRF9NQUMpICYmCiAJCQkJKGNtZHFlbG10LT5jb21tYW5kICE9IFJUX09JRF9WRU5E
T1JfUkVBRF9CQlApICYmCi0jaWYgREJHCQkJCQkKKyNpZmRlZiBEQkcJCQkJCQogCQkJCShjbWRx
ZWxtdC0+Y29tbWFuZCAhPSBSVF9PSURfODAyXzExX1FVRVJZX0hBUkRXQVJFX1JFR0lTVEVSKSAm
JgogI2VuZGlmCQkJCQkKIAkJCQkoY21kcWVsbXQtPmNvbW1hbmQgIT0gUlRfT0lEX1VTQl9WRU5E
T1JfRUVQUk9NX1JFQUQpKQpAQCAtMTIyMyw4ICsxMjA5LDEwIEBACiAJfQogCiAJLy8gbWxtZXRo
cmVhZCBmbGFnIHJlc3RhcnQKKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lP
TigyLCA1LCAwKQogCW1sbWVfa2lsbCA9IDA7CiAJUlRVU0JDbWRfa2lsbCA9MDsKKyNlbmRpZiAv
KiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLCA1LCAwKSAqLwogCUNyZWF0
ZVRocmVhZHMobmV0X2Rldik7CiAKIAkvLyBhdCBldmVyeSBvcGVuIGhhbmRsZXIsIGNvcHkgbWFj
IGFkZHJlc3MuCkBAIC0xMjg5LDEwICsxMjc3LDExIEBACiAJcEFkYXB0ZXItPndhaXQgPSBOVUxM
OwogCXJlbW92ZV93YWl0X3F1ZXVlICgmdW5saW5rX3dha2V1cCwgJndhaXQpOyAKIAotCWlmIChw
QWRhcHRlci0+TUxNRVRocl9waWQgPj0gMCkgCisjaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VS
TkVMX1ZFUlNJT04oMiwgNSwgMCkKKwlpZiAocEFkYXB0ZXItPk1MTUVUaHJfcGlkID49IDApCiAJ
ewogCQltbG1lX2tpbGwgPSAxOwotCQlSVFVTQlVwKHBBZGFwdGVyLCAoJihwQWRhcHRlci0+bWxt
ZV9zZW1hcGhvcmUpKSk7CisJCVJUVVNCQ01EVXAocEFkYXB0ZXIsICgmKHBBZGFwdGVyLT5tbG1l
X3NlbWFwaG9yZSkpKTsKIAkJd21iKCk7IC8vIG5lZWQgdG8gY2hlY2sKIAkJcmV0ID0ga2lsbF9w
cm9jIChwQWRhcHRlci0+TUxNRVRocl9waWQsIFNJR1RFUk0sIDEpOwogCQlpZiAocmV0KSAKQEAg
LTEzMDIsMTAgKzEyOTEsMTAgQEAKIAkJfQogCQl3YWl0X2Zvcl9jb21wbGV0aW9uICgmcEFkYXB0
ZXItPm5vdGlmeSk7CiAJfQotCWlmIChwQWRhcHRlci0+UlRVU0JDbWRUaHJfcGlkPj0gMCkgCisJ
aWYgKHBBZGFwdGVyLT5SVFVTQkNtZFRocl9waWQ+PSAwKQogCXsKIAkJUlRVU0JDbWRfa2lsbCA9
IDE7Ci0JCVJUVVNCVXAocEFkYXB0ZXIsICgmKHBBZGFwdGVyLT5SVFVTQkNtZF9zZW1hcGhvcmUp
KSk7CisJCVJUVVNCQ01EVXAocEFkYXB0ZXIsICgmKHBBZGFwdGVyLT5SVFVTQkNtZF9zZW1hcGhv
cmUpKSk7CiAJCXdtYigpOyAvLyBuZWVkIHRvIGNoZWNrCiAJCXJldCA9IGtpbGxfcHJvYyAocEFk
YXB0ZXItPlJUVVNCQ21kVGhyX3BpZCwgU0lHVEVSTSwgMSk7CiAJCWlmIChyZXQpIApAQCAtMTMx
Myw4ICsxMzAyLDI4IEBACiAJCQlwcmludGsgKEtFUk5fRVJSICIlczogdW5hYmxlIHRvIHNpZ25h
bCB0aHJlYWRcbiIsIHBBZGFwdGVyLT5uZXQtPm5hbWUpOwogCQkJcmV0dXJuIHJldDsKIAkJfQot
CXdhaXRfZm9yX2NvbXBsZXRpb24gKCZwQWRhcHRlci0+bm90aWZ5KTsKKwkJd2FpdF9mb3JfY29t
cGxldGlvbiAoJnBBZGFwdGVyLT5ub3RpZnkpOworCX0KKyNlbHNlCisJaWYgKHBBZGFwdGVyLT5N
TE1FVGhyX2FjdGl2ZSkKKwl7CisJCXJldCA9IGt0aHJlYWRfc3RvcChwQWRhcHRlci0+TUxNRVRo
cik7CisJCWlmIChyZXQpIAorCQl7CisJCQlwcmludGsgKEtFUk5fRVJSICIlczogdW5hYmxlIHRv
IHN0b3AgdGhyZWFkXG4iLCBwQWRhcHRlci0+bmV0LT5uYW1lKTsKKwkJCXJldHVybiByZXQ7CisJ
CX0KIAl9CisJaWYgKHBBZGFwdGVyLT5SVFVTQkNtZFRocl9hY3RpdmUpCisJeworCQlyZXQgPSBr
dGhyZWFkX3N0b3AocEFkYXB0ZXItPlJUVVNCQ21kVGhyKTsKKwkJaWYgKHJldCkgCisJCXsKKwkJ
CXByaW50ayAoS0VSTl9FUlIgIiVzOiB1bmFibGUgdG8gc3RvcCB0aHJlYWRcbiIsIHBBZGFwdGVy
LT5uZXQtPm5hbWUpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCX0KKyNlbmRpZgogCVJUVVNCSGFs
dCggcEFkYXB0ZXIsIEZBTFNFKTsKIAlEQkdQUklOVChSVF9ERUJVR19URU1QLCI8LS11c2JfcnQy
NTcwX2Nsb3NlXG4iKTsKIApAQCAtMTMyNiwyMyArMTMzNSwyOCBAQAogaW50IE1sbWVUaHJlYWQo
dm9pZCAqIENvbnRleHQpCiB7CiAJUFJUMjU3MEFEQVBURVIJcEFkYXB0ZXIgPSAoUFJUMjU3MEFE
QVBURVIpQ29udGV4dDsKLQorI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+IEtFUk5FTF9WRVJTSU9O
KDIsIDUsIDApCisJcEFkYXB0ZXItPk1MTUVUaHJfYWN0aXZlID0gMTsKKyNlbHNlCiAJZGFlbW9u
aXplKCk7CiAJY3VycmVudC0+ZmxhZ3MgfD0gUEZfTk9GUkVFWkU7CiAJLyogc2lnbmFsIHRoYXQg
d2UndmUgc3RhcnRlZCB0aGUgdGhyZWFkICovCiAJY29tcGxldGUoJihwQWRhcHRlci0+bm90aWZ5
KSk7Ci0jaWYgMQorI2VuZGlmIC8qIExJTlVYX1ZFUlNJT05fQ09ERSA+IEtFUk5FTF9WRVJTSU9O
KDIsIDUsIDApICovCisKIAl3aGlsZSAoMSkKIAl7Ci0JCS8vaWYoZG93bl9pbnRlcnJ1cHRpYmxl
KCZwQWRhcHRlci0+bWxtZV9zZW1hcGhvcmUpKQotCQkJLy9icmVhazsKLQorI2lmIExJTlVYX1ZF
UlNJT05fQ09ERSA+IEtFUk5FTF9WRVJTSU9OKDIsIDUsIDApCisJCWlmIChrdGhyZWFkX3Nob3Vs
ZF9zdG9wKCkpCisJCQlicmVhazsKKyNlbmRpZiAvKiBMSU5VWF9WRVJTSU9OX0NPREUgPiBLRVJO
RUxfVkVSU0lPTigyLCA1LCAwKSAqLwogCQkvKiBsb2NrIHRoZSBkZXZpY2UgcG9pbnRlcnMgKi8K
IAkJZG93bigmKHBBZGFwdGVyLT5tbG1lX3NlbWFwaG9yZSkpOwogCisjaWYgTElOVVhfVkVSU0lP
Tl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiwgNSwgMCkKIAkJaWYgKG1sbWVfa2lsbCkKIAkJCWJy
ZWFrOwotCisjZW5kaWYKIAkJLyogbG9jayB0aGUgZGV2aWNlIHBvaW50ZXJzICwgbmVlZCB0byBj
aGVjayBpZiByZXF1aXJlZCovCiAJCWRvd24oJihwQWRhcHRlci0+dXNiZGV2X3NlbWFwaG9yZSkp
OwogCQlNbG1lSGFuZGxlcihwQWRhcHRlcik7CQkKQEAgLTEzNTAsNjcgKzEzNjQsNTYgQEAKIAkJ
LyogdW5sb2NrIHRoZSBkZXZpY2UgcG9pbnRlcnMgKi8KIAkJdXAoJihwQWRhcHRlci0+dXNiZGV2
X3NlbWFwaG9yZSkpOwogCX0KLSNlbHNlCi0JLy8gSSB0cmllZCB0aGlzIHdheSBmb3IgdGhyZWFk
IGhhbmRsaW5nCi0Jd2hpbGUoMSkKLQl7Ci0JCXRpbWVvdXQgPSBuZXh0X3RpY2s7Ci0JCWRvIHsK
LQkJCXRpbWVvdXQgPSBpbnRlcnJ1cHRpYmxlX3NsZWVwX29uX3RpbWVvdXQgKCZwQWRhcHRlci0+
TUxNRVRocl93YWl0LCB0aW1lb3V0KTsKLQkJCS8qIG1ha2Ugc3dzdXNwIGhhcHB5IHdpdGggb3Vy
IHRocmVhZCAqLwotCQkJaWYgKGN1cnJlbnQtPmZsYWdzICYgUEZfRlJFRVpFKQotCQkJCXJlZnJp
Z2VyYXRvcihQRl9GUkVFWkUpOwotCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICJjdXJyZW50
LT5mbGFncyAgPSAweCV4XG4iLGN1cnJlbnQtPmZsYWdzICk7Ci0JCX0gd2hpbGUgKCFzaWduYWxf
cGVuZGluZyAoY3VycmVudCkgJiYgKHRpbWVvdXQgPiAwKSk7Ci0KLQkJaWYgKHNpZ25hbF9wZW5k
aW5nIChjdXJyZW50KSkgewotCQkJZmx1c2hfc2lnbmFscyhjdXJyZW50KTsKLQkJfQotCi0JCWlm
IChtbG1lX2tpbGwpCi0JCQlicmVhazsKLQl9Ci0jZW5kaWYKIAorI2lmIExJTlVYX1ZFUlNJT05f
Q09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsIDUsIDApCiAJLyogbm90aWZ5IHRoZSBleGl0IHJvdXRp
bmUgdGhhdCB3ZSdyZSBhY3R1YWxseSBleGl0aW5nIG5vdyAKLQkgKgotCSAqIGNvbXBsZXRlKCkv
d2FpdF9mb3JfY29tcGxldGlvbigpIGlzIHNpbWlsYXIgdG8gdXAoKS9kb3duKCksCi0JICogZXhj
ZXB0IHRoYXQgY29tcGxldGUoKSBpcyBzYWZlIGluIHRoZSBjYXNlIHdoZXJlIHRoZSBzdHJ1Y3R1
cmUKLQkgKiBpcyBnZXR0aW5nIGRlbGV0ZWQgaW4gYSBwYXJhbGxlbCBtb2RlIG9mIGV4ZWN1dGlv
biAoaS5lLiBqdXN0Ci0JICogYWZ0ZXIgdGhlIGRvd24oKSAtLSB0aGF0J3MgbmVjZXNzYXJ5IGZv
ciB0aGUgdGhyZWFkLXNodXRkb3duCi0JICogY2FzZS4KLQkgKgotCSAqIGNvbXBsZXRlX2FuZF9l
eGl0KCkgZ29lcyBldmVuIGZ1cnRoZXIgdGhhbiB0aGlzIC0tIGl0IGlzIHNhZmUgaW4KLQkgKiB0
aGUgY2FzZSB0aGF0IHRoZSB0aHJlYWQgb2YgdGhlIGNhbGxlciBpcyBnb2luZyBhd2F5IChub3Qg
anVzdAotCSAqIHRoZSBzdHJ1Y3R1cmUpIC0tIHRoaXMgaXMgbmVjZXNzYXJ5IGZvciB0aGUgbW9k
dWxlLXJlbW92ZSBjYXNlLgotCSAqIFRoaXMgaXMgaW1wb3J0YW50IGluIHByZWVtcHRpb24ga2Vy
bmVscywgd2hpY2ggdHJhbnNmZXIgdGhlIGZsb3cKLQkgKiBvZiBleGVjdXRpb24gaW1tZWRpYXRl
bHkgdXBvbiBhIGNvbXBsZXRlKCkuCi0JICovCisJKgorCSogY29tcGxldGUoKS93YWl0X2Zvcl9j
b21wbGV0aW9uKCkgaXMgc2ltaWxhciB0byB1cCgpL2Rvd24oKSwKKwkqIGV4Y2VwdCB0aGF0IGNv
bXBsZXRlKCkgaXMgc2FmZSBpbiB0aGUgY2FzZSB3aGVyZSB0aGUgc3RydWN0dXJlCisJKiBpcyBn
ZXR0aW5nIGRlbGV0ZWQgaW4gYSBwYXJhbGxlbCBtb2RlIG9mIGV4ZWN1dGlvbiAoaS5lLiBqdXN0
CisJKiBhZnRlciB0aGUgZG93bigpIC0tIHRoYXQncyBuZWNlc3NhcnkgZm9yIHRoZSB0aHJlYWQt
c2h1dGRvd24KKwkqIGNhc2UuCisJKgorCSogY29tcGxldGVfYW5kX2V4aXQoKSBnb2VzIGV2ZW4g
ZnVydGhlciB0aGFuIHRoaXMgLS0gaXQgaXMgc2FmZSBpbgorCSogdGhlIGNhc2UgdGhhdCB0aGUg
dGhyZWFkIG9mIHRoZSBjYWxsZXIgaXMgZ29pbmcgYXdheSAobm90IGp1c3QKKwkqIHRoZSBzdHJ1
Y3R1cmUpIC0tIHRoaXMgaXMgbmVjZXNzYXJ5IGZvciB0aGUgbW9kdWxlLXJlbW92ZSBjYXNlLgor
CSogVGhpcyBpcyBpbXBvcnRhbnQgaW4gcHJlZW1wdGlvbiBrZXJuZWxzLCB3aGljaCB0cmFuc2Zl
ciB0aGUgZmxvdworCSogb2YgZXhlY3V0aW9uIGltbWVkaWF0ZWx5IHVwb24gYSBjb21wbGV0ZSgp
LgorCSovCiAJY29tcGxldGVfYW5kX2V4aXQgKCZwQWRhcHRlci0+bm90aWZ5LCAwKTsKIAlEQkdQ
UklOVChSVF9ERUJVR19UUkFDRSwgIjwtLS1NbG1lVGhyZWFkXG4iKTsKLQorI2Vsc2UKKwlEQkdQ
UklOVChSVF9ERUJVR19UUkFDRSwgIk1sbWVUaHJlYWQgZW5kXG4iKTsKKwlwQWRhcHRlci0+TUxN
RVRocl9hY3RpdmUgPSAwOworI2VuZGlmCisJcmV0dXJuIDA7CiB9CisKIGludCBSVFVTQkNtZFRo
cmVhZCh2b2lkICogQ29udGV4dCkKIHsKLQogCVBSVDI1NzBBREFQVEVSCXBBZGFwdGVyID0gKFBS
VDI1NzBBREFQVEVSKUNvbnRleHQ7Ci0KKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxf
VkVSU0lPTigyLCA1LCAwKQogCWRhZW1vbml6ZSgpOwogCWN1cnJlbnQtPmZsYWdzIHw9IFBGX05P
RlJFRVpFOwogCS8qIHNpZ25hbCB0aGF0IHdlJ3ZlIHN0YXJ0ZWQgdGhlIHRocmVhZCAqLwogCWNv
bXBsZXRlKCYocEFkYXB0ZXItPm5vdGlmeSkpOworI2Vsc2UKKwlwQWRhcHRlci0+UlRVU0JDbWRU
aHJfYWN0aXZlID0gMTsKKyNlbmRpZgogCiAJd2hpbGUgKDEpCiAJewotCQkvL2lmKGRvd25faW50
ZXJydXB0aWJsZSgmcEFkYXB0ZXItPm1sbWVfc2VtYXBob3JlKSkKLQkJCS8vYnJlYWs7CisjaWYg
TElOVVhfVkVSU0lPTl9DT0RFID4gS0VSTkVMX1ZFUlNJT04oMiwgNSwgMCkKKwkJaWYgKGt0aHJl
YWRfc2hvdWxkX3N0b3AoKSkKKwkJCWJyZWFrOworI2VuZGlmCiAKIAkJLyogbG9jayB0aGUgZGV2
aWNlIHBvaW50ZXJzICovCiAJCWRvd24oJihwQWRhcHRlci0+UlRVU0JDbWRfc2VtYXBob3JlKSk7
Ci0KKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLCA1LCAwKQogCQlp
ZiAoUlRVU0JDbWRfa2lsbCkKIAkJCWJyZWFrOwotCisjZW5kaWYKIAkJLyogbG9jayB0aGUgZGV2
aWNlIHBvaW50ZXJzICwgbmVlZCB0byBjaGVjayBpZiByZXF1aXJlZCovCiAJCWRvd24oJihwQWRh
cHRlci0+dXNiZGV2X3NlbWFwaG9yZSkpOwogCQlDTURIYW5kbGVyKHBBZGFwdGVyKTsJCQpAQCAt
MTQxOCwyNCArMTQyMSwxNCBAQAogCQkvKiB1bmxvY2sgdGhlIGRldmljZSBwb2ludGVycyAqLwog
CQl1cCgmKHBBZGFwdGVyLT51c2JkZXZfc2VtYXBob3JlKSk7CiAJfQotCi0JLyogbm90aWZ5IHRo
ZSBleGl0IHJvdXRpbmUgdGhhdCB3ZSdyZSBhY3R1YWxseSBleGl0aW5nIG5vdyAKLQkgKgotCSAq
IGNvbXBsZXRlKCkvd2FpdF9mb3JfY29tcGxldGlvbigpIGlzIHNpbWlsYXIgdG8gdXAoKS9kb3du
KCksCi0JICogZXhjZXB0IHRoYXQgY29tcGxldGUoKSBpcyBzYWZlIGluIHRoZSBjYXNlIHdoZXJl
IHRoZSBzdHJ1Y3R1cmUKLQkgKiBpcyBnZXR0aW5nIGRlbGV0ZWQgaW4gYSBwYXJhbGxlbCBtb2Rl
IG9mIGV4ZWN1dGlvbiAoaS5lLiBqdXN0Ci0JICogYWZ0ZXIgdGhlIGRvd24oKSAtLSB0aGF0J3Mg
bmVjZXNzYXJ5IGZvciB0aGUgdGhyZWFkLXNodXRkb3duCi0JICogY2FzZS4KLQkgKgotCSAqIGNv
bXBsZXRlX2FuZF9leGl0KCkgZ29lcyBldmVuIGZ1cnRoZXIgdGhhbiB0aGlzIC0tIGl0IGlzIHNh
ZmUgaW4KLQkgKiB0aGUgY2FzZSB0aGF0IHRoZSB0aHJlYWQgb2YgdGhlIGNhbGxlciBpcyBnb2lu
ZyBhd2F5IChub3QganVzdAotCSAqIHRoZSBzdHJ1Y3R1cmUpIC0tIHRoaXMgaXMgbmVjZXNzYXJ5
IGZvciB0aGUgbW9kdWxlLXJlbW92ZSBjYXNlLgotCSAqIFRoaXMgaXMgaW1wb3J0YW50IGluIHBy
ZWVtcHRpb24ga2VybmVscywgd2hpY2ggdHJhbnNmZXIgdGhlIGZsb3cKLQkgKiBvZiBleGVjdXRp
b24gaW1tZWRpYXRlbHkgdXBvbiBhIGNvbXBsZXRlKCkuCi0JICovCisjaWYgTElOVVhfVkVSU0lP
Tl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiwgNSwgMCkKIAljb21wbGV0ZV9hbmRfZXhpdCAoJnBB
ZGFwdGVyLT5ub3RpZnksIDApOwogCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAiPC0tLVJUVVNC
Q21kVGhyZWFkXG4iKTsKLQorI2Vsc2UKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgIlJUVVNC
Q21kVGhyZWFkIGVuZFxuIik7CisJcEFkYXB0ZXItPlJUVVNCQ21kVGhyX2FjdGl2ZSA9IDA7Cisj
ZW5kaWYKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgKnVzYl9ydHVzYl9wcm9iZShzdHJ1
Y3QgdXNiX2RldmljZSAqZGV2LCBVSU5UIGludGVyZmFjZSwKQEAgLTE0NDksMTAgKzE0NDIsMTIg
QEAKIAkKIAlmb3IgKGkgPSAwOyBpIDwgcnR1c2JfdXNiX2lkX2xlbjsgaSsrKQogCXsKLQkJaWYg
KGRldi0+ZGVzY3JpcHRvci5pZFZlbmRvciA9PSBydHVzYl91c2JfaWRbaV0uaWRWZW5kb3IgJiYK
LQkJCWRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QgPT0gcnR1c2JfdXNiX2lkW2ldLmlkUHJvZHVj
dCkKKwkJaWYgKGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5pZFZlbmRvcikgPT0gcnR1c2Jf
dXNiX2lkW2ldLmlkVmVuZG9yICYmCisJCQlsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRQ
cm9kdWN0KSA9PSBydHVzYl91c2JfaWRbaV0uaWRQcm9kdWN0KQogCQl7Ci0JCQlwcmludGsoImlk
VmVuZG9yID0gMHgleCwgaWRQcm9kdWN0ID0gMHgleCBcbiIsZGV2LT5kZXNjcmlwdG9yLmlkVmVu
ZG9yLCBkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KTsKKwkJCXByaW50aygiaWRWZW5kb3IgPSAw
eCV4LCBpZFByb2R1Y3QgPSAweCV4IFxuIiwKKwkJCQlsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0
b3IuaWRWZW5kb3IpLAorCQkJCWxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3Qp
KTsKIAkJCWJyZWFrOwogCQl9CiAJfQpAQCAtMTUwOCw3ICsxNTAzLDcgQEAKIAkJCQogCQkJZm9y
IChkZXZpY2UgPSBkZXZfYmFzZTsgZGV2aWNlICE9IE5VTEw7IGRldmljZSA9IGRldmljZS0+bmV4
dCkKIAkJCXsKLQkJCQlpZiAoc3RybmNtcChkZXZpY2UtPm5hbWUsIHNsb3RfbmFtZSwgNCkgPT0g
MCkKKwkJCQlpZiAoc3RybmNtcChkZXZpY2UtPm5hbWUsIHNsb3RfbmFtZSwgNikgPT0gMCkKIAkJ
CQl7CiAJCQkJCWJyZWFrOwogCQkJCX0KQEAgLTE1MzUsNyArMTUzMCw3IEBACiAJLy8gc3RhcnQg
YXMgaWYgdGhlIGxpbmsgaXMgdXAKIAkvLyBuZXRpZl9kZXZpY2VfYXR0YWNoIChwQWRhcHRlci0+
bmV0KTsKIAotCVBvcnRJbml0Q2ZnKHBBZGFwdGVyKTsKKwlQb3J0Q2ZnSW5pdChwQWRhcHRlcik7
CiAKIAlyZXR1cm4gcEFkYXB0ZXI7CiBvdXQzOgpAQCAtMTU2NCwxMyArMTU1OSw3IEBACiAJCXBy
aW50aygidW5yZWdpc3Rlcl9uZXRkZXYoIClcbiIpOwogCQl1bnJlZ2lzdGVyX25ldGRldiAocEFk
YXB0ZXItPm5ldCk7CiAJfQotCXVkZWxheSgxKTsKLQl1ZGVsYXkoMSk7CiAKLQl3aGlsZSAoTU9E
X0lOX1VTRSA+IDApIHsKLQkJTU9EX0RFQ19VU0VfQ09VTlQ7Ci0JfQotCXVkZWxheSgxKTsKIAlE
QkdQUklOVChSVF9ERUJVR19FUlJPUiwiPD09PSBSVFVTQiBkaXNjb25uZWN0IHN1Y2Nlc3NmdWxs
eVxuIik7CiAKIH0KQEAgLTE2MDEsMTAgKzE1OTAsMTEgQEAKIAlwQWRhcHRlci0+d2FpdCA9IE5V
TEw7CiAJcmVtb3ZlX3dhaXRfcXVldWUgKCZ1bmxpbmtfd2FrZXVwLCAmd2FpdCk7IAogCi0JaWYg
KHBBZGFwdGVyLT5NTE1FVGhyX3BpZCA+PSAwKSAKKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBL
RVJORUxfVkVSU0lPTigyLCA1LCAwKQorCWlmIChwQWRhcHRlci0+TUxNRVRocl9waWQgPj0gMCkK
IAl7CiAJCW1sbWVfa2lsbCA9IDE7Ci0JCVJUVVNCVXAocEFkYXB0ZXIsICgmKHBBZGFwdGVyLT5t
bG1lX3NlbWFwaG9yZSkpKTsKKwkJUlRVU0JDTURVcChwQWRhcHRlciwgKCYocEFkYXB0ZXItPm1s
bWVfc2VtYXBob3JlKSkpOwogCQl3bWIoKTsgLy8gbmVlZCB0byBjaGVjawogCQlyZXQgPSBraWxs
X3Byb2MgKHBBZGFwdGVyLT5NTE1FVGhyX3BpZCwgU0lHVEVSTSwgMSk7CiAJCWlmIChyZXQpIApA
QCAtMTYxNCwxMCArMTYwNCwxMCBAQAogCQl9CiAJCXdhaXRfZm9yX2NvbXBsZXRpb24gKCZwQWRh
cHRlci0+bm90aWZ5KTsKIAl9Ci0JaWYgKHBBZGFwdGVyLT5SVFVTQkNtZFRocl9waWQ+PSAwKSAK
KwlpZiAocEFkYXB0ZXItPlJUVVNCQ21kVGhyX3BpZD49IDApCiAJewogCQlSVFVTQkNtZF9raWxs
ID0gMTsKLQkJUlRVU0JVcChwQWRhcHRlciwgKCYocEFkYXB0ZXItPlJUVVNCQ21kX3NlbWFwaG9y
ZSkpKTsKKwkJUlRVU0JDTURVcChwQWRhcHRlciwgKCYocEFkYXB0ZXItPlJUVVNCQ21kX3NlbWFw
aG9yZSkpKTsKIAkJd21iKCk7IC8vIG5lZWQgdG8gY2hlY2sKIAkJcmV0ID0ga2lsbF9wcm9jIChw
QWRhcHRlci0+UlRVU0JDbWRUaHJfcGlkLCBTSUdURVJNLCAxKTsKIAkJaWYgKHJldCkgCkBAIC0x
NjI3LDYgKzE2MTcsMjYgQEAKIAkJfQogCQl3YWl0X2Zvcl9jb21wbGV0aW9uICgmcEFkYXB0ZXIt
Pm5vdGlmeSk7CiAJfQorI2Vsc2UKKwlpZiAocEFkYXB0ZXItPk1MTUVUaHJfYWN0aXZlKQorCXsK
KwkJcmV0ID0ga3RocmVhZF9zdG9wKHBBZGFwdGVyLT5NTE1FVGhyKTsKKwkJaWYgKHJldCkgCisJ
CXsKKwkJCXByaW50ayAoS0VSTl9FUlIgIiVzOiB1bmFibGUgdG8gc3RvcCB0aHJlYWRcbiIsIHBB
ZGFwdGVyLT5uZXQtPm5hbWUpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCX0KKwlpZiAocEFkYXB0
ZXItPlJUVVNCQ21kVGhyX2FjdGl2ZSkKKwl7CisJCXJldCA9IGt0aHJlYWRfc3RvcChwQWRhcHRl
ci0+UlRVU0JDbWRUaHIpOworCQlpZiAocmV0KSAKKwkJeworCQkJcHJpbnRrIChLRVJOX0VSUiAi
JXM6IHVuYWJsZSB0byBzdG9wIHRocmVhZFxuIiwgcEFkYXB0ZXItPm5ldC0+bmFtZSk7CisJCQly
ZXR1cm4gcmV0OworCQl9CisJfQorI2VuZGlmCiAJUlRVU0JIYWx0KCBwQWRhcHRlciwgRkFMU0Up
OwogCURCR1BSSU5UKFJUX0RFQlVHX1RFTVAsIjwtLXVzYl9ydDI1NzBfY2xvc2VcbiIpOwogCkBA
IC0xNjM4LDEzMCArMTY0OCw5MSBAQAogaW50IE1sbWVUaHJlYWQodm9pZCAqIENvbnRleHQpCiB7
CiAJUFJUMjU3MEFEQVBURVIJcEFkYXB0ZXIgPSAoUFJUMjU3MEFEQVBURVIpQ29udGV4dDsKLQor
I2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsIDUsIDApCiAJZGFlbW9u
aXplKCJydDI1MDB1c2IiKTsKIAlhbGxvd19zaWduYWwoU0lHVEVSTSk7CiAJY3VycmVudC0+Zmxh
Z3MgfD0gUEZfTk9GUkVFWkU7CiAJLyogc2lnbmFsIHRoYXQgd2UndmUgc3RhcnRlZCB0aGUgdGhy
ZWFkICovCiAJY29tcGxldGUoJihwQWRhcHRlci0+bm90aWZ5KSk7Ci0jaWYgMQorI2Vsc2UKKwlw
QWRhcHRlci0+TUxNRVRocl9hY3RpdmUgPSAxOworI2VuZGlmCisKIAl3aGlsZSAoMSkKIAl7Ci0J
CS8vaWYoZG93bl9pbnRlcnJ1cHRpYmxlKCZwQWRhcHRlci0+bWxtZV9zZW1hcGhvcmUpKQotCQkJ
Ly9icmVhazsKLQorI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+IEtFUk5FTF9WRVJTSU9OKDIsIDUs
IDApCisJCWlmIChrdGhyZWFkX3Nob3VsZF9zdG9wKCkpCisJCQlicmVhazsKKyNlbmRpZgogCQkv
KiBsb2NrIHRoZSBkZXZpY2UgcG9pbnRlcnMgKi8KIAkJZG93bigmKHBBZGFwdGVyLT5tbG1lX3Nl
bWFwaG9yZSkpOwogCisjaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiwg
NSwgMCkKIAkJaWYgKG1sbWVfa2lsbCkKIAkJCWJyZWFrOwotCisjZW5kaWYKIAkJLyogbG9jayB0
aGUgZGV2aWNlIHBvaW50ZXJzICwgbmVlZCB0byBjaGVjayBpZiByZXF1aXJlZCovCiAJCWRvd24o
JihwQWRhcHRlci0+dXNiZGV2X3NlbWFwaG9yZSkpOwotI2lmIDAKLQkJaWYgKGN1cnJlbnQtPmZs
YWdzICYgUEZfRlJFRVpFKSB7Ci0JCQlyZWZyaWdlcmF0b3IoMCk7Ci0JCX0KLSNlbmRpZgorCiAJ
CU1sbWVIYW5kbGVyKHBBZGFwdGVyKTsJCQogCiAJCS8qIHVubG9jayB0aGUgZGV2aWNlIHBvaW50
ZXJzICovCiAJCXVwKCYocEFkYXB0ZXItPnVzYmRldl9zZW1hcGhvcmUpKTsKIAl9Ci0jZWxzZQot
CS8vIEkgdHJpZWQgdGhpcyB3YXkgZm9yIHRocmVhZCBoYW5kbGluZwotCXdoaWxlKDEpCi0Jewot
CQl0aW1lb3V0ID0gbmV4dF90aWNrOwotCQlkbyB7Ci0JCQl0aW1lb3V0ID0gaW50ZXJydXB0aWJs
ZV9zbGVlcF9vbl90aW1lb3V0ICgmcEFkYXB0ZXItPk1MTUVUaHJfd2FpdCwgdGltZW91dCk7Ci0J
CQkvKiBtYWtlIHN3c3VzcCBoYXBweSB3aXRoIG91ciB0aHJlYWQgKi8KLQkJCWlmIChjdXJyZW50
LT5mbGFncyAmIFBGX0ZSRUVaRSkKLQkJCQlyZWZyaWdlcmF0b3IoUEZfRlJFRVpFKTsKLQkJCURC
R1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAiY3VycmVudC0+ZmxhZ3MgID0gMHgleFxuIixjdXJyZW50
LT5mbGFncyApOwotCQl9IHdoaWxlICghc2lnbmFsX3BlbmRpbmcgKGN1cnJlbnQpICYmICh0aW1l
b3V0ID4gMCkpOwotCi0JCWlmIChzaWduYWxfcGVuZGluZyAoY3VycmVudCkpIHsKLQkJCWZsdXNo
X3NpZ25hbHMoY3VycmVudCk7Ci0JCX0KLQotCQlpZiAobWxtZV9raWxsKQotCQkJYnJlYWs7Ci0J
fQotI2VuZGlmCi0KLQkvKiBub3RpZnkgdGhlIGV4aXQgcm91dGluZSB0aGF0IHdlJ3JlIGFjdHVh
bGx5IGV4aXRpbmcgbm93IAotCSAqCi0JICogY29tcGxldGUoKS93YWl0X2Zvcl9jb21wbGV0aW9u
KCkgaXMgc2ltaWxhciB0byB1cCgpL2Rvd24oKSwKLQkgKiBleGNlcHQgdGhhdCBjb21wbGV0ZSgp
IGlzIHNhZmUgaW4gdGhlIGNhc2Ugd2hlcmUgdGhlIHN0cnVjdHVyZQotCSAqIGlzIGdldHRpbmcg
ZGVsZXRlZCBpbiBhIHBhcmFsbGVsIG1vZGUgb2YgZXhlY3V0aW9uIChpLmUuIGp1c3QKLQkgKiBh
ZnRlciB0aGUgZG93bigpIC0tIHRoYXQncyBuZWNlc3NhcnkgZm9yIHRoZSB0aHJlYWQtc2h1dGRv
d24KLQkgKiBjYXNlLgotCSAqCi0JICogY29tcGxldGVfYW5kX2V4aXQoKSBnb2VzIGV2ZW4gZnVy
dGhlciB0aGFuIHRoaXMgLS0gaXQgaXMgc2FmZSBpbgotCSAqIHRoZSBjYXNlIHRoYXQgdGhlIHRo
cmVhZCBvZiB0aGUgY2FsbGVyIGlzIGdvaW5nIGF3YXkgKG5vdCBqdXN0Ci0JICogdGhlIHN0cnVj
dHVyZSkgLS0gdGhpcyBpcyBuZWNlc3NhcnkgZm9yIHRoZSBtb2R1bGUtcmVtb3ZlIGNhc2UuCi0J
ICogVGhpcyBpcyBpbXBvcnRhbnQgaW4gcHJlZW1wdGlvbiBrZXJuZWxzLCB3aGljaCB0cmFuc2Zl
ciB0aGUgZmxvdwotCSAqIG9mIGV4ZWN1dGlvbiBpbW1lZGlhdGVseSB1cG9uIGEgY29tcGxldGUo
KS4KLQkgKi8KKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLCA1LCAw
KQogCWNvbXBsZXRlX2FuZF9leGl0ICgmcEFkYXB0ZXItPm5vdGlmeSwgMCk7CiAJREJHUFJJTlQo
UlRfREVCVUdfVFJBQ0UsICI8LS0tTWxtZVRocmVhZFxuIik7Ci0KKyNlbHNlCisJREJHUFJJTlQo
UlRfREVCVUdfVFJBQ0UsICJNbG1lVGhyZWFkIGVuZFxuIik7CisJcEFkYXB0ZXItPk1MTUVUaHJf
YWN0aXZlID0gMDsKKyNlbmRpZgorCXJldHVybiAwOwogfQorCiBpbnQgUlRVU0JDbWRUaHJlYWQo
dm9pZCAqIENvbnRleHQpCiB7CiAKIAlQUlQyNTcwQURBUFRFUglwQWRhcHRlciA9IChQUlQyNTcw
QURBUFRFUilDb250ZXh0OwotCisjaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJ
T04oMiwgNSwgMCkKIAlkYWVtb25pemUoInJ0MjUwMHVzYiIpOwogCWFsbG93X3NpZ25hbChTSUdU
RVJNKTsKIAljdXJyZW50LT5mbGFncyB8PSBQRl9OT0ZSRUVaRTsKIAkvKiBzaWduYWwgdGhhdCB3
ZSd2ZSBzdGFydGVkIHRoZSB0aHJlYWQgKi8KIAljb21wbGV0ZSgmKHBBZGFwdGVyLT5ub3RpZnkp
KTsKKyNlbHNlCisJcEFkYXB0ZXItPlJUVVNCQ21kVGhyX2FjdGl2ZSA9IDE7CisjZW5kaWYKIAog
CXdoaWxlICgxKQogCXsKLQkJLy9pZihkb3duX2ludGVycnVwdGlibGUoJnBBZGFwdGVyLT5tbG1l
X3NlbWFwaG9yZSkpCi0JCQkvL2JyZWFrOwotCisjaWYgTElOVVhfVkVSU0lPTl9DT0RFID4gS0VS
TkVMX1ZFUlNJT04oMiwgNSwgMCkKKwkJaWYgKGt0aHJlYWRfc2hvdWxkX3N0b3AoKSkKKwkJCWJy
ZWFrOworI2VuZGlmCiAJCS8qIGxvY2sgdGhlIGRldmljZSBwb2ludGVycyAqLwogCQlkb3duKCYo
cEFkYXB0ZXItPlJUVVNCQ21kX3NlbWFwaG9yZSkpOwotCisjaWYgTElOVVhfVkVSU0lPTl9DT0RF
IDwgS0VSTkVMX1ZFUlNJT04oMiwgNSwgMCkKIAkJaWYgKFJUVVNCQ21kX2tpbGwpCiAJCQlicmVh
azsKLQorI2VuZGlmCiAJCS8qIGxvY2sgdGhlIGRldmljZSBwb2ludGVycyAsIG5lZWQgdG8gY2hl
Y2sgaWYgcmVxdWlyZWQqLwogCQlkb3duKCYocEFkYXB0ZXItPnVzYmRldl9zZW1hcGhvcmUpKTsK
LSNpZiAwCi0JCWlmIChjdXJyZW50LT5mbGFncyAmIFBGX0ZSRUVaRSkgewotCQkJcmVmcmlnZXJh
dG9yKDApOwotCQkvLwljb250aW51ZTsKLQkJfQotI2VuZGlmCisKIAkJQ01ESGFuZGxlcihwQWRh
cHRlcik7CQkKIAogCQkvKiB1bmxvY2sgdGhlIGRldmljZSBwb2ludGVycyAqLwogCQl1cCgmKHBB
ZGFwdGVyLT51c2JkZXZfc2VtYXBob3JlKSk7CiAJfQotCi0JLyogbm90aWZ5IHRoZSBleGl0IHJv
dXRpbmUgdGhhdCB3ZSdyZSBhY3R1YWxseSBleGl0aW5nIG5vdyAKLQkgKgotCSAqIGNvbXBsZXRl
KCkvd2FpdF9mb3JfY29tcGxldGlvbigpIGlzIHNpbWlsYXIgdG8gdXAoKS9kb3duKCksCi0JICog
ZXhjZXB0IHRoYXQgY29tcGxldGUoKSBpcyBzYWZlIGluIHRoZSBjYXNlIHdoZXJlIHRoZSBzdHJ1
Y3R1cmUKLQkgKiBpcyBnZXR0aW5nIGRlbGV0ZWQgaW4gYSBwYXJhbGxlbCBtb2RlIG9mIGV4ZWN1
dGlvbiAoaS5lLiBqdXN0Ci0JICogYWZ0ZXIgdGhlIGRvd24oKSAtLSB0aGF0J3MgbmVjZXNzYXJ5
IGZvciB0aGUgdGhyZWFkLXNodXRkb3duCi0JICogY2FzZS4KLQkgKgotCSAqIGNvbXBsZXRlX2Fu
ZF9leGl0KCkgZ29lcyBldmVuIGZ1cnRoZXIgdGhhbiB0aGlzIC0tIGl0IGlzIHNhZmUgaW4KLQkg
KiB0aGUgY2FzZSB0aGF0IHRoZSB0aHJlYWQgb2YgdGhlIGNhbGxlciBpcyBnb2luZyBhd2F5IChu
b3QganVzdAotCSAqIHRoZSBzdHJ1Y3R1cmUpIC0tIHRoaXMgaXMgbmVjZXNzYXJ5IGZvciB0aGUg
bW9kdWxlLXJlbW92ZSBjYXNlLgotCSAqIFRoaXMgaXMgaW1wb3J0YW50IGluIHByZWVtcHRpb24g
a2VybmVscywgd2hpY2ggdHJhbnNmZXIgdGhlIGZsb3cKLQkgKiBvZiBleGVjdXRpb24gaW1tZWRp
YXRlbHkgdXBvbiBhIGNvbXBsZXRlKCkuCi0JICovCisjaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwg
S0VSTkVMX1ZFUlNJT04oMiwgNSwgMCkKIAljb21wbGV0ZV9hbmRfZXhpdCAoJnBBZGFwdGVyLT5u
b3RpZnksIDApOwogCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAiPC0tLVJUVVNCQ21kVGhyZWFk
XG4iKTsKLQorI2Vsc2UKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgIlJUVVNCQ21kVGhyZWFk
IGVuZFxuIik7CisJcEFkYXB0ZXItPlJUVVNCQ21kVGhyX2FjdGl2ZSA9IDA7CisjZW5kaWYKKwly
ZXR1cm4gMDsKIH0KKwogc3RhdGljIGludCB1c2JfcnR1c2JfcHJvYmUgKHN0cnVjdCB1c2JfaW50
ZXJmYWNlICppbnRmLAogCQkJCQkgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKIHsJ
CkBAIC0xNzc1LDEwICsxNzQ2LDEyIEBACiAJdXNiX2dldF9kZXYoZGV2KTsKIAlmb3IgKGkgPSAw
OyBpIDwgcnR1c2JfdXNiX2lkX2xlbjsgaSsrKQogCXsKLQkJaWYgKGRldi0+ZGVzY3JpcHRvci5p
ZFZlbmRvciA9PSBydHVzYl91c2JfaWRbaV0uaWRWZW5kb3IgJiYKLQkJCWRldi0+ZGVzY3JpcHRv
ci5pZFByb2R1Y3QgPT0gcnR1c2JfdXNiX2lkW2ldLmlkUHJvZHVjdCkKKwkJaWYgKGxlMTZfdG9f
Y3B1KGRldi0+ZGVzY3JpcHRvci5pZFZlbmRvcikgPT0gcnR1c2JfdXNiX2lkW2ldLmlkVmVuZG9y
ICYmCisJCQlsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSA9PSBydHVzYl91
c2JfaWRbaV0uaWRQcm9kdWN0KQogCQl7Ci0JCQlwcmludGsoImlkVmVuZG9yID0gMHgleCwgaWRQ
cm9kdWN0ID0gMHgleCBcbiIsZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yLCBkZXYtPmRlc2NyaXB0
b3IuaWRQcm9kdWN0KTsKKwkJCXByaW50aygiaWRWZW5kb3IgPSAweCV4LCBpZFByb2R1Y3QgPSAw
eCV4IFxuIiwKKwkJCQlsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpLAorCQkJ
CWxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpKTsKIAkJCWJyZWFrOwogCQl9
CiAJfQpAQCAtMTgyMiw4ICsxNzk1LDEzIEBACiAJcEFkYXB0ZXItPm5ldC0+YWRkcl9sZW4gPSA2
OwogCXBBZGFwdGVyLT5uZXQtPndlaWdodCA9IDY0OwogCXBBZGFwdGVyLT5NZWRpYVN0YXRlID0g
TmRpc01lZGlhU3RhdGVEaXNjb25uZWN0ZWQ7CisjaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VS
TkVMX1ZFUlNJT04oMiwgNSwgMCkKIAlwQWRhcHRlci0+TUxNRVRocl9waWQ9IC0xOwogCXBBZGFw
dGVyLT5SVFVTQkNtZFRocl9waWQ9IC0xOworI2Vsc2UKKwlwQWRhcHRlci0+TUxNRVRocl9hY3Rp
dmUgPSAwOworCXBBZGFwdGVyLT5SVFVTQkNtZFRocl9hY3RpdmUgPSAwOworI2VuZGlmCiAJUlRN
UF9TRVRfRkxBRyhwQWRhcHRlciwgZlJUTVBfQURBUFRFUl9SRVNFVF9JTl9QUk9HUkVTUyk7CiAK
IAlTRVRfTkVUREVWX0RFVihwQWRhcHRlci0+bmV0LCAmaW50Zi0+ZGV2KTsKQEAgLTE4MzksNyAr
MTgxNyw3IEBACiAJCQkKIAkJCWZvciAoZGV2aWNlID0gZGV2X2Jhc2U7IGRldmljZSAhPSBOVUxM
OyBkZXZpY2UgPSBkZXZpY2UtPm5leHQpCiAJCQl7Ci0JCQkJaWYgKHN0cm5jbXAoZGV2aWNlLT5u
YW1lLCBzbG90X25hbWUsIDQpID09IDApCisJCQkJaWYgKHN0cm5jbXAoZGV2aWNlLT5uYW1lLCBz
bG90X25hbWUsIDYpID09IDApCiAJCQkJewogCQkJCQlicmVhazsKIAkJCQl9CmRpZmYgLXJ1TiBy
dDI1NzAtMS4xLjAtYjEvTW9kdWxlL3N5bmMuYyBydDI1NzAtY3ZzLTIwMDUxMjI2MTYvTW9kdWxl
L3N5bmMuYwotLS0gcnQyNTcwLTEuMS4wLWIxL01vZHVsZS9zeW5jLmMJMjAwNS0wNy0zMCAxMTo0
NDozMC4wMDAwMDAwMDAgLTA1MDAKKysrIHJ0MjU3MC1jdnMtMjAwNTEyMjYxNi9Nb2R1bGUvc3lu
Yy5jCTIwMDUtMDktMTIgMDg6NDY6MTUuMDAwMDAwMDAwIC0wNTAwCkBAIC0yMDMsNiArMjAzLDkg
QEAKIAlVQ0hBUiAgICAgICAgICBTc2lkW01BWF9MRU5fT0ZfU1NJRF0sIFNzaWRMZW4sIFNjYW5U
eXBlLCBCc3NUeXBlOwogCVVMT05HICAgICAgICAgIE5vdzsKIAorCWlmIChwQWQtPlBvcnRDZmcu
QnNzVHlwZSA9PSBCU1NfTU9OSVRPUikKKwkJcmV0dXJuOworCiAJREJHUFJJTlQoUlRfREVCVUdf
SU5GTywgIlNZTkMgLSBNbG1lU2NhblJlcUFjdGlvblxuIik7CiAjaWYgMAogCS8vIENoZWNrIHRo
ZSB0b3RhbCBzY2FuIHRyaWVzIGZvciBvbmUgc2luZ2xlIE9JRCBjb21tYW5kCmRpZmYgLXJ1TiBy
dDI1NzAtMS4xLjAtYjEvTW9kdWxlLy4jc3luYy5jLjEuMSBydDI1NzAtY3ZzLTIwMDUxMjI2MTYv
TW9kdWxlLy4jc3luYy5jLjEuMQotLS0gcnQyNTcwLTEuMS4wLWIxL01vZHVsZS8uI3N5bmMuYy4x
LjEJMjAwNS0wNy0zMCAxMTo0NDozMC4wMDAwMDAwMDAgLTA1MDAKKysrIHJ0MjU3MC1jdnMtMjAw
NTEyMjYxNi9Nb2R1bGUvLiNzeW5jLmMuMS4xCTE5NjktMTItMzEgMTg6MDA6MDAuMDAwMDAwMDAw
IC0wNjAwCkBAIC0xLDE1NzIgKzAsMCBAQAotLyoNCi0gKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotICog
UmFsaW5rIFRlY2ggSW5jLg0KLSAqIDRGLCBOby4gMiBUZWNobm9sb2d5IDV0aCBSZC4NCi0gKiBT
Y2llbmNlLWJhc2VkIEluZHVzdHJpYWwgUGFyaw0KLSAqIEhzaW4tY2h1LCBUYWl3YW4sIFIuTy5D
Lg0KLSAqDQotICogKGMpIENvcHlyaWdodCAyMDAyLTIwMDQsIFJhbGluayBUZWNobm9sb2d5LCBJ
bmMuDQotICoNCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgKiANCi0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgKiANCi0gKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAgICAgKiANCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiANCi0gKiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAN
Ci0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwgICAgICAgKiANCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgKiANCi0gKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAg
ICAgKiANCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAg
ICAgICAgICAgICAgICAgICAgICAgICAgKiANCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiANCi0gKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSAgICAgKiANCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0
byB0aGUgICAgICAgICAgICAgICAgICAgICAgICAgKiANCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiANCi0g
KiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVT
QS4gICAgICAgICAgICAgKiANCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiANCi0gKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
DQotCU1vZHVsZSBOYW1lOg0KLQlzeW5jLmMNCi0NCi0JQWJzdHJhY3Q6DQotDQotCVJldmlzaW9u
IEhpc3Rvcnk6DQotCVdobwkJCVdoZW4JCQlXaGF0DQotCS0tLS0tLS0tCS0tLS0tLS0tLS0JCS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0JTmFtZQkJRGF0
ZQkJCU1vZGlmaWNhdGlvbiBsb2dzDQotCUphbiBMZWUJCTIwMDUtMDYtMDEJCVJlbGVhc2UNCi0q
Lw0KLQ0KLSNpbmNsdWRlICJydF9jb25maWcuaCINCi0NCi0vLyAyLjQgR2h6IGNoYW5uZWwgcGxh
bg0KLVVDSEFSIFJhMjRHaHpfRkNDW10gPSB7MSwyLDMsNCw1LDYsNyw4LDksMTAsMTF9Ow0KLVVD
SEFSIFJhMjRHaHpfSUNbXSAgPSB7MSwyLDMsNCw1LDYsNyw4LDksMTAsMTF9Ow0KLVVDSEFSIFJh
MjRHaHpfRVNUSVtdPSB7MSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTN9Ow0KLVVDSEFSIFJh
MjRHaHpfU1BBSU5bXSA9IHsxMCwxMX07DQotVUNIQVIgUmEyNEdoel9GUkFOQ0VbXSA9IHsxMCwx
MSwxMiwxM307DQotVUNIQVIgUmEyNEdoel9NS0tbXSA9ICB7MTR9Ow0KLVVDSEFSIFJhMjRHaHpf
TUtLMVtdID0gezEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0fTsNCi1VQ0hBUiBSYTI0
R2h6X0lTUkFFTFtdICA9IHszLDQsNSw2LDcsOCw5fTsNCi0gICAgDQotLy8gNSBHaHogY2hhbm5l
bCBwbGFuDQotVUNIQVIgUmE1R2h6X1VOSUlbXSA9IHszNiw0MCw0NCw0OCw1Miw1Niw2MCw2NCwg
IDE0OSwxNTMsMTU3LDE2MX07DQotVUNIQVIgUmE1R2h6X01NQUNbXSA9IHszNCwzOCw0Miw0Nn07
DQotVUNIQVIgUmE1R2h6X0h5cGVyTEFOMltdID0gezM2LDQwLDQ0LDQ4LDUyLDU2LDYwLDY0LCAg
MTAwLDEwNCwxMDgsMTEyLDExNiwxMjAsMTI0LDEyOCwxMzIsMTM2LDE0MH07DQotDQotZXh0ZXJu
IFVDSEFSIENpcGhlclN1aXRlV3BhTm9uZVRraXBbXTsNCi1leHRlcm4gVUNIQVIgQ2lwaGVyU3Vp
dGVXcGFOb25lVGtpcExlbjsNCi0NCi1leHRlcm4gVUNIQVIgQ2lwaGVyU3VpdGVXcGFOb25lQWVz
W107DQotZXh0ZXJuIFVDSEFSIENpcGhlclN1aXRlV3BhTm9uZUFlc0xlbjsNCi0NCi0vKg0KLSAg
ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQ0KLSAgICBEZXNjcmlwdGlvbjoNCi0gICAgICAgIFRoZSBzeW5j
IHN0YXRlIG1hY2hpbmUsIA0KLSAgICBQYXJhbWV0ZXJzOg0KLSAgICAgICAgU20gLSBwb2ludGVy
IHRvIHRoZSBzdGF0ZSBtYWNoaW5lDQotICAgIE5vdGU6DQotICAgICAgICB0aGUgc3RhdGUgbWFj
aGluZSBsb29rcyBsaWtlIHRoZSBmb2xsb3dpbmcNCi0gICAgICAgIA0KLSAgICBDb2x1bW4gMS0y
DQotICAgICAgICAgICAgICAgICAgICAgICAgU1lOQ19JRExFICAgICAgICAgICAgICAgICAgICAg
ICBKT0lOX1dBSVRfQkVBQ09ODQotICAgIE1UMl9NTE1FX1NDQU5fUkVRICAgbWxtZV9zY2FuX3Jl
cV9hY3Rpb24gICAgICAgICAgICBpbnZhbGlkX3N0YXRlX3doZW5fc2Nhbg0KLSAgICBNVDJfTUxN
RV9KT0lOX1JFUSAgIG1sbWVfam9pbl9yZXFfYWN0aW9uICAgICAgICAgICAgaW52YWxpZF9zdGF0
ZV93aGVuX2pvaW4NCi0gICAgTVQyX01MTUVfU1RBUlRfUkVRICBtbG1lX3N0YXJ0X3JlcV9hY3Rp
b24gICAgICAgICAgIGludmFsaWRfc3RhdGVfd2hlbl9zdGFydA0KLSAgICBNVDJfUEVFUl9CRUFD
T04gICAgIHBlZXJfYmVhY29uICAgICAgICAgICAgICAgICAgICAgcGVlcl9iZWFjb25fYXRfam9p
bl93YWl0X2JlYWNvbl9hY3Rpb24NCi0gICAgTVQyX1BFRVJfUFJPQkVfUlNQICBwZWVyX2JlYWNv
biAgICAgICAgICAgICAgICAgICAgIGRyb3ANCi0gICAgTVQyX1BFRVJfQVRJTSAgICAgICBkcm9w
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyb3ANCi0gICAgTVQyX1NDQU5fVElNRU9VVCAg
ICBEcm9wICAgICAgICAgICAgICAgICAgICAgICAgICAgIERyb3ANCi0gICAgTVQyX0JFQUNPTl9U
SU1FT1VUICBEcm9wICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlYWNvbl90aW1lb3V0X2F0
X2pvaW5fd2FpdF9iZWFjb25fYWN0aW9uDQotICAgIE1UMl9BVElNX1RJTUVPVVQgICAgRHJvcCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBEcm9wDQotICAgIE1UMl9QRUVSX1BST0JFX1JFUSAg
Pz8/PyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcm9wDQotICAgIA0KLSAgICBjb2x1bW4g
Mw0KLSAgICAgICAgICAgICAgICAgICAgICAgICBTQ0FOX0xJU1RFTg0KLSAgICBNVDJfTUxNRV9T
Q0FOX1JFUSAgICBpbnZhbGlkX3N0YXRlX3doZW5fc2Nhbg0KLSAgICBNVDJfTUxNRV9KT0lOX1JF
USAgICBpbnZhbGlkX3N0YXRlX3doZW5fam9pbg0KLSAgICBNVDJfTUxNRV9TVEFSVF9SRVEgICBp
bnZhbGlkX3N0YXRlX3doZW5fc3RhcnQNCi0gICAgTVQyX1BFRVJfQkVBQ09OICAgICAgcGVlcl9i
ZWFjb25fYXRfc2Nhbl9hY3Rpb24NCi0gICAgTVQyX1BFRVJfUFJPQkVfUlNQICAgcGVlcl9wcm9i
ZV9yc3BfYXRfc2Nhbl9hY3Rpb24NCi0gICAgTVQyX1BFRVJfQVRJTSAgICAgICAgZHJvcA0KLSAg
ICBNVDJfU0NBTl9USU1FT1VUICAgICBzY2FuX3RpbWVvdXRfYWN0aW9uDQotICAgIE1UMl9CRUFD
T05fVElNRU9VVCAgIERyb3ANCi0gICAgTVQyX0FUSU1fVElNRU9VVCAgICAgRHJvcA0KLSAgICBN
VDJfUEVFUl9QUk9CRV9SRVEgICBkcm9wDQotICAgID09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotICovDQot
Vk9JRCBTeW5jU3RhdGVNYWNoaW5lSW5pdCgNCi0gICAgSU4gUFJUMjU3MEFEQVBURVIgcEFkLCAN
Ci0gICAgSU4gU1RBVEVfTUFDSElORSAqU20sIA0KLSAgICBPVVQgU1RBVEVfTUFDSElORV9GVU5D
IFRyYW5zW10pIA0KLXsNCi0gICAgU3RhdGVNYWNoaW5lSW5pdChTbSwgVHJhbnMsIE1BWF9TWU5D
X1NUQVRFLCBNQVhfU1lOQ19NU0csIChTVEFURV9NQUNISU5FX0ZVTkMpRHJvcCwgU1lOQ19JRExF
LCBTWU5DX01BQ0hJTkVfQkFTRSk7DQotDQotICAgIC8vIGNvbHVtbiAxDQotICAgIFN0YXRlTWFj
aGluZVNldEFjdGlvbihTbSwgU1lOQ19JRExFLCBNVDJfTUxNRV9TQ0FOX1JFUSwgKFNUQVRFX01B
Q0hJTkVfRlVOQylNbG1lU2NhblJlcUFjdGlvbik7DQotICAgIFN0YXRlTWFjaGluZVNldEFjdGlv
bihTbSwgU1lOQ19JRExFLCBNVDJfTUxNRV9KT0lOX1JFUSwgKFNUQVRFX01BQ0hJTkVfRlVOQylN
bG1lSm9pblJlcUFjdGlvbik7DQotICAgIFN0YXRlTWFjaGluZVNldEFjdGlvbihTbSwgU1lOQ19J
RExFLCBNVDJfTUxNRV9TVEFSVF9SRVEsIChTVEFURV9NQUNISU5FX0ZVTkMpTWxtZVN0YXJ0UmVx
QWN0aW9uKTsNCi0gICAgU3RhdGVNYWNoaW5lU2V0QWN0aW9uKFNtLCBTWU5DX0lETEUsIE1UMl9Q
RUVSX0JFQUNPTiwgKFNUQVRFX01BQ0hJTkVfRlVOQylQZWVyQmVhY29uKTsNCi0vLyAgU3RhdGVN
YWNoaW5lU2V0QWN0aW9uKFNtLCBTWU5DX0lETEUsIE1UMl9QRUVSX1BST0JFX1JTUCwgUGVlckJl
YWNvbik7DQotICAgIFN0YXRlTWFjaGluZVNldEFjdGlvbihTbSwgU1lOQ19JRExFLCBNVDJfUEVF
Ul9QUk9CRV9SRVEsIChTVEFURV9NQUNISU5FX0ZVTkMpUGVlclByb2JlUmVxQWN0aW9uKTsgDQot
DQotICAgIC8vY29sdW1uIDINCi0gICAgU3RhdGVNYWNoaW5lU2V0QWN0aW9uKFNtLCBKT0lOX1dB
SVRfQkVBQ09OLCBNVDJfTUxNRV9TQ0FOX1JFUSwgKFNUQVRFX01BQ0hJTkVfRlVOQylJbnZhbGlk
U3RhdGVXaGVuU2Nhbik7DQotICAgIFN0YXRlTWFjaGluZVNldEFjdGlvbihTbSwgSk9JTl9XQUlU
X0JFQUNPTiwgTVQyX01MTUVfSk9JTl9SRVEsIChTVEFURV9NQUNISU5FX0ZVTkMpSW52YWxpZFN0
YXRlV2hlbkpvaW4pOw0KLSAgICBTdGF0ZU1hY2hpbmVTZXRBY3Rpb24oU20sIEpPSU5fV0FJVF9C
RUFDT04sIE1UMl9NTE1FX1NUQVJUX1JFUSwgKFNUQVRFX01BQ0hJTkVfRlVOQylJbnZhbGlkU3Rh
dGVXaGVuU3RhcnQpOw0KLSAgICBTdGF0ZU1hY2hpbmVTZXRBY3Rpb24oU20sIEpPSU5fV0FJVF9C
RUFDT04sIE1UMl9QRUVSX0JFQUNPTiwgKFNUQVRFX01BQ0hJTkVfRlVOQylQZWVyQmVhY29uQXRK
b2luQWN0aW9uKTsNCi0gICAgU3RhdGVNYWNoaW5lU2V0QWN0aW9uKFNtLCBKT0lOX1dBSVRfQkVB
Q09OLCBNVDJfQkVBQ09OX1RJTUVPVVQsIChTVEFURV9NQUNISU5FX0ZVTkMpQmVhY29uVGltZW91
dEF0Sm9pbkFjdGlvbik7DQotDQotICAgIC8vIGNvbHVtbiAzDQotICAgIFN0YXRlTWFjaGluZVNl
dEFjdGlvbihTbSwgU0NBTl9MSVNURU4sIE1UMl9NTE1FX1NDQU5fUkVRLCAoU1RBVEVfTUFDSElO
RV9GVU5DKUludmFsaWRTdGF0ZVdoZW5TY2FuKTsNCi0gICAgU3RhdGVNYWNoaW5lU2V0QWN0aW9u
KFNtLCBTQ0FOX0xJU1RFTiwgTVQyX01MTUVfSk9JTl9SRVEsIChTVEFURV9NQUNISU5FX0ZVTkMp
SW52YWxpZFN0YXRlV2hlbkpvaW4pOw0KLSAgICBTdGF0ZU1hY2hpbmVTZXRBY3Rpb24oU20sIFND
QU5fTElTVEVOLCBNVDJfTUxNRV9TVEFSVF9SRVEsIChTVEFURV9NQUNISU5FX0ZVTkMpSW52YWxp
ZFN0YXRlV2hlblN0YXJ0KTsNCi0gICAgU3RhdGVNYWNoaW5lU2V0QWN0aW9uKFNtLCBTQ0FOX0xJ
U1RFTiwgTVQyX1BFRVJfQkVBQ09OLCAoU1RBVEVfTUFDSElORV9GVU5DKVBlZXJCZWFjb25BdFNj
YW5BY3Rpb24pOw0KLSAgICBTdGF0ZU1hY2hpbmVTZXRBY3Rpb24oU20sIFNDQU5fTElTVEVOLCBN
VDJfUEVFUl9QUk9CRV9SU1AsIChTVEFURV9NQUNISU5FX0ZVTkMpUGVlckJlYWNvbkF0U2NhbkFj
dGlvbik7DQotICAgIFN0YXRlTWFjaGluZVNldEFjdGlvbihTbSwgU0NBTl9MSVNURU4sIE1UMl9T
Q0FOX1RJTUVPVVQsIChTVEFURV9NQUNISU5FX0ZVTkMpU2NhblRpbWVvdXRBY3Rpb24pOw0KLQ0K
LSAgICAvLyB0aW1lciBpbml0DQotICAgIFJUTVBJbml0VGltZXIocEFkLCAmcEFkLT5NbG1lLlN5
bmNBdXguQmVhY29uVGltZXIsICZCZWFjb25UaW1lb3V0KTsNCi0gICAgLy9wQWQtPk1sbWUuU3lu
Y0F1eC5CZWFjb25UaW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpcEFkOw0KLSAgICAvL3BBZC0+
TWxtZS5TeW5jQXV4LkJlYWNvblRpbWVyLmZ1bmN0aW9uID0gJkJlYWNvblRpbWVvdXQ7DQotICAg
IFJUTVBJbml0VGltZXIocEFkLCAmcEFkLT5NbG1lLlN5bmNBdXguU2NhblRpbWVyLCAgJlNjYW5U
aW1lb3V0KTsNCi0gICAgLy9wQWQtPk1sbWUuU3luY0F1eC5TY2FuVGltZXIuZGF0YSA9ICh1bnNp
Z25lZCBsb25nKXBBZDsNCi0gICAgLy9wQWQtPk1sbWUuU3luY0F1eC5TY2FuVGltZXIuZnVuY3Rp
b24gPSAmU2NhblRpbWVvdXQ7DQotfQ0KLQ0KLS8qIA0KLSAgICA9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0K
LSAgICBEZXNjcmlwdGlvbjoNCi0gICAgICAgIEJlY2FvbiB0aW1lb3V0IGhhbmRsZXIsIGV4ZWN1
dGVkIGluIHRpbWVyIHRocmVhZA0KLSAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLSAqLw0KLVZPSUQg
QmVhY29uVGltZW91dCgNCi0gICAgSU4gIHVuc2lnbmVkIGxvbmcgZGF0YSkgDQotew0KLQlQUlQy
NTcwQURBUFRFUiAgcEFkID0gKFBSVDI1NzBBREFQVEVSKWRhdGE7DQotDQotCURCR1BSSU5UKFJU
X0RFQlVHX1RSQUNFLCJTWU5DIC0gQmVhY29uVGltZW91dFxuIik7DQotDQotCS8vIERvIG5vdGhp
bmcgaWYgdGhlIGRyaXZlciBpcyBzdGFydGluZyBoYWx0IHN0YXRlLg0KLQkvLyBUaGlzIG1pZ2h0
IGhhcHBlbiB3aGVuIHRpbWVyIGFscmVhZHkgYmVlbiBmaXJlZCBiZWZvcmUgY2FuY2VsIHRpbWVy
IHdpdGggbWxtZWhhbHQNCi0JaWYgKFJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9I
QUxUX0lOX1BST0dSRVNTKSkNCi0JCXJldHVybjsNCi0NCi0JTWxtZUVucXVldWUocEFkLCBTWU5D
X1NUQVRFX01BQ0hJTkUsIE1UMl9CRUFDT05fVElNRU9VVCwgMCwgTlVMTCk7DQotCVJUVVNCVXAo
cEFkLCAmcEFkLT5tbG1lX3NlbWFwaG9yZSk7DQotfQ0KLQ0KLS8qIA0KLSAgICA9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQ0KLSAgICBEZXNjcmlwdGlvbjoNCi0gICAgICAgIEFUSU0gdGltZW91dCBoYW5kbGVy
LCBleGVjdXRlZCBpbiB0aW1lciB0aHJlYWQNCi0gICAgPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0gKi8N
Ci1WT0lEIEF0aW1UaW1lb3V0KA0KLSAgICBJTiAgdW5zaWduZWQgbG9uZyBkYXRhKSANCi17DQot
CVBSVDI1NzBBREFQVEVSICBwQWQgPSAoUFJUMjU3MEFEQVBURVIpZGF0YTsNCi0NCi0JREJHUFJJ
TlQoUlRfREVCVUdfVFJBQ0UsIlNZTkMgLSBBdGltVGltZW91dCBcbiIpOw0KLQlNbG1lRW5xdWV1
ZShwQWQsIFNZTkNfU1RBVEVfTUFDSElORSwgTVQyX0FUSU1fVElNRU9VVCwgMCwgTlVMTCk7DQot
CVJUVVNCVXAocEFkLCAmcEFkLT5tbG1lX3NlbWFwaG9yZSk7DQotfQ0KLQ0KLS8qIA0KLSAgICA9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQ0KLSAgICBEZXNjcmlwdGlvbjoNCi0gICAgICAgIFNjYW4gdGltZW91
dCBoYW5kbGVyLCBleGVjdXRlZCBpbiB0aW1lciB0aHJlYWQNCi0gICAgPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0NCi0gKi8NCi1WT0lEIFNjYW5UaW1lb3V0KA0KLSAgICBJTiAgdW5zaWduZWQgbG9uZyBkYXRh
KSANCi17DQotCVBSVDI1NzBBREFQVEVSICBwQWQgPSAoUFJUMjU3MEFEQVBURVIpZGF0YTsNCi0N
Ci0JREJHUFJJTlQoUlRfREVCVUdfSU5GTywiU1lOQyAtIFNjYW4gVGltZW91dCBcbiIpOw0KLQ0K
LQkvLyBEbyBub3RoaW5nIGlmIHRoZSBkcml2ZXIgaXMgc3RhcnRpbmcgaGFsdCBzdGF0ZS4NCi0J
Ly8gVGhpcyBtaWdodCBoYXBwZW4gd2hlbiB0aW1lciBhbHJlYWR5IGJlZW4gZmlyZWQgYmVmb3Jl
IGNhbmNlbCB0aW1lciB3aXRoIG1sbWVoYWx0DQotCWlmIChSVE1QX1RFU1RfRkxBRyhwQWQsIGZS
VE1QX0FEQVBURVJfSEFMVF9JTl9QUk9HUkVTUykpDQotCQlyZXR1cm47DQotDQotCU1sbWVFbnF1
ZXVlKHBBZCwgU1lOQ19TVEFURV9NQUNISU5FLCBNVDJfU0NBTl9USU1FT1VULCAwLCBOVUxMKTsN
Ci0JUlRVU0JVcChwQWQsICZwQWQtPm1sbWVfc2VtYXBob3JlKTsNCi19DQotDQotLyogDQotICAg
ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09DQotICAgIERlc2NyaXB0aW9uOg0KLSAgICAgICAgTUxNRSBTQ0FO
IHJlcSBzdGF0ZSBtYWNoaW5lIHByb2NlZHVyZQ0KLSAgICA9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLSAq
Lw0KLVZPSUQgTWxtZVNjYW5SZXFBY3Rpb24oDQotICAgIElOIFBSVDI1NzBBREFQVEVSIHBBZCwg
DQotICAgIElOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSkgDQotew0KLQlVQ0hBUiAgICAgICAgICBT
c2lkW01BWF9MRU5fT0ZfU1NJRF0sIFNzaWRMZW4sIFNjYW5UeXBlLCBCc3NUeXBlOw0KLQlVTE9O
RyAgICAgICAgICBOb3c7DQotDQotCURCR1BSSU5UKFJUX0RFQlVHX0lORk8sICJTWU5DIC0gTWxt
ZVNjYW5SZXFBY3Rpb25cbiIpOw0KLSNpZiAwDQotCS8vIENoZWNrIHRoZSB0b3RhbCBzY2FuIHRy
aWVzIGZvciBvbmUgc2luZ2xlIE9JRCBjb21tYW5kDQotCWlmIChwQWQtPlBvcnRDZmcuSWdub3Jl
ZFNjYW5OdW1iZXIgPj0gMykNCi0Jew0KLQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICJTWU5D
IC0gTWxtZVNjYW5SZXFBY3Rpb246IFRvbyBtYW55IHRyaWVzIGFscmVhZHlcbiIpOw0KLQkJcEFk
LT5NbG1lLlN5bmNNYWNoaW5lLkN1cnJTdGF0ZSA9IFNZTkNfSURMRTsNCi0JCU1sbWVDbnRsQ29u
ZmlybShwQWQsIE1UMl9TQ0FOX0NPTkYsIE1MTUVfSU5WQUxJRF9GT1JNQVQpOw0KLQkJcmV0dXJu
Ow0KLQl9DQotI2VuZGlmDQotCS8vIEluY3JlYXNlIHRoZSBzY2FuIHJldHJ5IGNvdW50ZXJzLg0K
LQlwQWQtPlBvcnRDZmcuSWdub3JlZFNjYW5OdW1iZXIrKzsNCi0NCi0JLy8gU3VzcGVuZCBNU0RV
IHRyYW5zbWlzc2lvbiBoZXJlDQotCVJUVVNCU3VzcGVuZE1zZHVUcmFuc21pc3Npb24ocEFkKTsN
Ci0NCi0JLy8gZmlyc3QgY2hlY2sgdGhlIHBhcmFtZXRlciBzYW5pdHkNCi0JaWYgKE1sbWVTY2Fu
UmVxU2FuaXR5KHBBZCwgDQotCSAgICAgICAgICAgICAgICAgICAgICBFbGVtLT5Nc2csIA0KLQkg
ICAgICAgICAgICAgICAgICAgICAgRWxlbS0+TXNnTGVuLCANCi0JICAgICAgICAgICAgICAgICAg
ICAgICZCc3NUeXBlLCANCi0JICAgICAgICAgICAgICAgICAgICAgIFNzaWQsIA0KLQkgICAgICAg
ICAgICAgICAgICAgICAgJlNzaWRMZW4sIA0KLQkgICAgICAgICAgICAgICAgICAgICAgJlNjYW5U
eXBlKSkgDQotCXsNCi0JCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAiU1lOQyAtIE1sbWVTY2Fu
UmVxQWN0aW9uXG4iKTsNCi0JCS8vIHRlbXBvcmFyaWx5IHJlY292ZXIgQkJQIGZyb20gc2hvcnQt
ZGlzdGFuY2UtbG93LXNlbnNpYmlsaXR5IG1vZGUgZHVyaW5nIFNDQU4NCi0JCS8vIGZvciBiZXN0
IFNDQU5OSU5HIHJlc3VsdDsNCi0JCUFzaWNSZXN0b3JlQmJwU2Vuc2liaWxpdHkocEFkKTsNCi0N
Ci0JCU5vdyA9IGppZmZpZXM7DQotCQlwQWQtPlBvcnRDZmcuTGFzdFNjYW5UaW1lID0gTm93Ow0K
LQkJLy8gcmVzZXQgYWxsIHRoZSB0aW1lcnMNCi0JCVJUTVBDYW5jZWxUaW1lcigmcEFkLT5NbG1l
LlN5bmNBdXguQmVhY29uVGltZXIpOw0KLQkJUlRNUENhbmNlbFRpbWVyKCZwQWQtPk1sbWUuU3lu
Y0F1eC5TY2FuVGltZXIpOw0KLQ0KLQkJLy8gcmVjb3JkIGRlc2lyZWQgQlNTIHBhcmFtZXRlcnMN
Ci0JCXBBZC0+TWxtZS5TeW5jQXV4LkJzc1R5cGUgPSBCc3NUeXBlOw0KLQkJcEFkLT5NbG1lLlN5
bmNBdXguU2NhblR5cGUgPSBTY2FuVHlwZTsNCi0JCXBBZC0+TWxtZS5TeW5jQXV4LlNzaWRMZW4g
PSBTc2lkTGVuOw0KLQkJTmRpc01vdmVNZW1vcnkocEFkLT5NbG1lLlN5bmNBdXguU3NpZCwgU3Np
ZCwgU3NpZExlbik7DQotDQotCQkvLyBzdGFydCBmcm9tIHRoZSBmaXJzdCBjaGFubmVsDQotCQlw
QWQtPk1sbWUuU3luY0F1eC5DaGFubmVsID0gRmlyc3RDaGFubmVsKHBBZCk7DQotCQlTY2FuTmV4
dENoYW5uZWwocEFkKTsNCi0JfSANCi0JZWxzZSANCi0Jew0KLQkJREJHUFJJTlQoUlRfREVCVUdf
RVJST1IsICJTWU5DIC0gTWxtZVNjYW5SZXFBY3Rpb24oKSBzYW5pdHkgY2hlY2sgZmFpbC4gQlVH
ISEhXG4iKTsNCi0JCXBBZC0+TWxtZS5TeW5jTWFjaGluZS5DdXJyU3RhdGUgPSBTWU5DX0lETEU7
DQotCQlNbG1lQ250bENvbmZpcm0ocEFkLCBNVDJfU0NBTl9DT05GLCBNTE1FX0lOVkFMSURfRk9S
TUFUKTsNCi0JfQ0KLX0NCi0NCi0vKiANCi0gICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0gICAgRGVz
Y3JpcHRpb246DQotICAgICAgICBNTE1FIEpPSU4gcmVxIHN0YXRlIG1hY2hpbmUgcHJvY2VkdXJl
DQotICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09DQotICovDQotVk9JRCBNbG1lSm9pblJlcUFjdGlvbigN
Ci0gICAgSU4gUFJUMjU3MEFEQVBURVIgcEFkLCANCi0gICAgSU4gTUxNRV9RVUVVRV9FTEVNICpF
bGVtKSANCi17DQotICAgIEJTU19FTlRSWSAgICAqcEJzczsNCi0gICAgTUxNRV9KT0lOX1JFUV9T
VFJVQ1QgKkluZm8gPSAoTUxNRV9KT0lOX1JFUV9TVFJVQ1QgKikoRWxlbS0+TXNnKTsNCi0NCi0g
ICAgREJHUFJJTlQoUlRfREVCVUdfSU5GTywgIlNZTkMgLSBNbG1lSm9pblJlcUFjdGlvbihCU1Mg
IyVkKVxuIiwgSW5mby0+QnNzSWR4KTsNCi0gICAgICAgIA0KLSAgICAvLyByZXNldCBhbGwgdGhl
IHRpbWVycw0KLSAgICBSVE1QQ2FuY2VsVGltZXIoJnBBZC0+TWxtZS5TeW5jQXV4LlNjYW5UaW1l
cik7DQotICAgIFJUTVBDYW5jZWxUaW1lcigmcEFkLT5NbG1lLlN5bmNBdXguQmVhY29uVGltZXIp
Ow0KLQ0KLSAgICBwQnNzID0gJnBBZC0+TWxtZS5DbnRsQXV4LlNzaWRCc3NUYWIuQnNzRW50cnlb
SW5mby0+QnNzSWR4XTsNCi0gICAgDQotICAgIC8vIHJlY29yZCB0aGUgZGVzaXJlZCBTU0lEICYg
QlNTSUQgd2UncmUgd2FpdGluZyBmb3IgICAgICAgIA0KLSAgICBDT1BZX01BQ19BRERSKCZwQWQt
Pk1sbWUuU3luY0F1eC5Cc3NpZCwgJnBCc3MtPkJzc2lkKTsNCi0gICAgTmRpc01vdmVNZW1vcnko
cEFkLT5NbG1lLlN5bmNBdXguU3NpZCwgcEJzcy0+U3NpZCwgcEJzcy0+U3NpZExlbik7DQotICAg
IHBBZC0+TWxtZS5TeW5jQXV4LlNzaWRMZW4gPSBwQnNzLT5Tc2lkTGVuOw0KLSAgICAgICAgDQot
ICAgIC8vIHN3aXRjaCBjaGFubmVsIGFuZCB3YWl0aW5nIGZvciBiZWFjb24gdGltZXINCi0gICAg
QXNpY1N3aXRjaENoYW5uZWwocEFkLCBwQnNzLT5DaGFubmVsKTsNCi0gICAgQXNpY0xvY2tDaGFu
bmVsKHBBZCwgcEJzcy0+Q2hhbm5lbCk7DQotICAgIERCR1BSSU5UKFJUX0RFQlVHX0lORk8sICJT
WU5DIC0gV2FpdCBCRUFDT04gZnJvbSAlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeCAuLi5c
biIsIA0KLSAgICAgICAgcEFkLT5NbG1lLlN5bmNBdXguQnNzaWQuT2N0ZXRbMF0sIHBBZC0+TWxt
ZS5TeW5jQXV4LkJzc2lkLk9jdGV0WzFdLA0KLSAgICAgICAgcEFkLT5NbG1lLlN5bmNBdXguQnNz
aWQuT2N0ZXRbMl0sIHBBZC0+TWxtZS5TeW5jQXV4LkJzc2lkLk9jdGV0WzNdLA0KLSAgICAgICAg
cEFkLT5NbG1lLlN5bmNBdXguQnNzaWQuT2N0ZXRbNF0sIHBBZC0+TWxtZS5TeW5jQXV4LkJzc2lk
Lk9jdGV0WzVdKTsNCi0gICAgcEFkLT5NbG1lLlN5bmNBdXguQmVhY29uVGltZXIuVGltZXIuZXhw
aXJlcyA9IEpPSU5fVElNRU9VVDsNCi0gICAgUlRNUFNldFRpbWVyKHBBZCwgJnBBZC0+TWxtZS5T
eW5jQXV4LkJlYWNvblRpbWVyLCBKT0lOX1RJTUVPVVQpOw0KLSAgICBwQWQtPk1sbWUuU3luY01h
Y2hpbmUuQ3VyclN0YXRlID0gSk9JTl9XQUlUX0JFQUNPTjsNCi19DQotDQotLyogDQotICAgID09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09DQotICAgIERlc2NyaXB0aW9uOg0KLSAgICAgICAgTUxNRSBTVEFSVCBS
ZXF1ZXN0IHN0YXRlIG1hY2hpbmUgcHJvY2VkdXJlLCBzdGFydGluZyBhbiBJQlNTDQotICAgID09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09DQotICovDQotVk9JRCBNbG1lU3RhcnRSZXFBY3Rpb24oDQotICAgIElO
IFBSVDI1NzBBREFQVEVSIHBBZCwgDQotICAgIElOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSkgDQot
ew0KLSAgICBVQ0hBUiAgICAgICAgIFNzaWRbTUFYX0xFTl9PRl9TU0lEXSwgU3NpZExlbjsgDQot
DQotICAgIC8vIE5ldyBmb3IgV1BBIHNlY3VyaXR5IHN1aXRlcw0KLSAgICBVQ0hBUiAgICAgICAg
ICAgICAgICAgICAgICAgVmFySUVbTUFYX1ZJRV9MRU5dOyAgICAgLy8gVG90YWwgVklFIGxlbmd0
aCA9IE1BWF9WSUVfTEVOIC0gLTUNCi0gICAgTkRJU184MDJfMTFfVkFSSUFCTEVfSUVzICAgICpw
VklFID0gTlVMTDsNCi0gICAgTEFSR0VfSU5URUdFUiAgICAgICAgICAgICAgIFRpbWVTdGFtcDsN
Ci0gICAgQk9PTEVBTiBQcml2YWN5Ow0KLSNpZmRlZiAgU0lOR0xFX0FESE9DX0xJTktVUA0KLSAg
ICBVTE9ORyAgIEJzc2lkeDsNCi0gICAgQk9PTEVBTiBDZkV4aXN0ID0gRkFMU0U7DQotICAgIENG
X1BBUk0gQ2ZQYXJtOw0KLSNlbmRpZg0KLQ0KLSAgICAvLyBJbml0IFZhcmlhYmxlIElFIHN0cnVj
dHVyZQ0KLSAgICBwVklFID0gKFBORElTXzgwMl8xMV9WQVJJQUJMRV9JRXMpIFZhcklFOw0KLSAg
ICBwVklFLT5MZW5ndGggPSAwOw0KLSAgICBUaW1lU3RhbXAudnYuTG93UGFydCAgPSAwOw0KLSAg
ICBUaW1lU3RhbXAudnYuSGlnaFBhcnQgPSAwOw0KLSAgICANCi0gICAgaWYgKE1sbWVTdGFydFJl
cVNhbml0eShwQWQsIEVsZW0tPk1zZywgRWxlbS0+TXNnTGVuLCBTc2lkLCAmU3NpZExlbikpIA0K
LSAgICB7DQotICAgICAgICAvLyByZXNldCBhbGwgdGhlIHRpbWVycw0KLSAgICAgICAgUlRNUENh
bmNlbFRpbWVyKCZwQWQtPk1sbWUuU3luY0F1eC5TY2FuVGltZXIpOw0KLSAgICAgICAgUlRNUENh
bmNlbFRpbWVyKCZwQWQtPk1sbWUuU3luY0F1eC5CZWFjb25UaW1lcik7DQotDQotICAgICAgICAv
LyBQb3J0Q2ZnLlByaXZhY3lJbnZva2VkIHNob3VsZCBoYXZlIGJlZW4gc2V0IHZpYSBPSURfODAy
XzExX1dFUF9TVEFUVVMuIA0KLSAgICAgICAgLy8gcEFkLT5Qb3J0Q2ZnLlByaXZhY3lJbnZva2Vk
ID0gRkFMU0U7DQotICAgICAgICANCi0gICAgICAgIE5kaXNNb3ZlTWVtb3J5KHBBZC0+UG9ydENm
Zy5Tc2lkLCBTc2lkLCBTc2lkTGVuKTsgDQotICAgICAgICBwQWQtPlBvcnRDZmcuU3NpZExlbiAg
ICAgICAgICAgPSBTc2lkTGVuOw0KLSAgICAgICAgcEFkLT5Qb3J0Q2ZnLkJzc1R5cGUgICAgICAg
ICAgID0gQlNTX0lOREVQOw0KLSAgICAgICAgUHJpdmFjeSA9IChwQWQtPlBvcnRDZmcuV2VwU3Rh
dHVzID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uMUVuYWJsZWQpIHx8IA0KLSAgICAgICAgICAgICAg
ICAgIChwQWQtPlBvcnRDZmcuV2VwU3RhdHVzID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uMkVuYWJs
ZWQpIHx8IA0KLSAgICAgICAgICAgICAgICAgIChwQWQtPlBvcnRDZmcuV2VwU3RhdHVzID09IE5k
aXM4MDJfMTFFbmNyeXB0aW9uM0VuYWJsZWQpOw0KLSAgICAgICAgcEFkLT5Qb3J0Q2ZnLkNhcGFi
aWxpdHlJbmZvICAgID0gQ0FQX0dFTkVSQVRFKDAsMSwwLDAsUHJpdmFjeSwgKHBBZC0+UG9ydENm
Zy5XaW5kb3dzVHhQcmVhbWJsZSA9PSBSdDgwMl8xMVByZWFtYmxlU2hvcnQpKTsNCi0gICAgICAg
IHBBZC0+UG9ydENmZy5CZWFjb25QZXJpb2QgICAgICA9IHBBZC0+UG9ydENmZy5JYnNzQ29uZmln
LkJlYWNvblBlcmlvZDsNCi0gICAgICAgIHBBZC0+UG9ydENmZy5BdGltV2luICAgICAgICAgICA9
IHBBZC0+UG9ydENmZy5JYnNzQ29uZmlnLkF0aW1XaW47DQotICAgICAgICBwQWQtPlBvcnRDZmcu
Q2hhbm5lbCAgICAgICAgICAgPSBwQWQtPlBvcnRDZmcuSWJzc0NvbmZpZy5DaGFubmVsOw0KLSAg
ICAgICAgaWYgKChwQWQtPlBvcnRDZmcuUGh5TW9kZSA9PSBQSFlfMTFBQkdfTUlYRUQpICYmIChw
QWQtPlBvcnRDZmcuQ2hhbm5lbCA+IDE0KSkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICAvLyBu
byAxLDIsNS41LDExIE1icHMgd2hlbiBpbiA1R2h6IGJhbmQNCi0gICAgICAgICAgICBwQWQtPlBv
cnRDZmcuU3VwcG9ydGVkUmF0ZXNMZW4gPSBwQWQtPlBvcnRDZmcuSWJzc0NvbmZpZy5TdXBwb3J0
ZWRSYXRlc0xlbiAtIDQ7DQotICAgICAgICAgICAgTmRpc1plcm9NZW1vcnkocEFkLT5Qb3J0Q2Zn
LlN1cHBvcnRlZFJhdGVzLCBNQVhfTEVOX09GX1NVUFBPUlRFRF9SQVRFUyk7DQotICAgICAgICAg
ICAgTmRpc01vdmVNZW1vcnkocEFkLT5Qb3J0Q2ZnLlN1cHBvcnRlZFJhdGVzLCAmcEFkLT5Qb3J0
Q2ZnLklic3NDb25maWcuU3VwcG9ydGVkUmF0ZXNbNF0sIE1BWF9MRU5fT0ZfU1VQUE9SVEVEX1JB
VEVTIC0gNCk7DQotICAgICAgICB9DQotICAgICAgICBlbHNlDQotICAgICAgICB7DQotICAgICAg
ICAgICAgcEFkLT5Qb3J0Q2ZnLlN1cHBvcnRlZFJhdGVzTGVuID0gcEFkLT5Qb3J0Q2ZnLklic3ND
b25maWcuU3VwcG9ydGVkUmF0ZXNMZW47DQotICAgICAgICAgICAgTmRpc01vdmVNZW1vcnkocEFk
LT5Qb3J0Q2ZnLlN1cHBvcnRlZFJhdGVzLCBwQWQtPlBvcnRDZmcuSWJzc0NvbmZpZy5TdXBwb3J0
ZWRSYXRlcywgTUFYX0xFTl9PRl9TVVBQT1JURURfUkFURVMpOw0KLSAgICAgICAgfQ0KLS8vICAg
ICAgcEFkLT5Qb3J0Q2ZnLlBzcyA9IFBXUl9BQ1RJVkU7DQotICAgICAgICANCi0gICAgICAgIC8v
IGdlbmVyYXRlIGEgcmFkb20gbnVtYmVyIGFzIEJTU0lEDQotICAgICAgICBNYWNBZGRyUmFuZG9t
QnNzaWQocEFkLCAmcEFkLT5Qb3J0Q2ZnLkJzc2lkKTsNCi0gICAgICAgIEFzaWNTZXRCc3NpZChw
QWQsICZwQWQtPlBvcnRDZmcuQnNzaWQpOyANCi0gICAgICAgIEFzaWNTd2l0Y2hDaGFubmVsKHBB
ZCwgcEFkLT5Qb3J0Q2ZnLkNoYW5uZWwpOw0KLSAgICAgICAgQXNpY0xvY2tDaGFubmVsKHBBZCwg
cEFkLT5Qb3J0Q2ZnLkNoYW5uZWwpOw0KLQ0KLSAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJB
Q0UsICJTWU5DIC0gTWxtZVN0YXJ0UmVxQWN0aW9uKGNoPSAlZCxzdXBwb3J0ZWQgcmF0ZSBsZW49
ICVkKVxuIiwNCi0gICAgICAgICAgICBwQWQtPlBvcnRDZmcuQ2hhbm5lbCwgcEFkLT5Qb3J0Q2Zn
LlN1cHBvcnRlZFJhdGVzTGVuKTsNCi0NCi0jaWZkZWYgIFNJTkdMRV9BREhPQ19MSU5LVVANCi0g
ICAgICAgIC8vIEFkZCBpdHNlbGYgYXMgdGhlIGVudHJ5IHdpdGhpbiBCU1MgdGFibGUNCi0gICAg
ICAgIEJzc2lkeCA9IEJzc1RhYmxlU2VhcmNoKCZwQWQtPlBvcnRDZmcuQnNzVGFiLCAmcEFkLT5Q
b3J0Q2ZnLkJzc2lkKTsNCi0gICAgICAgIGlmIChCc3NpZHggPT0gQlNTX05PVF9GT1VORCkNCi0g
ICAgICAgIHsNCi0gICAgICAgICAgICBCc3NpZHggPSBCc3NUYWJsZVNldEVudHJ5KHBBZCwgJnBB
ZC0+UG9ydENmZy5Cc3NUYWIsICZwQWQtPlBvcnRDZmcuQnNzaWQsDQotICAgICAgICAgICAgICAg
IFNzaWQsIFNzaWRMZW4sIHBBZC0+UG9ydENmZy5Cc3NUeXBlLCBwQWQtPlBvcnRDZmcuQmVhY29u
UGVyaW9kLCANCi0gICAgICAgICAgICAgICAgQ2ZFeGlzdCwgJkNmUGFybSwgcEFkLT5Qb3J0Q2Zn
LkF0aW1XaW4sIHBBZC0+UG9ydENmZy5DYXBhYmlsaXR5SW5mbywgDQotICAgICAgICAgICAgICAg
IHBBZC0+UG9ydENmZy5TdXBwb3J0ZWRSYXRlcywgcEFkLT5Qb3J0Q2ZnLlN1cHBvcnRlZFJhdGVz
TGVuLCBUUlVFLA0KLSAgICAgICAgICAgICAgICBwQWQtPlBvcnRDZmcuQ2hhbm5lbCwgRWxlbS0+
UnNzaSwgVGltZVN0YW1wLCBwVklFKTsNCi0gICAgICAgIH0NCi0jZW5kaWYNCi0NCi0gICAgICAg
IHBBZC0+TWxtZS5TeW5jTWFjaGluZS5DdXJyU3RhdGUgPSBTWU5DX0lETEU7DQotICAgICAgICBN
bG1lQ250bENvbmZpcm0ocEFkLCBNVDJfU1RBUlRfQ09ORiwgKFVTSE9SVClNTE1FX1NVQ0NFU1Mp
Ow0KLSAgICB9IA0KLSAgICBlbHNlIA0KLSAgICB7DQotICAgICAgICBEQkdQUklOVChSVF9ERUJV
R19FUlJPUiwgIlNZTkMgLSBNbG1lU3RhcnRSZXFBY3Rpb24oKSBzYW5pdHkgY2hlY2sgZmFpbC4g
QlVHISEhXG4iKTsNCi0gICAgICAgIHBBZC0+TWxtZS5TeW5jTWFjaGluZS5DdXJyU3RhdGUgPSBT
WU5DX0lETEU7DQotICAgICAgICBNbG1lQ250bENvbmZpcm0ocEFkLCBNVDJfU1RBUlRfQ09ORiwg
TUxNRV9JTlZBTElEX0ZPUk1BVCk7DQotICAgIH0NCi19DQotDQotLyogDQotICAgID09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09DQotICAgIERlc2NyaXB0aW9uOg0KLSAgICAgICAgcGVlciBzZW5kcyBiZWFjb24g
YmFjayB3aGVuIHNjYW5uaW5nDQotICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotICovDQotVk9JRCBQ
ZWVyQmVhY29uQXRTY2FuQWN0aW9uKA0KLSAgICBJTiBQUlQyNTcwQURBUFRFUiBwQWQsIA0KLSAg
ICBJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pIA0KLXsNCi0gICAgTUFDQUREUiAgICAgICAgIEJz
c2lkLCBBZGRyMjsNCi0gICAgVUNIQVIgICAgICAgICAgIFNzaWRbTUFYX0xFTl9PRl9TU0lEXSwg
QnNzVHlwZSwgQ2hhbm5lbCwgUmF0ZXNbTUFYX0xFTl9PRl9TVVBQT1JURURfUkFURVNdLCBSYXRl
c0xlbiwgDQotICAgICAgICAgICAgICAgICAgICBTc2lkTGVuLCBEdGltQ291bnQsIER0aW1QZXJp
b2QsIEJjYXN0RmxhZywgTWVzc2FnZVRvTWUsIExlZ2FjeTsNCi0gICAgQ0ZfUEFSTSAgICAgICAg
IENmUGFybTsNCi0gICAgVVNIT1JUICAgICAgICAgIEJlYWNvblBlcmlvZCwgQXRpbVdpbiwgQ2Fw
YWJpbGl0eUluZm87DQotICAgIE1BQ0ZSQU1FICAgICAgICpGcjsNCi0gICAgTEFSR0VfSU5URUdF
UiAgIFRpbWVTdGFtcDsNCi0gICAgQk9PTEVBTiAgICAgICAgIENmRXhpc3QgPSBGQUxTRTsNCi0g
ICAgQk9PTEVBTiAgICAgICAgIEV4dGVuZGVkUmF0ZUllRXhpc3Q7DQotICAgIFVDSEFSICAgICAg
ICAgICBFcnA7DQotICAgIFVDSEFSICAgICAgICAgU3VwUmF0ZVtNQVhfTEVOX09GX1NVUFBPUlRF
RF9SQVRFU10sIEV4dFJhdGVbTUFYX0xFTl9PRl9TVVBQT1JURURfUkFURVNdOw0KLSAgICBVQ0hB
UiAgICAgICAgIFN1cFJhdGVMZW4sIEV4dFJhdGVMZW47DQotCVVDSEFSCQkJTGVuVklFOw0KLSAg
ICAvLyBOZXcgZm9yIFdQQSBzZWN1cml0eSBzdWl0ZXMNCi0gICAgVUNIQVIgICAgICAgICAgICAg
ICAgICAgICAgIFZhcklFW01BWF9WSUVfTEVOXTsgICAgIC8vIFRvdGFsIFZJRSBsZW5ndGggPSBN
QVhfVklFX0xFTiAtIC01DQotICAgIE5ESVNfODAyXzExX1ZBUklBQkxFX0lFcyAgICAqcFZJRSA9
IE5VTEw7DQotDQotDQotICAgIC8vIE5kaXNGaWxsTWVtb3J5KFNzaWQsIE1BWF9MRU5fT0ZfU1NJ
RCwgMHgwMCk7DQotICAgIEZyID0gKE1BQ0ZSQU1FICopIEVsZW0tPk1zZzsNCi0gICAgLy8gSW5p
dCBWYXJpYWJsZSBJRSBzdHJ1Y3R1cmUNCi0gICAgcFZJRSA9IChQTkRJU184MDJfMTFfVkFSSUFC
TEVfSUVzKSBWYXJJRTsNCi0gICAgcFZJRS0+TGVuZ3RoID0gMDsNCi0gICAgaWYgKFBlZXJCZWFj
b25BbmRQcm9iZVJzcFNhbml0eShwQWQsIA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgRWxlbS0+TXNnLCANCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVsZW0tPk1z
Z0xlbiwgDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmQWRkcjIsIA0KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJkJzc2lkLCBTc2lkLCANCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICZTc2lkTGVuLCANCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICZCc3NUeXBlLCANCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZCZWFj
b25QZXJpb2QsIA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkNoYW5uZWwsIA0K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlRpbWVTdGFtcCwgDQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAmQ2ZFeGlzdCwgDQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAmQ2ZQYXJtLCANCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZB
dGltV2luLCANCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZDYXBhYmlsaXR5SW5m
bywgDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSYXRlcywgDQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAmUmF0ZXNMZW4sDQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAmRXh0ZW5kZWRSYXRlSWVFeGlzdCwNCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICZFcnAsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmRHRpbUNv
dW50LCANCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZEdGltUGVyaW9kLCANCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZCY2FzdEZsYWcsIA0KLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJk1lc3NhZ2VUb01lLCANCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICZMZWdhY3ksDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBT
dXBSYXRlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlN1cFJhdGVMZW4sDQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeHRSYXRlLA0KLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJkV4dFJhdGVMZW4sDQotCQkJCQkJCQkmTGVuVklFLA0KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcFZJRSkpIA0KLSAgICB7DQotICAgICAgICBVTE9O
RyBJZHg7DQotICAgICAgICBVQ0hBUiBSc3NpID0gMDsNCi0NCi0gICAgICAgIC8vIFRoaXMgY29y
cmVjdCBpbS1wcm9wZXIgUlNTSSBpbmRpY2F0aW9uIGR1cmluZyBTSVRFIFNVUlZFWSBpc3N1ZS4N
Ci0gICAgICAgIC8vIEFsd2F5cyByZXBvcnQgYmlnZ2VyIFJTU0kgZHVyaW5nIFNDQU5OSU5HIHdo
ZW4gcmVjZWl2aW5nIG11bHRpcGxlIEJFQUNPTnMgZnJvbSB0aGUgc2FtZSBBUC4gDQotICAgICAg
ICAvLyBUaGlzIGNhc2UgaGFwcGVucyBiZWNhdXNlIEJFQUNPTnMgY29tZSBmcm9tIGFkamFjZW50
IGNoYW5uZWxzLCBzbyBSU1NJIGJlY29tZSB3ZWFrZXIgYXMgd2UgDQotICAgICAgICAvLyBzd2l0
Y2ggdG8gbW9yZSBmYXIgYXdheSBjaGFubmVscy4NCi0gICAgICAgIElkeCA9IEJzc1RhYmxlU2Vh
cmNoKCZwQWQtPlBvcnRDZmcuQnNzVGFiLCAmQnNzaWQpOw0KLSAgICAgICAgaWYgKHBBZC0+TWxt
ZS5TeW5jQXV4LkNoYW5uZWwgIT0gQ2hhbm5lbCkNCi0gICAgICAgICAgICB7DQotICAgICAgICAg
ICAgcmV0dXJuOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIGlmIChJZHggIT0gQlNTX05PVF9G
T1VORCkgDQotICAgICAgICAgICAgUnNzaSA9IHBBZC0+UG9ydENmZy5Cc3NUYWIuQnNzRW50cnlb
SWR4XS5Sc3NpOw0KLSAgICAgICAgaWYgKEVsZW0tPlJzc2kgPiBSc3NpKQ0KLSAgICAgICAgICAg
IFJzc2kgPSBFbGVtLT5Sc3NpOw0KLSAgICAgICAgDQotICAgICAgICBEQkdQUklOVChSVF9ERUJV
R19JTkZPLCAiU1lOQyAtIFBlZXJCZWFjb25BdFNjYW5BY3Rpb24gKFN1YnR5cGU9JWQsIFNzaWRM
ZW49JWQsIFNzaWQ9JXMpXG4iLCBGci0+SGRyLlN1YlR5cGUsIFNzaWRMZW4sU3NpZCk7DQotDQot
ICAgICAgICAvLyBNYXNrIG91dCB1bm5lY2Vzc2FyeSBjYXBhYmlsaXR5IGluZm9ybWF0aW9uDQot
ICAgICAgICBDYXBhYmlsaXR5SW5mbyAmPSBTVVBQT1JURURfQ0FQQUJJTElUWV9JTkZPOw0KLSAg
ICAgICAgDQotICAgICAgICBCc3NUYWJsZVNldEVudHJ5KHBBZCwgJnBBZC0+UG9ydENmZy5Cc3NU
YWIsICZCc3NpZCwgU3NpZCwgU3NpZExlbiwgQnNzVHlwZSwgDQotICAgICAgICAgICAgICAgICAg
ICAgICAgIEJlYWNvblBlcmlvZCwgQ2ZFeGlzdCwgJkNmUGFybSwgQXRpbVdpbiwgQ2FwYWJpbGl0
eUluZm8sIFJhdGVzLCANCi0gICAgICAgICAgICAgICAgICAgICAgICAgUmF0ZXNMZW4sIEV4dGVu
ZGVkUmF0ZUllRXhpc3QsIENoYW5uZWwsIFJzc2ksIFRpbWVTdGFtcCwgTGVuVklFLCBwVklFKTsN
Ci0gICAgfQ0KLSAgICAvLyBzYW5pdHkgY2hlY2sgZmFpbCwgaWdub3JlZA0KLX0NCi0NCi0vKiAN
Ci0gICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0NCi0gICAgRGVzY3JpcHRpb246DQotICAgICAgICBXaGVu
IHdhaXRpbmcgam9pbmluZyB0aGUgKEkpQlNTLCBiZWFjb24gcmVjZWl2ZWQgZnJvbSBleHRlcm5h
bA0KLSAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLSAqLw0KLVZPSUQgUGVlckJlYWNvbkF0Sm9pbkFj
dGlvbigNCi0gICAgSU4gUFJUMjU3MEFEQVBURVIgcEFkLCANCi0gICAgSU4gTUxNRV9RVUVVRV9F
TEVNICpFbGVtKSANCi17DQotICAgIE1BQ0FERFIgICAgICAgQnNzaWQsIEFkZHIyOw0KLSAgICBV
Q0hBUiAgICAgICAgICAgU3NpZFtNQVhfTEVOX09GX1NTSURdLCBCc3NUeXBlLCBDaGFubmVsLCBS
YXRlc1tNQVhfTEVOX09GX1NVUFBPUlRFRF9SQVRFU10sIFJhdGVzTGVuLCANCi0gICAgICAgICAg
ICAgICAgICAgIFNzaWRMZW4sIER0aW1Db3VudCwgRHRpbVBlcmlvZCwgQmNhc3RGbGFnLCBNZXNz
YWdlVG9NZSwgTGVnYWN5Ow0KLSAgICBMQVJHRV9JTlRFR0VSIFRpbWVTdGFtcDsNCi0gICAgVVNI
T1JUICAgICAgICBCZWFjb25QZXJpb2QsIEF0aW1XaW4sIENhcGFiaWxpdHlJbmZvOw0KLSAgICBD
Rl9QQVJNICAgICAgIENmOw0KLSAgICBCT09MRUFOICAgICAgIENmRXhpc3QgPSBGQUxTRSwgRXh0
ZW5kZWRSYXRlSWVFeGlzdDsNCi0gICAgVUNIQVIgICAgICAgICBFcnA7DQotICAgIFVDSEFSICAg
ICAgICAgU3VwUmF0ZVtNQVhfTEVOX09GX1NVUFBPUlRFRF9SQVRFU10sIEV4dFJhdGVbTUFYX0xF
Tl9PRl9TVVBQT1JURURfUkFURVNdOw0KLSAgICBVQ0hBUiAgICAgICAgIFN1cFJhdGVMZW4sIEV4
dFJhdGVMZW47DQotCVVDSEFSCQkgIExlblZJRTsNCi0NCi0gICAgLy8gTmV3IGZvciBXUEEgc2Vj
dXJpdHkgc3VpdGVzDQotICAgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgICBWYXJJRVtNQVhf
VklFX0xFTl07ICAgICAvLyBUb3RhbCBWSUUgbGVuZ3RoID0gTUFYX1ZJRV9MRU4gLSAtNQ0KLSAg
ICBORElTXzgwMl8xMV9WQVJJQUJMRV9JRXMgICAgKnBWSUUgPSBOVUxMOw0KLQ0KLSAgICAvLyBJ
bml0IFZhcmlhYmxlIElFIHN0cnVjdHVyZQ0KLSAgICBwVklFID0gKFBORElTXzgwMl8xMV9WQVJJ
QUJMRV9JRXMpIFZhcklFOw0KLSAgICBwVklFLT5MZW5ndGggPSAwOw0KLSAgICBpZiAoUGVlckJl
YWNvbkFuZFByb2JlUnNwU2FuaXR5KHBBZCwgDQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBFbGVtLT5Nc2csIA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWxlbS0+
TXNnTGVuLCANCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZBZGRyMiwgDQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmQnNzaWQsIA0KLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgU3NpZCwgDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm
U3NpZExlbiwgDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmQnNzVHlwZSwgDQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmQmVhY29uUGVyaW9kLCANCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICZDaGFubmVsLCANCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICZUaW1lU3RhbXAsIA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJkNmRXhpc3QsIA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkNmLCANCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZBdGltV2luLCANCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICZDYXBhYmlsaXR5SW5mbywgDQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBSYXRlcywgDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm
UmF0ZXNMZW4sDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmRXh0ZW5kZWRSYXRl
SWVFeGlzdCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZFcnAsDQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAmRHRpbUNvdW50LCANCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICZEdGltUGVyaW9kLCANCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICZCY2FzdEZsYWcsIA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJk1l
c3NhZ2VUb01lLCANCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZMZWdhY3ksDQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBSYXRlLA0KLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJlN1cFJhdGVMZW4sDQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBFeHRSYXRlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkV4dFJh
dGVMZW4sDQotCQkJCQkJCQkmTGVuVklFLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcFZJRSkpIA0KLSAgICB7DQotICAgICAgICAvLyBEaXNxdWFsaWZ5IDExYiBvbmx5IGFkaG9j
IHdoZW4gd2UgYXJlIGluIDExZyBvbmx5IGFkaG9jIG1vZGUNCi0gICAgICAgIGlmICgoQnNzVHlw
ZSA9PSBCU1NfSU5ERVApICYmIChwQWQtPlBvcnRDZmcuQWRob2NNb2RlID09IDIpICYmIChSYXRl
c0xlbiA8IDEyKSkNCi0gICAgICAgICAgICByZXR1cm47DQotICAgICAgICANCi0gICAgICAgIGlm
IChNQUNfQUREUl9FUVVBTCgmcEFkLT5NbG1lLlN5bmNBdXguQnNzaWQsICZCc3NpZCkpDQotICAg
ICAgICB7DQotICAgICAgICAgICAgUlRNUENhbmNlbFRpbWVyKCAmcEFkLT5NbG1lLlN5bmNBdXgu
QmVhY29uVGltZXIpOw0KLSAgICAgICAgICAgIC8vIFVwZGF0ZSBSU1NJIHRvIHByZXZlbnQgTm8g
c2lnbmFsIGRpc3BsYXkgd2hlbiBjYXJkcyBmaXJzdCBpbml0aWFsaXplZA0KLSAgICAgICAgICAg
IHBBZC0+UG9ydENmZy5MYXN0UnNzaSA9IEVsZW0tPlJzc2k7DQotICAgICAgICAgICAgcEFkLT5Q
b3J0Q2ZnLkF2Z1Jzc2kgID0gRWxlbS0+UnNzaTsNCi0gICAgICAgICAgICANCi0gICAgICAgICAg
ICBpZiAocEFkLT5NbG1lLkNudGxBdXguU3NpZExlbiA+IDApDQotICAgICAgICAgICAgew0KLSAg
ICAgICAgICAgICAgICBOZGlzTW92ZU1lbW9yeShwQWQtPlBvcnRDZmcuU3NpZCwgcEFkLT5NbG1l
LkNudGxBdXguU3NpZCwgcEFkLT5NbG1lLkNudGxBdXguU3NpZExlbik7DQotICAgICAgICAgICAg
ICAgIHBBZC0+UG9ydENmZy5Tc2lkTGVuID0gcEFkLT5NbG1lLkNudGxBdXguU3NpZExlbjsNCi0g
ICAgICAgICAgICB9DQotICAgICAgICAgICAgZWxzZQ0KLSAgICAgICAgICAgIHsNCi0gICAgICAg
ICAgICAgICAgTmRpc01vdmVNZW1vcnkocEFkLT5Qb3J0Q2ZnLlNzaWQsIFNzaWQsIFNzaWRMZW4p
Ow0KLSAgICAgICAgICAgICAgICBwQWQtPlBvcnRDZmcuU3NpZExlbiA9IFNzaWRMZW47DQotICAg
ICAgICAgICAgfQ0KLSAgICAgICAgDQotICAgICAgICAgICAgQ09QWV9NQUNfQUREUigmcEFkLT5Q
b3J0Q2ZnLkJzc2lkLCAmQnNzaWQpOw0KLSAgICAgICAgICAgIEFzaWNTZXRCc3NpZChwQWQsICZw
QWQtPlBvcnRDZmcuQnNzaWQpOw0KLQ0KLSAgICAgICAgICAgIHBBZC0+UG9ydENmZy5Cc3NUeXBl
ID0gQnNzVHlwZTsNCi0gICAgICAgICAgICBwQWQtPlBvcnRDZmcuQmVhY29uUGVyaW9kID0gQmVh
Y29uUGVyaW9kOw0KLSAgICAgICAgICAgIHBBZC0+UG9ydENmZy5DaGFubmVsID0gQ2hhbm5lbDsN
Ci0NCi0gICAgICAgICAgICAvLyBmaWx0ZXIgb3V0IG5vbi1zdXBwb3J0ZWQgcmF0ZXMNCi0gICAg
ICAgICAgICB7DQotICAgICAgICAgICAgICAgIGludCBpOw0KLSAgICAgICAgICAgICAgICBwQWQt
PlBvcnRDZmcuU3VwcG9ydGVkUmF0ZXNMZW4gPSAwOw0KLSAgICAgICAgICAgICAgICBmb3IgKGk9
MDtpPFJhdGVzTGVuO2krKykNCi0gICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAg
ICAgVUNIQVIgUmF0ZSA9IFJhdGVzW2ldICYgMHg3ZjsNCi0gICAgICAgICAgICAgICAgICAgIGlm
ICgocEFkLT5Qb3J0Q2ZnLlBoeU1vZGUgPT0gUEhZXzExQikgJiYNCi0gICAgICAgICAgICAgICAg
ICAgICAgICAoUmF0ZSA9PSAyIHx8IFJhdGUgPT0gNCB8fCBSYXRlID09IDExIHx8IFJhdGUgPT0g
MjIpKQ0KLSAgICAgICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8v
L0RCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNZTkMgLSBTdXBwb3J0ZWQgUmF0ZVslZF0gPSAw
eCUwMnhcbiIscEFkLT5Qb3J0Q2ZnLlN1cHBvcnRlZFJhdGVzTGVuLCBSYXRlc1tpXSkpOw0KLSAg
ICAgICAgICAgICAgICAgICAgICAgIHBBZC0+UG9ydENmZy5TdXBwb3J0ZWRSYXRlc1twQWQtPlBv
cnRDZmcuU3VwcG9ydGVkUmF0ZXNMZW5dID0gUmF0ZXNbaV07DQotICAgICAgICAgICAgICAgICAg
ICAgICAgcEFkLT5Qb3J0Q2ZnLlN1cHBvcnRlZFJhdGVzTGVuICsrOw0KLSAgICAgICAgICAgICAg
ICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoKFJhdGUgPT0gMiB8fCBSYXRl
ID09IDQgfHwgUmF0ZSA9PSAxMSB8fCBSYXRlID09IDIyKSB8fA0KLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKFJhdGUgPT0gMTIgfHwgUmF0ZSA9PSAxOCB8fCBSYXRlID09IDI0IHx8IFJh
dGUgPT0gMzYpIHx8DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUmF0ZSA9PSA0OCB8
fCBSYXRlID09IDcyIHx8IFJhdGUgPT0gOTYgfHwgUmF0ZSA9PSAxMDgpKQ0KLSAgICAgICAgICAg
ICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIERCR1BSSU5UKFJUX0RFQlVH
X1RSQUNFLCAoIlNZTkMgLSBTdXBwb3J0ZWQgUmF0ZVslZF0gPSAweCUwMnhcbiIscEFkLT5Qb3J0
Q2ZnLlN1cHBvcnRlZFJhdGVzTGVuLCBSYXRlc1tpXSkpOw0KLSAgICAgICAgICAgICAgICAgICAg
ICAgIHBBZC0+UG9ydENmZy5TdXBwb3J0ZWRSYXRlc1twQWQtPlBvcnRDZmcuU3VwcG9ydGVkUmF0
ZXNMZW5dID0gUmF0ZXNbaV07DQotICAgICAgICAgICAgICAgICAgICAgICAgcEFkLT5Qb3J0Q2Zn
LlN1cHBvcnRlZFJhdGVzTGVuICsrOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAg
ICAgICAgICB9DQotICAgICAgICAgICAgfQ0KLQ0KLSAgICAgICAgICAgIC8vIENvcHkgQVAncyBz
dXBwb3J0ZWQgcmF0ZSB0byBwb3J0Y2ZnIGZvciBjcmVhdGluZyBhc3NvaWNhdGlvbiByZXF1ZXN0
DQotICAgICAgICAgICAgLy8gQWxzbyBmaWx0ZXIgb3V0IG5vdCBzdXBwb3J0ZWQgcmF0ZQ0KLSAg
ICAgICAgICAgIC8vIFN1cHBvcnRlZCByYXRlDQotICAgICAgICAgICAgew0KLSAgICAgICAgICAg
ICAgICBpbnQgaTsNCi0gICAgICAgICAgICAgICAgcEFkLT5Qb3J0Q2ZnLlN1cFJhdGVMZW4gPSAw
Ow0KLSAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgU3VwUmF0ZUxlbjsgaSsrKQ0KLSAg
ICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICBVQ0hBUiBSYXRlID0gU3VwUmF0
ZVtpXSAmIDB4N2Y7DQotICAgICAgICAgICAgICAgICAgICBpZiAoKHBBZC0+UG9ydENmZy5QaHlN
b2RlID09IFBIWV8xMUIpICYmDQotICAgICAgICAgICAgICAgICAgICAgICAgKFJhdGUgPT0gMiB8
fCBSYXRlID09IDQgfHwgUmF0ZSA9PSAxMSB8fCBSYXRlID09IDIyKSkNCi0gICAgICAgICAgICAg
ICAgICAgIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBwQWQtPlBvcnRDZmcuU3VwUmF0ZVtw
QWQtPlBvcnRDZmcuU3VwUmF0ZUxlbl0gPSBTdXBSYXRlW2ldOw0KLSAgICAgICAgICAgICAgICAg
ICAgICAgIHBBZC0+UG9ydENmZy5TdXBSYXRlTGVuICsrOw0KLSAgICAgICAgICAgICAgICAgICAg
fQ0KLSAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoKFJhdGUgPT0gMiB8fCBSYXRlID09IDQg
fHwgUmF0ZSA9PSAxMSB8fCBSYXRlID09IDIyKSB8fA0KLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKFJhdGUgPT0gMTIgfHwgUmF0ZSA9PSAxOCB8fCBSYXRlID09IDI0IHx8IFJhdGUgPT0g
MzYpIHx8DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUmF0ZSA9PSA0OCB8fCBSYXRl
ID09IDcyIHx8IFJhdGUgPT0gOTYgfHwgUmF0ZSA9PSAxMDgpKQ0KLSAgICAgICAgICAgICAgICAg
ICAgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIHBBZC0+UG9ydENmZy5TdXBSYXRlW3BBZC0+
UG9ydENmZy5TdXBSYXRlTGVuXSA9IFN1cFJhdGVbaV07DQotICAgICAgICAgICAgICAgICAgICAg
ICAgcEFkLT5Qb3J0Q2ZnLlN1cFJhdGVMZW4gKys7DQotICAgICAgICAgICAgICAgICAgICB9DQot
ICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9DQotDQotICAgICAgICAgICAgLy8gQ29w
eSBBUCdzIHN1cHBvcnRlZCByYXRlIHRvIHBvcnRjZmcgZm9yIGNyZWF0aW5nIGFzc29pY2F0aW9u
IHJlcXVlc3QNCi0gICAgICAgICAgICAvLyBBbHNvIGZpbHRlciBvdXQgbm90IHN1cHBvcnRlZCBy
YXRlDQotICAgICAgICAgICAgLy8gRXh0ZW5kZWQgcmF0ZQ0KLSAgICAgICAgICAgIGlmIChFeHRl
bmRlZFJhdGVJZUV4aXN0ID09IFRSVUUpDQotICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAg
ICBpbnQgaTsNCi0gICAgICAgICAgICAgICAgcEFkLT5Qb3J0Q2ZnLkV4dFJhdGVMZW4gPSAwOw0K
LSAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgRXh0UmF0ZUxlbjsgaSsrKQ0KLSAgICAg
ICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICBVQ0hBUiBSYXRlID0gRXh0UmF0ZVtp
XSAmIDB4N2Y7DQotICAgICAgICAgICAgICAgICAgICBpZiAoKHBBZC0+UG9ydENmZy5QaHlNb2Rl
ID09IFBIWV8xMUIpICYmDQotICAgICAgICAgICAgICAgICAgICAgICAgKFJhdGUgPT0gMiB8fCBS
YXRlID09IDQgfHwgUmF0ZSA9PSAxMSB8fCBSYXRlID09IDIyKSkNCi0gICAgICAgICAgICAgICAg
ICAgIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBwQWQtPlBvcnRDZmcuRXh0UmF0ZVtwQWQt
PlBvcnRDZmcuRXh0UmF0ZUxlbl0gPSBFeHRSYXRlW2ldOw0KLSAgICAgICAgICAgICAgICAgICAg
ICAgIHBBZC0+UG9ydENmZy5FeHRSYXRlTGVuICsrOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0K
LSAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoKFJhdGUgPT0gMiB8fCBSYXRlID09IDQgfHwg
UmF0ZSA9PSAxMSB8fCBSYXRlID09IDIyKSB8fA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKFJhdGUgPT0gMTIgfHwgUmF0ZSA9PSAxOCB8fCBSYXRlID09IDI0IHx8IFJhdGUgPT0gMzYp
IHx8DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUmF0ZSA9PSA0OCB8fCBSYXRlID09
IDcyIHx8IFJhdGUgPT0gOTYgfHwgUmF0ZSA9PSAxMDgpKQ0KLSAgICAgICAgICAgICAgICAgICAg
ew0KLSAgICAgICAgICAgICAgICAgICAgICAgIHBBZC0+UG9ydENmZy5FeHRSYXRlW3BBZC0+UG9y
dENmZy5FeHRSYXRlTGVuXSA9IEV4dFJhdGVbaV07DQotICAgICAgICAgICAgICAgICAgICAgICAg
cEFkLT5Qb3J0Q2ZnLkV4dFJhdGVMZW4gKys7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAg
ICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgZWxzZQ0KLSAgICAg
ICAgICAgIHsNCi0gICAgICAgICAgICAgICAgcEFkLT5Qb3J0Q2ZnLkV4dFJhdGVMZW4gPSAwOw0K
LSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICANCi0gICAgICAgICAgICBEQkdQUklOVChSVF9E
RUJVR19UUkFDRSwgIlNZTkMgLSBBUCdzIFN1cHBvcnRlZFJhdGVzTGVuPSVkLCBzZXQgU1RBJ3Mg
U3VwcG9ydGVkUmF0ZUxlbj0lZFxuIiwgDQotICAgICAgICAgICAgICAgIFJhdGVzTGVuLCBwQWQt
PlBvcnRDZmcuU3VwcG9ydGVkUmF0ZXNMZW4pOw0KLSAgICAgICAgICAgIA0KLSAgICAgICAgICAg
IC8vIE1hc2sgb3V0IHVubmVjZXNzYXJ5IGNhcGFiaWxpdHkgaW5mb3JtYXRpb24NCi0gICAgICAg
ICAgICBDYXBhYmlsaXR5SW5mbyAmPSBTVVBQT1JURURfQ0FQQUJJTElUWV9JTkZPOw0KLSAgICAg
ICAgICAgIA0KLSAgICAgICAgICAgIC8vIENoZWNrIGZvciA4MDIuMTFnIGluZm9ybWF0aW9uLCBp
ZiA4MDIuMTEgYi9nIG1peGVkIG1vZGUuDQotICAgICAgICAgICAgLy8gV2UgY2FuJ3Qgc3VwcG9y
dCBpdHMgc2hvcnQgcHJlYW1ibGUgZm9yIG5vdy4NCi0gICAgICAgICAgICBwQWQtPlBvcnRDZmcu
Q2FwYWJpbGl0eUluZm8gPSBDYXBhYmlsaXR5SW5mbzsNCi0NCi0gICAgICAgICAgICBpZiAoKEJz
c1R5cGUgPT0gQlNTX0lOREVQKSAmJiAoQ0FQX0lTX0lCU1NfT04oQ2FwYWJpbGl0eUluZm8pKSkg
DQotICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICBwQWQtPlBvcnRDZmcuQXRpbVdpbiA9
IEF0aW1XaW47DQotICAgICAgICAgICAgfSANCi0gICAgICAgICAgICBlbHNlIGlmIChCc3NUeXBl
ID09IEJTU19JTkZSQSkgDQotICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICBwQWQtPlBv
cnRDZmcuQ2ZwUGVyaW9kID0gQ2YuQ2ZwUGVyaW9kOw0KLSAgICAgICAgICAgICAgICBwQWQtPlBv
cnRDZmcuQ2ZwTWF4RHVyYXRpb24gPSBDZi5DZnBNYXhEdXJhdGlvbjsNCi0gICAgICAgICAgICAg
ICAgcEFkLT5Qb3J0Q2ZnLkNmcER1clJlbWFpbiA9IENmLkNmcER1clJlbWFpbmluZzsNCi0gICAg
ICAgICAgICAgICAgcEFkLT5Qb3J0Q2ZnLkNmcENvdW50ID0gQ2YuQ2ZwQ291bnQ7DQotICAgICAg
ICAgICAgICAgIHBBZC0+UG9ydENmZy5DZnBQZXJpb2QgPSBDZi5DZnBQZXJpb2Q7DQotDQotICAg
ICAgICAgICAgICAgIEFzaWNFbmFibGVCc3NTeW5jKHBBZCk7DQotICAgICAgICAgICAgfQ0KLQ0K
LSAgICAgICAgICAgIHBBZC0+TWxtZS5TeW5jTWFjaGluZS5DdXJyU3RhdGUgPSBTWU5DX0lETEU7
DQotICAgICAgICAgICAgTWxtZUNudGxDb25maXJtKHBBZCwgTVQyX0pPSU5fQ09ORiwgTUxNRV9T
VUNDRVNTKTsNCi0gICAgICAgIH0NCi0gICAgICAgIC8vIG5vdCB0byBtZSBCRUFDT04sIGlnbm9y
ZWQNCi0gICAgfSANCi0gICAgLy8gc2FuaXR5IGNoZWNrIGZhaWwsIGlnbm9yZSB0aGlzIGZyYW1l
DQotfQ0KLQ0KLS8qIA0KLSAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLSAgICBEZXNjcmlwdGlvbjoN
Ci0gICAgICAgIHJlY2VpdmUgQkVBQ09OIGZyb20gcGVlcg0KLSAgICA9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQ0KLSAqLw0KLVZPSUQgUGVlckJlYWNvbigNCi0gICAgSU4gUFJUMjU3MEFEQVBURVIgcEFkLCAN
Ci0gICAgSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKSANCi17DQotICAgIE1BQ0FERFIgICAgICAg
QnNzaWQsIEFkZHIyOw0KLSAgICBDSEFSICAgICAgICAgIFNzaWRbTUFYX0xFTl9PRl9TU0lEXTsN
Ci0gICAgQ0ZfUEFSTSAgICAgICBDZlBhcm07DQotICAgIFVDSEFSICAgICAgICAgU3NpZExlbiwg
TWVzc2FnZVRvTWU9MCwgQnNzVHlwZSwgQ2hhbm5lbCwgUmF0ZXNbTUFYX0xFTl9PRl9TVVBQT1JU
RURfUkFURVNdOw0KLSAgICBVQ0hBUiAgICAgICAgIFJhdGVzTGVuLCBEdGltQ291bnQ9MCwgRHRp
bVBlcmlvZD0wLCBCY2FzdEZsYWc9MCwgTGVnYWN5Ow0KLSAgICBVU0hPUlQgICAgICAgIENhcGFi
aWxpdHlJbmZvLCBBdGltV2luLCBCZWFjb25QZXJpb2Q7DQotICAgIExBUkdFX0lOVEVHRVIgVGlt
ZVN0YW1wOw0KLSAgICBCT09MRUFOICAgICAgIENmRXhpc3QgPSBGQUxTRTsNCi0gICAgVVNIT1JU
ICAgICAgICBUYnR0TnVtVG9OZXh0V2FrZVVwOw0KLSAgICBCT09MRUFOICAgICAgIEV4dGVuZGVk
UmF0ZUllRXhpc3Q7DQotICAgIFVDSEFSICAgICAgICAgRXJwOw0KLSAgICBVQ0hBUiAgICAgICAg
IFN1cFJhdGVbTUFYX0xFTl9PRl9TVVBQT1JURURfUkFURVNdLCBFeHRSYXRlW01BWF9MRU5fT0Zf
U1VQUE9SVEVEX1JBVEVTXTsNCi0gICAgVUNIQVIgICAgICAgICBTdXBSYXRlTGVuLCBFeHRSYXRl
TGVuOw0KLQlVQ0hBUiAgICAgICAgIExlblZJRTsNCi0NCi0gICAgLy8gTmV3IGZvciBXUEEgc2Vj
dXJpdHkgc3VpdGVzDQotICAgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgICBWYXJJRVtNQVhf
VklFX0xFTl07ICAgICAvLyBUb3RhbCBWSUUgbGVuZ3RoID0gTUFYX1ZJRV9MRU4gLSAtNQ0KLSAg
ICBORElTXzgwMl8xMV9WQVJJQUJMRV9JRXMgICAgKnBWSUUgPSBOVUxMOw0KLQ0KLSAgICBpZiAo
IUlORlJBX09OKHBBZCkgJiYgIUFESE9DX09OKHBBZCkpDQotIHsgICAgIC8vIHJldHVybjsNCi0N
Ci19DQotICAgIC8vIEluaXQgVmFyaWFibGUgSUUgc3RydWN0dXJlDQotICAgIHBWSUUgPSAoUE5E
SVNfODAyXzExX1ZBUklBQkxFX0lFcykgVmFySUU7DQotICAgIHBWSUUtPkxlbmd0aCA9IDA7DQot
ICAgIGlmIChQZWVyQmVhY29uQW5kUHJvYmVSc3BTYW5pdHkocEFkLCANCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEVsZW0tPk1zZywgDQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBFbGVtLT5Nc2dMZW4sIA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
JkFkZHIyLCANCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZCc3NpZCwgDQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTc2lkLCANCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICZTc2lkTGVuLCANCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICZCc3NUeXBlLCANCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZCZWFjb25QZXJp
b2QsIA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkNoYW5uZWwsIA0KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJlRpbWVTdGFtcCwgDQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAmQ2ZFeGlzdCwgDQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAmQ2ZQYXJtLCANCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZBdGltV2lu
LCANCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZDYXBhYmlsaXR5SW5mbywgDQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSYXRlcywgDQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAmUmF0ZXNMZW4sDQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAmRXh0ZW5kZWRSYXRlSWVFeGlzdCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICZFcnAsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmRHRpbUNvdW50LCAN
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZEdGltUGVyaW9kLCANCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICZCY2FzdEZsYWcsIA0KLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJk1lc3NhZ2VUb01lLCANCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICZMZWdhY3ksDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBSYXRl
LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlN1cFJhdGVMZW4sDQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBFeHRSYXRlLA0KLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJkV4dFJhdGVMZW4sDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAmTGVuVklFLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcFZJRSkpIA0KLSAg
ICB7DQotICAgICAgICBCT09MRUFOIGlzX215X2Jzc2lkLCBpc19teV9zc2lkOw0KLSAgICAgICAg
VUxPTkcgICBCc3NpZHgsIE5vdzsNCi0gICAgICAgIEJTU19FTlRSWSAqcEJzczsNCi0NCi0JLy8g
SW5pdCBWYXJpYWJsZSBJRSBzdHJ1Y3R1cmUNCi0JcFZJRSA9IChQTkRJU184MDJfMTFfVkFSSUFC
TEVfSUVzKSBWYXJJRTsNCi0JcFZJRS0+TGVuZ3RoID0gMDsNCi0gICAgICAgIGlzX215X2Jzc2lk
ID0gKE1BQ19BRERSX0VRVUFMKCZCc3NpZCwgJnBBZC0+UG9ydENmZy5Cc3NpZCkgPyBUUlVFIDog
RkFMU0UpOw0KLSAgICAgICAgaXNfbXlfc3NpZCA9ICgoKHBBZC0+UG9ydENmZy5Tc2lkTGVuID09
IFNzaWRMZW4pICYmIFJUTVBFcXVhbE1lbW9yeShTc2lkLCBwQWQtPlBvcnRDZmcuU3NpZCwgKFVM
T05HKSBTc2lkTGVuKSkgPyBUUlVFIDogRkFMU0UpOw0KLSAgICAgICAgLy8gTWFzayBvdXQgdW5u
ZWNlc3NhcnkgY2FwYWJpbGl0eSBpbmZvcm1hdGlvbg0KLSAgICAgICAgQ2FwYWJpbGl0eUluZm8g
Jj0gU1VQUE9SVEVEX0NBUEFCSUxJVFlfSU5GTzsNCi0NCi0gICAgICAgIC8vIGlnbm9yZSBCRUFD
T04gbm90IGZvciBteSBTU0lEDQotICAgICAgICBpZiAoKCEgaXNfbXlfc3NpZCkgJiYgKCEgaXNf
bXlfYnNzaWQpKQ0KLSAgICAgICAgICAgIHsNCi0gICAgICAgICAgICByZXR1cm47DQotICAgICAg
ICAgICAgfQ0KLQ0KLSAgICAgICAgLy8NCi0gICAgICAgIC8vIEhvdXNla2VlcGluZyAiU3NpZEJz
c1RhYiIgdGFibGUgZm9yIGxhdGVyLW9uIFJPQU1pbmcgdXNhZ2UuIA0KLSAgICAgICAgLy8NCi0g
ICAgICAgIEJzc2lkeCA9IEJzc1RhYmxlU2VhcmNoKCZwQWQtPk1sbWUuQ250bEF1eC5Tc2lkQnNz
VGFiLCAmQnNzaWQpOw0KLSAgICAgICAgaWYgKEJzc2lkeCA9PSBCU1NfTk9UX0ZPVU5EKQ0KLSAg
ICAgICAgew0KLSAgICAgICAgICAgIC8vIFJldHVybiBpbW1lZGlhdGVseSB3aGVuIGluIHRyYW5z
aXRpb24gcHJvY2VzcyB3aGVuIGNoYW5naW5nIGFzc29jaWF0aW9uDQotICAgICAgICAgICAgLy8g
Rm91bmQgdGhpcyBidWcgd2hlbiBkb2luZyBXSFFMIGFkLWhvYyB0ZXN0IGNhc2UNCi0gICAgICAg
ICAgICBpZiAocEFkLT5Qb3J0Q2ZnLlNzaWRMZW4gIT0gcEFkLT5NbG1lLkNudGxBdXguU3NpZExl
bikNCi0gICAgICAgICAgICAgICAgcmV0dXJuOw0KLSAgICAgICAgICAgIGlmICghUlRNUEVxdWFs
TWVtb3J5KHBBZC0+UG9ydENmZy5Tc2lkLCBwQWQtPk1sbWUuQ250bEF1eC5Tc2lkLCBwQWQtPlBv
cnRDZmcuU3NpZExlbikpDQotICAgICAgICAgICAgICAgIHJldHVybjsNCi0gICAgICAgICAgICAN
Ci0gICAgICAgICAgICAvLyBkaXNjb3ZlciBuZXcgQVAgb2YgdGhpcyBuZXR3b3JrLCBjcmVhdGUg
QlNTIGVudHJ5DQotICAgICAgICAgICAgQnNzaWR4ID0gQnNzVGFibGVTZXRFbnRyeShwQWQsICZw
QWQtPk1sbWUuQ250bEF1eC5Tc2lkQnNzVGFiLCAmQnNzaWQsIFNzaWQsIFNzaWRMZW4sIA0KLSAg
ICAgICAgICAgICAgICAgICAgICAgIEJzc1R5cGUsIEJlYWNvblBlcmlvZCwgQ2ZFeGlzdCwgJkNm
UGFybSwgQXRpbVdpbiwgQ2FwYWJpbGl0eUluZm8sIA0KLSAgICAgICAgICAgICAgICAgICAgICAg
IFJhdGVzLCBSYXRlc0xlbiwgRXh0ZW5kZWRSYXRlSWVFeGlzdCwgQ2hhbm5lbCwgRWxlbS0+UnNz
aSwgVGltZVN0YW1wLCBMZW5WSUUsIHBWSUUpOw0KLQ0KLSAgICAgICAgICAgIGlmIChCc3NpZHgg
PT0gQlNTX05PVF9GT1VORCkgLy8gcmV0dXJuIGlmIEJTUyB0YWJsZSBmdWxsDQotICAgICAgICAg
ICAgICAgIHJldHVybjsgIA0KLQ0KLSAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNF
LCAiU1lOQyAtIE5ldyBBUCBhZGRlZCB0byBTc2lkQnNzVGFiWyVkXSwgUlNTST0lZCwgTUFDPSUw
Mng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4XG4iLCANCi0gICAgICAgICAgICAgICAgQnNzaWR4
LCBFbGVtLT5Sc3NpLCBCc3NpZC5PY3RldFswXSwgQnNzaWQuT2N0ZXRbMV0sIEJzc2lkLk9jdGV0
WzJdLCANCi0gICAgICAgICAgICAgICAgQnNzaWQuT2N0ZXRbM10sIEJzc2lkLk9jdGV0WzRdLCBC
c3NpZC5PY3RldFs1XSk7DQotICAgICAgICB9DQotICAgICAgICANCi0gICAgICAgIC8vIGlmIHRo
ZSBzc2lkIG1hdGNoZWQgJiBic3NpZCB1bm1hdGNoZWQsIHdlIHNob3VsZCBzZWxlY3QgdGhlIGJz
c2lkIHdpdGggbGFyZ2UgdmFsdWUuDQotICAgICAgICAvLyBUaGlzIG1pZ2h0IGhhcHBlbmVkIHdo
ZW4gdHdvIFNUQSBzdGFydCBhdCB0aGUgc2FtZSB0aW1lDQotICAgICAgICBpZiAoaXNfbXlfc3Np
ZCAmJiAoISBpc19teV9ic3NpZCkgJiYgQURIT0NfT04ocEFkKSkNCi0gICAgICAgIHsNCi0gICAg
ICAgICAgICBJTlQgaTsNCi0NCi0gICAgICAgICAgICAvLyBBZGQgdG8gc2FmZSBndWFyZCBhZGhv
YyB3ZXAgc3RhdHVzIG1pc21hdGNoDQotICAgICAgICAgICAgaWYgKHBBZC0+UG9ydENmZy5XZXBT
dGF0dXMgIT0gcEFkLT5NbG1lLkNudGxBdXguU3NpZEJzc1RhYi5Cc3NFbnRyeVtCc3NpZHhdLldl
cFN0YXR1cykNCi0gICAgICAgICAgICAgICAgcmV0dXJuOw0KLSAgICAgICAgICAgIA0KLSAgICAg
ICAgICAgIC8vIGxpbmsgZG93biB0aGUgb25lIHdpdGggc21hbGxlciBCU1NJRCB2YWx1ZS4NCi0g
ICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKQ0KLSAgICAgICAgICAgIHsNCi0gICAg
ICAgICAgICAgICAgaWYgKEJzc2lkLk9jdGV0W2ldID4gcEFkLT5Qb3J0Q2ZnLkJzc2lkLk9jdGV0
W2ldKQ0KLSAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICBBc2ljRGlzYWJs
ZVN5bmMocEFkKTsNCi0gICAgICAgICAgICAgICAgICAgIE5kaXNNb3ZlTWVtb3J5KCZwQWQtPlBv
cnRDZmcuQnNzaWQsICZCc3NpZCwgNik7DQotICAgICAgICAgICAgICAgICAgICBBc2ljU2V0QnNz
aWQocEFkLCAmcEFkLT5Qb3J0Q2ZnLkJzc2lkKTsgDQotICAgICAgICAgICAgICAgICAgICBBc2lj
RW5hYmxlSWJzc1N5bmMocEFkKTsNCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAg
ICAgICAgICAgICB9DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLQ0KLSAgICAgICAgREJH
UFJJTlQoUlRfREVCVUdfSU5GTywgIlNZTkMgLSBQZWVyQmVhY29uIGZyb20gJTAyeDolMDJ4OiUw
Mng6JTAyeDolMDJ4OiUwMnggLSBEdGltPSVkLyVkLCBSc3NpPSUwMnhcbiIsIA0KLSAgICAgICAg
ICAgIEJzc2lkLk9jdGV0WzBdLCBCc3NpZC5PY3RldFsxXSwgQnNzaWQuT2N0ZXRbMl0sIA0KLSAg
ICAgICAgICAgIEJzc2lkLk9jdGV0WzNdLCBCc3NpZC5PY3RldFs0XSwgQnNzaWQuT2N0ZXRbNV0s
IA0KLSAgICAgICAgICAgIER0aW1Db3VudCwgRHRpbVBlcmlvZCwgRWxlbS0+UnNzaSk7DQotDQot
ICAgICAgICBOb3cgPSBqaWZmaWVzOw0KLSAgICAgICAgcEJzcyA9ICZwQWQtPk1sbWUuQ250bEF1
eC5Tc2lkQnNzVGFiLkJzc0VudHJ5W0Jzc2lkeF07DQotICAgICAgICBwQnNzLT5Sc3NpID0gRWxl
bS0+UnNzaTsgICAgICAgLy8gbGFzdGVzdCBSU1NJDQotICAgICAgICBwQnNzLT5MYXN0QmVhY29u
UnhUaW1lID0gTm93OyAgIC8vIGxhc3QgUlggdGltZXN0YW1wDQotICAgICAgICANCi0gICAgICAg
IC8vDQotICAgICAgICAvLyBCRUFDT04gZnJvbSBteSBCU1NJRCAtIGVpdGhlciBJQlNTIG9yIElO
RlJBIG5ldHdvcmsNCi0gICAgICAgIC8vIA0KLSAgICAgICAgaWYgKGlzX215X2Jzc2lkKQ0KLSAg
ICAgICAgew0KLSAgICAgICAgICAgIC8vIDIwMDIvMTIvMDYgLSBwYXRjaCBBYm9jb20gQVAgYnVn
LCB3aGljaCBmb3JnZXRzIHRvIHNldCAiUHJpdmFjeSIgYml0IGluIA0KLSAgICAgICAgICAgIC8v
IEFzc29jUnNwIGV2ZW4gdGhvdWdoIHRoaXMgYml0IGlzIE9OIGluIEJlYWNvbi4gU28gd2UgdXBk
YXRlIGFjY29yZGluZyANCi0gICAgICAgICAgICAvLyB0byBmb2xsb3dpbmcgQmVhY29uIGZyYW1l
Lg0KLSAgICAgICAgICAgIC8vIHBBZC0+UG9ydENmZy5Qcml2YWN5SW52b2tlZCA9IENBUF9JU19Q
UklWQUNZX09OKENhcGFiaWxpdHlJbmZvKTsNCi0gICAgICAgICAgICANCi0gICAgICAgICAgICBw
QWQtPlBvcnRDZmcuTGFzdEJlYWNvblJ4VGltZSA9IE5vdzsNCi0jaWYgMQ0KLSAgICAgICAgICAg
IC8vIGF0IGxlYXN0IG9uZSAxMWIgcGVlciBqb2luZWQuIGRvd25ncmFkZSB0aGUgTWF4VHhSYXRl
IHRvIDExTWJwcw0KLSAgICAgICAgICAgIC8vIGFmdGVyIGxhc3QgMTFiIHBlZXIgbGVmdCBmb3Ig
c2V2ZXJhbCBzZWNvbmRzLCB3ZSdsbCBhdXRvIHN3aXRjaCBiYWNrIHRvIDExRyByYXRlDQotICAg
ICAgICAgICAgLy8gaW4gTWxtZVBlcmlvZGljRXhlYygpDQotICAgICAgICAgICAgaWYgKEFESE9D
X09OKHBBZCkgJiYgKFJhdGVzTGVuIDw9IDQpKSAgIA0KLSAgICAgICAgICAgIHsNCi0gICAgICAg
ICAgICAgICAgLy8gdGhpcyB0aW1lc3RhbXAgaXMgZm9yIE1sbWVQZXJpb2RpY0V4ZWMoKSB0byBj
aGVjayBpZiBhbGwgMTFCIHBlZXJzIGhhdmUgbGVmdA0KLSAgICAgICAgICAgICAgICBwQWQtPlBv
cnRDZmcuTGFzdDExYkJlYWNvblJ4VGltZSA9IE5vdzsNCi0gICAgICAgICAgICAgICAgDQotICAg
ICAgICAgICAgICAgIGlmIChwQWQtPlBvcnRDZmcuTWF4VHhSYXRlID4gUkFURV8xMSkNCi0gICAg
ICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJB
Q0UsICJTWU5DIC0gMTFiIHBlZXIgam9pbmVkLiBkb3duLWdyYWRlIHRvIDExYiBUWCByYXRlcyBc
biIpOw0KLSAgICAgICAgICAgICAgICAgICAgTmRpc01vdmVNZW1vcnkocEFkLT5Qb3J0Q2ZnLlN1
cHBvcnRlZFJhdGVzLCBSYXRlcywgTUFYX0xFTl9PRl9TVVBQT1JURURfUkFURVMpOw0KLSAgICAg
ICAgICAgICAgICAgICAgcEFkLT5Qb3J0Q2ZnLlN1cHBvcnRlZFJhdGVzTGVuID0gUmF0ZXNMZW47
DQotICAgICAgICAgICAgICAgICAgICBNbG1lVXBkYXRlVHhSYXRlcyhwQWQsIEZBTFNFKTsNCi0g
ICAgICAgICAgICAgICAgICAgIE1ha2VJYnNzQmVhY29uKHBBZCk7ICAgICAgICAvLyBzdXBwb3J0
ZWQgcmF0ZXMgY2hhbmdlZA0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfQ0KLSNl
bmRpZiAgICAgICAgICAgICAgICANCi0gICAgICAgICAgICAvLyBjaGVjayBpZiBSU1NJIHJlYWNo
ZXMgdGhyZXNob2xkDQotICAgICAgICAgICAgcEFkLT5Qb3J0Q2ZnLkxhc3RSc3NpID0gKHBBZC0+
UG9ydENmZy5MYXN0UnNzaSArIEVsZW0tPlJzc2kpIC8gMjsNCi0gICAgICAgICAgICBwQWQtPlBv
cnRDZmcuQXZnUnNzaSAgPSAocEFkLT5Qb3J0Q2ZnLkF2Z1Jzc2kgKiA3ICsgRWxlbS0+UnNzaSkg
Pj4gMzsNCi0gICAgICAgICAgICBpZiAoKHBBZC0+UG9ydENmZy5Sc3NpVHJpZ2dlck1vZGUgPT0g
UlNTSV9UUklHR0VSRURfVVBPTl9CRUxPV19USFJFU0hPTEQpICYmDQotICAgICAgICAgICAgICAg
IChwQWQtPlBvcnRDZmcuTGFzdFJzc2kgPCBwQWQtPlBvcnRDZmcuUnNzaVRyaWdnZXIpKQ0KLSAg
ICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgTmRpc01JbmRpY2F0ZVN0YXR1cyhwQWQtPkFk
YXB0ZXJIYW5kbGUsIE5ESVNfU1RBVFVTX01FRElBX1NQRUNJRklDX0lORElDQVRJT04sICZEYm0s
IHNpemVvZihORElTXzgwMl8xMV9SU1NJKSk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAg
IGVsc2UgaWYgKChwQWQtPlBvcnRDZmcuUnNzaVRyaWdnZXJNb2RlID09IFJTU0lfVFJJR0dFUkVE
X1VQT05fRVhDQ0VFRF9USFJFU0hPTEQpICYmDQotICAgICAgICAgICAgICAgIChwQWQtPlBvcnRD
ZmcuTGFzdFJzc2kgPiBwQWQtPlBvcnRDZmcuUnNzaVRyaWdnZXIpKQ0KLSAgICAgICAgICAgIHsN
Ci0gICAgICAgICAgICAgICAgLy9ORElTXzgwMl8xMV9SU1NJIERibSA9IHBBZC0+UG9ydENmZy5M
YXN0UnNzaSAtIHBBZC0+QkJQVHVuaW5nUGFyYW1ldGVycy5SU1NJVG9EYm1PZmZzZXQ7DQotICAg
ICAgICAgICAgICAgIE5kaXNNSW5kaWNhdGVTdGF0dXMocEFkLT5BZGFwdGVySGFuZGxlLCBORElT
X1NUQVRVU19NRURJQV9TUEVDSUZJQ19JTkRJQ0FUSU9OLCAmRGJtLCBzaXplb2YoTkRJU184MDJf
MTFfUlNTSSkpOw0KLSAgICAgICAgICAgICAgICAvL0RCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAi
U1lOQyAtIE5kaXNNSW5kaWNhdGVTdGF0dXMgKioqIFJTU0kgJWQgZEJtLCBncmVhdGVyIHRoYW4g
dGhyZXNob2xkICVkIGRCbVxuIiwgDQotICAgICAgICAgICAgICAgIC8vICAgIERibSwgcEFkLT5Q
b3J0Q2ZnLlJzc2lUcmlnZ2VyIC0gcEFkLT5CQlBUdW5pbmdQYXJhbWV0ZXJzLlJTU0lUb0RibU9m
ZnNldCk7DQotICAgICAgICAgICAgfQ0KLQ0KLSAgICAgICAgICAgIGlmIChJTkZSQV9PTihwQWQp
KSAvLyAmJiAocEFkLT5Qb3J0Q2ZnLlBoeU1vZGUgPT0gUEhZXzExQkdfTUlYRUQpKQ0KLSAgICAg
ICAgICAgIHsNCi0gICAgICAgICAgICAgICAgQk9PTEVBTiBiVXNlU2hvcnRTbG90LCBiVXNlQkdQ
cm90ZWN0aW9uOw0KLSAgICAgICAgICAgICAgICANCi0gICAgICAgICAgICAgICAgLy8gZGVjaWRl
IHRvIHVzZS9jaGFuZ2UgdG8gLSANCi0gICAgICAgICAgICAgICAgLy8gICAgICAxLiBsb25nIHNs
b3QgKDIwIHVzKSBvciBzaG9ydCBzbG90ICg5IHVzKSB0aW1lDQotICAgICAgICAgICAgICAgIC8v
ICAgICAgMi4gdHVybiBvbi9vZmYgUlRTL0NUUyBhbmQvb3IgQ1RTLXRvLXNlbGYgcHJvdGVjdGlv
bg0KLSAgICAgICAgICAgICAgICAvLyAgICAgIDMuIHNob3J0IHByZWFtYmxlDQotICAgICAgICAg
ICAgICAgIGJVc2VTaG9ydFNsb3QgPSAocEFkLT5Qb3J0Q2ZnLlVzZVNob3J0U2xvdFRpbWUgPT0g
VFJVRSkgJiYgQ0FQX0lTX1NIT1JUX1NMT1RfVElNRShDYXBhYmlsaXR5SW5mbyk7DQotICAgICAg
ICAgICAgICAgIGlmIChiVXNlU2hvcnRTbG90ICE9IHBBZC0+UG9ydENmZy5TaG9ydFNsb3RJblVz
ZWQpDQotICAgICAgICAgICAgICAgICAgICBBc2ljU2V0U2xvdFRpbWUocEFkLCBiVXNlU2hvcnRT
bG90KTsNCi0NCi0gICAgICAgICAgICAgICAgYlVzZUJHUHJvdGVjdGlvbiA9IChwQWQtPlBvcnRD
ZmcuVXNlQkdQcm90ZWN0aW9uID09IDEpIHx8ICAgIC8vIGFsd2F5cyB1c2UNCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICgocEFkLT5Qb3J0Q2ZnLlVzZUJHUHJvdGVjdGlvbiA9
PSAwKSAmJiBFUlBfSVNfVVNFX1BST1RFQ1RJT04oRXJwKSk7DQotICAgICAgICAgICAgICAgIGlm
IChiVXNlQkdQcm90ZWN0aW9uICE9IHBBZC0+UG9ydENmZy5CR1Byb3RlY3Rpb25JblVzZWQpDQot
ICAgICAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgICAgIHBBZC0+UG9ydENmZy5CR1By
b3RlY3Rpb25JblVzZWQgPSBiVXNlQkdQcm90ZWN0aW9uOw0KLSAgICAgICAgICAgICAgICAgICAg
REJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICJTWU5DIC0gQVAgY2hhbmdlZCBCL0cgcHJvdGVjdGlv
biB0byAlZFxuIiwgYlVzZUJHUHJvdGVjdGlvbik7DQotICAgICAgICAgICAgICAgIH0NCi0NCi0g
ICAgICAgICAgICAgICAgaWYgKChwQWQtPlBvcnRDZmcuVHhQcmVhbWJsZUluVXNlZCA9PSBSdDgw
Ml8xMVByZWFtYmxlU2hvcnQpICYmIEVSUF9JU19VU0VfQkFSS0VSX1BSRUFNQkxFKEVycCkpDQot
ICAgICAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgICAgIE1sbWVTZXRUeFByZWFtYmxl
KHBBZCwgUnQ4MDJfMTFQcmVhbWJsZUxvbmcpOw0KLSAgICAgICAgICAgICAgICAgICAgREJHUFJJ
TlQoUlRfREVCVUdfVFJBQ0UsICJTWU5DIC0gQVAgZm9yY2VkIHRvIHVzZSBMT05HIHByZWFtYmxl
XG4iKTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAN
Ci0gICAgICAgICAgICBpZiAoSU5GUkFfT04ocEFkKSkNCi0gICAgICAgICAgICB7DQotICAgICAg
ICAgICAgICAgIGlmIChwQWQtPlBvcnRDZmcuUHNtID09IFBXUl9TQVZFKQ0KLSAgICAgICAgICAg
ICAgICB7DQotICAgICAgICAgICAgICAgICAgICAvLyAgMS4gQVAgaGFzIGJhY2tsb2dnZWQgdW5p
Y2FzdC10by1tZSBmcmFtZSwgc3RheSBBV0FLRSwgc2VuZCBQU1BPTEwNCi0gICAgICAgICAgICAg
ICAgICAgIC8vICAyLiBBUCBoYXMgYmFja2xvZ2dlZCBicm9hZGNhc3QvbXVsdGljYXN0IGZyYW1l
IGFuZCB3ZSB3YW50IHRob3NlIGZyYW1lcywgc3RheSBBV0FLRQ0KLSAgICAgICAgICAgICAgICAg
ICAgLy8gIDMuIHdlIGhhdmUgb3V0Z29pbmcgZnJhbWVzIGluIFR4UmluZyBvciBQcmlvUmluZywg
YmV0dGVyIHN0YXkgQVdBS0UNCi0gICAgICAgICAgICAgICAgICAgIC8vICA0LiBQc20gY2hhbmdl
IHRvIFBXUl9TQVZFLCBidXQgQVAgbm90IGJlZW4gaW5mb3JtZWQgeWV0LCB3ZSBiZXR0ZXIgc3Rh
eSBBV0FLRQ0KLSAgICAgICAgICAgICAgICAgICAgLy8gIDUuIG90aGVyd2lzZSwgcHV0IFBIWSBi
YWNrIHRvIHNsZWVwIHRvIHNhdmUgYmF0dGVyeS4NCi0gICAgICAgICAgICAgICAgICAgIGlmIChN
ZXNzYWdlVG9NZSkNCi0gICAgICAgICAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgICAg
ICAgICBEQkdQUklOVF9SQVcoUlRfREVCVUdfVFJBQ0UsICJTWU5DIC0gQVAgYmFja2xvZyB1bmlj
YXN0LXRvLW1lLCBzdGF5IEFXQUtFLCBzZW5kIFBTUE9MTFxuIik7DQotICAgICAgICAgICAgICAg
ICAgICAgICAgRW5xdWV1ZVBzUG9sbChwQWQpOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAg
ICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoQmNhc3RGbGFnICYmIChEdGltQ291bnQgPT0gMCkg
JiYgcEFkLT5Qb3J0Q2ZnLlJlY3ZEdGltKQ0KLSAgICAgICAgICAgICAgICAgICAgew0KLSAgICAg
ICAgICAgICAgICAgICAgICAgIERCR1BSSU5UX1JBVyhSVF9ERUJVR19UUkFDRSwgIlNZTkMgLSBB
UCBiYWNrbG9nIGJyb2FkY2FzdC9tdWx0aWNhc3QsIHN0YXkgQVdBS0VcbiIpOw0KLSAgICAgICAg
ICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgZWxzZQ0KLSAgICAgICAgICAgICAg
ICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIFVTSE9SVCB0ZW1wOw0KLSAgICAgICAg
ICAgICAgICAgICAgICAgIFJUVVNCU2luZ2xlUmVhZChwQWQsIDB4MzIwLCAmdGVtcCk7DQotICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKHBBZC0+QnVsa091dFBlbmRpbmcgfHwNCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKCFMT0NBTF9UWF9SSU5HX0VNUFRZKHBBZCkpIHx8DQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIChwQWQtPlByaW9SaW5nVHhDbnQgIT0gMCkgfHwNCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gKHBBZC0+UHNQb2xsQ29udGV4dC5SZWFkeSA9
PSBUUlVFKSB8fA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUlRNUF9URVNUX0ZMQUco
cEFkLCBmUlRNUF9BREFQVEVSX0JTU19TQ0FOX0lOX1BST0dSRVNTKSkgfHwNCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKCEodGVtcCAmIDB4ODApKSkNCi0gICAgICAgICAgICAgICAgICAg
ICAgICB7DQotLy8gICAgICAgICAgICAgICAgICAgICAgICAgIERCR1BSSU5UX1JBVyhSVF9ERUJV
R19UUkFDRSwgKCJTWU5DIC0gb3V0Z29pbmcgZnJhbWUgaW4gVHhSaW5nL1ByaW9SaW5nLCBzdGF5
IEFXQUtFXG4iKSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwQWQtPkJ1bGtP
dXRQZW5kaW5nKQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREJHUFJJTlRfUkFX
KFJUX0RFQlVHX1RSQUNFLCAiQnVsayBPdXQgUGVuZGluZ1xuIik7DQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICghTE9DQUxfVFhfUklOR19FTVBUWShwQWQpKQ0KLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgREJHUFJJTlRfUkFXKFJUX0RFQlVHX1RSQUNFLCAiRGF0YSBR
dWV1ZSBOb24tZW1wdHlcbiIpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocEFk
LT5QcmlvUmluZ1R4Q250ICE9IDApDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBE
QkdQUklOVF9SQVcoUlRfREVCVUdfVFJBQ0UsICJNTE1FIFF1ZXVlIE5vbi1lbXB0eVxuIik7DQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1Q
X0FEQVBURVJfQlNTX1NDQU5fSU5fUFJPR1JFU1MpKQ0KLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgREJHUFJJTlRfUkFXKFJUX0RFQlVHX1RSQUNFLCAiU2NhbiBJbiBQcm9ncmVzc1xu
Iik7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHRlbXAgJiAweDgwKSkNCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERCR1BSSU5UX1JBVyhSVF9ERUJVR19UUkFD
RSwgIkRldmljZSBRdWV1ZSBOb24tZW1wdHlcbiIpOw0KLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBEQkdQUklOVF9SQVcoUlRfREVCVUdfVFJBQ0UsICJTdGF5IEFXQUtFXG4iKTsNCi0gICAg
ICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQ0KLSAg
ICAgICAgICAgICAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgVVNI
T1JUIE5leHREdGltID0gRHRpbUNvdW50Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoTmV4dER0aW0gPT0gMCkNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5leHRE
dGltID0gRHRpbVBlcmlvZDsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgDQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFRidHROdW1Ub05leHRXYWtlVXAgPSBwQWQtPlBvcnRDZmcu
RGVmYXVsdExpc3RlbkNvdW50Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocEFk
LT5Qb3J0Q2ZnLlJlY3ZEdGltICYmIChUYnR0TnVtVG9OZXh0V2FrZVVwID4gTmV4dER0aW0pKQ0K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGJ0dE51bVRvTmV4dFdha2VVcCA9IE5l
eHREdGltOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICANCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgREJHUFJJTlRfUkFXKFJUX0RFQlVHX1RSQUNFLCAiU1lOQyAtIFBIWSBzbGVl
cHMgZm9yICVkIFRiY25cbiIsIFRidHROdW1Ub05leHRXYWtlVXApOw0KLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBBc2ljU2xlZXBUaGVuQXV0b1dha2V1cChwQWQsIFRidHROdW1Ub05leHRX
YWtlVXApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAg
IH0NCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBlbHNlDQotICAgICAgICAg
ICAgICAgIHsNCi0gICAgICAgICAgICAgICAgICAgIFVMT05HICAgUG93ZXJNb2RlOw0KLSAgICAg
ICAgICAgICAgICAgICAgICAgIFBvd2VyTW9kZSA9IHBBZC0+UG9ydENmZy5XaW5kb3dzUG93ZXJN
b2RlOw0KLSAgICAgICAgICAgICAgICAgICAgDQotICAgICAgICAgICAgICAgICAgICBpZiAoKFBv
d2VyTW9kZSAhPSBOZGlzODAyXzExUG93ZXJNb2RlQ0FNKSAmJg0KLSAgICAgICAgICAgICAgICAg
ICAgICAgIChwQWQtPkJ1bGtPdXRQZW5kaW5nID09IEZBTFNFKSAmJg0KLSAgICAgICAgICAgICAg
ICAgICAgICAgICghTE9DQUxfVFhfUklOR19FTVBUWShwQWQpKSAmJg0KLS8vICAgICAgICAgICAg
ICAgICAgICAgIChwQWQtPk1MTUVRLnNpemUgPT0gMCkgJiYNCi0vLyAgICAgICAgICAgICAgICAg
ICAgICAocEFkLT5Qc1BvbGxDb250ZXh0LlJlYWR5ICE9IFRSVUUpICYmDQotICAgICAgICAgICAg
ICAgICAgICAgICAgKHBBZC0+U2VuZFR4V2FpdFF1ZXVlLk51bWJlciA9PSAwKSAmJg0KLS8vICAg
ICAgICAgICAgICAgICAgICAgICghUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0JT
U19TQ0FOX0lOX1BST0dSRVNTKSkgJiYNCi0gICAgICAgICAgICAgICAgICAgICAgICAocEFkLT5N
bG1lLkNudGxNYWNoaW5lLkN1cnJTdGF0ZSA9PSBDTlRMX0lETEUpKQ0KLSAgICAgICAgICAgICAg
ICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIE1sbWVTZXRQc21CaXQocEFkLCBQV1Jf
U0FWRSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgRW5xdWV1ZU51bGxGcmFtZShwQWQsIHBB
ZC0+UG9ydENmZy5UeFJhdGUpOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAg
ICAgICB9ICAgICAgICAgICAgICAgDQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIA0KLSAg
ICAgICAgICAgIC8vIEF0IGxlYXN0IGFub3RoZXIgcGVlciBpbiB0aGlzIElCU1MsIGRlY2xhcmUg
TWVkaWFTdGF0ZSBhcyBDT05ORUNURUQNCi0gICAgICAgICAgICBpZiAoQURIT0NfT04ocEFkKSAm
JiAocEFkLT5NZWRpYVN0YXRlID09IE5kaXNNZWRpYVN0YXRlRGlzY29ubmVjdGVkKSkNCi0gICAg
ICAgICAgICB7DQotICAgICAgICAgICAgICAgIHBBZC0+QmVhY29uSW50ZXJ2YWxDaGFuZ2VBbGxv
d2VkID0gVFJVRTsNCi0gICAgICAgICAgICAgICAgcEFkLT5TZW50QmVhY29uc0NvdW50ID0gMDsN
Ci0gICAgICAgICAgICAgICAgcEFkLT5SZWNlaXZlZEJlYWNvbnNDb3VudCA9IDA7DQotICAgICAg
ICAgICAgICAgIHBBZC0+TWVkaWFTdGF0ZSA9IE5kaXNNZWRpYVN0YXRlQ29ubmVjdGVkOw0KLSAg
ICAgICAgICAgICAgICBOZGlzTUluZGljYXRlU3RhdHVzKHBBZC0+QWRhcHRlckhhbmRsZSwgTkRJ
U19TVEFUVVNfTUVESUFfQ09OTkVDVCwgKFBWT0lEKU5VTEwsIDApOw0KLSAgICAgICAgICAgICAg
ICBOZGlzTUluZGljYXRlU3RhdHVzQ29tcGxldGUocEFkLT5BZGFwdGVySGFuZGxlKTsNCi0NCi0g
ICAgICAgICAgICAgICAgLy8gMjAwMy8wMy8xMiAtIGpvaG4NCi0gICAgICAgICAgICAgICAgLy8g
TWFrZSBzdXJlIHRoaXMgZW50cnkgaW4gIlBvcnRDZmcuQnNzVGFiIiB0YWJsZSwgdGh1cyBjb21w
bGllcyB0byBNaWNyb3NvZnQncyBwb2xpY3kgdGhhdA0KLSAgICAgICAgICAgICAgICAvLyAic2l0
ZSBzdXJ2ZXkiIHJlc3VsdCBzaG91bGQgYWx3YXlzIGluY2x1ZGUgdGhlIGN1cnJlbnQgY29ubmVj
dGVkIG5ldHdvcmsuIA0KLSAgICAgICAgICAgICAgICAvLw0KLSAgICAgICAgICAgICAgICBCc3Np
ZHggPSBCc3NUYWJsZVNlYXJjaCgmcEFkLT5Qb3J0Q2ZnLkJzc1RhYiwgJkJzc2lkKTsNCi0gICAg
ICAgICAgICAgICAgaWYgKEJzc2lkeCA9PSBCU1NfTk9UX0ZPVU5EKQ0KLSAgICAgICAgICAgICAg
ICB7DQotICAgICAgICAgICAgICAgICAgICBCc3NpZHggPSBCc3NUYWJsZVNldEVudHJ5KHBBZCwg
JnBBZC0+UG9ydENmZy5Cc3NUYWIsICZCc3NpZCwgU3NpZCwgU3NpZExlbiwgDQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBCc3NUeXBlLCBCZWFjb25QZXJpb2QsIENmRXhpc3QsICZD
ZlBhcm0sIEF0aW1XaW4sIENhcGFiaWxpdHlJbmZvLCANCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFJhdGVzLCBSYXRlc0xlbiwgRXh0ZW5kZWRSYXRlSWVFeGlzdCwgQ2hhbm5lbCwg
RWxlbS0+UnNzaSwgVGltZVN0YW1wLCBMZW5WSUUsIHBWSUUpOw0KLSAgICAgICAgICAgICAgICB9
DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICAgICAgLy8gbm90IG15IEJTU0lELCBp
Z25vcmUgaXQNCi0gICAgfQ0KLSAgICAvLyBzYW5pdHkgY2hlY2sgZmFpbCwgaWdub3JlIHRoaXMg
ZnJhbWUNCi0gICAgZWxzZQ0KLSAgICAgICAgICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdf
VFJBQ0UsICIgc2FuaXR5IGNoZWNrIGZhaWwgcGVlckJFQUNPTiBcbiIpOw0KLQ0KLX0NCi0NCi0v
KiANCi0gICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0gICAgRGVzY3JpcHRpb246DQotICAgICAgICBS
ZWNlaXZlIFBST0JFIFJFUSBmcm9tIHJlbW90ZSBwZWVyIHdoZW4gb3BlcmF0aW5nIGluIElCU1Mg
bW9kZQ0KLSAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLSAqLw0KLVZPSUQgUGVlclByb2JlUmVxQWN0
aW9uKA0KLSAgICBJTiBQUlQyNTcwQURBUFRFUiBwQWQsIA0KLSAgICBJTiBNTE1FX1FVRVVFX0VM
RU0gKkVsZW0pIA0KLXsNCi0gICAgTUFDQUREUiAgICAgICBBZGRyMjsNCi0gICAgQ0hBUiAgICAg
ICAgICBTc2lkW01BWF9MRU5fT0ZfU1NJRF07DQotICAgIFVDSEFSICAgICAgICAgU3NpZExlbjsN
Ci0gICAgTUFDSERSICAgICAgICBQcm9iZVJzcEhkcjsNCi0gICAgTkRJU19TVEFUVVMgICBOU3Rh
dHVzOw0KLSAgICBVQ0hBUiAgICAgICAgICpPdXRCdWZmZXIgPSBOVUxMOw0KLSAgICBVTE9ORyAg
ICAgICAgIEZyYW1lTGVuID0gMDsNCi0gICAgTEFSR0VfSU5URUdFUiBGYWtlVGltZXN0YW1wOw0K
LSAgICBVQ0hBUiAgICAgICAgIFNzaWRJZSA9IElFX1NTSUQsIERzSWUgPSBJRV9EU19QQVJNLCBJ
YnNzSWUgPSBJRV9JQlNTX1BBUk0sIFN1cHBJZSA9IElFX1NVUFBfUkFURVMsIA0KLSAgICAgICAg
ICAgICAgICAgIERzTGVuID0gMSwgSWJzc0xlbiA9IDI7DQotICAgIFVDSEFSICAgICAgICAgU3Vw
cG9ydGVkUmF0ZXNMZW47DQotICAgIFVDSEFSICAgICAgICAgU3VwcG9ydGVkUmF0ZXNbTUFYX0xF
Tl9PRl9TVVBQT1JURURfUkFURVNdOw0KLSAgICBVQ0hBUiAgICAgICAgIEV4dFJhdGVJZSA9IElF
X0VYVF9TVVBQX1JBVEVTLCBFeHRSYXRlc0xlbjsNCi0gICAgVUNIQVIgICAgICAgICBFcnBJZVsz
XSA9IHtJRV9FUlAsIDEsIDB9Ow0KLSAgICANCi0gICAgaWYgKCEgQURIT0NfT04ocEFkKSkNCi0g
ICAgICAgIHJldHVybjsNCi0NCi0gICAgaWYgKFBlZXJQcm9iZVJlcVNhbml0eShwQWQsIEVsZW0t
Pk1zZywgRWxlbS0+TXNnTGVuLCAmQWRkcjIsIFNzaWQsICZTc2lkTGVuKSkgLy8sIFJhdGVzLCAm
UmF0ZXNMZW4pKQ0KLSAgICB7DQotICAgICAgICBpZiAoKFNzaWRMZW4gPT0gMCkgfHwgUlRNUEVx
dWFsTWVtb3J5KFNzaWQsIHBBZC0+UG9ydENmZy5Tc2lkLCAoVUxPTkcpIFNzaWRMZW4pKQ0KLSAg
ICAgICAgew0KLSAgICAgICAgICAgIC8vIDIwMDMtMTItMTAgODAyLjExZyBXSUZJIHNwZWMgZGlz
YWxsb3cgT0ZETSByYXRlcyBpbiA4MDIuMTFnIEFESE9DIG1vZGUNCi0gICAgICAgICAgICAvLyAg
ICAgICAgICAgIG1ha2Ugc3VyZSAxLDIsNS41LDExIGFyZSB0aGUgZmlydCA0IHJhdGVzIGluIFBv
cnRDZmcuU3VwcG9ydGVkUmF0ZXNbXSBhcnJheQ0KLSAgICAgICAgICAgIGlmICgocEFkLT5Qb3J0
Q2ZnLlBoeU1vZGUgPT0gUEhZXzExQkdfTUlYRUQpICYmIChwQWQtPlBvcnRDZmcuQWRob2NNb2Rl
ID09IDApKQ0KLSAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgaW50IGk7DQotICAgICAg
ICAgICAgICAgIFN1cHBvcnRlZFJhdGVzTGVuPTA7DQotICAgICAgICAgICAgICAgIGZvciAoaT0w
O2k8cEFkLT5Qb3J0Q2ZnLlN1cHBvcnRlZFJhdGVzTGVuO2krKykNCi0gICAgICAgICAgICAgICAg
ew0KLSAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChwQWQtPlBvcnRDZmcuU3VwcG9ydGVkUmF0
ZXNbaV0gJiAweDdmKQ0KLSAgICAgICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAg
ICAgICAgIGNhc2UgMjoNCi0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6DQotICAgICAg
ICAgICAgICAgICAgICAgICAgY2FzZSAxMToNCi0gICAgICAgICAgICAgICAgICAgICAgICBjYXNl
IDIyOg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0ZWRSYXRlc1tTdXBwb3J0
ZWRSYXRlc0xlbl0gPSBwQWQtPlBvcnRDZmcuU3VwcG9ydGVkUmF0ZXNbaV07DQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFN1cHBvcnRlZFJhdGVzTGVuICsrOw0KLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Og0K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgICAg
IH0NCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAvLyBlcnJvciBoYW5kbGlu
ZyAtIHNob3VsZCBuZXZlciBoYXBwZW4NCi0gICAgICAgICAgICAgICAgaWYgKFN1cHBvcnRlZFJh
dGVzTGVuICE9IDQpDQotICAgICAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgICAgIFN1
cHBvcnRlZFJhdGVzTGVuID0gNDsNCi0gICAgICAgICAgICAgICAgICAgIFN1cHBvcnRlZFJhdGVz
WzBdID0gMHg4MjsNCi0gICAgICAgICAgICAgICAgICAgIFN1cHBvcnRlZFJhdGVzWzFdID0gMHg4
NDsNCi0gICAgICAgICAgICAgICAgICAgIFN1cHBvcnRlZFJhdGVzWzJdID0gMHg4YjsNCi0gICAg
ICAgICAgICAgICAgICAgIFN1cHBvcnRlZFJhdGVzWzNdID0gMHg5NjsNCi0gICAgICAgICAgICAg
ICAgfQ0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBlbHNlDQotICAgICAgICAgICAgew0K
LSAgICAgICAgICAgICAgICBTdXBwb3J0ZWRSYXRlc0xlbiA9IHBBZC0+UG9ydENmZy5TdXBwb3J0
ZWRSYXRlc0xlbjsNCi0gICAgICAgICAgICAgICAgTmRpc01vdmVNZW1vcnkoU3VwcG9ydGVkUmF0
ZXMsIHBBZC0+UG9ydENmZy5TdXBwb3J0ZWRSYXRlcywgU3VwcG9ydGVkUmF0ZXNMZW4pOw0KLSAg
ICAgICAgICAgIH0NCi0NCi0gICAgICAgICAgICAvLyBhbGxvY2F0ZSBhbmQgc2VuZCBvdXQgUHJv
YmVSc3AgZnJhbWUNCi0gICAgICAgICAgICBOU3RhdHVzID0gTWxtZUFsbG9jYXRlTWVtb3J5KHBB
ZCwgKFBWT0lEKSZPdXRCdWZmZXIpOyAgLy9HZXQgYW4gdW51c2VkIG5vbnBhZ2VkIG1lbW9yeQ0K
LSAgICAgICAgICAgIGlmIChOU3RhdHVzICE9IE5ESVNfU1RBVFVTX1NVQ0NFU1MpDQotICAgICAg
ICAgICAgICAgIHJldHVybjsNCi0gICAgICAgICAgICANCi0gICAgICAgICAgICBwQWQtPlBvcnRD
ZmcuQXRpbVdpbiA9IDA7ICAvLyA/Pz8/Pz8NCi0gICAgICAgICAgICBEQkdQUklOVChSVF9ERUJV
R19UUkFDRSwgIlNZTkMgLSBTZW5kIFBST0JFX1JTUCB0byAlMDJ4OiUwMng6JTAyeDolMDJ4OiUw
Mng6JTAyeC4uLlxuIiwgDQotICAgICAgICAgICAgICAgIEFkZHIyLk9jdGV0WzBdLEFkZHIyLk9j
dGV0WzFdLEFkZHIyLk9jdGV0WzJdLEFkZHIyLk9jdGV0WzNdLEFkZHIyLk9jdGV0WzRdLEFkZHIy
Lk9jdGV0WzVdICk7DQotICAgICAgICAgICAgTWd0TWFjSGVhZGVySW5pdChwQWQsICZQcm9iZVJz
cEhkciwgU1VCVFlQRV9QUk9CRV9SU1AsIDAsICZBZGRyMiwgJnBBZC0+UG9ydENmZy5Cc3NpZCk7
DQotDQotICAgICAgICAgICAgaWYgKFN1cHBvcnRlZFJhdGVzTGVuIDw9IDgpDQotICAgICAgICAg
ICAgew0KLSAgICAgICAgICAgICAgICBNYWtlT3V0Z29pbmdGcmFtZShPdXRCdWZmZXIsICAgICAg
ICAgICAgICAgICAgICAgICAgJkZyYW1lTGVuLCANCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBNQUNfSERSX0xFTiwgICAgICAgICAgICAgICAgICAgICAgJlByb2JlUnNwSGRyLCANCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSU1FU1RBTVBfTEVOLCAgICAgICAgICAgICAg
ICAgICAgJkZha2VUaW1lc3RhbXAsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiwg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwQWQtPlBvcnRDZmcuQmVhY29uUGVyaW9k
LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIsICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAmcEFkLT5Qb3J0Q2ZnLkNhcGFiaWxpdHlJbmZvLA0KLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmU3NpZEll
LCANCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJnBBZC0+UG9ydENmZy5Tc2lkTGVuLCANCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwQWQtPlBvcnRDZmcuU3NpZExlbiwgICAgICAgICAgICAgcEFkLT5Qb3J0Q2Zn
LlNzaWQsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICZTdXBwSWUsIA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmU3VwcG9ydGVkUmF0ZXNMZW4sDQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydGVkUmF0ZXNMZW4sICAgICAgICAg
ICAgICAgIFN1cHBvcnRlZFJhdGVzLCANCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAx
LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkRzSWUsIA0KLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmRHNMZW4s
IA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAmcEFkLT5Qb3J0Q2ZnLkNoYW5uZWwsDQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZJYnNzSWUsIA0KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAmSWJzc0xlbiwgDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiwgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICZwQWQtPlBvcnRDZmcuQXRpbVdpbiwNCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBFTkRfT0ZfQVJHUyk7DQotICAgICAgICAgICAgfQ0KLSAg
ICAgICAgICAgIGVsc2UNCi0gICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgIEV4dFJhdGVz
TGVuID0gU3VwcG9ydGVkUmF0ZXNMZW4gLSA4Ow0KLSAgICAgICAgICAgICAgICBTdXBwb3J0ZWRS
YXRlc0xlbiA9IDg7DQotICAgICAgICAgICAgICAgIE1ha2VPdXRnb2luZ0ZyYW1lKE91dEJ1ZmZl
ciwgICAgICAgICAgICAgICAgICAgICAgICAmRnJhbWVMZW4sIA0KLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIE1BQ19IRFJfTEVOLCAgICAgICAgICAgICAgICAgICAgICAmUHJvYmVSc3BI
ZHIsIA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJTUVTVEFNUF9MRU4sICAgICAg
ICAgICAgICAgICAgICAmRmFrZVRpbWVzdGFtcCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAyLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBBZC0+UG9ydENmZy5CZWFj
b25QZXJpb2QsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiwgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICZwQWQtPlBvcnRDZmcuQ2FwYWJpbGl0eUluZm8sDQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICZTc2lkSWUsIA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAmcEFkLT5Qb3J0Q2ZnLlNzaWRMZW4sIA0KLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHBBZC0+UG9ydENmZy5Tc2lkTGVuLCAgICAgICAgICAgICBwQWQt
PlBvcnRDZmcuU3NpZCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJlN1cHBJZSwgDQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZTdXBwb3J0ZWRSYXRl
c0xlbiwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0ZWRSYXRlc0xlbiwg
ICAgICAgICAgICAgICAgU3VwcG9ydGVkUmF0ZXMsIA0KLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmRHNJZSwgDQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICZEc0xlbiwgDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICZwQWQtPlBvcnRDZmcuQ2hhbm5lbCwNCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJklic3NJ
ZSwgDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICZJYnNzTGVuLCANCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAy
LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBBZC0+UG9ydENmZy5BdGltV2luLA0K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMsICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBFcnBJZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJkV4dFJhdGVJZSwNCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkV4dFJhdGVzTGVu
LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4dFJhdGVzTGVuLCAgICAgICAgICAg
ICAgICAgICAgICAmU3VwcG9ydGVkUmF0ZXNbU3VwcG9ydGVkUmF0ZXNMZW5dLA0KLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEVORF9PRl9BUkdTKTsNCi0gICAgICAgICAgICB9DQotICAg
ICAgICAgICAgLy8gSWYgYWRob2Mgc2VjcnVpdHkgaXMgc2V0IGZvciBXUEEtTm9uZSwgYXBwZW5k
IHRoZSBjaXBoZXIgc3VpdGUgSUUNCi0gICAgICAgICAgICBpZiAocEFkLT5Qb3J0Q2ZnLkF1dGhN
b2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQU5vbmUpDQotICAgICAgICAgICAgew0KLSAgICAg
ICAgICAgICAgICBVTE9ORyAgIHRtcDsNCi0gICAgICAgICAgICAgICAgVUNIQVIgICBXcGFJZSA9
IElFX1dQQTsNCi0gICAgICAgICAgICAgICAgDQotICAgICAgICAgICAgICAgIGlmIChwQWQtPlBv
cnRDZmcuV2VwU3RhdHVzID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uMkVuYWJsZWQpICAgICAvLyBU
a2lwDQotICAgICAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgICAgIE1ha2VPdXRnb2lu
Z0ZyYW1lKE91dEJ1ZmZlciArIEZyYW1lTGVuLCAgICAgICAgICZ0bXAsDQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDEsICAgICAgICAgICAgICAgICAgICAgICAgICZXcGFJZSwNCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMSwgICAgICAgICAgICAgICAgICAgICAgICAgICZDaXBo
ZXJTdWl0ZVdwYU5vbmVUa2lwTGVuLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaXBo
ZXJTdWl0ZVdwYU5vbmVUa2lwTGVuLCAgJkNpcGhlclN1aXRlV3BhTm9uZVRraXBbMF0sDQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEVORF9PRl9BUkdTKTsNCi0gICAgICAgICAgICAgICAg
ICAgIEZyYW1lTGVuICs9IHRtcDsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAg
ICBlbHNlIGlmIChwQWQtPlBvcnRDZmcuV2VwU3RhdHVzID09IE5kaXM4MDJfMTFFbmNyeXB0aW9u
M0VuYWJsZWQpICAgIC8vIEFlcw0KLSAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAg
ICAgICBNYWtlT3V0Z29pbmdGcmFtZShPdXRCdWZmZXIgKyBGcmFtZUxlbiwgICAgICAgICAmdG1w
LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCAgICAgICAgICAgICAgICAgICAgICAg
ICAmV3BhSWUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsICAgICAgICAgICAgICAg
ICAgICAgICAgICAmQ2lwaGVyU3VpdGVXcGFOb25lQWVzTGVuLA0KLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBDaXBoZXJTdWl0ZVdwYU5vbmVBZXNMZW4sICAgJkNpcGhlclN1aXRlV3BhTm9u
ZUFlc1swXSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgRU5EX09GX0FSR1MpOw0KLSAg
ICAgICAgICAgICAgICAgICAgRnJhbWVMZW4gKz0gdG1wOw0KLSAgICAgICAgICAgICAgICB9DQot
ICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIA0KLSAgICAgICAgICAgIE1pbmlwb3J0TU1SZXF1
ZXN0KHBBZCwgT3V0QnVmZmVyLCBGcmFtZUxlbik7DQotICAgICAgICB9DQotICAgIH0NCi19DQot
DQotVk9JRCBCZWFjb25UaW1lb3V0QXRKb2luQWN0aW9uKA0KLSAgICBJTiBQUlQyNTcwQURBUFRF
UiBwQWQsIA0KLSAgICBJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pIA0KLXsNCi0gICAgREJHUFJJ
TlQoUlRfREVCVUdfVFJBQ0UsICJTWU5DIC0gQmVhY29uVGltZW91dEF0Sm9pbkFjdGlvblxuIik7
DQotICAgIHBBZC0+TWxtZS5TeW5jTWFjaGluZS5DdXJyU3RhdGUgPSBTWU5DX0lETEU7DQotICAg
IE1sbWVDbnRsQ29uZmlybShwQWQsIE1UMl9KT0lOX0NPTkYsIE1MTUVfUkVKX1RJTUVPVVQpOw0K
LX0NCi0NCi0vKiANCi0gICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0gICAgRGVzY3JpcHRpb246DQot
ICAgICAgICBTY2FuIHRpbWVvdXQgcHJvY2VkdXJlLiBiYXNpY2FsbHkgYWRkIGNoYW5uZWwgaW5k
ZXggYnkgMSBhbmQgcmVzY2FuDQotICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotICovDQotVk9JRCBT
Y2FuVGltZW91dEFjdGlvbigNCi0gICAgSU4gUFJUMjU3MEFEQVBURVIgcEFkLCANCi0gICAgSU4g
TUxNRV9RVUVVRV9FTEVNICpFbGVtKSANCi17DQotICAgIGlmIChwQWQtPk1sbWUuU3luY01hY2hp
bmUuQ3VyclN0YXRlID09IFNDQU5fTElTVEVOKS8vTUxNRSBjb3VsZCBoYXZlIGJlZW4gcmVzZXQu
IE1ha2Ugc3VyZSB0aGlzIGlzIG5vdCB0aGUgY2FzZSBiZWZvcmUgZ29pbmcgb24uIA0KLSAgICB7
DQotICAgICAgICBwQWQtPk1sbWUuU3luY0F1eC5DaGFubmVsID0gTmV4dENoYW5uZWwocEFkLCBw
QWQtPk1sbWUuU3luY0F1eC5DaGFubmVsKTsNCi0gICAgICAgIFNjYW5OZXh0Q2hhbm5lbChwQWQp
Ow0KLSAgICB9DQotfQ0KLQ0KLS8qIA0KLSAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLSAgICBEZXNj
cmlwdGlvbjoNCi0gICAgICAgIFNjYW4gbmV4dCBjaGFubmVsDQotICAgID09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09DQotICovDQotVk9JRCBTY2FuTmV4dENoYW5uZWwoDQotICAgIElOIFBSVDI1NzBBREFQVEVS
IHBBZCkgDQotew0KLQlNQUNIRFIgICAgICAgICAgSGRyOw0KLQlVQ0hBUiAgICAgICAgICAgU3Np
ZEllID0gSUVfU1NJRCwgU3VwcFJhdGVJZSA9IElFX1NVUFBfUkFURVM7DQotCVZPSUQgICAgICAg
ICAgICpPdXRCdWZmZXIgPSBOVUxMOw0KLQlWT0lEICAgICAgICAgICAqT3V0QnVmZmVyMiA9IE5V
TEw7DQotCU5ESVNfU1RBVFVTICAgICBOU3RhdHVzOw0KLQlVTE9ORyAgICAgICAgICAgRnJhbWVM
ZW4gPSAwOw0KLQlVQ0hBUiAgICAgICAgICAgU3NpZExlbiA9IDA7DQotDQotCWlmICgocEFkLT5N
bG1lLlN5bmNBdXguQ2hhbm5lbCA9PSAwKSApIA0KLQl7DQotCQlEQkdQUklOVChSVF9ERUJVR19U
UkFDRSwgIlNZTkMgLSBFbmQgb2YgU0NBTiwgcmVzdG9yZSB0byBjaGFubmVsICVkLCBmaW5kICVk
IEJTU1xuIixwQWQtPlBvcnRDZmcuQ2hhbm5lbCwgcEFkLT5Qb3J0Q2ZnLkJzc1RhYi5Cc3NOcik7
DQotCQlBc2ljU3dpdGNoQ2hhbm5lbChwQWQsIHBBZC0+UG9ydENmZy5DaGFubmVsKTsNCi0JCUFz
aWNMb2NrQ2hhbm5lbChwQWQsIHBBZC0+UG9ydENmZy5DaGFubmVsKTsNCi0NCi0JCXBBZC0+TWxt
ZS5TeW5jTWFjaGluZS5DdXJyU3RhdGUgPSBTWU5DX0lETEU7DQotCQlNbG1lQ250bENvbmZpcm0o
cEFkLCBNVDJfU0NBTl9DT05GLCBNTE1FX1NVQ0NFU1MpOw0KLQl9DQotCWVsc2UgaWYgKFJUTVBf
VEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9SRU1PVkVfSU5fUFJPR1JFU1MpKQ0KLQl7DQot
CQlwQWQtPk1sbWUuU3luY01hY2hpbmUuQ3VyclN0YXRlID0gU1lOQ19JRExFOw0KLQkJTWxtZUNu
dGxDb25maXJtKHBBZCwgTVQyX1NDQU5fQ09ORiwgTUxNRV9GQUlMX05PX1JFU09VUkNFKTsNCi0J
fQ0KLQllbHNlIA0KLQl7DQotCQlBc2ljU3dpdGNoQ2hhbm5lbChwQWQsIHBBZC0+TWxtZS5TeW5j
QXV4LkNoYW5uZWwpOw0KLQkJQXNpY0xvY2tDaGFubmVsKHBBZCwgcEFkLT5NbG1lLlN5bmNBdXgu
Q2hhbm5lbCk7DQotDQotICAgICAgICAvLyBUb3RhbCBTQ0FOIHRpbWUgc3RpbGwgbGltaXRzIHdp
dGhpbiAzIHNlYyAoRERLIGNvbnN0cmFpbnQpLiANCi0gICAgICAgIC8vIFRPRE86IFdlIG5lZWQg
bW9yZSBpbnRlbGxpZ2VudCBydWxlcyBoZXJlIHRvIGZ1cnRoZXIgaW1wcm92ZSBvdXQtb2Ytc2Vy
dmljZSBpc3N1ZS4NCi0gICAgICAgIC8vIGUuZy4gdGVtcG9yYXJ5IHN0b3AgY29weWluZyBORElT
IHBhY2tldCB0byBUeFJpbmcgdW50aWwgU0NBTiBjb21wbGV0ZQ0KLQ0KLSAgICAgICAgLy8gV2Ug
bmVlZCB0byBzaG9ydGVuIGFjdGl2ZSBzY2FuIHRpbWUgaW4gb3JkZXIgZm9yIFdaQyBjb25uZWN0
IGlzc3VlDQotICAgICAgICBpZiAocEFkLT5NbG1lLlN5bmNBdXguU2NhblR5cGUgPT0gU0NBTl9B
Q1RJVkUpIA0KLSAgICAgICAgew0KLQkJUlRNUFNldFRpbWVyKHBBZCwgJnBBZC0+TWxtZS5TeW5j
QXV4LlNjYW5UaW1lciwgQUNUSVZFX1NDQU5fVElNRSk7IA0KLSAgICAgICAgfQ0KLSAgICAgICAg
ZWxzZSBpZiAocEFkLT5Qb3J0Q2ZnLlBoeU1vZGUgPT0gUEhZXzExQUJHX01JWEVEKQ0KLSAgICAg
ICAgew0KLQkJUlRNUFNldFRpbWVyKHBBZCwgJnBBZC0+TWxtZS5TeW5jQXV4LlNjYW5UaW1lciwg
TUlOX0NIQU5ORUxfVElNRSk7IA0KLSAgICAgICAgfQ0KLSAgICAgICAgZWxzZQ0KLSAgICAJew0K
LQkJUlRNUFNldFRpbWVyKHBBZCwgJnBBZC0+TWxtZS5TeW5jQXV4LlNjYW5UaW1lciwgTUFYX0NI
QU5ORUxfVElNRSk7IA0KLSAgICAJfQ0KLQkJDQotICAgICAgICBNZ3RNYWNIZWFkZXJJbml0KHBB
ZCwgJkhkciwgU1VCVFlQRV9QUk9CRV9SRVEsIDAsICZwQWQtPlBvcnRDZmcuQnJvYWRjYXN0LCAm
cEFkLT5Qb3J0Q2ZnLkJyb2FkY2FzdCk7DQotICAgICAgICAvLyBUaGVyZSBpcyBubyBuZWVkIHRv
IHNlbmQgYnJvYWRjYXN0IHByb2JlIHJlcXVlc3QgaWYgYWN0aXZlIHNjYW4gaXMgaW4gZWZmZWN0
Lg0KLSAgICAgICAgLy8gVGhlIHNhbWUgcnVsciBzaG91bGQgYXBwbHkgdG8gcGFzc2l2ZSBzY2Fu
IGFsc28uDQotICAgICAgICBpZiAocEFkLT5NbG1lLlN5bmNBdXguU2NhblR5cGUgPT0gU0NBTl9Q
QVNTSVZFKSANCi0gICAgICAgIHsNCi0gICAgICAgICAgICAvLyBTZW5kIHRoZSBmaXJzdCBwcm9i
ZSByZXF1ZXN0IHdpdGggZW1wdHkgU1NJRA0KLSAgICAgICAgICAgIE5TdGF0dXMgPSBNbG1lQWxs
b2NhdGVNZW1vcnkocEFkLCAoUFZPSUQpJk91dEJ1ZmZlcik7ICAvL0dldCBhbiB1bnVzZWQgbm9u
cGFnZWQgbWVtb3J5DQotICAgICAgICAgICAgaWYgKE5TdGF0dXMgIT0gTkRJU19TVEFUVVNfU1VD
Q0VTUykNCi0gICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVH
X1RSQUNFLCAiU1lOQyAtIFNjYW5OZXh0Q2hhbm5lbCgpIGFsbG9jYXRlIG1lbW9yeSBmYWlsXG4i
KTsNCi0gICAgICAgICAgICAgICAgcEFkLT5NbG1lLlN5bmNNYWNoaW5lLkN1cnJTdGF0ZSA9IFNZ
TkNfSURMRTsNCi0gICAgICAgICAgICAgICAgTWxtZUNudGxDb25maXJtKHBBZCwgTVQyX1NDQU5f
Q09ORiwgTUxNRV9GQUlMX05PX1JFU09VUkNFKTsNCi0gICAgICAgICAgICAgICAgcmV0dXJuOw0K
LSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICANCi0gICAgICAgICAgICBEQkdQUklOVChSVF9E
RUJVR19JTkZPLCAiU1lOQyAtIHNlbmQgcGFzc2l2ZSBQcm9iZVJlcSBAIGNoYW5uZWw9JWQuLi5c
biIsIHBBZC0+TWxtZS5TeW5jQXV4LkNoYW5uZWwpOw0KLSAgICAgICAgICAgIFNzaWRMZW4gPSAw
Ow0KLSAgICAgICAgICAgIE1ha2VPdXRnb2luZ0ZyYW1lKE91dEJ1ZmZlciwgICAgJkZyYW1lTGVu
LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKE1BQ0hEUiksICAgKFVDSEFSKikm
SGRyLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgICAgICAgICAgICAgICAgJlNzaWRJ
ZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDEsICAgICAgICAgICAgICAgICZTc2lkTGVu
LCAgDQotICAgICAgICAgICAgICAgICAgICAgICAgICAxLCAgICAgICAgICAgICAgICAmU3VwcFJh
dGVJZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDEsICAgICAgICAgICAgICAgICZwQWQt
PlBvcnRDZmcuU3VwcG9ydGVkUmF0ZXNMZW4sDQotICAgICAgICAgICAgICAgICAgICAgICAgICBw
QWQtPlBvcnRDZmcuU3VwcG9ydGVkUmF0ZXNMZW4sIHBBZC0+UG9ydENmZy5TdXBwb3J0ZWRSYXRl
cywgDQotICAgICAgICAgICAgICAgICAgICAgICAgICBFTkRfT0ZfQVJHUyk7DQotICAgICAgICAg
ICAgTWluaXBvcnRNTVJlcXVlc3QocEFkLCBPdXRCdWZmZXIsIEZyYW1lTGVuKTsNCi0gICAgICAg
IH0NCi0gICAgICAgIGVsc2UgaWYgKHBBZC0+TWxtZS5TeW5jQXV4LlNjYW5UeXBlID09IFNDQU5f
QUNUSVZFKSANCi0gICAgICAgIHsNCi0gICAgICAgICAgICAvLyBBbGxvY2F0ZSBhbm90aGVyIGZv
ciBwcm9iZSBzY2FuIHdpdGggU1NJRA0KLSAgICAgICAgICAgIE5TdGF0dXMgPSBNbG1lQWxsb2Nh
dGVNZW1vcnkocEFkLCAoUFZPSUQpJk91dEJ1ZmZlcjIpOyAgLy9HZXQgYW4gdW51c2VkIG5vbnBh
Z2VkIG1lbW9yeQ0KLSAgICAgICAgICAgIGlmIChOU3RhdHVzICE9IE5ESVNfU1RBVFVTX1NVQ0NF
U1MpDQotICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19U
UkFDRSwgIlNZTkMgLSBTY2FuTmV4dENoYW5uZWwoKSBhbGxvY2F0ZSBtZW1vcnkgZmFpbFxuIik7
DQotICAgICAgICAgICAgICAgIHBBZC0+TWxtZS5TeW5jTWFjaGluZS5DdXJyU3RhdGUgPSBTWU5D
X0lETEU7DQotICAgICAgICAgICAgICAgIE1sbWVDbnRsQ29uZmlybShwQWQsIE1UMl9TQ0FOX0NP
TkYsIE1MTUVfRkFJTF9OT19SRVNPVVJDRSk7DQotICAgICAgICAgICAgICAgIHJldHVybjsNCi0g
ICAgICAgICAgICB9DQotICAgICAgICAgICAgLy8gbWFrZSBhbm90aGVyIHByb2JlIHNjYW4gd2l0
aCBTU0lEIGZyb20gbWxtZS5jbnRsYXV4LnNzaWQNCi0gICAgICAgICAgICBTc2lkTGVuID0gcEFk
LT5NbG1lLlN5bmNBdXguU3NpZExlbjsNCi0gICAgICAgICAgICBNYWtlT3V0Z29pbmdGcmFtZShP
dXRCdWZmZXIyLCAgICAgICAmRnJhbWVMZW4sDQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2l6ZW9mKE1BQ0hEUiksICAgJkhkciwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAxLCAgICAgICAgICAgICAgICAmU3NpZEllLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDEsICAgICAgICAgICAgICAgICZTc2lkTGVuLA0KLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFNzaWRMZW4sICAgICAgICAgIHBBZC0+TWxtZS5TeW5jQXV4LlNzaWQsDQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMSwgICAgICAgICAgICAgICAgJlN1cHBSYXRlSWUsDQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgICAgICAgICAgICAgICAgJnBBZC0+UG9y
dENmZy5TdXBwb3J0ZWRSYXRlc0xlbiwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
QWQtPlBvcnRDZmcuU3VwcG9ydGVkUmF0ZXNMZW4sIHBBZC0+UG9ydENmZy5TdXBwb3J0ZWRSYXRl
cywgDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRU5EX09GX0FSR1MpOw0KLSAgICAg
ICAgICAgIE1pbmlwb3J0TU1SZXF1ZXN0KHBBZCwgT3V0QnVmZmVyMiwgRnJhbWVMZW4pOw0KLQ0K
LSAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX0lORk8sICJTWU5DIC0gc2VuZCBhY3RpdmUg
UHJvYmVSZXEgQCBjaGFubmVsPSVkIHdpdGggZXNzaWQ9JXMgYW5kIGFsdGVybmF0ZT0lc1xuIiwg
cEFkLT5NbG1lLlN5bmNBdXguQ2hhbm5lbCwgcEFkLT5NbG1lLlN5bmNBdXguU3NpZCwgcEFkLT5Q
b3J0Q2ZnLlNzaWQpOw0KLSAgICAgICAgfQ0KLQ0KLSAgICAgICAgcEFkLT5NbG1lLlN5bmNNYWNo
aW5lLkN1cnJTdGF0ZSA9IFNDQU5fTElTVEVOOw0KLSAgICB9DQotfQ0KLQ0KLS8qIA0KLSAgICA9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQ0KLSAgICBEZXNjcmlwdGlvbjoNCi0gICAgPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0NCi0gKi8NCi1WT0lEIEludmFsaWRTdGF0ZVdoZW5TY2FuKA0KLSAgICBJTiBQUlQyNTcwQURB
UFRFUiBwQWQsIA0KLSAgICBJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pIA0KLXsNCi0gICAgREJH
UFJJTlQoUlRfREVCVUdfVFJBQ0UsICJBWU5DIC0gSW52YWxpZFN0YXRlV2hlblNjYW4oc3RhdGU9
JWQpLiBSZXNldCBTWU5DIG1hY2hpbmVcbiIsIHBBZC0+TWxtZS5TeW5jTWFjaGluZS5DdXJyU3Rh
dGUpOw0KLSAgICBwQWQtPk1sbWUuU3luY01hY2hpbmUuQ3VyclN0YXRlID0gU1lOQ19JRExFOw0K
LSAgICBNbG1lQ250bENvbmZpcm0ocEFkLCBNVDJfU0NBTl9DT05GLCBNTE1FX1NUQVRFX01BQ0hJ
TkVfUkVKRUNUKTsNCi19DQotDQotLyogDQotICAgID09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotICAgIERl
c2NyaXB0aW9uOg0KLSAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLSAqLw0KLVZPSUQgSW52YWxpZFN0
YXRlV2hlbkpvaW4oDQotICAgIElOIFBSVDI1NzBBREFQVEVSIHBBZCwgDQotICAgIElOIE1MTUVf
UVVFVUVfRUxFTSAqRWxlbSkgDQotew0KLSAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgIklu
dmFsaWRTdGF0ZVdoZW5Kb2luKHN0YXRlPSVkKS4gUmVzZXQgU1lOQyBtYWNoaW5lXG4iLCBwQWQt
Pk1sbWUuU3luY01hY2hpbmUuQ3VyclN0YXRlKTsNCi0gICAgcEFkLT5NbG1lLlN5bmNNYWNoaW5l
LkN1cnJTdGF0ZSA9IFNZTkNfSURMRTsNCi0gICAgTWxtZUNudGxDb25maXJtKHBBZCwgTVQyX0pP
SU5fQ09ORiwgTUxNRV9TVEFURV9NQUNISU5FX1JFSkVDVCk7DQotfQ0KLQ0KLS8qIA0KLSAgICA9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQ0KLSAgICBEZXNjcmlwdGlvbjoNCi0gICAgPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0NCi0gKi8NCi1WT0lEIEludmFsaWRTdGF0ZVdoZW5TdGFydCgNCi0gICAgSU4gUFJUMjU3MEFE
QVBURVIgcEFkLCANCi0gICAgSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKSANCi17DQotICAgIERC
R1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAiSW52YWxpZFN0YXRlV2hlblN0YXJ0KHN0YXRlPSVkKS4g
UmVzZXQgU1lOQyBtYWNoaW5lXG4iLCBwQWQtPk1sbWUuU3luY01hY2hpbmUuQ3VyclN0YXRlKTsN
Ci0gICAgcEFkLT5NbG1lLlN5bmNNYWNoaW5lLkN1cnJTdGF0ZSA9IFNZTkNfSURMRTsNCi0gICAg
TWxtZUNudGxDb25maXJtKHBBZCwgTVQyX1NUQVJUX0NPTkYsIE1MTUVfU1RBVEVfTUFDSElORV9S
RUpFQ1QpOw0KLX0NCi0NCi0vKiANCi0gICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0gICAgRGVzY3Jp
cHRpb246DQotICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotICovDQotVk9JRCBFbnF1ZXVlUHNQb2xs
KA0KLSAgICBJTiBQUlQyNTcwQURBUFRFUiBwQWRhcHRlcikgDQotew0KLQlQVFhfQ09OVEVYVCBw
UHNQb2xsQ29udGV4dDsNCi0JUFNQT0xMX0ZSQU1FCSpwUHNQb2xsRnJhbWU7DQotCQ0KLQlpZiAo
KFJUTVBfVEVTVF9GTEFHKHBBZGFwdGVyLCBmUlRNUF9BREFQVEVSX1JFU0VUX0lOX1BST0dSRVNT
KSkgfHwNCi0JICAgIChSVE1QX1RFU1RfRkxBRyhwQWRhcHRlciwgZlJUTVBfQURBUFRFUl9CVUxL
T1VUX1JFU0VUKSkgfHwNCi0JICAgIChSVE1QX1RFU1RfRkxBRyhwQWRhcHRlciwgZlJUTVBfQURB
UFRFUl9SRU1PVkVfSU5fUFJPR1JFU1MpKSkNCi0Jew0KLQkJcmV0dXJuOw0KLQl9DQotICAgIA0K
LQlwUHNQb2xsQ29udGV4dCA9ICYocEFkYXB0ZXItPlBzUG9sbENvbnRleHQpOw0KLQlwUHNQb2xs
RnJhbWUgPSAoUFNQT0xMX0ZSQU1FKilwQWRhcHRlci0+UHNQb2xsQ29udGV4dC5UcmFuc2ZlckJ1
ZmZlci0+V2lyZWxlc3NQYWNrZXQ7DQotCWlmIChwUHNQb2xsQ29udGV4dC0+SW5Vc2UgPT0gRkFM
U0UpDQotCXsNCi0JCVBUWERfU1RSVUMgIHBUeEQ7DQotCQkgICAgDQotCQlwUHNQb2xsQ29udGV4
dC0+SW5Vc2UgPSBUUlVFOw0KLQ0KLQkJcFR4RCAgPSAmKHBQc1BvbGxDb250ZXh0LT5UcmFuc2Zl
ckJ1ZmZlci0+VHhEZXNjKTsNCi0JCU5kaXNaZXJvTWVtb3J5KHBUeEQsIHNpemVvZihUWERfU1RS
VUMpKTsNCi0JCVJUVVNCV3JpdGVUeERlc2NyaXB0b3IocFR4RCwgRkFMU0UsIDAsIEZBTFNFLCBG
QUxTRSwgVFJVRSwgSUZTX0JBQ0tPRkYsDQotCQkgICAgc2l6ZW9mKFBTUE9MTF9GUkFNRSksIEZB
TFNFLCAwLCBDV19NSU5fSU5fQklUUywgQ1dfTUFYX0lOX0JJVFMsDQotCQkgICAgc2l6ZW9mKFBT
UE9MTF9GUkFNRSkgKyA0LCBwQWRhcHRlci0+UG9ydENmZy5NbG1lUmF0ZSwgNCwNCi0JCSAgICBw
QWRhcHRlci0+UG9ydENmZy5UeFByZWFtYmxlSW5Vc2VkKTsNCi0NCi0JCXBQc1BvbGxGcmFtZS0+
UHdyTWdtdCA9IDA7DQotDQotCQkvLyBGaWxsIG91dCBmcmFtZSBsZW5ndGggaW5mb3JtYXRpb24g
Zm9yIGdsb2JhbCBCdWxrIG91dCBhcmJpdG9yDQotCQlwUHNQb2xsQ29udGV4dC0+QnVsa091dFNp
emUgPSBzaXplb2YoUFNfUE9MTF9CVUZGRVIpOw0KLQkJUlRVU0JfU0VUX0JVTEtfRkxBRyhwQWRh
cHRlciwgZlJUVVNCX0JVTEtfT1VUX1BTUE9MTCk7DQotDQotCQkvLyBLaWNrIGJ1bGsgb3V0IA0K
LQkJUlRVU0JLaWNrQnVsa091dChwQWRhcHRlcik7DQotCX0NCi19DQotDQotLyogDQotICAgID09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09DQotICAgIERlc2NyaXB0aW9uOg0KLSAgICAgICAgU2VuZCBvdXQgYSBO
VUxMIGZyYW1lIHRvIEFQLiBUaGUgcHJwb3NlIGlzIHRvIGluZm9ybSBBUCB0aGlzIGNsaWVudCAN
Ci0gICAgICAgIGN1cnJlbnQgUFNNIGJpdC4NCi0gICAgTk9URToNCi0gICAgICAgIFRoaXMgcm91
dGluZSBzaG91bGQgb25seSBiZSB1c2VkIGluIGluZnJhc3RydWN0dXJlIG1vZGUuDQotICAgID09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09DQotICovDQotVk9JRCAgICBFbnF1ZXVlTnVsbEZyYW1lKA0KLSAgICBJ
TiAgUFJUMjU3MEFEQVBURVIgIHBBZGFwdGVyLA0KLSAgICBJTiAgVUNIQVIgICAgICAgICAgIFR4
UmF0ZSkgDQotew0KLQlQVFhfQ09OVEVYVCBwTnVsbENvbnRleHQ7DQotCVBUWERfU1RSVUMgICAg
ICBwVHhEOw0KLQlIRUFERVJfODAyXzExCSpwTnVsbEZyYW1lOw0KLQ0KLQlpZiAoKFJUTVBfVEVT
VF9GTEFHKHBBZGFwdGVyLCBmUlRNUF9BREFQVEVSX1JFU0VUX0lOX1BST0dSRVNTKSkgfHwNCi0J
ICAgIChSVE1QX1RFU1RfRkxBRyhwQWRhcHRlciwgZlJUTVBfQURBUFRFUl9CVUxLT1VUX1JFU0VU
KSkgfHwNCi0JICAgIChSVE1QX1RFU1RfRkxBRyhwQWRhcHRlciwgZlJUTVBfQURBUFRFUl9IQUxU
X0lOX1BST0dSRVNTKSkgfHwNCi0JICAgIChSVE1QX1RFU1RfRkxBRyhwQWRhcHRlciwgZlJUTVBf
QURBUFRFUl9SRU1PVkVfSU5fUFJPR1JFU1MpKSkNCi0Jew0KLQkJcmV0dXJuOw0KLQl9DQotICAg
IA0KLQkvLyBXUEEgODAyLjF4IHNlY3VyZWQgcG9ydCBjb250cm9sDQotCWlmICgoKHBBZGFwdGVy
LT5Qb3J0Q2ZnLkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQSkgfHwgDQotCSAgICAo
cEFkYXB0ZXItPlBvcnRDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBUFNLKSkg
JiYNCi0JICAgIChwQWRhcHRlci0+UG9ydENmZy5Qb3J0U2VjdXJlZCA9PSBXUEFfODAyXzFYX1BP
UlRfTk9UX1NFQ1VSRUQpKQ0KLQl7DQotCQlyZXR1cm47DQotCX0NCi0JcE51bGxGcmFtZSA9IChI
RUFERVJfODAyXzExKilwQWRhcHRlci0+TnVsbENvbnRleHQuVHJhbnNmZXJCdWZmZXItPldpcmVs
ZXNzUGFja2V0Ow0KLQlwTnVsbENvbnRleHQgPSAmKHBBZGFwdGVyLT5OdWxsQ29udGV4dCk7DQot
CWlmIChwTnVsbENvbnRleHQtPkluVXNlID09IEZBTFNFKQ0KLQl7DQotCQkvLyBTZXQgdGhlIGlu
IHVzZSBiaXQNCi0JCXBOdWxsQ29udGV4dC0+SW5Vc2UgPSBUUlVFOw0KLQ0KLQkJLy8gRmlsbCBO
dWxsIGZyYW1lIGJvZHkgYW5kIFR4RA0KLQkJcFR4RCAgPSAmKHBOdWxsQ29udGV4dC0+VHJhbnNm
ZXJCdWZmZXItPlR4RGVzYyk7DQotCQlOZGlzWmVyb01lbW9yeShwVHhELCBzaXplb2YoVFhEX1NU
UlVDKSk7DQotCQlSVFVTQldyaXRlVHhEZXNjcmlwdG9yKHBUeEQsIEZBTFNFLCA3LCBUUlVFLCBG
QUxTRSwgVFJVRSwgSUZTX0JBQ0tPRkYsIHNpemVvZihNQUNIRFIpLCBGQUxTRSwgMCwgQ1dfTUlO
X0lOX0JJVFMsIENXX01BWF9JTl9CSVRTLCBzaXplb2YoTUFDSERSKSArIDQsIFR4UmF0ZSwgNCwg
cEFkYXB0ZXItPlBvcnRDZmcuVHhQcmVhbWJsZUluVXNlZCk7DQotCQlwTnVsbEZyYW1lLT5Db250
cm9saGVhZC5EdXJhdGlvbiA9IFJUVVNCQ2FsY0R1cmF0aW9uKHBBZGFwdGVyLCBUeFJhdGUsIDE0
KTsNCi0JCXBOdWxsRnJhbWUtPkNvbnRyb2xoZWFkLkZyYW1lLlB3ck1ndCA9IChwQWRhcHRlci0+
UG9ydENmZy5Qc20gPT0gUFdSX1NBVkUpOyAgICAgDQotCQlEQkdQUklOVChSVF9ERUJVR19UUkFD
RSwgIlNZTkMgLSBzZW5kIE5VTEwgRnJhbWUgQCVkIE1icHMuLi5cbiIsIFJhdGVJZFRvTWJwc1tU
eFJhdGVdKTsNCi0NCi0JCS8vIEZpbGwgb3V0IGZyYW1lIGxlbmd0aCBpbmZvcm1hdGlvbiBmb3Ig
Z2xvYmFsIEJ1bGsgb3V0IGFyYml0b3INCi0JCXBOdWxsQ29udGV4dC0+QnVsa091dFNpemUgPSBz
aXplb2YoVFhEX1NUUlVDKSArIHNpemVvZihIRUFERVJfODAyXzExKTsNCi0JCVJUVVNCX1NFVF9C
VUxLX0ZMQUcocEFkYXB0ZXIsIGZSVFVTQl9CVUxLX09VVF9EQVRBX05VTEwpOw0KLQ0KLQkJLy8g
S2ljayBidWxrIG91dCANCi0JCVJUVVNCS2lja0J1bGtPdXQocEFkYXB0ZXIpOw0KLQl9DQotfQ0K
LQ0KLS8qIA0KLSAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLSAgICBEZXNjcmlwdGlvbjoNCi0gICAg
ICAgIFVwZGF0ZSBQb3J0Q2ZnLT5DaGFubmVsTGlzdFtdIGFjY29yZGluZyB0byAxKSBDb3VudHJ5
IFJlZ2lvbiAyKSBSRiBJQyB0eXBlLA0KLSAgICAgICAgYW5kIDMpIFBIWS1tb2RlIHVzZXIgc2Vs
ZWN0ZWQuDQotICAgICAgICBUaGUgb3V0Y29tZSBpcyB1c2VkIGJ5IGRyaXZlciB3aGVuIGRvaW5n
IHNpdGUgc3VydmV5Lg0KLSAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLSAqLw0KLVZPSUQgQnVpbGRD
aGFubmVsTGlzdCgNCi0gICAgSU4gUFJUMjU3MEFEQVBURVIgcEFkKQ0KLXsNCi0gICAgVUNIQVIg
aSwgIGluZGV4ID0gMDsNCi0gICAgTmRpc1plcm9NZW1vcnkocEFkLT5Qb3J0Q2ZnLkNoYW5uZWxM
aXN0LCBNQVhfTEVOX09GX0NIQU5ORUxTKTsNCi0NCi0gICAgLy8gaWYgbm90IDExYS1vbmx5IG1v
ZGUsIGNoYW5uZWwgbGlzdCBzdGFydHMgZnJvbSAyLjRHaHogYmFuZA0KLSAgICBpZiAocEFkLT5Q
b3J0Q2ZnLlBoeU1vZGUgIT0gUEhZXzExQSkNCi0gICAgew0KLSAgICAgICAgc3dpdGNoIChwQWQt
PlBvcnRDZmcuQ291bnRyeVJlZ2lvbikNCi0gICAgICAgIHsNCi0gICAgICAgICAgICBjYXNlIFJF
R0lPTl9GQ0M6ICAgIC8vIDEgLSAxMQ0KLSAgICAgICAgICAgICAgICBOZGlzTW92ZU1lbW9yeSgm
cEFkLT5Qb3J0Q2ZnLkNoYW5uZWxMaXN0W2luZGV4XSwgUmEyNEdoel9GQ0MsIHNpemVvZihSYTI0
R2h6X0ZDQykpOw0KLSAgICAgICAgICAgICAgICBpbmRleCArPSBzaXplb2YoUmEyNEdoel9GQ0Mp
Ow0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICBjYXNlIFJFR0lPTl9JQzog
ICAgIC8vIDEgLTExDQotICAgICAgICAgICAgICAgIE5kaXNNb3ZlTWVtb3J5KCZwQWQtPlBvcnRD
ZmcuQ2hhbm5lbExpc3RbaW5kZXhdLCBSYTI0R2h6X0lDLCBzaXplb2YoUmEyNEdoel9JQykpOw0K
LSAgICAgICAgICAgICAgICBpbmRleCArPSBzaXplb2YoUmEyNEdoel9JQyk7DQotICAgICAgICAg
ICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgIGNhc2UgUkVHSU9OX0lTUkFFTDogIC8vIDMgLSA5
DQotICAgICAgICAgICAgICAgIE5kaXNNb3ZlTWVtb3J5KCZwQWQtPlBvcnRDZmcuQ2hhbm5lbExp
c3RbaW5kZXhdLCBSYTI0R2h6X0lTUkFFTCwgc2l6ZW9mKFJhMjRHaHpfSVNSQUVMKSk7DQotICAg
ICAgICAgICAgICAgIGluZGV4ICs9IHNpemVvZihSYTI0R2h6X0lTUkFFTCk7DQotICAgICAgICAg
ICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgIGNhc2UgUkVHSU9OX0VUU0k6ICAgLy8gMSAtIDEz
DQotICAgICAgICAgICAgICAgIE5kaXNNb3ZlTWVtb3J5KCZwQWQtPlBvcnRDZmcuQ2hhbm5lbExp
c3RbaW5kZXhdLCBSYTI0R2h6X0VTVEksIHNpemVvZihSYTI0R2h6X0VTVEkpKTsNCi0gICAgICAg
ICAgICAgICAgaW5kZXggKz0gc2l6ZW9mKFJhMjRHaHpfRVNUSSk7DQotICAgICAgICAgICAgICAg
IGJyZWFrOw0KLSAgICAgICAgICAgIGNhc2UgUkVHSU9OX1NQQUlOOiAgLy8gMTAgLSAxMQ0KLSAg
ICAgICAgICAgICAgICBOZGlzTW92ZU1lbW9yeSgmcEFkLT5Qb3J0Q2ZnLkNoYW5uZWxMaXN0W2lu
ZGV4XSwgUmEyNEdoel9TUEFJTiwgc2l6ZW9mKFJhMjRHaHpfU1BBSU4pKTsNCi0gICAgICAgICAg
ICAgICAgaW5kZXggKz0gc2l6ZW9mKFJhMjRHaHpfU1BBSU4pOw0KLSAgICAgICAgICAgICAgICBi
cmVhazsNCi0gICAgICAgICAgICBjYXNlIFJFR0lPTl9GUkFOQ0U6IC8vIDEwIC0xMw0KLSAgICAg
ICAgICAgICAgICBOZGlzTW92ZU1lbW9yeSgmcEFkLT5Qb3J0Q2ZnLkNoYW5uZWxMaXN0W2luZGV4
XSwgUmEyNEdoel9GUkFOQ0UsIHNpemVvZihSYTI0R2h6X0ZSQU5DRSkpOw0KLSAgICAgICAgICAg
ICAgICBpbmRleCArPSBzaXplb2YoUmEyNEdoel9GUkFOQ0UpOw0KLSAgICAgICAgICAgICAgICBi
cmVhazsNCi0gICAgICAgICAgICBjYXNlIFJFR0lPTl9NS0s6ICAgIC8vIDE0DQotICAgICAgICAg
ICAgICAgIE5kaXNNb3ZlTWVtb3J5KCZwQWQtPlBvcnRDZmcuQ2hhbm5lbExpc3RbaW5kZXhdLCBS
YTI0R2h6X01LSywgc2l6ZW9mKFJhMjRHaHpfTUtLKSk7DQotICAgICAgICAgICAgICAgIGluZGV4
ICs9IHNpemVvZihSYTI0R2h6X01LSyk7DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAg
ICAgICAgIGNhc2UgUkVHSU9OX01LSzE6ICAgLy8gMSAtIDE0DQotICAgICAgICAgICAgICAgIE5k
aXNNb3ZlTWVtb3J5KCZwQWQtPlBvcnRDZmcuQ2hhbm5lbExpc3RbaW5kZXhdLCBSYTI0R2h6X01L
SzEsIHNpemVvZihSYTI0R2h6X01LSzEpKTsNCi0gICAgICAgICAgICAgICAgaW5kZXggKz0gc2l6
ZW9mKFJhMjRHaHpfTUtLMSk7DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAg
IGRlZmF1bHQ6ICAgICAgICAgICAgLy8gRXJyb3IuIHNob3VsZCBuZXZlciBoYXBwZW4NCi0gICAg
ICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICB9ICAgDQotICAgIH0NCi0NCi0gICAgaWYgKChw
QWQtPlBvcnRDZmcuUGh5TW9kZSA9PSBQSFlfMTFBKSB8fCAocEFkLT5Qb3J0Q2ZnLlBoeU1vZGUg
PT0gUEhZXzExQUJHX01JWEVEKSkNCi0gICAgew0KLSAgICAgICAgLy8gMjAwMy0xMC0wNSBqb2hu
IC0gdXNlIFVOSUkgdGVtb3BhcmFpbHkgZm9yIGFsbCByZWd1bGF0aW9uIGRvbWFpbnMgZm9yIGVh
c3kgdGVzdCB1bnRpbGwNCi0gICAgICAgIC8vIFJGIGd1eXMgY29uZmlybSB0aGUgc3VwcG9ydGVk
IGNoYW5uZWwgcGxhbnMNCi0gICAgICAgIE5kaXNNb3ZlTWVtb3J5KCZwQWQtPlBvcnRDZmcuQ2hh
bm5lbExpc3RbaW5kZXhdLCBSYTVHaHpfVU5JSSwgc2l6ZW9mKFJhNUdoel9VTklJKSk7DQotICAg
ICAgICBpbmRleCArPSBzaXplb2YoUmE1R2h6X1VOSUkpOw0KLSAgICB9DQotDQotICAgIHBBZC0+
UG9ydENmZy5DaGFubmVsTGlzdE51bSA9IGluZGV4Ow0KLSAgICANCi0gICAgREJHUFJJTlQoUlRf
REVCVUdfVFJBQ0UsImNvdW50cnkgY29kZT0lZCwgUkZJQz0lZCwgUEhZIG1vZGU9JWQsIHN1cHBv
cnQgJWQgY2hhbm5lbHNcbiIsIA0KLSAgICAgICAgcEFkLT5Qb3J0Q2ZnLkNvdW50cnlSZWdpb24s
IHBBZC0+UG9ydENmZy5SZlR5cGUsIHBBZC0+UG9ydENmZy5QaHlNb2RlLCBwQWQtPlBvcnRDZmcu
Q2hhbm5lbExpc3ROdW0pOw0KLSAgICBmb3IgKGk9MDtpPGluZGV4O2krKykNCi0gICAgew0KLSAg
ICAgICAgREJHUFJJTlRfUkFXKFJUX0RFQlVHX0lORk8sImNoYW5uZWwgIyVkXG4iLCBwQWQtPlBv
cnRDZmcuQ2hhbm5lbExpc3RbaV0pOw0KLSAgICB9DQotfQ0KLQ0KLS8qIA0KLSAgICA9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQ0KLSAgICBEZXNjcmlwdGlvbjoNCi0gICAgICAgIFRoaXMgcm91dGluZSByZXR1
cm4gdGhlIGZpcnN0IGNoYW5uZWwgbnVtYmVyIGFjY29yZGluZyB0byB0aGUgY291bnRyeSANCi0g
ICAgICAgIGNvZGUgc2VsZWN0aW9uIGFuZCBSRiBJQyBzZWxlY3Rpb24gKHNpZ25hbCBiYW5kIG9y
IGR1YWwgYmFuZCkuIEl0IGlzIGNhbGxlZA0KLSAgICAgICAgd2hlbmV2ZXIgZHJpdmVyIG5lZWQg
dG8gc3RhcnQgYSBzaXRlIHN1cnZleSBvZiBhbGwgc3VwcG9ydGVkIGNoYW5uZWxzLg0KLSAgICBS
ZXR1cm46DQotICAgICAgICBjaCAtIHRoZSBmaXJzdCBjaGFubmVsIG51bWJlciBvZiBjdXJyZW50
IGNvdW50cnkgY29kZSBzZXR0aW5nDQotICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotICovDQotVUNI
QVIgRmlyc3RDaGFubmVsKA0KLSAgICBJTiBQUlQyNTcwQURBUFRFUiBwQWQpDQotew0KLSAgICBy
ZXR1cm4gcEFkLT5Qb3J0Q2ZnLkNoYW5uZWxMaXN0WzBdOw0KLX0NCi0NCi0vKiANCi0gICAgPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0NCi0gICAgRGVzY3JpcHRpb246DQotICAgICAgICBUaGlzIHJvdXRpbmUg
cmV0dXJucyB0aGUgbmV4dCBjaGFubmVsIG51bWJlci4gVGhpcyByb3V0aW5lIGlzIGNhbGxlZA0K
LSAgICAgICAgZHVyaW5nIGRyaXZlciBuZWVkIHRvIHN0YXJ0IGEgc2l0ZSBzdXJ2ZXkgb2YgYWxs
IHN1cHBvcnRlZCBjaGFubmVscy4NCi0gICAgUmV0dXJuOg0KLSAgICAgICAgbmV4dF9jaGFubmVs
IC0gdGhlIG5leHQgY2hhbm5lbCBudW1iZXIgdmFsaWQgaW4gY3VycmVudCBjb3VudHJ5IGNvZGUg
c2V0dGluZy4NCi0gICAgTm90ZToNCi0gICAgICAgIHJldHVybiAwIGlmIG5vIG1vcmUgbmV4dCBj
aGFubmVsDQotICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotICovDQotVUNIQVIgTmV4dENoYW5uZWwo
DQotICAgIElOIFBSVDI1NzBBREFQVEVSIHBBZCwgDQotICAgIElOIFVDSEFSIGNoYW5uZWwpDQot
ew0KLSAgICBpbnQgaTsNCi0gICAgVUNIQVIgbmV4dF9jaGFubmVsID0gMDsNCi0gICAgICAgICAg
ICANCi0gICAgZm9yIChpID0gMDsgaSA8IChwQWQtPlBvcnRDZmcuQ2hhbm5lbExpc3ROdW0gLSAx
KTsgaSsrKQ0KLSAgICAgICAgaWYgKGNoYW5uZWwgPT0gcEFkLT5Qb3J0Q2ZnLkNoYW5uZWxMaXN0
W2ldKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIG5leHRfY2hhbm5lbCA9IHBBZC0+UG9ydENm
Zy5DaGFubmVsTGlzdFtpKzFdOw0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICB9ICAgDQotICAg
IHJldHVybiBuZXh0X2NoYW5uZWw7DQotfQ0KLQ0KZGlmZiAtcnVOIHJ0MjU3MC0xLjEuMC1iMS9S
RUFETUUgcnQyNTcwLWN2cy0yMDA1MTIyNjE2L1JFQURNRQotLS0gcnQyNTcwLTEuMS4wLWIxL1JF
QURNRQkxOTY5LTEyLTMxIDE4OjAwOjAwLjAwMDAwMDAwMCAtMDYwMAorKysgcnQyNTcwLWN2cy0y
MDA1MTIyNjE2L1JFQURNRQkyMDA1LTExLTE4IDE4OjA1OjM2LjAwMDAwMDAwMCAtMDYwMApAQCAt
MCwwICsxLDUzIEBACitJbnN0YWxsYXRpb24gaW5zdHJ1Y3Rpb25zIGZvciB0aGUgcnQyNTcwIE1v
ZHVsZQorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQorQnVpbGQgSW5zdHJ1Y3Rpb25zOgorPT09PT09PT09PT09
PT09PT09PT0KKwlGb3IgMi40IG9yIDIuNiBzZXJpZXMga2VybmVsOgorCisJYS4gJHRhciAteHZ6
ZiBydDI1NzAteC54LngudGFyLmd6CisJZ28gdG8gIi4vcnQyNTcwLXgueC54L01vZHVsZSIgZGly
ZWN0b3J5LgorCisJYi4gJG1ha2UgIyBjb21waWxlIGRyaXZlciBzb3VyY2UgY29kZQorCisJYy4g
JG1ha2UgaW5zdGFsbCAjIGluc3RhbGxzIGtlcm5lbCBtb2R1bGUgZHJpdmVyCisKKwlkLiAkbW9k
cHJvYmUgcnQyNTcwCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitVVElMSVRZCis9PT09PT09PT09PT09PT09
PT09PQorCVRoZXJlIGlzIG5vIHV0aWxpdHkgYXMgb2YgeWV0LCB1c2UgaXdjb25maWcgdG8gY29u
ZmlndXJlIHlvdXIgdXNiIHN0aWNrLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ09ORklHVVJBVElPTjoK
Kz09PT09PT09PT09PT09PT09PT09CisJUlQyNTcwIGRyaXZlciBjYW4gYmUgY29uZmlndXJlZCB2
aWEgZm9sbG93aW5nIGludGVyZmFjZXMsCisJaS5lLiAoaSkiaXdjb25maWciIGNvbW1hbmQsIChp
aSkiaXdwcml2IiBjb21tYW5kCisKKwlpKSBpd2NvbmZpZyBjb21lcyB3aXRoIGtlcm5lbC4KKwlp
aSkgaXdwcml2IHVzYWdlLCBwbGVhc2UgcmVmZXIgdG8gZmlsZSAiaXdwcml2X3VzYWdlLnR4dCIg
Zm9yIGRldGFpbHMuCisKK01PUkUgSU5GT1JNQVRJT04KKz09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQorCUlmIHlvdSB3YW50IGZvciBydDI1NzAgZHJpdmVyIHRvIGF1dG8tbG9hZCBhdCBib290IHRp
bWU6CisKKwlBKSBjaG9vc2UgcmF1c2IwIGZvciBmaXJzdCBSVDI1NzAgV0xBTiBjYXJkLCByYXVz
YjEgZm9yIHNlY29uZCBSVDI1NzAgV0xBTiBjYXJkLCBldGMuCisKKwlCKSBjcmVhdGUoZWRpdCkg
J2lmY2ZnLXJhdXNiMCcgZmlsZSBpbiAvZXRjL3N5c2NvbmZpZy9uZXR3b3JrLXNjcmlwdHMvLAor
CWVkaXQoIG9yIGFkZCB0aGUgbGluZSkgaW4gL2V0Yy9tb2R1bGVzLmNvbmY6CisJYWxpYXMgcmF1
c2IwIHJ0MjU3MAorCisJQykgZWRpdChjcmVhdGUpIHRoZSBmaWxlIC9ldGMvc3lzY29uZmlnL25l
dHdvcmstc2NyaXB0cy9pZmNmZy1yYXVzYjAKKwlERVZJQ0U9J3JhdXNiMCcKKwlPTkJPT1Q9J3ll
cycKKworCisJTk9URToKKwlpZiB5b3UgdXNlIGRoY3AsIGFkZCB0aGlzIGxpbmUgdG9vIC4KKwlC
T09UUFJPVE89J2RoY3AnCisKKwkqRCkgVG8gZWFzZSB0aGUgRGVmYXVsdCBHYXRld2F5IHNldHRp
bmcsCisJYWRkIHRoZSBsaW5lCisJR0FURVdBWT14LngueC54CisJaW4gL2V0Yy9zeXNjb25maWcv
bmV0d29yayAKZGlmZiAtcnVOIHJ0MjU3MC0xLjEuMC1iMS9USEFOS1MgcnQyNTcwLWN2cy0yMDA1
MTIyNjE2L1RIQU5LUwotLS0gcnQyNTcwLTEuMS4wLWIxL1RIQU5LUwkyMDA1LTA3LTMwIDExOjQ0
OjMwLjAwMDAwMDAwMCAtMDUwMAorKysgcnQyNTcwLWN2cy0yMDA1MTIyNjE2L1RIQU5LUwkyMDA1
LTExLTE4IDE4OjA1OjM2LjAwMDAwMDAwMCAtMDYwMApAQCAtMTcsMyArMTcsNSBAQAogICBhbmQg
aGVuY2UgcHJvZ3Jlc3NlZCB0aGUgcnQyNTcwIGFsb25nIHRoZSB3YXkKICogQ2hyaXN0aWFuIENh
c3RleWRlIC0gY2FzdGV5ZGVjQHVzZXJzLnNvdXJjZWZvcmdlLm5ldCAKICogTWF0aGlhcyBLbGVp
biAtIG1hX2tsZWluQGdteC5kZQorKiBTdGVwaGVuIFdhcnJlbiAtIFNXYXJyZW5AbnZpZGlhLmNv
bQorKiBKYW1lcyBFbHNkb24gLSBtb25rZXN5c0B3ZXN0bmV0LmNvbS5hdQo=
</data>        

          </attachment>
    </bug>

</bugzilla>