<?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>247982</bug_id>
          
          <creation_ts>2008-11-21 16:14 0000</creation_ts>
          <short_desc>texlive-core-2008-r4: remove &quot;deprecated char* conversion&quot; warnings from xpdf library</short_desc>
          <delta_ts>2008-11-29 15:20: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>Ebuilds</component>
          <version>unspecified</version>
          <rep_platform>AMD64</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          
          <priority>P2</priority>
          <bug_severity>trivial</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          
          <everconfirmed>1</everconfirmed>
          <reporter>rapatsky@gmail.com</reporter>
          <assigned_to>aballier@gentoo.org</assigned_to>
          <cc>tex@gentoo.org</cc>

      

      
          <long_desc isprivate="0">
            <who>rapatsky@gmail.com</who>
            <bug_when>2008-11-21 16:14:03 0000</bug_when>
            <thetext>This is a patch to change &quot;char *&quot; into &quot;const char *&quot; where possible in xpdf source subdirectory, to remove gcc 4.3 warnings about deprecated string to char* conversions.

Reproducible: Always

Steps to Reproduce:
1. emerge =app-text/texlive-core-2008-r4 &amp;&gt;emerge.log
2. grep deprecated emerge.log

Actual Results:  
You&apos;ll see bunch of warning messages about string to char* conversions in libs/xpdf sources

Expected Results:  
Compilation must not give any warning message</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>rapatsky@gmail.com</who>
            <bug_when>2008-11-21 16:15:47 0000</bug_when>
            <thetext>Created an attachment (id=172704)
Patch to eliminate xpdf deprecated char* coversion warnings

</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>rapatsky@gmail.com</who>
            <bug_when>2008-11-21 16:16:45 0000</bug_when>
            <thetext>Created an attachment (id=172705)
emerge --info output result

</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>rapatsky@gmail.com</who>
            <bug_when>2008-11-21 17:25:12 0000</bug_when>
            <thetext>Created an attachment (id=172725)
Patch to eliminate xpdf deprecated char* coversion warnings

</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>coldwind@gentoo.org</who>
            <bug_when>2008-11-23 19:26:11 0000</bug_when>
            <thetext>Vladimir, could you send this patch upstream?</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>rapatsky@gmail.com</who>
            <bug_when>2008-11-24 18:40:40 0000</bug_when>
            <thetext>(In reply to comment #4)
&gt; Vladimir, could you send this patch upstream?

You mean texlive or xpdf devellopers?
I&apos;ll try to send to texlive, cause xpdf looks like abandoned project</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>aballier@gentoo.org</who>
            <bug_when>2008-11-29 15:20:00 0000</bug_when>
            <thetext>(In reply to comment #5)
&gt; (In reply to comment #4)
&gt; &gt; Vladimir, could you send this patch upstream?
&gt; 
&gt; You mean texlive or xpdf devellopers?
&gt; I&apos;ll try to send to texlive, cause xpdf looks like abandoned project

I&apos;d say just send the same mail to both of them, just in case

patch applied, thanks

just a small note: if it doesn&apos;t get applied upstream and the patch fails to apply in later version i&apos;ll probably drop it without warning because it&apos;s huge and doesn&apos;t harm usability.</thetext>
          </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>172704</attachid>
            <date>2008-11-21 16:15 0000</date>
            <desc>Patch to eliminate xpdf deprecated char* coversion warnings</desc>
            <filename>99_all_xpdf_const_char.patch</filename>
            <type>text/plain</type>
            <data encoding="base64">ZGlmZiAtdXIgdGV4bGl2ZS0yMDA4MDgxNi1zb3VyY2UvbGlicy94cGRmLm9yaWcvZm9maS9Gb0Zp
QmFzZS5jYyB0ZXhsaXZlLTIwMDgwODE2LXNvdXJjZS9saWJzL3hwZGYvZm9maS9Gb0ZpQmFzZS5j
YwotLS0gdGV4bGl2ZS0yMDA4MDgxNi1zb3VyY2UvbGlicy94cGRmLm9yaWcvZm9maS9Gb0ZpQmFz
ZS5jYwkyMDA2LTAxLTE2IDAzOjA5OjI2LjAwMDAwMDAwMCArMDMwMAorKysgdGV4bGl2ZS0yMDA4
MDgxNi1zb3VyY2UvbGlicy94cGRmL2ZvZmkvRm9GaUJhc2UuY2MJMjAwOC0xMS0yMSAxNzoxMjox
NS4wMDAwMDAwMDAgKzAzMDAKQEAgLTIwLDcgKzIwLDcgQEAKIC8vIEZvRmlCYXNlCiAvLy0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQogCi1Gb0ZpQmFzZTo6Rm9GaUJhc2UoY2hhciAqZmlsZUEsIGludCBsZW5BLCBH
Qm9vbCBmcmVlRmlsZURhdGFBKSB7CitGb0ZpQmFzZTo6Rm9GaUJhc2UoY29uc3QgY2hhciAqZmls
ZUEsIGludCBsZW5BLCBHQm9vbCBmcmVlRmlsZURhdGFBKSB7CiAgIGZpbGVEYXRhID0gZmlsZSA9
IChHdWNoYXIgKilmaWxlQTsKICAgbGVuID0gbGVuQTsKICAgZnJlZUZpbGVEYXRhID0gZnJlZUZp
bGVEYXRhQTsKQEAgLTMyLDcgKzMyLDcgQEAKICAgfQogfQogCi1jaGFyICpGb0ZpQmFzZTo6cmVh
ZEZpbGUoY2hhciAqZmlsZU5hbWUsIGludCAqZmlsZUxlbikgeworY29uc3QgY2hhciAqRm9GaUJh
c2U6OnJlYWRGaWxlKGNvbnN0IGNoYXIgKmZpbGVOYW1lLCBpbnQgKmZpbGVMZW4pIHsKICAgRklM
RSAqZjsKICAgY2hhciAqYnVmOwogICBpbnQgbjsKZGlmZiAtdXIgdGV4bGl2ZS0yMDA4MDgxNi1z
b3VyY2UvbGlicy94cGRmLm9yaWcvZm9maS9Gb0ZpQmFzZS5oIHRleGxpdmUtMjAwODA4MTYtc291
cmNlL2xpYnMveHBkZi9mb2ZpL0ZvRmlCYXNlLmgKLS0tIHRleGxpdmUtMjAwODA4MTYtc291cmNl
L2xpYnMveHBkZi5vcmlnL2ZvZmkvRm9GaUJhc2UuaAkyMDA2LTAxLTE2IDAzOjA5OjI2LjAwMDAw
MDAwMCArMDMwMAorKysgdGV4bGl2ZS0yMDA4MDgxNi1zb3VyY2UvbGlicy94cGRmL2ZvZmkvRm9G
aUJhc2UuaAkyMDA4LTExLTIxIDE3OjExOjMwLjAwMDAwMDAwMCArMDMwMApAQCAtMTksNyArMTks
NyBAQAogCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi10eXBlZGVmIHZvaWQgKCpGb0ZpT3V0cHV0RnVu
Yykodm9pZCAqc3RyZWFtLCBjaGFyICpkYXRhLCBpbnQgbGVuKTsKK3R5cGVkZWYgdm9pZCAoKkZv
RmlPdXRwdXRGdW5jKSh2b2lkICpzdHJlYW0sIGNvbnN0IGNoYXIgKmRhdGEsIGludCBsZW4pOwog
CiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gRm9GaUJhc2UKQEAgLTMyLDggKzMyLDggQEAKIAogcHJv
dGVjdGVkOgogCi0gIEZvRmlCYXNlKGNoYXIgKmZpbGVBLCBpbnQgbGVuQSwgR0Jvb2wgZnJlZUZp
bGVEYXRhQSk7Ci0gIHN0YXRpYyBjaGFyICpyZWFkRmlsZShjaGFyICpmaWxlTmFtZSwgaW50ICpm
aWxlTGVuKTsKKyAgRm9GaUJhc2UoY29uc3QgY2hhciAqZmlsZUEsIGludCBsZW5BLCBHQm9vbCBm
cmVlRmlsZURhdGFBKTsKKyAgc3RhdGljIGNvbnN0IGNoYXIgKnJlYWRGaWxlKGNvbnN0IGNoYXIg
KmZpbGVOYW1lLCBpbnQgKmZpbGVMZW4pOwogCiAgIC8vIFMgPSBzaWduZWQgLyBVID0gdW5zaWdu
ZWQKICAgLy8gOC8xNi8zMi9WYXIgPSB3b3JkIGxlbmd0aCwgaW4gYnl0ZXMKZGlmZiAtdXIgdGV4
bGl2ZS0yMDA4MDgxNi1zb3VyY2UvbGlicy94cGRmLm9yaWcvZm9maS9Gb0ZpRW5jb2RpbmdzLmNj
IHRleGxpdmUtMjAwODA4MTYtc291cmNlL2xpYnMveHBkZi9mb2ZpL0ZvRmlFbmNvZGluZ3MuY2MK
LS0tIHRleGxpdmUtMjAwODA4MTYtc291cmNlL2xpYnMveHBkZi5vcmlnL2ZvZmkvRm9GaUVuY29k
aW5ncy5jYwkyMDA2LTAxLTE2IDAzOjA5OjI2LjAwMDAwMDAwMCArMDMwMAorKysgdGV4bGl2ZS0y
MDA4MDgxNi1zb3VyY2UvbGlicy94cGRmL2ZvZmkvRm9GaUVuY29kaW5ncy5jYwkyMDA4LTExLTIx
IDE3OjU3OjE4LjAwMDAwMDAwMCArMDMwMApAQCAtMTksNyArMTksNyBAQAogLy8gVHlwZSAxIGFu
ZCAxQyBmb250IGRhdGEKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLWNoYXIgKmZvZmlUeXBlMVN0YW5k
YXJkRW5jb2RpbmdbMjU2XSA9IHsKK2NvbnN0IGNoYXIgKmZvZmlUeXBlMVN0YW5kYXJkRW5jb2Rp
bmdbMjU2XSA9IHsKICAgTlVMTCwKICAgTlVMTCwKICAgTlVMTCwKQEAgLTI3OCw3ICsyNzgsNyBA
QAogICBOVUxMCiB9OwogCi1jaGFyICpmb2ZpVHlwZTFFeHBlcnRFbmNvZGluZ1syNTZdID0gewor
Y29uc3QgY2hhciAqZm9maVR5cGUxRXhwZXJ0RW5jb2RpbmdbMjU2XSA9IHsKICAgTlVMTCwKICAg
TlVMTCwKICAgTlVMTCwKQEAgLTU0MSw3ICs1NDEsNyBAQAogLy8gVHlwZSAxQyBmb250IGRhdGEK
IC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCiAKLWNoYXIgKmZvZmlUeXBlMUNTdGRTdHJpbmdzWzM5MV0gPSB7
Citjb25zdCBjaGFyICpmb2ZpVHlwZTFDU3RkU3RyaW5nc1szOTFdID0gewogICAiLm5vdGRlZiIs
CiAgICJzcGFjZSIsCiAgICJleGNsYW0iLApkaWZmIC11ciB0ZXhsaXZlLTIwMDgwODE2LXNvdXJj
ZS9saWJzL3hwZGYub3JpZy9mb2ZpL0ZvRmlFbmNvZGluZ3MuaCB0ZXhsaXZlLTIwMDgwODE2LXNv
dXJjZS9saWJzL3hwZGYvZm9maS9Gb0ZpRW5jb2RpbmdzLmgKLS0tIHRleGxpdmUtMjAwODA4MTYt
c291cmNlL2xpYnMveHBkZi5vcmlnL2ZvZmkvRm9GaUVuY29kaW5ncy5oCTIwMDYtMDEtMTYgMDM6
MDk6MjYuMDAwMDAwMDAwICswMzAwCisrKyB0ZXhsaXZlLTIwMDgwODE2LXNvdXJjZS9saWJzL3hw
ZGYvZm9maS9Gb0ZpRW5jb2RpbmdzLmgJMjAwOC0xMS0yMSAxNzo1Njo1NS4wMDAwMDAwMDAgKzAz
MDAKQEAgLTIxLDE0ICsyMSwxNCBAQAogLy8gVHlwZSAxIGFuZCAxQyBmb250IGRhdGEKIC8vLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCiAKLWV4dGVybiBjaGFyICpmb2ZpVHlwZTFTdGFuZGFyZEVuY29kaW5nWzI1
Nl07Ci1leHRlcm4gY2hhciAqZm9maVR5cGUxRXhwZXJ0RW5jb2RpbmdbMjU2XTsKK2V4dGVybiBj
b25zdCBjaGFyICpmb2ZpVHlwZTFTdGFuZGFyZEVuY29kaW5nWzI1Nl07CitleHRlcm4gY29uc3Qg
Y2hhciAqZm9maVR5cGUxRXhwZXJ0RW5jb2RpbmdbMjU2XTsKIAogLy8tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
IC8vIFR5cGUgMUMgZm9udCBkYXRhCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1leHRlcm4gY2hhciAq
Zm9maVR5cGUxQ1N0ZFN0cmluZ3NbMzkxXTsKK2V4dGVybiBjb25zdCBjaGFyICpmb2ZpVHlwZTFD
U3RkU3RyaW5nc1szOTFdOwogZXh0ZXJuIEd1c2hvcnQgZm9maVR5cGUxQ0lTT0Fkb2JlQ2hhcnNl
dFsyMjldOwogZXh0ZXJuIEd1c2hvcnQgZm9maVR5cGUxQ0V4cGVydENoYXJzZXRbMTY2XTsKIGV4
dGVybiBHdXNob3J0IGZvZmlUeXBlMUNFeHBlcnRTdWJzZXRDaGFyc2V0Wzg3XTsKZGlmZiAtdXIg
dGV4bGl2ZS0yMDA4MDgxNi1zb3VyY2UvbGlicy94cGRmLm9yaWcvZm9maS9Gb0ZpVHJ1ZVR5cGUu
Y2MgdGV4bGl2ZS0yMDA4MDgxNi1zb3VyY2UvbGlicy94cGRmL2ZvZmkvRm9GaVRydWVUeXBlLmNj
Ci0tLSB0ZXhsaXZlLTIwMDgwODE2LXNvdXJjZS9saWJzL3hwZGYub3JpZy9mb2ZpL0ZvRmlUcnVl
VHlwZS5jYwkyMDA3LTA3LTEyIDAxOjEzOjU5LjAwMDAwMDAwMCArMDQwMAorKysgdGV4bGl2ZS0y
MDA4MDgxNi1zb3VyY2UvbGlicy94cGRmL2ZvZmkvRm9GaVRydWVUeXBlLmNjCTIwMDgtMTEtMjEg
MTc6MzY6NTAuMDAwMDAwMDAwICswMzAwCkBAIC0xNDMsNyArMTQzLDcgQEAKIC8vLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCiAKIHN0cnVjdCBUNDJUYWJsZSB7Ci0gIGNoYXIgKnRhZzsJCQkvLyA0LWJ5dGUgdGFn
CisgIGNvbnN0IGNoYXIgKnRhZzsJCS8vIDQtYnl0ZSB0YWcKICAgR0Jvb2wgcmVxdWlyZWQ7CQkv
LyByZXF1aXJlZCBieSB0aGUgVHJ1ZVR5cGUgc3BlYz8KIH07CiAKQEAgLTE3Myw3ICsxNzMsNyBA
QAogCiAvLyBHbHlwaCBuYW1lcyBpbiBzb21lIGFyYml0cmFyeSBzdGFuZGFyZCBvcmRlciB0aGF0
IEFwcGxlIHVzZXMgZm9yCiAvLyB0aGVpciBUcnVlVHlwZSBmb250cy4KLXN0YXRpYyBjaGFyICpt
YWNHbHlwaE5hbWVzWzI1OF0gPSB7CitzdGF0aWMgY29uc3QgY2hhciAqbWFjR2x5cGhOYW1lc1sy
NThdID0gewogICAiLm5vdGRlZiIsICAgICAgICAibnVsbCIsICAgICAgICAgICAiQ1IiLCAgICAg
ICAgICAgICAic3BhY2UiLAogICAiZXhjbGFtIiwgICAgICAgICAicXVvdGVkYmwiLCAgICAgICAi
bnVtYmVyc2lnbiIsICAgICAiZG9sbGFyIiwKICAgInBlcmNlbnQiLCAgICAgICAgImFtcGVyc2Fu
ZCIsICAgICAgInF1b3Rlc2luZ2xlIiwgICAgInBhcmVubGVmdCIsCkBAIC0yNDUsNyArMjQ1LDcg
QEAKIC8vIEZvRmlUcnVlVHlwZQogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotRm9GaVRydWVUeXBlICpG
b0ZpVHJ1ZVR5cGU6Om1ha2UoY2hhciAqZmlsZUEsIGludCBsZW5BKSB7CitGb0ZpVHJ1ZVR5cGUg
KkZvRmlUcnVlVHlwZTo6bWFrZShjb25zdCBjaGFyICpmaWxlQSwgaW50IGxlbkEpIHsKICAgRm9G
aVRydWVUeXBlICpmZjsKIAogICBmZiA9IG5ldyBGb0ZpVHJ1ZVR5cGUoZmlsZUEsIGxlbkEsIGdG
YWxzZSk7CkBAIC0yNTYsOSArMjU2LDkgQEAKICAgcmV0dXJuIGZmOwogfQogCi1Gb0ZpVHJ1ZVR5
cGUgKkZvRmlUcnVlVHlwZTo6bG9hZChjaGFyICpmaWxlTmFtZSkgeworRm9GaVRydWVUeXBlICpG
b0ZpVHJ1ZVR5cGU6OmxvYWQoY29uc3QgY2hhciAqZmlsZU5hbWUpIHsKICAgRm9GaVRydWVUeXBl
ICpmZjsKLSAgY2hhciAqZmlsZUE7CisgIGNvbnN0IGNoYXIgKmZpbGVBOwogICBpbnQgbGVuQTsK
IAogICBpZiAoIShmaWxlQSA9IEZvRmlCYXNlOjpyZWFkRmlsZShmaWxlTmFtZSwgJmxlbkEpKSkg
ewpAQCAtMjcyLDcgKzI3Miw3IEBACiAgIHJldHVybiBmZjsKIH0KIAotRm9GaVRydWVUeXBlOjpG
b0ZpVHJ1ZVR5cGUoY2hhciAqZmlsZUEsIGludCBsZW5BLCBHQm9vbCBmcmVlRmlsZURhdGFBKToK
K0ZvRmlUcnVlVHlwZTo6Rm9GaVRydWVUeXBlKGNvbnN0IGNoYXIgKmZpbGVBLCBpbnQgbGVuQSwg
R0Jvb2wgZnJlZUZpbGVEYXRhQSk6CiAgIEZvRmlCYXNlKGZpbGVBLCBsZW5BLCBmcmVlRmlsZURh
dGFBKQogewogICB0YWJsZXMgPSBOVUxMOwpAQCAtMzg4LDcgKzM4OCw3IEBACiAgIHJldHVybiBn
aWQ7CiB9CiAKLWludCBGb0ZpVHJ1ZVR5cGU6Om1hcE5hbWVUb0dJRChjaGFyICpuYW1lKSB7Citp
bnQgRm9GaVRydWVUeXBlOjptYXBOYW1lVG9HSUQoY29uc3QgY2hhciAqbmFtZSkgewogICBpZiAo
IW5hbWVUb0dJRCkgewogICAgIHJldHVybiAwOwogICB9CkBAIC00MDgsNyArNDA4LDcgQEAKICAg
aWYgKCFjaGVja1JlZ2lvbih0YWJsZXNbaV0ub2Zmc2V0LCB0YWJsZXNbaV0ubGVuKSkgewogICAg
IHJldHVybiBOVUxMOwogICB9Ci0gIGlmICghKGZmID0gRm9GaVR5cGUxQzo6bWFrZSgoY2hhciAq
KWZpbGUgKyB0YWJsZXNbaV0ub2Zmc2V0LAorICBpZiAoIShmZiA9IEZvRmlUeXBlMUM6Om1ha2Uo
KGNvbnN0IGNoYXIgKilmaWxlICsgdGFibGVzW2ldLm9mZnNldCwKIAkJCSAgICAgIHRhYmxlc1tp
XS5sZW4pKSkgewogICAgIHJldHVybiBOVUxMOwogICB9CkBAIC00NDEsNyArNDQxLDcgQEAKICAg
cmV0dXJuIDM7CiB9CiAKLXZvaWQgRm9GaVRydWVUeXBlOjpjb252ZXJ0VG9UeXBlNDIoY2hhciAq
cHNOYW1lLCBjaGFyICoqZW5jb2RpbmcsCit2b2lkIEZvRmlUcnVlVHlwZTo6Y29udmVydFRvVHlw
ZTQyKGNvbnN0IGNoYXIgKnBzTmFtZSwgY29uc3QgY2hhciAqKmVuY29kaW5nLAogCQkJCSAgIEd1
c2hvcnQgKmNvZGVUb0dJRCwKIAkJCQkgICBGb0ZpT3V0cHV0RnVuYyBvdXRwdXRGdW5jLAogCQkJ
CSAgIHZvaWQgKm91dHB1dFN0cmVhbSkgewpAQCAtNDgxLDcgKzQ4MSw3IEBACiAgICgqb3V0cHV0
RnVuYykob3V0cHV0U3RyZWFtLCAiRm9udE5hbWUgY3VycmVudGRpY3QgZW5kIGRlZmluZWZvbnQg
cG9wXG4iLCA0MCk7CiB9CiAKLXZvaWQgRm9GaVRydWVUeXBlOjpjb252ZXJ0VG9UeXBlMShjaGFy
ICpwc05hbWUsIGNoYXIgKipuZXdFbmNvZGluZywKK3ZvaWQgRm9GaVRydWVUeXBlOjpjb252ZXJ0
VG9UeXBlMShjb25zdCBjaGFyICpwc05hbWUsIGNvbnN0IGNoYXIgKipuZXdFbmNvZGluZywKIAkJ
CQkgIEdCb29sIGFzY2lpLCBGb0ZpT3V0cHV0RnVuYyBvdXRwdXRGdW5jLAogCQkJCSAgdm9pZCAq
b3V0cHV0U3RyZWFtKSB7CiAgIEZvRmlUeXBlMUMgKmZmOwpAQCAtNDk0LDcgKzQ5NCw3IEBACiAg
IGlmICghY2hlY2tSZWdpb24odGFibGVzW2ldLm9mZnNldCwgdGFibGVzW2ldLmxlbikpIHsKICAg
ICByZXR1cm47CiAgIH0KLSAgaWYgKCEoZmYgPSBGb0ZpVHlwZTFDOjptYWtlKChjaGFyICopZmls
ZSArIHRhYmxlc1tpXS5vZmZzZXQsCisgIGlmICghKGZmID0gRm9GaVR5cGUxQzo6bWFrZSgoY29u
c3QgY2hhciAqKWZpbGUgKyB0YWJsZXNbaV0ub2Zmc2V0LAogCQkJICAgICAgdGFibGVzW2ldLmxl
bikpKSB7CiAgICAgcmV0dXJuOwogICB9CkBAIC01MDIsNyArNTAyLDcgQEAKICAgZGVsZXRlIGZm
OwogfQogCi12b2lkIEZvRmlUcnVlVHlwZTo6Y29udmVydFRvQ0lEVHlwZTIoY2hhciAqcHNOYW1l
LAordm9pZCBGb0ZpVHJ1ZVR5cGU6OmNvbnZlcnRUb0NJRFR5cGUyKGNvbnN0IGNoYXIgKnBzTmFt
ZSwKIAkJCQkgICAgIEd1c2hvcnQgKmNpZE1hcCwgaW50IG5DSURzLAogCQkJCSAgICAgR0Jvb2wg
bmVlZFZlcnRpY2FsTWV0cmljcywKIAkJCQkgICAgIEZvRmlPdXRwdXRGdW5jIG91dHB1dEZ1bmMs
CkBAIC02MzIsNyArNjMyLDcgQEAKIAkJNTYpOwogfQogCi12b2lkIEZvRmlUcnVlVHlwZTo6Y29u
dmVydFRvQ0lEVHlwZTAoY2hhciAqcHNOYW1lLAordm9pZCBGb0ZpVHJ1ZVR5cGU6OmNvbnZlcnRU
b0NJRFR5cGUwKGNvbnN0IGNoYXIgKnBzTmFtZSwKIAkJCQkgICAgIEZvRmlPdXRwdXRGdW5jIG91
dHB1dEZ1bmMsCiAJCQkJICAgICB2b2lkICpvdXRwdXRTdHJlYW0pIHsKICAgRm9GaVR5cGUxQyAq
ZmY7CkBAIC02NDUsNyArNjQ1LDcgQEAKICAgaWYgKCFjaGVja1JlZ2lvbih0YWJsZXNbaV0ub2Zm
c2V0LCB0YWJsZXNbaV0ubGVuKSkgewogICAgIHJldHVybjsKICAgfQotICBpZiAoIShmZiA9IEZv
RmlUeXBlMUM6Om1ha2UoKGNoYXIgKilmaWxlICsgdGFibGVzW2ldLm9mZnNldCwKKyAgaWYgKCEo
ZmYgPSBGb0ZpVHlwZTFDOjptYWtlKChjb25zdCBjaGFyICopZmlsZSArIHRhYmxlc1tpXS5vZmZz
ZXQsCiAJCQkgICAgICB0YWJsZXNbaV0ubGVuKSkpIHsKICAgICByZXR1cm47CiAgIH0KQEAgLTY1
Myw3ICs2NTMsNyBAQAogICBkZWxldGUgZmY7CiB9CiAKLXZvaWQgRm9GaVRydWVUeXBlOjpjb252
ZXJ0VG9UeXBlMChjaGFyICpwc05hbWUsIEd1c2hvcnQgKmNpZE1hcCwgaW50IG5DSURzLAordm9p
ZCBGb0ZpVHJ1ZVR5cGU6OmNvbnZlcnRUb1R5cGUwKGNvbnN0IGNoYXIgKnBzTmFtZSwgR3VzaG9y
dCAqY2lkTWFwLCBpbnQgbkNJRHMsCiAJCQkJICBHQm9vbCBuZWVkVmVydGljYWxNZXRyaWNzLAog
CQkJCSAgRm9GaU91dHB1dEZ1bmMgb3V0cHV0RnVuYywKIAkJCQkgIHZvaWQgKm91dHB1dFN0cmVh
bSkgewpAQCAtNzM2LDcgKzczNiw3IEBACiAgICgqb3V0cHV0RnVuYykob3V0cHV0U3RyZWFtLCAi
Rm9udE5hbWUgY3VycmVudGRpY3QgZW5kIGRlZmluZWZvbnQgcG9wXG4iLCA0MCk7CiB9CiAKLXZv
aWQgRm9GaVRydWVUeXBlOjpjb252ZXJ0VG9UeXBlMChjaGFyICpwc05hbWUsCit2b2lkIEZvRmlU
cnVlVHlwZTo6Y29udmVydFRvVHlwZTAoY29uc3QgY2hhciAqcHNOYW1lLAogCQkJCSAgRm9GaU91
dHB1dEZ1bmMgb3V0cHV0RnVuYywKIAkJCQkgIHZvaWQgKm91dHB1dFN0cmVhbSkgewogICBGb0Zp
VHlwZTFDICpmZjsKQEAgLTc0OSw3ICs3NDksNyBAQAogICBpZiAoIWNoZWNrUmVnaW9uKHRhYmxl
c1tpXS5vZmZzZXQsIHRhYmxlc1tpXS5sZW4pKSB7CiAgICAgcmV0dXJuOwogICB9Ci0gIGlmICgh
KGZmID0gRm9GaVR5cGUxQzo6bWFrZSgoY2hhciAqKWZpbGUgKyB0YWJsZXNbaV0ub2Zmc2V0LAor
ICBpZiAoIShmZiA9IEZvRmlUeXBlMUM6Om1ha2UoKGNvbnN0IGNoYXIgKilmaWxlICsgdGFibGVz
W2ldLm9mZnNldCwKIAkJCSAgICAgIHRhYmxlc1tpXS5sZW4pKSkgewogICAgIHJldHVybjsKICAg
fQpAQCAtNzU4LDcgKzc1OCw3IEBACiB9CiAKIHZvaWQgRm9GaVRydWVUeXBlOjp3cml0ZVRURihG
b0ZpT3V0cHV0RnVuYyBvdXRwdXRGdW5jLAotCQkJICAgIHZvaWQgKm91dHB1dFN0cmVhbSwgY2hh
ciAqbmFtZSwKKwkJCSAgICB2b2lkICpvdXRwdXRTdHJlYW0sIGNvbnN0IGNoYXIgKm5hbWUsCiAJ
CQkgICAgR3VzaG9ydCAqY29kZVRvR0lEKSB7CiAgIC8vIHRoaXMgc3Vic3RpdHV0ZSBjbWFwIHRh
YmxlIG1hcHMgY2hhciBjb2RlcyAwMDAwLWZmZmYgZGlyZWN0bHkgdG8KICAgLy8gZ2x5cGhzIDAw
MDAtZmZmZgpAQCAtOTMwLDcgKzkzMCw3IEBACiAgIGlmICghbWlzc2luZ0NtYXAgJiYgIW1pc3Np
bmdOYW1lICYmICFtaXNzaW5nUG9zdCAmJiAhbWlzc2luZ09TMiAmJgogICAgICAgIXVuc29ydGVk
TG9jYSAmJiAhYmFkQ21hcExlbiAmJiAhYWJicmV2SE1UWCAmJiBuWmVyb0xlbmd0aFRhYmxlcyA9
PSAwICYmCiAgICAgICAhbmFtZSAmJiAhY29kZVRvR0lEKSB7Ci0gICAgKCpvdXRwdXRGdW5jKShv
dXRwdXRTdHJlYW0sIChjaGFyICopZmlsZSwgbGVuKTsKKyAgICAoKm91dHB1dEZ1bmMpKG91dHB1
dFN0cmVhbSwgKGNvbnN0IGNoYXIgKilmaWxlLCBsZW4pOwogICAgIGdvdG8gZG9uZTE7CiAgIH0K
IApAQCAtMTI3OSwxNCArMTI3OSwxNCBAQAogICBmb3IgKGkgPSAwOyBpIDwgbk5ld1RhYmxlczsg
KytpKSB7CiAgICAgaWYgKG5ld1RhYmxlc1tpXS50YWcgPT0gaGVhZFRhZykgewogICAgICAgaWYg
KGNoZWNrUmVnaW9uKG5ld1RhYmxlc1tpXS5vcmlnT2Zmc2V0LCBuZXdUYWJsZXNbaV0ubGVuKSkg
ewotCSgqb3V0cHV0RnVuYykob3V0cHV0U3RyZWFtLCAoY2hhciAqKWZpbGUgKyBuZXdUYWJsZXNb
aV0ub3JpZ09mZnNldCwgOCk7CisJKCpvdXRwdXRGdW5jKShvdXRwdXRTdHJlYW0sIChjb25zdCBj
aGFyICopZmlsZSArIG5ld1RhYmxlc1tpXS5vcmlnT2Zmc2V0LCA4KTsKIAljaGVja3N1bUJ1Zlsw
XSA9IGZpbGVDaGVja3N1bSA+PiAyNDsKIAljaGVja3N1bUJ1ZlsxXSA9IGZpbGVDaGVja3N1bSA+
PiAxNjsKIAljaGVja3N1bUJ1ZlsyXSA9IGZpbGVDaGVja3N1bSA+PiA4OwogCWNoZWNrc3VtQnVm
WzNdID0gZmlsZUNoZWNrc3VtOwogCSgqb3V0cHV0RnVuYykob3V0cHV0U3RyZWFtLCBjaGVja3N1
bUJ1ZiwgNCk7CiAJKCpvdXRwdXRGdW5jKShvdXRwdXRTdHJlYW0sCi0JCSAgICAgIChjaGFyICop
ZmlsZSArIG5ld1RhYmxlc1tpXS5vcmlnT2Zmc2V0ICsgMTIsCisJCSAgICAgIChjb25zdCBjaGFy
ICopZmlsZSArIG5ld1RhYmxlc1tpXS5vcmlnT2Zmc2V0ICsgMTIsCiAJCSAgICAgIG5ld1RhYmxl
c1tpXS5sZW4gLSAxMik7CiAgICAgICB9IGVsc2UgewogCWZvciAoaiA9IDA7IGogPCBuZXdUYWJs
ZXNbaV0ubGVuOyArK2opIHsKQEAgLTEzMzAsNyArMTMzMCw3IEBACiAJaWYgKG4gPiAwKSB7CiAJ
ICBrID0gbG9jYVRhYmxlW2pdLm9yaWdPZmZzZXQ7CiAJICBpZiAoY2hlY2tSZWdpb24ocG9zICsg
aywgbikpIHsKLQkgICAgKCpvdXRwdXRGdW5jKShvdXRwdXRTdHJlYW0sIChjaGFyICopZmlsZSAr
IHBvcyArIGssIG4pOworCSAgICAoKm91dHB1dEZ1bmMpKG91dHB1dFN0cmVhbSwgKGNvbnN0IGNo
YXIgKilmaWxlICsgcG9zICsgaywgbik7CiAJICB9IGVsc2UgewogCSAgICBmb3IgKGsgPSAwOyBr
IDwgbjsgKytrKSB7CiAJICAgICAgKCpvdXRwdXRGdW5jKShvdXRwdXRTdHJlYW0sICJcMCIsIDEp
OwpAQCAtMTM0Myw3ICsxMzQzLDcgQEAKICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAgaWYg
KGNoZWNrUmVnaW9uKG5ld1RhYmxlc1tpXS5vcmlnT2Zmc2V0LCBuZXdUYWJsZXNbaV0ubGVuKSkg
ewotCSgqb3V0cHV0RnVuYykob3V0cHV0U3RyZWFtLCAoY2hhciAqKWZpbGUgKyBuZXdUYWJsZXNb
aV0ub3JpZ09mZnNldCwKKwkoKm91dHB1dEZ1bmMpKG91dHB1dFN0cmVhbSwgKGNvbnN0IGNoYXIg
KilmaWxlICsgbmV3VGFibGVzW2ldLm9yaWdPZmZzZXQsCiAJCSAgICAgIG5ld1RhYmxlc1tpXS5s
ZW4pOwogICAgICAgfSBlbHNlIHsKIAlmb3IgKGogPSAwOyBqIDwgbmV3VGFibGVzW2ldLmxlbjsg
KytqKSB7CkBAIC0xMzY2LDEwICsxMzY2LDEwIEBACiAgIGdmcmVlKGxvY2FUYWJsZSk7CiB9CiAK
LXZvaWQgRm9GaVRydWVUeXBlOjpjdnRFbmNvZGluZyhjaGFyICoqZW5jb2RpbmcsCit2b2lkIEZv
RmlUcnVlVHlwZTo6Y3Z0RW5jb2RpbmcoY29uc3QgY2hhciAqKmVuY29kaW5nLAogCQkJICAgICAg
IEZvRmlPdXRwdXRGdW5jIG91dHB1dEZ1bmMsCiAJCQkgICAgICAgdm9pZCAqb3V0cHV0U3RyZWFt
KSB7Ci0gIGNoYXIgKm5hbWU7CisgIGNvbnN0IGNoYXIgKm5hbWU7CiAgIEdTdHJpbmcgKmJ1ZjsK
ICAgaW50IGk7CiAKQEAgLTEzOTUsMTEgKzEzOTUsMTEgQEAKICAgKCpvdXRwdXRGdW5jKShvdXRw
dXRTdHJlYW0sICJyZWFkb25seSBkZWZcbiIsIDEzKTsKIH0KIAotdm9pZCBGb0ZpVHJ1ZVR5cGU6
OmN2dENoYXJTdHJpbmdzKGNoYXIgKiplbmNvZGluZywKK3ZvaWQgRm9GaVRydWVUeXBlOjpjdnRD
aGFyU3RyaW5ncyhjb25zdCBjaGFyICoqZW5jb2RpbmcsCiAJCQkJICBHdXNob3J0ICpjb2RlVG9H
SUQsCiAJCQkJICBGb0ZpT3V0cHV0RnVuYyBvdXRwdXRGdW5jLAogCQkJCSAgdm9pZCAqb3V0cHV0
U3RyZWFtKSB7Ci0gIGNoYXIgKm5hbWU7CisgIGNvbnN0IGNoYXIgKm5hbWU7CiAgIEdTdHJpbmcg
KmJ1ZjsKICAgY2hhciBidWYyWzE2XTsKICAgaW50IGksIGs7CkBAIC0xOTgwLDcgKzE5ODAsNyBA
QAogCWlmICghb2sgfHwgIWNoZWNrUmVnaW9uKHN0cmluZ1BvcyArIDEsIG0pKSB7CiAJICBnb3Rv
IGVycjsKIAl9Ci0JbmFtZSA9IG5ldyBHU3RyaW5nKChjaGFyICopJmZpbGVbc3RyaW5nUG9zICsg
MV0sIG0pOworCW5hbWUgPSBuZXcgR1N0cmluZygoY29uc3QgY2hhciAqKSZmaWxlW3N0cmluZ1Bv
cyArIDFdLCBtKTsKIAluYW1lVG9HSUQtPnJlbW92ZUludChuYW1lKTsKIAluYW1lVG9HSUQtPmFk
ZChuYW1lLCBpKTsKIAkrK3N0cmluZ0lkeDsKQEAgLTIwMTAsNyArMjAxMCw3IEBACiAgIH0KIH0K
IAotaW50IEZvRmlUcnVlVHlwZTo6c2Vla1RhYmxlKGNoYXIgKnRhZykgeworaW50IEZvRmlUcnVl
VHlwZTo6c2Vla1RhYmxlKGNvbnN0IGNoYXIgKnRhZykgewogICBHdWludCB0YWdJOwogICBpbnQg
aTsKIApkaWZmIC11ciB0ZXhsaXZlLTIwMDgwODE2LXNvdXJjZS9saWJzL3hwZGYub3JpZy9mb2Zp
L0ZvRmlUcnVlVHlwZS5oIHRleGxpdmUtMjAwODA4MTYtc291cmNlL2xpYnMveHBkZi9mb2ZpL0Zv
RmlUcnVlVHlwZS5oCi0tLSB0ZXhsaXZlLTIwMDgwODE2LXNvdXJjZS9saWJzL3hwZGYub3JpZy9m
b2ZpL0ZvRmlUcnVlVHlwZS5oCTIwMDctMDctMTIgMDE6MTM6NTkuMDAwMDAwMDAwICswNDAwCisr
KyB0ZXhsaXZlLTIwMDgwODE2LXNvdXJjZS9saWJzL3hwZGYvZm9maS9Gb0ZpVHJ1ZVR5cGUuaAky
MDA4LTExLTIxIDE3OjMzOjMzLjAwMDAwMDAwMCArMDMwMApAQCAtMzEsMTAgKzMxLDEwIEBACiBw
dWJsaWM6CiAKICAgLy8gQ3JlYXRlIGEgRm9GaVRydWVUeXBlIG9iamVjdCBmcm9tIGEgbWVtb3J5
IGJ1ZmZlci4KLSAgc3RhdGljIEZvRmlUcnVlVHlwZSAqbWFrZShjaGFyICpmaWxlQSwgaW50IGxl
bkEpOworICBzdGF0aWMgRm9GaVRydWVUeXBlICptYWtlKGNvbnN0IGNoYXIgKmZpbGVBLCBpbnQg
bGVuQSk7CiAKICAgLy8gQ3JlYXRlIGEgRm9GaVRydWVUeXBlIG9iamVjdCBmcm9tIGEgZmlsZSBv
biBkaXNrLgotICBzdGF0aWMgRm9GaVRydWVUeXBlICpsb2FkKGNoYXIgKmZpbGVOYW1lKTsKKyAg
c3RhdGljIEZvRmlUcnVlVHlwZSAqbG9hZChjb25zdCBjaGFyICpmaWxlTmFtZSk7CiAKICAgdmly
dHVhbCB+Rm9GaVRydWVUeXBlKCk7CiAKQEAgLTYxLDcgKzYxLDcgQEAKICAgLy8gUmV0dXJucyB0
aGUgR0lEIGNvcnJlc3BvbmRpbmcgdG8gPG5hbWU+IGFjY29yZGluZyB0byB0aGUgcG9zdAogICAv
LyB0YWJsZS4gIFJldHVybnMgMCBpZiB0aGVyZSBpcyBubyBtYXBwaW5nIGZvciA8bmFtZT4gb3Ig
aWYgdGhlCiAgIC8vIGZvbnQgZG9lcyBub3QgaGF2ZSBhIHBvc3QgdGFibGUuCi0gIGludCBtYXBO
YW1lVG9HSUQoY2hhciAqbmFtZSk7CisgIGludCBtYXBOYW1lVG9HSUQoY29uc3QgY2hhciAqbmFt
ZSk7CiAKICAgLy8gUmV0dXJuIHRoZSBtYXBwaW5nIGZyb20gQ0lEcyB0byBHSURzLCBhbmQgcmV0
dXJuIHRoZSBudW1iZXIgb2YKICAgLy8gQ0lEcyBpbiAqPG5DSURzPi4gIFRoaXMgaXMgb25seSB1
c2VmdWwgZm9yIENJRCBmb250cy4gIChPbmx5CkBAIC04NCw3ICs4NCw3IEBACiAgIC8vIElmIDxl
bmNvZGluZz4gaXMgTlVMTCwgdGhlIGVuY29kaW5nIGlzIHVua25vd24gb3IgdW5kZWZpbmVkLiAg
VGhlCiAgIC8vIDxjb2RlVG9HSUQ+IGFycmF5IHNwZWNpZmllcyB0aGUgbWFwcGluZyBmcm9tIGNo
YXIgY29kZXMgdG8gR0lEcy4KICAgLy8gKE5vdCB1c2VmdWwgZm9yIE9wZW5UeXBlIENGRiBmb250
cy4pCi0gIHZvaWQgY29udmVydFRvVHlwZTQyKGNoYXIgKnBzTmFtZSwgY2hhciAqKmVuY29kaW5n
LAorICB2b2lkIGNvbnZlcnRUb1R5cGU0Mihjb25zdCBjaGFyICpwc05hbWUsIGNvbnN0IGNoYXIg
KiplbmNvZGluZywKIAkJICAgICAgIEd1c2hvcnQgKmNvZGVUb0dJRCwKIAkJICAgICAgIEZvRmlP
dXRwdXRGdW5jIG91dHB1dEZ1bmMsIHZvaWQgKm91dHB1dFN0cmVhbSk7CiAKQEAgLTk1LDcgKzk1
LDcgQEAKICAgLy8gb3RoZXJ3aXNlIGl0IHdpbGwgYmUgbGVmdCBhcyBiaW5hcnkgZGF0YS4gIElm
IDxwc05hbWU+IGlzCiAgIC8vIG5vbi1OVUxMLCBpdCB3aWxsIGJlIHVzZWQgYXMgdGhlIFBvc3RT
Y3JpcHQgZm9udCBuYW1lLiAgKE9ubHkKICAgLy8gdXNlZnVsIGZvciBPcGVuVHlwZSBDRkYgZm9u
dHMuKQotICB2b2lkIGNvbnZlcnRUb1R5cGUxKGNoYXIgKnBzTmFtZSwgY2hhciAqKm5ld0VuY29k
aW5nLCBHQm9vbCBhc2NpaSwKKyAgdm9pZCBjb252ZXJ0VG9UeXBlMShjb25zdCBjaGFyICpwc05h
bWUsIGNvbnN0IGNoYXIgKipuZXdFbmNvZGluZywgR0Jvb2wgYXNjaWksCiAJCSAgICAgIEZvRmlP
dXRwdXRGdW5jIG91dHB1dEZ1bmMsIHZvaWQgKm91dHB1dFN0cmVhbSk7CiAKICAgLy8gQ29udmVy
dCB0byBhIFR5cGUgMiBDSURGb250LCBzdWl0YWJsZSBmb3IgZW1iZWRkaW5nIGluIGEKQEAgLTEw
MywxNCArMTAzLDE0IEBACiAgIC8vIG5hbWUgKHNvIHdlIGRvbid0IG5lZWQgdG8gZGVwZW5kIG9u
IHRoZSAnbmFtZScgdGFibGUgaW4gdGhlCiAgIC8vIGZvbnQpLiAgVGhlIDxjaWRNYXA+IGFycmF5
IG1hcHMgQ0lEcyB0byBHSURzOyBpdCBoYXMgPG5DSURzPgogICAvLyBlbnRyaWVzLiAgKE5vdCB1
c2VmdWwgZm9yIE9wZW5UeXBlIENGRiBmb250cy4pCi0gIHZvaWQgY29udmVydFRvQ0lEVHlwZTIo
Y2hhciAqcHNOYW1lLCBHdXNob3J0ICpjaWRNYXAsIGludCBuQ0lEcywKKyAgdm9pZCBjb252ZXJ0
VG9DSURUeXBlMihjb25zdCBjaGFyICpwc05hbWUsIEd1c2hvcnQgKmNpZE1hcCwgaW50IG5DSURz
LAogCQkJIEdCb29sIG5lZWRWZXJ0aWNhbE1ldHJpY3MsCiAJCQkgRm9GaU91dHB1dEZ1bmMgb3V0
cHV0RnVuYywgdm9pZCAqb3V0cHV0U3RyZWFtKTsKIAogICAvLyBDb252ZXJ0IHRvIGEgVHlwZSAw
IENJREZvbnQsIHN1aXRhYmxlIGZvciBlbWJlZGRpbmcgaW4gYQogICAvLyBQb3N0U2NyaXB0IGZp
bGUuICA8cHNOYW1lPiB3aWxsIGJlIHVzZWQgYXMgdGhlIFBvc3RTY3JpcHQgZm9udAogICAvLyBu
YW1lLiAgKE9ubHkgdXNlZnVsIGZvciBPcGVuVHlwZSBDRkYgZm9udHMuKQotICB2b2lkIGNvbnZl
cnRUb0NJRFR5cGUwKGNoYXIgKnBzTmFtZSwKKyAgdm9pZCBjb252ZXJ0VG9DSURUeXBlMChjb25z
dCBjaGFyICpwc05hbWUsCiAJCQkgRm9GaU91dHB1dEZ1bmMgb3V0cHV0RnVuYywgdm9pZCAqb3V0
cHV0U3RyZWFtKTsKIAogICAvLyBDb252ZXJ0IHRvIGEgVHlwZSAwIChidXQgbm9uLUNJRCkgY29t
cG9zaXRlIGZvbnQsIHN1aXRhYmxlIGZvcgpAQCAtMTE4LDE0ICsxMTgsMTQgQEAKICAgLy8gUG9z
dFNjcmlwdCBmb250IG5hbWUgKHNvIHdlIGRvbid0IG5lZWQgdG8gZGVwZW5kIG9uIHRoZSAnbmFt
ZScKICAgLy8gdGFibGUgaW4gdGhlIGZvbnQpLiAgVGhlIDxjaWRNYXA+IGFycmF5IG1hcHMgQ0lE
cyB0byBHSURzOyBpdCBoYXMKICAgLy8gPG5DSURzPiBlbnRyaWVzLiAgKE5vdCB1c2VmdWwgZm9y
IE9wZW5UeXBlIENGRiBmb250cy4pCi0gIHZvaWQgY29udmVydFRvVHlwZTAoY2hhciAqcHNOYW1l
LCBHdXNob3J0ICpjaWRNYXAsIGludCBuQ0lEcywKKyAgdm9pZCBjb252ZXJ0VG9UeXBlMChjb25z
dCBjaGFyICpwc05hbWUsIEd1c2hvcnQgKmNpZE1hcCwgaW50IG5DSURzLAogCQkgICAgICBHQm9v
bCBuZWVkVmVydGljYWxNZXRyaWNzLAogCQkgICAgICBGb0ZpT3V0cHV0RnVuYyBvdXRwdXRGdW5j
LCB2b2lkICpvdXRwdXRTdHJlYW0pOwogCiAgIC8vIENvbnZlcnQgdG8gYSBUeXBlIDAgKGJ1dCBu
b24tQ0lEKSBjb21wb3NpdGUgZm9udCwgc3VpdGFibGUgZm9yCiAgIC8vIGVtYmVkZGluZyBpbiBh
IFBvc3RTY3JpcHQgZmlsZS4gIDxwc05hbWU+IHdpbGwgYmUgdXNlZCBhcyB0aGUKICAgLy8gUG9z
dFNjcmlwdCBmb250IG5hbWUuICAoT25seSB1c2VmdWwgZm9yIE9wZW5UeXBlIENGRiBmb250cy4p
Ci0gIHZvaWQgY29udmVydFRvVHlwZTAoY2hhciAqcHNOYW1lLAorICB2b2lkIGNvbnZlcnRUb1R5
cGUwKGNvbnN0IGNoYXIgKnBzTmFtZSwKIAkJICAgICAgRm9GaU91dHB1dEZ1bmMgb3V0cHV0RnVu
Yywgdm9pZCAqb3V0cHV0U3RyZWFtKTsKIAogICAvLyBXcml0ZSBhIGNsZWFuIFRURiBmaWxlLCBm
aWxsaW5nIGluIG1pc3NpbmcgdGFibGVzIGFuZCBjb3JyZWN0aW5nCkBAIC0xMzUsMTUgKzEzNSwx
NSBAQAogICAvLyBjb21wbGV0ZSBhbmQgY29ycmVjdCwgaXQgd2lsbCBiZSB3cml0dGVuIHVubW9k
aWZpZWQuICAoTm90IHVzZWZ1bAogICAvLyBmb3IgT3BlblR5cGUgQ0ZGIGZvbnRzLikKICAgdm9p
ZCB3cml0ZVRURihGb0ZpT3V0cHV0RnVuYyBvdXRwdXRGdW5jLCB2b2lkICpvdXRwdXRTdHJlYW0s
Ci0JCWNoYXIgKm5hbWUgPSBOVUxMLCBHdXNob3J0ICpjb2RlVG9HSUQgPSBOVUxMKTsKKwkJY29u
c3QgY2hhciAqbmFtZSA9IE5VTEwsIEd1c2hvcnQgKmNvZGVUb0dJRCA9IE5VTEwpOwogCiBwcml2
YXRlOgogCi0gIEZvRmlUcnVlVHlwZShjaGFyICpmaWxlQSwgaW50IGxlbkEsIEdCb29sIGZyZWVG
aWxlRGF0YUEpOwotICB2b2lkIGN2dEVuY29kaW5nKGNoYXIgKiplbmNvZGluZywKKyAgRm9GaVRy
dWVUeXBlKGNvbnN0IGNoYXIgKmZpbGVBLCBpbnQgbGVuQSwgR0Jvb2wgZnJlZUZpbGVEYXRhQSk7
CisgIHZvaWQgY3Z0RW5jb2RpbmcoY29uc3QgY2hhciAqKmVuY29kaW5nLAogCQkgICBGb0ZpT3V0
cHV0RnVuYyBvdXRwdXRGdW5jLAogCQkgICB2b2lkICpvdXRwdXRTdHJlYW0pOwotICB2b2lkIGN2
dENoYXJTdHJpbmdzKGNoYXIgKiplbmNvZGluZywKKyAgdm9pZCBjdnRDaGFyU3RyaW5ncyhjb25z
dCBjaGFyICoqZW5jb2RpbmcsCiAJCSAgICAgIEd1c2hvcnQgKmNvZGVUb0dJRCwKIAkJICAgICAg
Rm9GaU91dHB1dEZ1bmMgb3V0cHV0RnVuYywKIAkJICAgICAgdm9pZCAqb3V0cHV0U3RyZWFtKTsK
QEAgLTE1Niw3ICsxNTYsNyBAQAogICBHdWludCBjb21wdXRlVGFibGVDaGVja3N1bShHdWNoYXIg
KmRhdGEsIGludCBsZW5ndGgpOwogICB2b2lkIHBhcnNlKCk7CiAgIHZvaWQgcmVhZFBvc3RUYWJs
ZSgpOwotICBpbnQgc2Vla1RhYmxlKGNoYXIgKnRhZyk7CisgIGludCBzZWVrVGFibGUoY29uc3Qg
Y2hhciAqdGFnKTsKIAogICBUcnVlVHlwZVRhYmxlICp0YWJsZXM7CiAgIGludCBuVGFibGVzOwpk
aWZmIC11ciB0ZXhsaXZlLTIwMDgwODE2LXNvdXJjZS9saWJzL3hwZGYub3JpZy9mb2ZpL0ZvRmlU
eXBlMS5jYyB0ZXhsaXZlLTIwMDgwODE2LXNvdXJjZS9saWJzL3hwZGYvZm9maS9Gb0ZpVHlwZTEu
Y2MKLS0tIHRleGxpdmUtMjAwODA4MTYtc291cmNlL2xpYnMveHBkZi5vcmlnL2ZvZmkvRm9GaVR5
cGUxLmNjCTIwMDctMDctMTIgMDE6MTM6NTkuMDAwMDAwMDAwICswNDAwCisrKyB0ZXhsaXZlLTIw
MDgwODE2LXNvdXJjZS9saWJzL3hwZGYvZm9maS9Gb0ZpVHlwZTEuY2MJMjAwOC0xMS0yMSAxODow
ODoyMi4wMDAwMDAwMDAgKzAzMDAKQEAgLTIyLDEyICsyMiwxMiBAQAogLy8gRm9GaVR5cGUxCiAv
Ly0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQogCi1Gb0ZpVHlwZTEgKkZvRmlUeXBlMTo6bWFrZShjaGFyICpmaWxl
QSwgaW50IGxlbkEpIHsKK0ZvRmlUeXBlMSAqRm9GaVR5cGUxOjptYWtlKGNvbnN0IGNoYXIgKmZp
bGVBLCBpbnQgbGVuQSkgewogICByZXR1cm4gbmV3IEZvRmlUeXBlMShmaWxlQSwgbGVuQSwgZ0Zh
bHNlKTsKIH0KIAotRm9GaVR5cGUxICpGb0ZpVHlwZTE6OmxvYWQoY2hhciAqZmlsZU5hbWUpIHsK
LSAgY2hhciAqZmlsZUE7CitGb0ZpVHlwZTEgKkZvRmlUeXBlMTo6bG9hZChjb25zdCBjaGFyICpm
aWxlTmFtZSkgeworICBjb25zdCBjaGFyICpmaWxlQTsKICAgaW50IGxlbkE7CiAKICAgaWYgKCEo
ZmlsZUEgPSBGb0ZpQmFzZTo6cmVhZEZpbGUoZmlsZU5hbWUsICZsZW5BKSkpIHsKQEAgLTM2LDcg
KzM2LDcgQEAKICAgcmV0dXJuIG5ldyBGb0ZpVHlwZTEoZmlsZUEsIGxlbkEsIGdUcnVlKTsKIH0K
IAotRm9GaVR5cGUxOjpGb0ZpVHlwZTEoY2hhciAqZmlsZUEsIGludCBsZW5BLCBHQm9vbCBmcmVl
RmlsZURhdGFBKToKK0ZvRmlUeXBlMTo6Rm9GaVR5cGUxKGNvbnN0IGNoYXIgKmZpbGVBLCBpbnQg
bGVuQSwgR0Jvb2wgZnJlZUZpbGVEYXRhQSk6CiAgIEZvRmlCYXNlKGZpbGVBLCBsZW5BLCBmcmVl
RmlsZURhdGFBKQogewogICBuYW1lID0gTlVMTDsKQEAgLTQ4LDQ2ICs0OCw0NiBAQAogICBpbnQg
aTsKIAogICBpZiAobmFtZSkgewotICAgIGdmcmVlKG5hbWUpOworICAgIGdmcmVlKGNvbnN0X2Nh
c3Q8Y2hhcio+KG5hbWUpKTsKICAgfQogICBpZiAoZW5jb2RpbmcgJiYgZW5jb2RpbmcgIT0gZm9m
aVR5cGUxU3RhbmRhcmRFbmNvZGluZykgewogICAgIGZvciAoaSA9IDA7IGkgPCAyNTY7ICsraSkg
ewotICAgICAgZ2ZyZWUoZW5jb2RpbmdbaV0pOworICAgICAgZ2ZyZWUoY29uc3RfY2FzdDxjaGFy
Kj4oZW5jb2RpbmdbaV0pKTsKICAgICB9CiAgICAgZ2ZyZWUoZW5jb2RpbmcpOwogICB9CiB9CiAK
LWNoYXIgKkZvRmlUeXBlMTo6Z2V0TmFtZSgpIHsKK2NvbnN0IGNoYXIgKkZvRmlUeXBlMTo6Z2V0
TmFtZSgpIHsKICAgaWYgKCFwYXJzZWQpIHsKICAgICBwYXJzZSgpOwogICB9CiAgIHJldHVybiBu
YW1lOwogfQogCi1jaGFyICoqRm9GaVR5cGUxOjpnZXRFbmNvZGluZygpIHsKK2NvbnN0IGNoYXIg
KipGb0ZpVHlwZTE6OmdldEVuY29kaW5nKCkgewogICBpZiAoIXBhcnNlZCkgewogICAgIHBhcnNl
KCk7CiAgIH0KICAgcmV0dXJuIGVuY29kaW5nOwogfQogCi12b2lkIEZvRmlUeXBlMTo6d3JpdGVF
bmNvZGVkKGNoYXIgKipuZXdFbmNvZGluZywKK3ZvaWQgRm9GaVR5cGUxOjp3cml0ZUVuY29kZWQo
Y29uc3QgY2hhciAqKm5ld0VuY29kaW5nLAogCQkJICAgICBGb0ZpT3V0cHV0RnVuYyBvdXRwdXRG
dW5jLCB2b2lkICpvdXRwdXRTdHJlYW0pIHsKICAgY2hhciBidWZbNTEyXTsKLSAgY2hhciAqbGlu
ZSwgKmxpbmUyLCAqcDsKKyAgY29uc3QgY2hhciAqbGluZSwgKmxpbmUyLCAqcDsKICAgaW50IGk7
CiAKICAgLy8gY29weSBldmVyeXRoaW5nIHVwIHRvIHRoZSBlbmNvZGluZwotICBmb3IgKGxpbmUg
PSAoY2hhciAqKWZpbGU7CisgIGZvciAobGluZSA9IChjb25zdCBjaGFyICopZmlsZTsKICAgICAg
ICBsaW5lICYmIHN0cm5jbXAobGluZSwgIi9FbmNvZGluZyIsIDkpOwogICAgICAgIGxpbmUgPSBn
ZXROZXh0TGluZShsaW5lKSkgOwogICBpZiAoIWxpbmUpIHsKICAgICAvLyBubyBlbmNvZGluZyAt
IGp1c3QgY29weSB0aGUgd2hvbGUgZm9udCBmaWxlCi0gICAgKCpvdXRwdXRGdW5jKShvdXRwdXRT
dHJlYW0sIChjaGFyICopZmlsZSwgbGVuKTsKKyAgICAoKm91dHB1dEZ1bmMpKG91dHB1dFN0cmVh
bSwgKGNvbnN0IGNoYXIgKilmaWxlLCBsZW4pOwogICAgIHJldHVybjsKICAgfQotICAoKm91dHB1
dEZ1bmMpKG91dHB1dFN0cmVhbSwgKGNoYXIgKilmaWxlLCBsaW5lIC0gKGNoYXIgKilmaWxlKTsK
KyAgKCpvdXRwdXRGdW5jKShvdXRwdXRTdHJlYW0sIChjb25zdCBjaGFyICopZmlsZSwgbGluZSAt
IChjb25zdCBjaGFyICopZmlsZSk7CiAKICAgLy8gd3JpdGUgdGhlIG5ldyBlbmNvZGluZwogICAo
Km91dHB1dEZ1bmMpKG91dHB1dFN0cmVhbSwgIi9FbmNvZGluZyAyNTYgYXJyYXlcbiIsIDIwKTsK
QEAgLTE1MCwxMiArMTUwLDEyIEBACiAKICAgICAvLyBjb3B5IGV2ZXJ5dGhpbmcgYWZ0ZXIgdGhl
IGVuY29kaW5nCiAgICAgaWYgKGxpbmUpIHsKLSAgICAgICgqb3V0cHV0RnVuYykob3V0cHV0U3Ry
ZWFtLCBsaW5lLCAoKGNoYXIgKilmaWxlICsgbGVuKSAtIGxpbmUpOworICAgICAgKCpvdXRwdXRG
dW5jKShvdXRwdXRTdHJlYW0sIGxpbmUsICgoY29uc3QgY2hhciAqKWZpbGUgKyBsZW4pIC0gbGlu
ZSk7CiAgICAgfQogICB9CiB9CiAKLWNoYXIgKkZvRmlUeXBlMTo6Z2V0TmV4dExpbmUoY2hhciAq
bGluZSkgeworY29uc3QgY2hhciAqRm9GaVR5cGUxOjpnZXROZXh0TGluZShjb25zdCBjaGFyICps
aW5lKSB7CiAgIHdoaWxlIChsaW5lIDwgKGNoYXIgKilmaWxlICsgbGVuICYmICpsaW5lICE9ICdc
eDBhJyAmJiAqbGluZSAhPSAnXHgwZCcpIHsKICAgICArK2xpbmU7CiAgIH0KQEAgLTE3Miw3ICsx
NzIsOCBAQAogfQogCiB2b2lkIEZvRmlUeXBlMTo6cGFyc2UoKSB7Ci0gIGNoYXIgKmxpbmUsICps
aW5lMSwgKnAsICpwMjsKKyAgY29uc3QgY2hhciAqbGluZSwgKmxpbmUxOworICBjaGFyICpwLCAq
cDI7CiAgIGNoYXIgYnVmWzI1Nl07CiAgIGNoYXIgYzsKICAgaW50IG4sIGNvZGUsIGksIGo7CkBA
IC0xOTcsNyArMTk4LDcgQEAKICAgICAgIGVuY29kaW5nID0gZm9maVR5cGUxU3RhbmRhcmRFbmNv
ZGluZzsKICAgICB9IGVsc2UgaWYgKCFlbmNvZGluZyAmJgogCSAgICAgICAhc3RybmNtcChsaW5l
LCAiL0VuY29kaW5nIDI1NiBhcnJheSIsIDE5KSkgewotICAgICAgZW5jb2RpbmcgPSAoY2hhciAq
KilnbWFsbG9jbigyNTYsIHNpemVvZihjaGFyICopKTsKKyAgICAgIGVuY29kaW5nID0gKGNvbnN0
IGNoYXIgKiopZ21hbGxvY24oMjU2LCBzaXplb2YoY2hhciAqKSk7CiAgICAgICBmb3IgKGogPSAw
OyBqIDwgMjU2OyArK2opIHsKIAllbmNvZGluZ1tqXSA9IE5VTEw7CiAgICAgICB9CmRpZmYgLXVy
IHRleGxpdmUtMjAwODA4MTYtc291cmNlL2xpYnMveHBkZi5vcmlnL2ZvZmkvRm9GaVR5cGUxQy5j
YyB0ZXhsaXZlLTIwMDgwODE2LXNvdXJjZS9saWJzL3hwZGYvZm9maS9Gb0ZpVHlwZTFDLmNjCi0t
LSB0ZXhsaXZlLTIwMDgwODE2LXNvdXJjZS9saWJzL3hwZGYub3JpZy9mb2ZpL0ZvRmlUeXBlMUMu
Y2MJMjAwNy0wNy0xMiAwMToxMzo1OS4wMDAwMDAwMDAgKzA0MDAKKysrIHRleGxpdmUtMjAwODA4
MTYtc291cmNlL2xpYnMveHBkZi9mb2ZpL0ZvRmlUeXBlMUMuY2MJMjAwOC0xMS0yMSAxODoxMDox
NC4wMDAwMDAwMDAgKzAzMDAKQEAgLTI4LDcgKzI4LDcgQEAKIC8vIEZvRmlUeXBlMUMKIC8vLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCiAKLUZvRmlUeXBlMUMgKkZvRmlUeXBlMUM6Om1ha2UoY2hhciAqZmlsZUEs
IGludCBsZW5BKSB7CitGb0ZpVHlwZTFDICpGb0ZpVHlwZTFDOjptYWtlKGNvbnN0IGNoYXIgKmZp
bGVBLCBpbnQgbGVuQSkgewogICBGb0ZpVHlwZTFDICpmZjsKIAogICBmZiA9IG5ldyBGb0ZpVHlw
ZTFDKGZpbGVBLCBsZW5BLCBnRmFsc2UpOwpAQCAtMzksOSArMzksOSBAQAogICByZXR1cm4gZmY7
CiB9CiAKLUZvRmlUeXBlMUMgKkZvRmlUeXBlMUM6OmxvYWQoY2hhciAqZmlsZU5hbWUpIHsKK0Zv
RmlUeXBlMUMgKkZvRmlUeXBlMUM6OmxvYWQoY29uc3QgY2hhciAqZmlsZU5hbWUpIHsKICAgRm9G
aVR5cGUxQyAqZmY7Ci0gIGNoYXIgKmZpbGVBOworICBjb25zdCBjaGFyICpmaWxlQTsKICAgaW50
IGxlbkE7CiAKICAgaWYgKCEoZmlsZUEgPSBGb0ZpQmFzZTo6cmVhZEZpbGUoZmlsZU5hbWUsICZs
ZW5BKSkpIHsKQEAgLTU1LDcgKzU1LDcgQEAKICAgcmV0dXJuIGZmOwogfQogCi1Gb0ZpVHlwZTFD
OjpGb0ZpVHlwZTFDKGNoYXIgKmZpbGVBLCBpbnQgbGVuQSwgR0Jvb2wgZnJlZUZpbGVEYXRhQSk6
CitGb0ZpVHlwZTFDOjpGb0ZpVHlwZTFDKGNvbnN0IGNoYXIgKmZpbGVBLCBpbnQgbGVuQSwgR0Jv
b2wgZnJlZUZpbGVEYXRhQSk6CiAgIEZvRmlCYXNlKGZpbGVBLCBsZW5BLCBmcmVlRmlsZURhdGFB
KQogewogICBuYW1lID0gTlVMTDsKQEAgLTc1LDcgKzc1LDcgQEAKICAgICAgIGVuY29kaW5nICE9
IGZvZmlUeXBlMVN0YW5kYXJkRW5jb2RpbmcgJiYKICAgICAgIGVuY29kaW5nICE9IGZvZmlUeXBl
MUV4cGVydEVuY29kaW5nKSB7CiAgICAgZm9yIChpID0gMDsgaSA8IDI1NjsgKytpKSB7Ci0gICAg
ICBnZnJlZShlbmNvZGluZ1tpXSk7CisgICAgICBnZnJlZShjb25zdF9jYXN0PGNoYXIqPihlbmNv
ZGluZ1tpXSkpOwogICAgIH0KICAgICBnZnJlZShlbmNvZGluZyk7CiAgIH0KQEAgLTkzLDExICs5
MywxMSBAQAogICB9CiB9CiAKLWNoYXIgKkZvRmlUeXBlMUM6OmdldE5hbWUoKSB7Ci0gIHJldHVy
biBuYW1lID8gbmFtZS0+Z2V0Q1N0cmluZygpIDogKGNoYXIgKilOVUxMOworY29uc3QgY2hhciAq
Rm9GaVR5cGUxQzo6Z2V0TmFtZSgpIHsKKyAgcmV0dXJuIG5hbWUgPyBuYW1lLT5nZXRDU3RyaW5n
KCkgOiAoY29uc3QgY2hhciAqKU5VTEw7CiB9CiAKLWNoYXIgKipGb0ZpVHlwZTFDOjpnZXRFbmNv
ZGluZygpIHsKK2NvbnN0IGNoYXIgKipGb0ZpVHlwZTFDOjpnZXRFbmNvZGluZygpIHsKICAgcmV0
dXJuIGVuY29kaW5nOwogfQogCkBAIC0xMjksNyArMTI5LDcgQEAKICAgcmV0dXJuIG1hcDsKIH0K
IAotdm9pZCBGb0ZpVHlwZTFDOjpjb252ZXJ0VG9UeXBlMShjaGFyICpwc05hbWUsIGNoYXIgKipu
ZXdFbmNvZGluZywgR0Jvb2wgYXNjaWksCit2b2lkIEZvRmlUeXBlMUM6OmNvbnZlcnRUb1R5cGUx
KGNvbnN0IGNoYXIgKnBzTmFtZSwgY29uc3QgY2hhciAqKm5ld0VuY29kaW5nLCBHQm9vbCBhc2Np
aSwKIAkJCQlGb0ZpT3V0cHV0RnVuYyBvdXRwdXRGdW5jLAogCQkJCXZvaWQgKm91dHB1dFN0cmVh
bSkgewogICBpbnQgcHNOYW1lTGVuOwpAQCAtMTM4LDcgKzEzOCw3IEBACiAgIFR5cGUxQ0luZGV4
VmFsIHZhbDsKICAgR1N0cmluZyAqYnVmOwogICBjaGFyIGJ1ZjJbMjU2XTsKLSAgY2hhciAqKmVu
YzsKKyAgY29uc3QgY2hhciAqKmVuYzsKICAgR0Jvb2wgb2s7CiAgIGludCBpOwogCkBAIC00Mjks
NyArNDI5LDcgQEAKICAgKCpvdXRwdXRGdW5jKShvdXRwdXRTdHJlYW0sICJjbGVhcnRvbWFya1xu
IiwgMTIpOwogfQogCi12b2lkIEZvRmlUeXBlMUM6OmNvbnZlcnRUb0NJRFR5cGUwKGNoYXIgKnBz
TmFtZSwKK3ZvaWQgRm9GaVR5cGUxQzo6Y29udmVydFRvQ0lEVHlwZTAoY29uc3QgY2hhciAqcHNO
YW1lLAogCQkJCSAgIEZvRmlPdXRwdXRGdW5jIG91dHB1dEZ1bmMsCiAJCQkJICAgdm9pZCAqb3V0
cHV0U3RyZWFtKSB7CiAgIGludCAqY2lkTWFwOwpAQCAtNzU1LDcgKzc1NSw3IEBACiAgIGdmcmVl
KGNpZE1hcCk7CiB9CiAKLXZvaWQgRm9GaVR5cGUxQzo6Y29udmVydFRvVHlwZTAoY2hhciAqcHNO
YW1lLAordm9pZCBGb0ZpVHlwZTFDOjpjb252ZXJ0VG9UeXBlMChjb25zdCBjaGFyICpwc05hbWUs
CiAJCQkJRm9GaU91dHB1dEZ1bmMgb3V0cHV0RnVuYywKIAkJCQl2b2lkICpvdXRwdXRTdHJlYW0p
IHsKICAgaW50ICpjaWRNYXA7CkBAIC0xMDY2LDcgKzEwNjYsNyBAQAogICBnZnJlZShjaWRNYXAp
OwogfQogCi12b2lkIEZvRmlUeXBlMUM6OmVleGVjQ3Z0R2x5cGgoVHlwZTFDRWV4ZWNCdWYgKmVi
LCBjaGFyICpnbHlwaE5hbWUsCit2b2lkIEZvRmlUeXBlMUM6OmVleGVjQ3Z0R2x5cGgoVHlwZTFD
RWV4ZWNCdWYgKmViLCBjb25zdCBjaGFyICpnbHlwaE5hbWUsCiAJCQkgICAgICAgaW50IG9mZnNl
dCwgaW50IG5CeXRlcywKIAkJCSAgICAgICBUeXBlMUNJbmRleCAqc3VicklkeCwKIAkJCSAgICAg
ICBUeXBlMUNQcml2YXRlRGljdCAqcERpY3QpIHsKQEAgLTE3ODksMTAgKzE3ODksMTAgQEAKICAg
ICAgIG4gPSA1OwogICAgIH0KICAgfQotICBjaGFyQnVmLT5hcHBlbmQoKGNoYXIgKilidWYsIG4p
OworICBjaGFyQnVmLT5hcHBlbmQoKGNvbnN0IGNoYXIgKilidWYsIG4pOwogfQogCi12b2lkIEZv
RmlUeXBlMUM6OmVleGVjV3JpdGUoVHlwZTFDRWV4ZWNCdWYgKmViLCBjaGFyICpzKSB7Cit2b2lk
IEZvRmlUeXBlMUM6OmVleGVjV3JpdGUoVHlwZTFDRWV4ZWNCdWYgKmViLCBjb25zdCBjaGFyICpz
KSB7CiAgIEd1Y2hhciAqcDsKICAgR3VjaGFyIHg7CiAKQEAgLTE4MDgsNyArMTgwOCw3IEBACiAJ
ZWItPmxpbmUgPSAwOwogICAgICAgfQogICAgIH0gZWxzZSB7Ci0gICAgICAoKmViLT5vdXRwdXRG
dW5jKShlYi0+b3V0cHV0U3RyZWFtLCAoY2hhciAqKSZ4LCAxKTsKKyAgICAgICgqZWItPm91dHB1
dEZ1bmMpKGViLT5vdXRwdXRTdHJlYW0sIChjb25zdCBjaGFyICopJngsIDEpOwogICAgIH0KICAg
fQogfQpAQCAtMTgzMSw3ICsxODMxLDcgQEAKIAllYi0+bGluZSA9IDA7CiAgICAgICB9CiAgICAg
fSBlbHNlIHsKLSAgICAgICgqZWItPm91dHB1dEZ1bmMpKGViLT5vdXRwdXRTdHJlYW0sIChjaGFy
ICopJngsIDEpOworICAgICAgKCplYi0+b3V0cHV0RnVuYykoZWItPm91dHB1dFN0cmVhbSwgKGNv
bnN0IGNoYXIgKikmeCwgMSk7CiAgICAgfQogICB9CiB9CkBAIC0xODY2LDcgKzE4NjYsNyBAQAog
ICBpZiAoIXBhcnNlZE9rKSB7CiAgICAgcmV0dXJuIGdGYWxzZTsKICAgfQotICBuYW1lID0gbmV3
IEdTdHJpbmcoKGNoYXIgKikmZmlsZVt2YWwucG9zXSwgdmFsLmxlbik7CisgIG5hbWUgPSBuZXcg
R1N0cmluZygoY29uc3QgY2hhciAqKSZmaWxlW3ZhbC5wb3NdLCB2YWwubGVuKTsKIAogICAvLyBy
ZWFkIHRoZSB0b3AgZGljdCBmb3IgdGhlIGZpcnN0IGZvbnQKICAgcmVhZFRvcERpY3QoKTsKQEAg
LTIyNjcsNyArMjI2Nyw3IEBACiAgICAgZW5jb2RpbmcgPSBmb2ZpVHlwZTFFeHBlcnRFbmNvZGlu
ZzsKIAogICB9IGVsc2UgewotICAgIGVuY29kaW5nID0gKGNoYXIgKiopZ21hbGxvY24oMjU2LCBz
aXplb2YoY2hhciAqKSk7CisgICAgZW5jb2RpbmcgPSAoY29uc3QgY2hhciAqKilnbWFsbG9jbigy
NTYsIHNpemVvZihjaGFyICopKTsKICAgICBmb3IgKGkgPSAwOyBpIDwgMjU2OyArK2kpIHsKICAg
ICAgIGVuY29kaW5nW2ldID0gTlVMTDsKICAgICB9CkBAIC0yMjkwLDcgKzIyOTAsNyBAQAogCSAg
cmV0dXJuOwogCX0KIAlpZiAoZW5jb2RpbmdbY10pIHsKLQkgIGdmcmVlKGVuY29kaW5nW2NdKTsK
KwkgIGdmcmVlKGNvbnN0X2Nhc3Q8Y2hhcio+KGVuY29kaW5nW2NdKSk7CiAJfQogCWVuY29kaW5n
W2NdID0gY29weVN0cmluZyhnZXRTdHJpbmcoY2hhcnNldFtpXSwgYnVmLCAmcGFyc2VkT2spKTsK
ICAgICAgIH0KQEAgLTIzMDksNyArMjMwOSw3IEBACiAJZm9yIChqID0gMDsgaiA8PSBuTGVmdCAm
JiBuQ29kZXMgPCBuR2x5cGhzOyArK2opIHsKIAkgIGlmIChjIDwgMjU2KSB7CiAJICAgIGlmIChl
bmNvZGluZ1tjXSkgewotCSAgICAgIGdmcmVlKGVuY29kaW5nW2NdKTsKKwkgICAgICBnZnJlZShj
b25zdF9jYXN0PGNoYXIqPihlbmNvZGluZ1tjXSkpOwogCSAgICB9CiAJICAgIGVuY29kaW5nW2Nd
ID0gY29weVN0cmluZyhnZXRTdHJpbmcoY2hhcnNldFtuQ29kZXNdLCBidWYsCiAJCQkJCSAgICAg
ICAmcGFyc2VkT2spKTsKQEAgLTIzMzUsNyArMjMzNSw3IEBACiAJICByZXR1cm47CiAJfQogCWlm
IChlbmNvZGluZ1tjXSkgewotCSAgZ2ZyZWUoZW5jb2RpbmdbY10pOworCSAgZ2ZyZWUoY29uc3Rf
Y2FzdDxjaGFyKj4oZW5jb2RpbmdbY10pKTsKIAl9CiAJZW5jb2RpbmdbY10gPSBjb3B5U3RyaW5n
KGdldFN0cmluZyhzaWQsIGJ1ZiwgJnBhcnNlZE9rKSk7CiAgICAgICB9CkBAIC0yNTkzLDcgKzI1
OTMsNyBAQAogICAgICAgaWYgKChuID0gdmFsLmxlbikgPiAyNTUpIHsKIAluID0gMjU1OwogICAg
ICAgfQotICAgICAgc3RybmNweShidWYsIChjaGFyICopJmZpbGVbdmFsLnBvc10sIG4pOworICAg
ICAgc3RybmNweShidWYsIChjb25zdCBjaGFyICopJmZpbGVbdmFsLnBvc10sIG4pOwogICAgICAg
YnVmW25dID0gJ1wwJzsKICAgICB9IGVsc2UgewogICAgICAgYnVmWzBdID0gJ1wwJzsKZGlmZiAt
dXIgdGV4bGl2ZS0yMDA4MDgxNi1zb3VyY2UvbGlicy94cGRmLm9yaWcvZm9maS9Gb0ZpVHlwZTFD
LmggdGV4bGl2ZS0yMDA4MDgxNi1zb3VyY2UvbGlicy94cGRmL2ZvZmkvRm9GaVR5cGUxQy5oCi0t
LSB0ZXhsaXZlLTIwMDgwODE2LXNvdXJjZS9saWJzL3hwZGYub3JpZy9mb2ZpL0ZvRmlUeXBlMUMu
aAkyMDA3LTA3LTEyIDAxOjEzOjU5LjAwMDAwMDAwMCArMDQwMAorKysgdGV4bGl2ZS0yMDA4MDgx
Ni1zb3VyY2UvbGlicy94cGRmL2ZvZmkvRm9GaVR5cGUxQy5oCTIwMDgtMTEtMjEgMTg6MTA6NDEu
MDAwMDAwMDAwICswMzAwCkBAIC0xMzUsMTkgKzEzNSwxOSBAQAogcHVibGljOgogCiAgIC8vIENy
ZWF0ZSBhIEZvRmlUeXBlMUMgb2JqZWN0IGZyb20gYSBtZW1vcnkgYnVmZmVyLgotICBzdGF0aWMg
Rm9GaVR5cGUxQyAqbWFrZShjaGFyICpmaWxlQSwgaW50IGxlbkEpOworICBzdGF0aWMgRm9GaVR5
cGUxQyAqbWFrZShjb25zdCBjaGFyICpmaWxlQSwgaW50IGxlbkEpOwogCiAgIC8vIENyZWF0ZSBh
IEZvRmlUeXBlMUMgb2JqZWN0IGZyb20gYSBmaWxlIG9uIGRpc2suCi0gIHN0YXRpYyBGb0ZpVHlw
ZTFDICpsb2FkKGNoYXIgKmZpbGVOYW1lKTsKKyAgc3RhdGljIEZvRmlUeXBlMUMgKmxvYWQoY29u
c3QgY2hhciAqZmlsZU5hbWUpOwogCiAgIHZpcnR1YWwgfkZvRmlUeXBlMUMoKTsKIAogICAvLyBS
ZXR1cm4gdGhlIGZvbnQgbmFtZS4KLSAgY2hhciAqZ2V0TmFtZSgpOworICBjb25zdCBjaGFyICpn
ZXROYW1lKCk7CiAKICAgLy8gUmV0dXJuIHRoZSBlbmNvZGluZywgYXMgYW4gYXJyYXkgb2YgMjU2
IG5hbWVzIChhbnkgb2Ygd2hpY2ggbWF5CiAgIC8vIGJlIE5VTEwpLiAgVGhpcyBpcyBvbmx5IHVz
ZWZ1bCB3aXRoIDgtYml0IGZvbnRzLgotICBjaGFyICoqZ2V0RW5jb2RpbmcoKTsKKyAgY29uc3Qg
Y2hhciAqKmdldEVuY29kaW5nKCk7CiAKICAgLy8gUmV0dXJuIHRoZSBtYXBwaW5nIGZyb20gQ0lE
cyB0byBHSURzLCBhbmQgcmV0dXJuIHRoZSBudW1iZXIgb2YKICAgLy8gQ0lEcyBpbiAqPG5DSURz
Pi4gIFRoaXMgaXMgb25seSB1c2VmdWwgZm9yIENJRCBmb250cy4KQEAgLTE1OSwyNSArMTU5LDI1
IEBACiAgIC8vIGZvbnQuICBJZiA8YXNjaWk+IGlzIHRydWUgdGhlIGVleGVjIHNlY3Rpb24gd2ls
bCBiZSBoZXgtZW5jb2RlZCwKICAgLy8gb3RoZXJ3aXNlIGl0IHdpbGwgYmUgbGVmdCBhcyBiaW5h
cnkgZGF0YS4gIElmIDxwc05hbWU+IGlzIG5vbi1OVUxMLAogICAvLyBpdCB3aWxsIGJlIHVzZWQg
YXMgdGhlIFBvc3RTY3JpcHQgZm9udCBuYW1lLgotICB2b2lkIGNvbnZlcnRUb1R5cGUxKGNoYXIg
KnBzTmFtZSwgY2hhciAqKm5ld0VuY29kaW5nLCBHQm9vbCBhc2NpaSwKKyAgdm9pZCBjb252ZXJ0
VG9UeXBlMShjb25zdCBjaGFyICpwc05hbWUsIGNvbnN0IGNoYXIgKipuZXdFbmNvZGluZywgR0Jv
b2wgYXNjaWksCiAJCSAgICAgIEZvRmlPdXRwdXRGdW5jIG91dHB1dEZ1bmMsIHZvaWQgKm91dHB1
dFN0cmVhbSk7CiAKICAgLy8gQ29udmVydCB0byBhIFR5cGUgMCBDSURGb250LCBzdWl0YWJsZSBm
b3IgZW1iZWRkaW5nIGluIGEKICAgLy8gUG9zdFNjcmlwdCBmaWxlLiAgPHBzTmFtZT4gd2lsbCBi
ZSB1c2VkIGFzIHRoZSBQb3N0U2NyaXB0IGZvbnQKICAgLy8gbmFtZS4KLSAgdm9pZCBjb252ZXJ0
VG9DSURUeXBlMChjaGFyICpwc05hbWUsCisgIHZvaWQgY29udmVydFRvQ0lEVHlwZTAoY29uc3Qg
Y2hhciAqcHNOYW1lLAogCQkJIEZvRmlPdXRwdXRGdW5jIG91dHB1dEZ1bmMsIHZvaWQgKm91dHB1
dFN0cmVhbSk7CiAKICAgLy8gQ29udmVydCB0byBhIFR5cGUgMCAoYnV0IG5vbi1DSUQpIGNvbXBv
c2l0ZSBmb250LCBzdWl0YWJsZSBmb3IKICAgLy8gZW1iZWRkaW5nIGluIGEgUG9zdFNjcmlwdCBm
aWxlLiAgPHBzTmFtZT4gd2lsbCBiZSB1c2VkIGFzIHRoZQogICAvLyBQb3N0U2NyaXB0IGZvbnQg
bmFtZS4KLSAgdm9pZCBjb252ZXJ0VG9UeXBlMChjaGFyICpwc05hbWUsCisgIHZvaWQgY29udmVy
dFRvVHlwZTAoY29uc3QgY2hhciAqcHNOYW1lLAogCQkgICAgICBGb0ZpT3V0cHV0RnVuYyBvdXRw
dXRGdW5jLCB2b2lkICpvdXRwdXRTdHJlYW0pOwogCiBwcml2YXRlOgogCi0gIEZvRmlUeXBlMUMo
Y2hhciAqZmlsZUEsIGludCBsZW5BLCBHQm9vbCBmcmVlRmlsZURhdGFBKTsKLSAgdm9pZCBlZXhl
Y0N2dEdseXBoKFR5cGUxQ0VleGVjQnVmICplYiwgY2hhciAqZ2x5cGhOYW1lLAorICBGb0ZpVHlw
ZTFDKGNvbnN0IGNoYXIgKmZpbGVBLCBpbnQgbGVuQSwgR0Jvb2wgZnJlZUZpbGVEYXRhQSk7Cisg
IHZvaWQgZWV4ZWNDdnRHbHlwaChUeXBlMUNFZXhlY0J1ZiAqZWIsIGNvbnN0IGNoYXIgKmdseXBo
TmFtZSwKIAkJICAgICBpbnQgb2Zmc2V0LCBpbnQgbkJ5dGVzLAogCQkgICAgIFR5cGUxQ0luZGV4
ICpzdWJySWR4LAogCQkgICAgIFR5cGUxQ1ByaXZhdGVEaWN0ICpwRGljdCk7CkBAIC0xODcsNyAr
MTg3LDcgQEAKICAgdm9pZCBjdnRHbHlwaFdpZHRoKEdCb29sIHVzZU9wLCBHU3RyaW5nICpjaGFy
QnVmLAogCQkgICAgIFR5cGUxQ1ByaXZhdGVEaWN0ICpwRGljdCk7CiAgIHZvaWQgY3Z0TnVtKGRv
dWJsZSB4LCBHQm9vbCBpc0ZQLCBHU3RyaW5nICpjaGFyQnVmKTsKLSAgdm9pZCBlZXhlY1dyaXRl
KFR5cGUxQ0VleGVjQnVmICplYiwgY2hhciAqcyk7CisgIHZvaWQgZWV4ZWNXcml0ZShUeXBlMUNF
ZXhlY0J1ZiAqZWIsIGNvbnN0IGNoYXIgKnMpOwogICB2b2lkIGVleGVjV3JpdGVDaGFyc3RyaW5n
KFR5cGUxQ0VleGVjQnVmICplYiwgR3VjaGFyICpzLCBpbnQgbik7CiAgIEdCb29sIHBhcnNlKCk7
CiAgIHZvaWQgcmVhZFRvcERpY3QoKTsKQEAgLTIwNCw3ICsyMDQsNyBAQAogICBjaGFyICpnZXRT
dHJpbmcoaW50IHNpZCwgY2hhciAqYnVmLCBHQm9vbCAqb2spOwogCiAgIEdTdHJpbmcgKm5hbWU7
Ci0gIGNoYXIgKiplbmNvZGluZzsKKyAgY29uc3QgY2hhciAqKmVuY29kaW5nOwogCiAgIFR5cGUx
Q0luZGV4IG5hbWVJZHg7CiAgIFR5cGUxQ0luZGV4IHRvcERpY3RJZHg7CmRpZmYgLXVyIHRleGxp
dmUtMjAwODA4MTYtc291cmNlL2xpYnMveHBkZi5vcmlnL2ZvZmkvRm9GaVR5cGUxLmggdGV4bGl2
ZS0yMDA4MDgxNi1zb3VyY2UvbGlicy94cGRmL2ZvZmkvRm9GaVR5cGUxLmgKLS0tIHRleGxpdmUt
MjAwODA4MTYtc291cmNlL2xpYnMveHBkZi5vcmlnL2ZvZmkvRm9GaVR5cGUxLmgJMjAwNi0wMS0x
NiAwMzowOToyNi4wMDAwMDAwMDAgKzAzMDAKKysrIHRleGxpdmUtMjAwODA4MTYtc291cmNlL2xp
YnMveHBkZi9mb2ZpL0ZvRmlUeXBlMS5oCTIwMDgtMTEtMjEgMTc6MDE6MDcuMDAwMDAwMDAwICsw
MzAwCkBAIC0yNiwzMyArMjYsMzMgQEAKIHB1YmxpYzoKIAogICAvLyBDcmVhdGUgYSBGb0ZpVHlw
ZTEgb2JqZWN0IGZyb20gYSBtZW1vcnkgYnVmZmVyLgotICBzdGF0aWMgRm9GaVR5cGUxICptYWtl
KGNoYXIgKmZpbGVBLCBpbnQgbGVuQSk7CisgIHN0YXRpYyBGb0ZpVHlwZTEgKm1ha2UoY29uc3Qg
Y2hhciAqZmlsZUEsIGludCBsZW5BKTsKIAogICAvLyBDcmVhdGUgYSBGb0ZpVHlwZTEgb2JqZWN0
IGZyb20gYSBmaWxlIG9uIGRpc2suCi0gIHN0YXRpYyBGb0ZpVHlwZTEgKmxvYWQoY2hhciAqZmls
ZU5hbWUpOworICBzdGF0aWMgRm9GaVR5cGUxICpsb2FkKGNvbnN0IGNoYXIgKmZpbGVOYW1lKTsK
IAogICB2aXJ0dWFsIH5Gb0ZpVHlwZTEoKTsKIAogICAvLyBSZXR1cm4gdGhlIGZvbnQgbmFtZS4K
LSAgY2hhciAqZ2V0TmFtZSgpOworICBjb25zdCBjaGFyICpnZXROYW1lKCk7CiAKICAgLy8gUmV0
dXJuIHRoZSBlbmNvZGluZywgYXMgYW4gYXJyYXkgb2YgMjU2IG5hbWVzIChhbnkgb2Ygd2hpY2gg
bWF5CiAgIC8vIGJlIE5VTEwpLgotICBjaGFyICoqZ2V0RW5jb2RpbmcoKTsKKyAgY29uc3QgY2hh
ciAqKmdldEVuY29kaW5nKCk7CiAKICAgLy8gV3JpdGUgYSB2ZXJzaW9uIG9mIHRoZSBUeXBlIDEg
Zm9udCBmaWxlIHdpdGggYSBuZXcgZW5jb2RpbmcuCi0gIHZvaWQgd3JpdGVFbmNvZGVkKGNoYXIg
KipuZXdFbmNvZGluZywKKyAgdm9pZCB3cml0ZUVuY29kZWQoY29uc3QgY2hhciAqKm5ld0VuY29k
aW5nLAogCQkgICAgRm9GaU91dHB1dEZ1bmMgb3V0cHV0RnVuYywgdm9pZCAqb3V0cHV0U3RyZWFt
KTsKIAogcHJpdmF0ZToKIAotICBGb0ZpVHlwZTEoY2hhciAqZmlsZUEsIGludCBsZW5BLCBHQm9v
bCBmcmVlRmlsZURhdGFBKTsKKyAgRm9GaVR5cGUxKGNvbnN0IGNoYXIgKmZpbGVBLCBpbnQgbGVu
QSwgR0Jvb2wgZnJlZUZpbGVEYXRhQSk7CiAKLSAgY2hhciAqZ2V0TmV4dExpbmUoY2hhciAqbGlu
ZSk7CisgIGNvbnN0IGNoYXIgKmdldE5leHRMaW5lKGNvbnN0IGNoYXIgKmxpbmUpOwogICB2b2lk
IHBhcnNlKCk7CiAKLSAgY2hhciAqbmFtZTsKLSAgY2hhciAqKmVuY29kaW5nOworICBjb25zdCBj
aGFyICpuYW1lOworICBjb25zdCBjaGFyICoqZW5jb2Rpbmc7CiAgIEdCb29sIHBhcnNlZDsKIH07
CiAKZGlmZiAtdXIgdGV4bGl2ZS0yMDA4MDgxNi1zb3VyY2UvbGlicy94cGRmLm9yaWcvZ29vL2dm
aWxlLmNjIHRleGxpdmUtMjAwODA4MTYtc291cmNlL2xpYnMveHBkZi9nb28vZ2ZpbGUuY2MKLS0t
IHRleGxpdmUtMjAwODA4MTYtc291cmNlL2xpYnMveHBkZi5vcmlnL2dvby9nZmlsZS5jYwkyMDA4
LTA1LTA4IDE3OjQwOjQxLjAwMDAwMDAwMCArMDQwMAorKysgdGV4bGl2ZS0yMDA4MDgxNi1zb3Vy
Y2UvbGlicy94cGRmL2dvby9nZmlsZS5jYwkyMDA4LTExLTIxIDE2OjU1OjIzLjAwMDAwMDAwMCAr
MDMwMApAQCAtODMsNyArODMsNyBAQAogCiAjZWxpZiBkZWZpbmVkKF9fRU1YX18pIHx8IGRlZmlu
ZWQoV0lOMzIpCiAgIC8vLS0tLS0tLS0tLSBPUy8yK0VNWCBhbmQgV2luMzIgLS0tLS0tLS0tLQot
ICBjaGFyICpzOworICBjb25zdCBjaGFyICpzOwogICBHU3RyaW5nICpyZXQ7CiAKICAgaWYgKChz
ID0gZ2V0ZW52KCJIT01FIikpKQpAQCAtMTAyLDcgKzEwMiw3IEBACiAKICNlbHNlCiAgIC8vLS0t
LS0tLS0tLSBVbml4IC0tLS0tLS0tLS0KLSAgY2hhciAqczsKKyAgY29uc3QgY2hhciAqczsKICAg
c3RydWN0IHBhc3N3ZCAqcHc7CiAgIEdTdHJpbmcgKnJldDsKIApAQCAtMTQwLDcgKzE0MCw3IEBA
CiAgIHJldHVybiBuZXcgR1N0cmluZygpOwogfQogCi1HU3RyaW5nICphcHBlbmRUb1BhdGgoR1N0
cmluZyAqcGF0aCwgY2hhciAqZmlsZU5hbWUpIHsKK0dTdHJpbmcgKmFwcGVuZFRvUGF0aChHU3Ry
aW5nICpwYXRoLCBjb25zdCBjaGFyICpmaWxlTmFtZSkgewogI2lmIGRlZmluZWQoVk1TKQogICAv
Ly0tLS0tLS0tLS0gVk1TIC0tLS0tLS0tLS0KICAgLy9+IHRoaXMgc2hvdWxkIGhhbmRsZSBldmVy
eXRoaW5nIG5lY2Vzc2FyeSBmb3IgZmlsZQpAQCAtMzA2LDcgKzMwNiw3IEBACiAjZW5kaWYKIH0K
IAotR1N0cmluZyAqZ3JhYlBhdGgoY2hhciAqZmlsZU5hbWUpIHsKK0dTdHJpbmcgKmdyYWJQYXRo
KGNvbnN0IGNoYXIgKmZpbGVOYW1lKSB7CiAjaWZkZWYgVk1TCiAgIC8vLS0tLS0tLS0tLSBWTVMg
LS0tLS0tLS0tLQogICBjaGFyICpwOwpAQCAtMzU1LDcgKzM1NSw3IEBACiAjZW5kaWYKIH0KIAot
R0Jvb2wgaXNBYnNvbHV0ZVBhdGgoY2hhciAqcGF0aCkgeworR0Jvb2wgaXNBYnNvbHV0ZVBhdGgo
Y29uc3QgY2hhciAqcGF0aCkgewogI2lmZGVmIFZNUwogICAvLy0tLS0tLS0tLS0gVk1TIC0tLS0t
LS0tLS0KICAgcmV0dXJuIHN0cmNocihwYXRoLCAnOicpIHx8CkBAIC00NjEsNyArNDYxLDcgQEAK
ICNlbmRpZgogfQogCi10aW1lX3QgZ2V0TW9kVGltZShjaGFyICpmaWxlTmFtZSkgewordGltZV90
IGdldE1vZFRpbWUoY29uc3QgY2hhciAqZmlsZU5hbWUpIHsKICNpZmRlZiBXSU4zMgogICAvL34g
c2hvdWxkIGltcGxlbWVudCB0aGlzLCBidXQgaXQncyAoY3VycmVudGx5KSBvbmx5IHVzZWQgaW4g
eHBkZgogICByZXR1cm4gMDsKQEAgLTQ3NiwxMCArNDc2LDEwIEBACiB9CiAKICNpZm5kZWYgUERG
X1BBUlNFUl9PTkxZCi1HQm9vbCBvcGVuVGVtcEZpbGUoR1N0cmluZyAqKm5hbWUsIEZJTEUgKipm
LCBjaGFyICptb2RlLCBjaGFyICpleHQpIHsKK0dCb29sIG9wZW5UZW1wRmlsZShHU3RyaW5nICoq
bmFtZSwgRklMRSAqKmYsIGNvbnN0IGNoYXIgKm1vZGUsIGNvbnN0IGNoYXIgKmV4dCkgewogI2lm
IGRlZmluZWQoV0lOMzIpCiAgIC8vLS0tLS0tLS0tLSBXaW4zMiAtLS0tLS0tLS0tCi0gIGNoYXIg
KnRlbXBEaXI7CisgIGNvbnN0IGNoYXIgKnRlbXBEaXI7CiAgIEdTdHJpbmcgKnMsICpzMjsKICAg
Y2hhciBidWZbMzJdOwogICBGSUxFICpmMjsKQEAgLTU4Niw3ICs1ODYsNyBAQAogfQogI2VuZGlm
CiAKLUdCb29sIGV4ZWN1dGVDb21tYW5kKGNoYXIgKmNtZCkgeworR0Jvb2wgZXhlY3V0ZUNvbW1h
bmQoY29uc3QgY2hhciAqY21kKSB7CiAjaWZkZWYgVk1TCiAgIHJldHVybiBzeXN0ZW0oY21kKSA/
IGdUcnVlIDogZ0ZhbHNlOwogI2Vsc2UKQEAgLTYyNyw3ICs2MjcsNyBAQAogLy8gR0RpciBhbmQg
R0RpckVudHJ5CiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1HRGlyRW50cnk6OkdEaXJFbnRyeShjaGFy
ICpkaXJQYXRoLCBjaGFyICpuYW1lQSwgR0Jvb2wgZG9TdGF0KSB7CitHRGlyRW50cnk6OkdEaXJF
bnRyeShjb25zdCBjaGFyICpkaXJQYXRoLCBjb25zdCBjaGFyICpuYW1lQSwgR0Jvb2wgZG9TdGF0
KSB7CiAjaWZkZWYgVk1TCiAgIGNoYXIgKnA7CiAjZWxpZiBkZWZpbmVkKFdJTjMyKQpAQCAtNjY2
LDcgKzY2Niw3IEBACiAgIGRlbGV0ZSBuYW1lOwogfQogCi1HRGlyOjpHRGlyKGNoYXIgKm5hbWUs
IEdCb29sIGRvU3RhdEEpIHsKK0dEaXI6OkdEaXIoY29uc3QgY2hhciAqbmFtZSwgR0Jvb2wgZG9T
dGF0QSkgewogICBwYXRoID0gbmV3IEdTdHJpbmcobmFtZSk7CiAgIGRvU3RhdCA9IGRvU3RhdEE7
CiAjaWYgZGVmaW5lZChXSU4zMikKZGlmZiAtdXIgdGV4bGl2ZS0yMDA4MDgxNi1zb3VyY2UvbGli
cy94cGRmLm9yaWcvZ29vL2dmaWxlLmggdGV4bGl2ZS0yMDA4MDgxNi1zb3VyY2UvbGlicy94cGRm
L2dvby9nZmlsZS5oCi0tLSB0ZXhsaXZlLTIwMDgwODE2LXNvdXJjZS9saWJzL3hwZGYub3JpZy9n
b28vZ2ZpbGUuaAkyMDA3LTA3LTEyIDAxOjEzOjU5LjAwMDAwMDAwMCArMDQwMAorKysgdGV4bGl2
ZS0yMDA4MDgxNi1zb3VyY2UvbGlicy94cGRmL2dvby9nZmlsZS5oCTIwMDgtMTEtMjEgMTY6NTQ6
MTMuMDAwMDAwMDAwICswMzAwCkBAIC02MCwxNCArNjAsMTQgQEAKIAogLy8gQXBwZW5kIGEgZmls
ZSBuYW1lIHRvIGEgcGF0aCBzdHJpbmcuICA8cGF0aD4gbWF5IGJlIGFuIGVtcHR5CiAvLyBzdHJp
bmcsIGRlbm90aW5nIHRoZSBjdXJyZW50IGRpcmVjdG9yeSkuICBSZXR1cm5zIDxwYXRoPi4KLWV4
dGVybiBHU3RyaW5nICphcHBlbmRUb1BhdGgoR1N0cmluZyAqcGF0aCwgY2hhciAqZmlsZU5hbWUp
OworZXh0ZXJuIEdTdHJpbmcgKmFwcGVuZFRvUGF0aChHU3RyaW5nICpwYXRoLCBjb25zdCBjaGFy
ICpmaWxlTmFtZSk7CiAKIC8vIEdyYWIgdGhlIHBhdGggZnJvbSB0aGUgZnJvbnQgb2YgdGhlIGZp
bGUgbmFtZS4gIElmIHRoZXJlIGlzIG5vCiAvLyBkaXJlY3RvcnkgY29tcG9uZW50IGluIDxmaWxl
TmFtZT4sIHJldHVybnMgYW4gZW1wdHkgc3RyaW5nLgotZXh0ZXJuIEdTdHJpbmcgKmdyYWJQYXRo
KGNoYXIgKmZpbGVOYW1lKTsKK2V4dGVybiBHU3RyaW5nICpncmFiUGF0aChjb25zdCBjaGFyICpm
aWxlTmFtZSk7CiAKIC8vIElzIHRoaXMgYW4gYWJzb2x1dGUgcGF0aCBvciBmaWxlIG5hbWU/Ci1l
eHRlcm4gR0Jvb2wgaXNBYnNvbHV0ZVBhdGgoY2hhciAqcGF0aCk7CitleHRlcm4gR0Jvb2wgaXNB
YnNvbHV0ZVBhdGgoY29uc3QgY2hhciAqcGF0aCk7CiAKIC8vIE1ha2UgdGhpcyBwYXRoIGFic29s
dXRlIGJ5IHByZXBlbmRpbmcgY3VycmVudCBkaXJlY3RvcnkgKGlmIHBhdGggaXMKIC8vIHJlbGF0
aXZlKSBvciBwcmVwZW5kaW5nIHVzZXIncyBkaXJlY3RvcnkgKGlmIHBhdGggc3RhcnRzIHdpdGgg
J34nKS4KQEAgLTc1LDcgKzc1LDcgQEAKIAogLy8gR2V0IHRoZSBtb2RpZmljYXRpb24gdGltZSBm
b3IgPGZpbGVOYW1lPi4gIFJldHVybnMgMCBpZiB0aGVyZSBpcyBhbgogLy8gZXJyb3IuCi1leHRl
cm4gdGltZV90IGdldE1vZFRpbWUoY2hhciAqZmlsZU5hbWUpOworZXh0ZXJuIHRpbWVfdCBnZXRN
b2RUaW1lKGNvbnN0IGNoYXIgKmZpbGVOYW1lKTsKIAogLy8gQ3JlYXRlIGEgdGVtcG9yYXJ5IGZp
bGUgYW5kIG9wZW4gaXQgZm9yIHdyaXRpbmcuICBJZiA8ZXh0PiBpcyBub3QKIC8vIE5VTEwsIGl0
IHdpbGwgYmUgdXNlZCBhcyB0aGUgZmlsZSBuYW1lIGV4dGVuc2lvbi4gIFJldHVybnMgYm90aCB0
aGUKQEAgLTgzLDEwICs4MywxMCBAQAogLy8gc2hvdWxkIGJlIGRvbmUgdG8gdGhlIHJldHVybmVk
IGZpbGUgcG9pbnRlcjsgdGhlIGZpbGUgbWF5IGJlCiAvLyByZW9wZW5lZCBsYXRlciBmb3IgcmVh
ZGluZywgYnV0IG5vdCBmb3Igd3JpdGluZy4gIFRoZSA8bW9kZT4gc3RyaW5nCiAvLyBzaG91bGQg
YmUgInciIG9yICJ3YiIuICBSZXR1cm5zIHRydWUgb24gc3VjY2Vzcy4KLWV4dGVybiBHQm9vbCBv
cGVuVGVtcEZpbGUoR1N0cmluZyAqKm5hbWUsIEZJTEUgKipmLCBjaGFyICptb2RlLCBjaGFyICpl
eHQpOworZXh0ZXJuIEdCb29sIG9wZW5UZW1wRmlsZShHU3RyaW5nICoqbmFtZSwgRklMRSAqKmYs
IGNvbnN0IGNoYXIgKm1vZGUsIGNvbnN0IGNoYXIgKmV4dCk7CiAKIC8vIEV4ZWN1dGUgPGNvbW1h
bmQ+LiAgUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3MuCi1leHRlcm4gR0Jvb2wgZXhlY3V0ZUNvbW1h
bmQoY2hhciAqY21kKTsKK2V4dGVybiBHQm9vbCBleGVjdXRlQ29tbWFuZChjb25zdCBjaGFyICpj
bWQpOwogCiAvLyBKdXN0IGxpa2UgZmdldHMsIGJ1dCBoYW5kbGVzIFVuaXgsIE1hYywgYW5kL29y
IERPUyBlbmQtb2YtbGluZQogLy8gY29udmVudGlvbnMuCkBAIC05OSw3ICs5OSw3IEBACiBjbGFz
cyBHRGlyRW50cnkgewogcHVibGljOgogCi0gIEdEaXJFbnRyeShjaGFyICpkaXJQYXRoLCBjaGFy
ICpuYW1lQSwgR0Jvb2wgZG9TdGF0KTsKKyAgR0RpckVudHJ5KGNvbnN0IGNoYXIgKmRpclBhdGgs
IGNvbnN0IGNoYXIgKm5hbWVBLCBHQm9vbCBkb1N0YXQpOwogICB+R0RpckVudHJ5KCk7CiAgIEdT
dHJpbmcgKmdldE5hbWUoKSB7IHJldHVybiBuYW1lOyB9CiAgIEdCb29sIGlzRGlyKCkgeyByZXR1
cm4gZGlyOyB9CkBAIC0xMTMsNyArMTEzLDcgQEAKIGNsYXNzIEdEaXIgewogcHVibGljOgogCi0g
IEdEaXIoY2hhciAqbmFtZSwgR0Jvb2wgZG9TdGF0QSA9IGdUcnVlKTsKKyAgR0Rpcihjb25zdCBj
aGFyICpuYW1lLCBHQm9vbCBkb1N0YXRBID0gZ1RydWUpOwogICB+R0RpcigpOwogICBHRGlyRW50
cnkgKmdldE5leHRFbnRyeSgpOwogICB2b2lkIHJld2luZCgpOwpkaWZmIC11ciB0ZXhsaXZlLTIw
MDgwODE2LXNvdXJjZS9saWJzL3hwZGYub3JpZy9nb28vR0hhc2guY2MgdGV4bGl2ZS0yMDA4MDgx
Ni1zb3VyY2UvbGlicy94cGRmL2dvby9HSGFzaC5jYwotLS0gdGV4bGl2ZS0yMDA4MDgxNi1zb3Vy
Y2UvbGlicy94cGRmLm9yaWcvZ29vL0dIYXNoLmNjCTIwMDYtMDEtMTYgMDM6MDk6MjYuMDAwMDAw
MDAwICswMzAwCisrKyB0ZXhsaXZlLTIwMDgwODE2LXNvdXJjZS9saWJzL3hwZGYvZ29vL0dIYXNo
LmNjCTIwMDgtMTEtMjEgMTg6MDI6MjQuMDAwMDAwMDAwICswMzAwCkBAIC0xNDUsNyArMTQ1LDcg
QEAKICAgcmV0dXJuIHAtPnZhbC5pOwogfQogCi12b2lkICpHSGFzaDo6bG9va3VwKGNoYXIgKmtl
eSkgewordm9pZCAqR0hhc2g6Omxvb2t1cChjb25zdCBjaGFyICprZXkpIHsKICAgR0hhc2hCdWNr
ZXQgKnA7CiAgIGludCBoOwogCkBAIC0xNTUsNyArMTU1LDcgQEAKICAgcmV0dXJuIHAtPnZhbC5w
OwogfQogCi1pbnQgR0hhc2g6Omxvb2t1cEludChjaGFyICprZXkpIHsKK2ludCBHSGFzaDo6bG9v
a3VwSW50KGNvbnN0IGNoYXIgKmtleSkgewogICBHSGFzaEJ1Y2tldCAqcDsKICAgaW50IGg7CiAK
QEAgLTIxMSw3ICsyMTEsNyBAQAogICByZXR1cm4gdmFsOwogfQogCi12b2lkICpHSGFzaDo6cmVt
b3ZlKGNoYXIgKmtleSkgewordm9pZCAqR0hhc2g6OnJlbW92ZShjb25zdCBjaGFyICprZXkpIHsK
ICAgR0hhc2hCdWNrZXQgKnA7CiAgIEdIYXNoQnVja2V0ICoqcTsKICAgdm9pZCAqdmFsOwpAQCAt
MjM0LDcgKzIzNCw3IEBACiAgIHJldHVybiB2YWw7CiB9CiAKLWludCBHSGFzaDo6cmVtb3ZlSW50
KGNoYXIgKmtleSkgeworaW50IEdIYXNoOjpyZW1vdmVJbnQoY29uc3QgY2hhciAqa2V5KSB7CiAg
IEdIYXNoQnVja2V0ICpwOwogICBHSGFzaEJ1Y2tldCAqKnE7CiAgIGludCB2YWw7CkBAIC0zNDQs
NyArMzQ0LDcgQEAKICAgcmV0dXJuIE5VTEw7CiB9CiAKLUdIYXNoQnVja2V0ICpHSGFzaDo6Zmlu
ZChjaGFyICprZXksIGludCAqaCkgeworR0hhc2hCdWNrZXQgKkdIYXNoOjpmaW5kKGNvbnN0IGNo
YXIgKmtleSwgaW50ICpoKSB7CiAgIEdIYXNoQnVja2V0ICpwOwogCiAgICpoID0gaGFzaChrZXkp
OwpAQCAtMzY4LDggKzM2OCw4IEBACiAgIHJldHVybiAoaW50KShoICUgc2l6ZSk7CiB9CiAKLWlu
dCBHSGFzaDo6aGFzaChjaGFyICprZXkpIHsKLSAgY2hhciAqcDsKK2ludCBHSGFzaDo6aGFzaChj
b25zdCBjaGFyICprZXkpIHsKKyAgY29uc3QgY2hhciAqcDsKICAgdW5zaWduZWQgaW50IGg7CiAK
ICAgaCA9IDA7CmRpZmYgLXVyIHRleGxpdmUtMjAwODA4MTYtc291cmNlL2xpYnMveHBkZi5vcmln
L2dvby9HSGFzaC5oIHRleGxpdmUtMjAwODA4MTYtc291cmNlL2xpYnMveHBkZi9nb28vR0hhc2gu
aAotLS0gdGV4bGl2ZS0yMDA4MDgxNi1zb3VyY2UvbGlicy94cGRmLm9yaWcvZ29vL0dIYXNoLmgJ
MjAwNi0wMS0xNiAwMzowOToyNi4wMDAwMDAwMDAgKzAzMDAKKysrIHRleGxpdmUtMjAwODA4MTYt
c291cmNlL2xpYnMveHBkZi9nb28vR0hhc2guaAkyMDA4LTExLTIxIDE4OjAxOjMxLjAwMDAwMDAw
MCArMDMwMApAQCAtMzQsMTIgKzM0LDEyIEBACiAgIHZvaWQgcmVwbGFjZShHU3RyaW5nICprZXks
IGludCB2YWwpOwogICB2b2lkICpsb29rdXAoR1N0cmluZyAqa2V5KTsKICAgaW50IGxvb2t1cElu
dChHU3RyaW5nICprZXkpOwotICB2b2lkICpsb29rdXAoY2hhciAqa2V5KTsKLSAgaW50IGxvb2t1
cEludChjaGFyICprZXkpOworICB2b2lkICpsb29rdXAoY29uc3QgY2hhciAqa2V5KTsKKyAgaW50
IGxvb2t1cEludChjb25zdCBjaGFyICprZXkpOwogICB2b2lkICpyZW1vdmUoR1N0cmluZyAqa2V5
KTsKICAgaW50IHJlbW92ZUludChHU3RyaW5nICprZXkpOwotICB2b2lkICpyZW1vdmUoY2hhciAq
a2V5KTsKLSAgaW50IHJlbW92ZUludChjaGFyICprZXkpOworICB2b2lkICpyZW1vdmUoY29uc3Qg
Y2hhciAqa2V5KTsKKyAgaW50IHJlbW92ZUludChjb25zdCBjaGFyICprZXkpOwogICBpbnQgZ2V0
TGVuZ3RoKCkgeyByZXR1cm4gbGVuOyB9CiAgIHZvaWQgc3RhcnRJdGVyKEdIYXNoSXRlciAqKml0
ZXIpOwogICBHQm9vbCBnZXROZXh0KEdIYXNoSXRlciAqKml0ZXIsIEdTdHJpbmcgKiprZXksIHZv
aWQgKip2YWwpOwpAQCAtNTAsOSArNTAsOSBAQAogCiAgIHZvaWQgZXhwYW5kKCk7CiAgIEdIYXNo
QnVja2V0ICpmaW5kKEdTdHJpbmcgKmtleSwgaW50ICpoKTsKLSAgR0hhc2hCdWNrZXQgKmZpbmQo
Y2hhciAqa2V5LCBpbnQgKmgpOworICBHSGFzaEJ1Y2tldCAqZmluZChjb25zdCBjaGFyICprZXks
IGludCAqaCk7CiAgIGludCBoYXNoKEdTdHJpbmcgKmtleSk7Ci0gIGludCBoYXNoKGNoYXIgKmtl
eSk7CisgIGludCBoYXNoKGNvbnN0IGNoYXIgKmtleSk7CiAKICAgR0Jvb2wgZGVsZXRlS2V5czsJ
CS8vIHNldCBpZiBrZXkgc3RyaW5ncyBzaG91bGQgYmUgZGVsZXRlZAogICBpbnQgc2l6ZTsJCQkv
LyBudW1iZXIgb2YgYnVja2V0cwpkaWZmIC11ciB0ZXhsaXZlLTIwMDgwODE2LXNvdXJjZS9saWJz
L3hwZGYub3JpZy9nb28vZ21lbS5jYyB0ZXhsaXZlLTIwMDgwODE2LXNvdXJjZS9saWJzL3hwZGYv
Z29vL2dtZW0uY2MKLS0tIHRleGxpdmUtMjAwODA4MTYtc291cmNlL2xpYnMveHBkZi5vcmlnL2dv
by9nbWVtLmNjCTIwMDctMDctMTIgMDE6MTM6NTkuMDAwMDAwMDAwICswNDAwCisrKyB0ZXhsaXZl
LTIwMDgwODE2LXNvdXJjZS9saWJzL3hwZGYvZ29vL2dtZW0uY2MJMjAwOC0xMS0yMSAxNjozNDo1
NC4wMDAwMDAwMDAgKzAzMDAKQEAgLTI1NSw3ICsyNTUsNyBAQAogfQogI2VuZGlmCiAKLWNoYXIg
KmNvcHlTdHJpbmcoY2hhciAqcykgeworY2hhciAqY29weVN0cmluZyhjb25zdCBjaGFyICpzKSB7
CiAgIGNoYXIgKnMxOwogCiAgIHMxID0gKGNoYXIgKilnbWFsbG9jKHN0cmxlbihzKSArIDEpOwpk
aWZmIC11ciB0ZXhsaXZlLTIwMDgwODE2LXNvdXJjZS9saWJzL3hwZGYub3JpZy9nb28vZ21lbS5o
IHRleGxpdmUtMjAwODA4MTYtc291cmNlL2xpYnMveHBkZi9nb28vZ21lbS5oCi0tLSB0ZXhsaXZl
LTIwMDgwODE2LXNvdXJjZS9saWJzL3hwZGYub3JpZy9nb28vZ21lbS5oCTIwMDctMDctMTIgMDE6
MTM6NTkuMDAwMDAwMDAwICswNDAwCisrKyB0ZXhsaXZlLTIwMDgwODE2LXNvdXJjZS9saWJzL3hw
ZGYvZ29vL2dtZW0uaAkyMDA4LTExLTIxIDE2OjM0OjQ5LjAwMDAwMDAwMCArMDMwMApAQCAtNzAs
NyArNzAsNyBAQAogLyoKICAqIEFsbG9jYXRlIG1lbW9yeSBhbmQgY29weSBhIHN0cmluZyBpbnRv
IGl0LgogICovCi1leHRlcm4gY2hhciAqY29weVN0cmluZyhjaGFyICpzKTsKK2V4dGVybiBjaGFy
ICpjb3B5U3RyaW5nKGNvbnN0IGNoYXIgKnMpOwogCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KZGlm
ZiAtdXIgdGV4bGl2ZS0yMDA4MDgxNi1zb3VyY2UvbGlicy94cGRmLm9yaWcvZ29vL0dTdHJpbmcu
Y2MgdGV4bGl2ZS0yMDA4MDgxNi1zb3VyY2UvbGlicy94cGRmL2dvby9HU3RyaW5nLmNjCi0tLSB0
ZXhsaXZlLTIwMDgwODE2LXNvdXJjZS9saWJzL3hwZGYub3JpZy9nb28vR1N0cmluZy5jYwkyMDA4
LTA1LTA4IDE3OjQwOjQxLjAwMDAwMDAwMCArMDQwMAorKysgdGV4bGl2ZS0yMDA4MDgxNi1zb3Vy
Y2UvbGlicy94cGRmL2dvby9HU3RyaW5nLmNjCTIwMDgtMTEtMjEgMTc6NTY6MTUuMDAwMDAwMDAw
ICswMzAwCkBAIC0xMDEsNyArMTAxLDcgQEAKICAgZm10U3BhY2UKIH07CiAKLXN0YXRpYyBjaGFy
ICpmb3JtYXRTdHJpbmdzW10gPSB7CitzdGF0aWMgY29uc3QgY2hhciAqZm9ybWF0U3RyaW5nc1td
ID0gewogICAiZCIsICJ4IiwgIm8iLCAiYiIsICJ1ZCIsICJ1eCIsICJ1byIsICJ1YiIsCiAgICJs
ZCIsICJseCIsICJsbyIsICJsYiIsICJ1bGQiLCAidWx4IiwgInVsbyIsICJ1bGIiLAogICAiZiIs
ICJnIiwKQEAgLTE5Miw3ICsxOTIsNyBAQAogICByZXR1cm4gbmV3IEdTdHJpbmcocCwgbGVuKTsK
IH0KIAotR1N0cmluZyAqR1N0cmluZzo6Zm9ybWF0KGNoYXIgKmZtdCwgLi4uKSB7CitHU3RyaW5n
ICpHU3RyaW5nOjpmb3JtYXQoY29uc3QgY2hhciAqZm10LCAuLi4pIHsKICAgdmFfbGlzdCBhcmdM
aXN0OwogICBHU3RyaW5nICpzOwogCkBAIC0yMDMsNyArMjAzLDcgQEAKICAgcmV0dXJuIHM7CiB9
CiAKLUdTdHJpbmcgKkdTdHJpbmc6OmZvcm1hdHYoY2hhciAqZm10LCB2YV9saXN0IGFyZ0xpc3Qp
IHsKK0dTdHJpbmcgKkdTdHJpbmc6OmZvcm1hdHYoY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFy
Z0xpc3QpIHsKICAgR1N0cmluZyAqczsKIAogICBzID0gbmV3IEdTdHJpbmcoKTsKQEAgLTI1NCw3
ICsyNTQsNyBAQAogICByZXR1cm4gdGhpczsKIH0KIAotR1N0cmluZyAqR1N0cmluZzo6YXBwZW5k
ZihjaGFyICpmbXQsIC4uLikgeworR1N0cmluZyAqR1N0cmluZzo6YXBwZW5kZihjb25zdCBjaGFy
ICpmbXQsIC4uLikgewogICB2YV9saXN0IGFyZ0xpc3Q7CiAKICAgdmFfc3RhcnQoYXJnTGlzdCwg
Zm10KTsKQEAgLTI2Myw3ICsyNjMsNyBAQAogICByZXR1cm4gdGhpczsKIH0KIAotR1N0cmluZyAq
R1N0cmluZzo6YXBwZW5kZnYoY2hhciAqZm10LCB2YV9saXN0IGFyZ0xpc3QpIHsKK0dTdHJpbmcg
KkdTdHJpbmc6OmFwcGVuZGZ2KGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcmdMaXN0KSB7CiAg
IEdTdHJpbmdGb3JtYXRBcmcgKmFyZ3M7CiAgIGludCBhcmdzTGVuLCBhcmdzU2l6ZTsKICAgR1N0
cmluZ0Zvcm1hdEFyZyBhcmc7CkBAIC0yNzIsNyArMjcyLDggQEAKICAgR1N0cmluZ0Zvcm1hdFR5
cGUgZnQ7CiAgIGNoYXIgYnVmWzY1XTsKICAgaW50IGxlbiwgaTsKLSAgY2hhciAqcDAsICpwMSwg
KnN0cjsKKyAgY29uc3QgY2hhciAqcDAsICpwMTsKKyAgY2hhciAqc3RyOwogCiAgIGFyZ3NMZW4g
PSAwOwogICBhcmdzU2l6ZSA9IDg7CmRpZmYgLXVyIHRleGxpdmUtMjAwODA4MTYtc291cmNlL2xp
YnMveHBkZi5vcmlnL2dvby9HU3RyaW5nLmggdGV4bGl2ZS0yMDA4MDgxNi1zb3VyY2UvbGlicy94
cGRmL2dvby9HU3RyaW5nLmgKLS0tIHRleGxpdmUtMjAwODA4MTYtc291cmNlL2xpYnMveHBkZi5v
cmlnL2dvby9HU3RyaW5nLmgJMjAwNy0wNy0xMiAwMToxMzo1OS4wMDAwMDAwMDAgKzA0MDAKKysr
IHRleGxpdmUtMjAwODA4MTYtc291cmNlL2xpYnMveHBkZi9nb28vR1N0cmluZy5oCTIwMDgtMTEt
MjEgMTc6NTQ6MTcuMDAwMDAwMDAwICswMzAwCkBAIC02Nyw4ICs2Nyw4IEBACiAgIC8vICAgICB0
IC0tIEdTdHJpbmcgKgogICAvLyAgICAgdyAtLSBibGFuayBzcGFjZTsgYXJnIGRldGVybWluZXMg
d2lkdGgKICAgLy8gVG8gZ2V0IGxpdGVyYWwgY3VybHkgYnJhY2VzLCB1c2Uge3sgb3IgfX0uCi0g
IHN0YXRpYyBHU3RyaW5nICpmb3JtYXQoY2hhciAqZm10LCAuLi4pOwotICBzdGF0aWMgR1N0cmlu
ZyAqZm9ybWF0dihjaGFyICpmbXQsIHZhX2xpc3QgYXJnTGlzdCk7CisgIHN0YXRpYyBHU3RyaW5n
ICpmb3JtYXQoY29uc3QgY2hhciAqZm10LCAuLi4pOworICBzdGF0aWMgR1N0cmluZyAqZm9ybWF0
dihjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXJnTGlzdCk7CiAKICAgLy8gRGVzdHJ1Y3Rvci4K
ICAgfkdTdHJpbmcoKTsKQEAgLTk1LDggKzk1LDggQEAKICAgR1N0cmluZyAqYXBwZW5kKGNvbnN0
IGNoYXIgKnN0ciwgaW50IGxlbmd0aEEpOwogCiAgIC8vIEFwcGVuZCBhIGZvcm1hdHRlZCBzdHJp
bmcuCi0gIEdTdHJpbmcgKmFwcGVuZGYoY2hhciAqZm10LCAuLi4pOwotICBHU3RyaW5nICphcHBl
bmRmdihjaGFyICpmbXQsIHZhX2xpc3QgYXJnTGlzdCk7CisgIEdTdHJpbmcgKmFwcGVuZGYoY29u
c3QgY2hhciAqZm10LCAuLi4pOworICBHU3RyaW5nICphcHBlbmRmdihjb25zdCBjaGFyICpmbXQs
IHZhX2xpc3QgYXJnTGlzdCk7CiAKICAgLy8gSW5zZXJ0IGEgY2hhcmFjdGVyIG9yIHN0cmluZy4K
ICAgR1N0cmluZyAqaW5zZXJ0KGludCBpLCBjaGFyIGMpOwpkaWZmIC11ciB0ZXhsaXZlLTIwMDgw
ODE2LXNvdXJjZS9saWJzL3hwZGYub3JpZy94cGRmL0J1aWx0aW5Gb250LmNjIHRleGxpdmUtMjAw
ODA4MTYtc291cmNlL2xpYnMveHBkZi94cGRmL0J1aWx0aW5Gb250LmNjCi0tLSB0ZXhsaXZlLTIw
MDgwODE2LXNvdXJjZS9saWJzL3hwZGYub3JpZy94cGRmL0J1aWx0aW5Gb250LmNjCTIwMDYtMDEt
MTYgMDM6MDk6MjYuMDAwMDAwMDAwICswMzAwCisrKyB0ZXhsaXZlLTIwMDgwODE2LXNvdXJjZS9s
aWJzL3hwZGYveHBkZi9CdWlsdGluRm9udC5jYwkyMDA4LTExLTIxIDEzOjU2OjQ4LjAwMDAwMDAw
MCArMDMwMApAQCAtMzksNyArMzksNyBAQAogICBnZnJlZSh0YWIpOwogfQogCi1HQm9vbCBCdWls
dGluRm9udFdpZHRoczo6Z2V0V2lkdGgoY2hhciAqbmFtZSwgR3VzaG9ydCAqd2lkdGgpIHsKK0dC
b29sIEJ1aWx0aW5Gb250V2lkdGhzOjpnZXRXaWR0aChjb25zdCBjaGFyICpuYW1lLCBHdXNob3J0
ICp3aWR0aCkgewogICBpbnQgaDsKICAgQnVpbHRpbkZvbnRXaWR0aCAqcDsKIApAQCAtNTMsOCAr
NTMsOCBAQAogICByZXR1cm4gZ0ZhbHNlOwogfQogCi1pbnQgQnVpbHRpbkZvbnRXaWR0aHM6Omhh
c2goY2hhciAqbmFtZSkgewotICBjaGFyICpwOworaW50IEJ1aWx0aW5Gb250V2lkdGhzOjpoYXNo
KGNvbnN0IGNoYXIgKm5hbWUpIHsKKyAgY29uc3QgY2hhciAqcDsKICAgdW5zaWduZWQgaW50IGg7
CiAKICAgaCA9IDA7CmRpZmYgLXVyIHRleGxpdmUtMjAwODA4MTYtc291cmNlL2xpYnMveHBkZi5v
cmlnL3hwZGYvQnVpbHRpbkZvbnQuaCB0ZXhsaXZlLTIwMDgwODE2LXNvdXJjZS9saWJzL3hwZGYv
eHBkZi9CdWlsdGluRm9udC5oCi0tLSB0ZXhsaXZlLTIwMDgwODE2LXNvdXJjZS9saWJzL3hwZGYu
b3JpZy94cGRmL0J1aWx0aW5Gb250LmgJMjAwNi0wMS0xNiAwMzowOToyNi4wMDAwMDAwMDAgKzAz
MDAKKysrIHRleGxpdmUtMjAwODA4MTYtc291cmNlL2xpYnMveHBkZi94cGRmL0J1aWx0aW5Gb250
LmgJMjAwOC0xMS0yMSAxNzoxNjowMC4wMDAwMDAwMDAgKzAzMDAKQEAgLTIzLDggKzIzLDggQEAK
IC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCiAKIHN0cnVjdCBCdWlsdGluRm9udCB7Ci0gIGNoYXIgKm5hbWU7
Ci0gIGNoYXIgKipkZWZhdWx0QmFzZUVuYzsKKyAgY29uc3QgY2hhciAqbmFtZTsKKyAgY29uc3Qg
Y2hhciAqKmRlZmF1bHRCYXNlRW5jOwogICBzaG9ydCBhc2NlbnQ7CiAgIHNob3J0IGRlc2NlbnQ7
CiAgIHNob3J0IGJib3hbNF07CkBAIC0zNCw3ICszNCw3IEBACiAvLy0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQog
CiBzdHJ1Y3QgQnVpbHRpbkZvbnRXaWR0aCB7Ci0gIGNoYXIgKm5hbWU7CisgIGNvbnN0IGNoYXIg
Km5hbWU7CiAgIEd1c2hvcnQgd2lkdGg7CiAgIEJ1aWx0aW5Gb250V2lkdGggKm5leHQ7CiB9OwpA
QCAtNDQsMTEgKzQ0LDExIEBACiAKICAgQnVpbHRpbkZvbnRXaWR0aHMoQnVpbHRpbkZvbnRXaWR0
aCAqd2lkdGhzLCBpbnQgc2l6ZUEpOwogICB+QnVpbHRpbkZvbnRXaWR0aHMoKTsKLSAgR0Jvb2wg
Z2V0V2lkdGgoY2hhciAqbmFtZSwgR3VzaG9ydCAqd2lkdGgpOworICBHQm9vbCBnZXRXaWR0aChj
b25zdCBjaGFyICpuYW1lLCBHdXNob3J0ICp3aWR0aCk7CiAKIHByaXZhdGU6CiAKLSAgaW50IGhh
c2goY2hhciAqbmFtZSk7CisgIGludCBoYXNoKGNvbnN0IGNoYXIgKm5hbWUpOwogCiAgIEJ1aWx0
aW5Gb250V2lkdGggKip0YWI7CiAgIGludCBzaXplOwpkaWZmIC11ciB0ZXhsaXZlLTIwMDgwODE2
LXNvdXJjZS9saWJzL3hwZGYub3JpZy94cGRmL0NoYXJDb2RlVG9Vbmljb2RlLmNjIHRleGxpdmUt
MjAwODA4MTYtc291cmNlL2xpYnMveHBkZi94cGRmL0NoYXJDb2RlVG9Vbmljb2RlLmNjCi0tLSB0
ZXhsaXZlLTIwMDgwODE2LXNvdXJjZS9saWJzL3hwZGYub3JpZy94cGRmL0NoYXJDb2RlVG9Vbmlj
b2RlLmNjCTIwMDYtMDEtMTYgMDM6MDk6MjYuMDAwMDAwMDAwICswMzAwCisrKyB0ZXhsaXZlLTIw
MDgwODE2LXNvdXJjZS9saWJzL3hwZGYveHBkZi9DaGFyQ29kZVRvVW5pY29kZS5jYwkyMDA4LTEx
LTIxIDE2OjUxOjI5LjAwMDAwMDAwMCArMDMwMApAQCAtMTg5LDcgKzE4OSw3IEBACiAKIENoYXJD
b2RlVG9Vbmljb2RlICpDaGFyQ29kZVRvVW5pY29kZTo6cGFyc2VDTWFwKEdTdHJpbmcgKmJ1Ziwg
aW50IG5CaXRzKSB7CiAgIENoYXJDb2RlVG9Vbmljb2RlICpjdHU7Ci0gIGNoYXIgKnA7CisgIGNv
bnN0IGNoYXIgKnA7CiAKICAgY3R1ID0gbmV3IENoYXJDb2RlVG9Vbmljb2RlKE5VTEwpOwogICBw
ID0gYnVmLT5nZXRDU3RyaW5nKCk7CkBAIC0xOTgsNyArMTk4LDcgQEAKIH0KIAogdm9pZCBDaGFy
Q29kZVRvVW5pY29kZTo6bWVyZ2VDTWFwKEdTdHJpbmcgKmJ1ZiwgaW50IG5CaXRzKSB7Ci0gIGNo
YXIgKnA7CisgIGNvbnN0IGNoYXIgKnA7CiAKICAgcCA9IGJ1Zi0+Z2V0Q1N0cmluZygpOwogICBw
YXJzZUNNYXAxKCZnZXRDaGFyRnJvbVN0cmluZywgJnAsIG5CaXRzKTsKZGlmZiAtdXIgdGV4bGl2
ZS0yMDA4MDgxNi1zb3VyY2UvbGlicy94cGRmLm9yaWcveHBkZi9DTWFwLmNjIHRleGxpdmUtMjAw
ODA4MTYtc291cmNlL2xpYnMveHBkZi94cGRmL0NNYXAuY2MKLS0tIHRleGxpdmUtMjAwODA4MTYt
c291cmNlL2xpYnMveHBkZi5vcmlnL3hwZGYvQ01hcC5jYwkyMDA2LTAxLTE2IDAzOjA5OjI2LjAw
MDAwMDAwMCArMDMwMAorKysgdGV4bGl2ZS0yMDA4MDgxNi1zb3VyY2UvbGlicy94cGRmL3hwZGYv
Q01hcC5jYwkyMDA4LTExLTIxIDE3OjQyOjM0LjAwMDAwMDAwMCArMDMwMApAQCAtMTg0LDcgKzE4
NCw3IEBACiAjZW5kaWYKIH0KIAotdm9pZCBDTWFwOjp1c2VDTWFwKENNYXBDYWNoZSAqY2FjaGUs
IGNoYXIgKnVzZU5hbWUpIHsKK3ZvaWQgQ01hcDo6dXNlQ01hcChDTWFwQ2FjaGUgKmNhY2hlLCBj
b25zdCBjaGFyICp1c2VOYW1lKSB7CiAgIEdTdHJpbmcgKnVzZU5hbWVTdHI7CiAgIENNYXAgKnN1
YkNNYXA7CiAKQEAgLTMyNyw3ICszMjcsNyBAQAogICByZXR1cm4gIWNvbGxlY3Rpb24tPmNtcChj
b2xsZWN0aW9uQSkgJiYgIWNNYXBOYW1lLT5jbXAoY01hcE5hbWVBKTsKIH0KIAotQ0lEIENNYXA6
OmdldENJRChjaGFyICpzLCBpbnQgbGVuLCBpbnQgKm5Vc2VkKSB7CitDSUQgQ01hcDo6Z2V0Q0lE
KGNvbnN0IGNoYXIgKnMsIGludCBsZW4sIGludCAqblVzZWQpIHsKICAgQ01hcFZlY3RvckVudHJ5
ICp2ZWM7CiAgIGludCBuLCBpOwogCmRpZmYgLXVyIHRleGxpdmUtMjAwODA4MTYtc291cmNlL2xp
YnMveHBkZi5vcmlnL3hwZGYvQ01hcC5oIHRleGxpdmUtMjAwODA4MTYtc291cmNlL2xpYnMveHBk
Zi94cGRmL0NNYXAuaAotLS0gdGV4bGl2ZS0yMDA4MDgxNi1zb3VyY2UvbGlicy94cGRmLm9yaWcv
eHBkZi9DTWFwLmgJMjAwNi0wMS0xNiAwMzowOToyNi4wMDAwMDAwMDAgKzAzMDAKKysrIHRleGxp
dmUtMjAwODA4MTYtc291cmNlL2xpYnMveHBkZi94cGRmL0NNYXAuaAkyMDA4LTExLTIxIDE3OjQy
OjQ0LjAwMDAwMDAwMCArMDMwMApAQCAtNTEsNyArNTEsNyBAQAogICAvLyBSZXR1cm4gdGhlIENJ
RCBjb3JyZXNwb25kaW5nIHRvIHRoZSBjaGFyYWN0ZXIgY29kZSBzdGFydGluZyBhdAogICAvLyA8
cz4sIHdoaWNoIGNvbnRhaW5zIDxsZW4+IGJ5dGVzLiAgU2V0cyAqPG5Vc2VkPiB0byB0aGUgbnVt
YmVyIG9mCiAgIC8vIGJ5dGVzIHVzZWQgYnkgdGhlIGNoYXIgY29kZS4KLSAgQ0lEIGdldENJRChj
aGFyICpzLCBpbnQgbGVuLCBpbnQgKm5Vc2VkKTsKKyAgQ0lEIGdldENJRChjb25zdCBjaGFyICpz
LCBpbnQgbGVuLCBpbnQgKm5Vc2VkKTsKIAogICAvLyBSZXR1cm4gdGhlIHdyaXRpbmcgbW9kZSAo
MD1ob3Jpem9udGFsLCAxPXZlcnRpY2FsKS4KICAgaW50IGdldFdNb2RlKCkgeyByZXR1cm4gd01v
ZGU7IH0KQEAgLTYwLDcgKzYwLDcgQEAKIAogICBDTWFwKEdTdHJpbmcgKmNvbGxlY3Rpb25BLCBH
U3RyaW5nICpjTWFwTmFtZUEpOwogICBDTWFwKEdTdHJpbmcgKmNvbGxlY3Rpb25BLCBHU3RyaW5n
ICpjTWFwTmFtZUEsIGludCB3TW9kZUEpOwotICB2b2lkIHVzZUNNYXAoQ01hcENhY2hlICpjYWNo
ZSwgY2hhciAqdXNlTmFtZSk7CisgIHZvaWQgdXNlQ01hcChDTWFwQ2FjaGUgKmNhY2hlLCBjb25z
dCBjaGFyICp1c2VOYW1lKTsKICAgdm9pZCBjb3B5VmVjdG9yKENNYXBWZWN0b3JFbnRyeSAqZGVz
dCwgQ01hcFZlY3RvckVudHJ5ICpzcmMpOwogICB2b2lkIGFkZENvZGVTcGFjZShDTWFwVmVjdG9y
RW50cnkgKnZlYywgR3VpbnQgc3RhcnQsIEd1aW50IGVuZCwKIAkJICAgIEd1aW50IG5CeXRlcyk7
CmRpZmYgLXVyIHRleGxpdmUtMjAwODA4MTYtc291cmNlL2xpYnMveHBkZi5vcmlnL3hwZGYvRGlj
dC5jYyB0ZXhsaXZlLTIwMDgwODE2LXNvdXJjZS9saWJzL3hwZGYveHBkZi9EaWN0LmNjCi0tLSB0
ZXhsaXZlLTIwMDgwODE2LXNvdXJjZS9saWJzL3hwZGYub3JpZy94cGRmL0RpY3QuY2MJMjAwNi0w
MS0xNiAwMzowOToyNi4wMDAwMDAwMDAgKzAzMDAKKysrIHRleGxpdmUtMjAwODA4MTYtc291cmNl
L2xpYnMveHBkZi94cGRmL0RpY3QuY2MJMjAwOC0xMS0yMSAxNjo1MTowMi4wMDAwMDAwMDAgKzAz
MDAKQEAgLTM0LDEzICszNCwxMyBAQAogICBpbnQgaTsKIAogICBmb3IgKGkgPSAwOyBpIDwgbGVu
Z3RoOyArK2kpIHsKLSAgICBnZnJlZShlbnRyaWVzW2ldLmtleSk7CisgICAgZ2ZyZWUoY29uc3Rf
Y2FzdDxjaGFyKj4oZW50cmllc1tpXS5rZXkpKTsKICAgICBlbnRyaWVzW2ldLnZhbC5mcmVlKCk7
CiAgIH0KICAgZ2ZyZWUoZW50cmllcyk7CiB9CiAKLXZvaWQgRGljdDo6YWRkKGNoYXIgKmtleSwg
T2JqZWN0ICp2YWwpIHsKK3ZvaWQgRGljdDo6YWRkKGNvbnN0IGNoYXIgKmtleSwgT2JqZWN0ICp2
YWwpIHsKICAgaWYgKGxlbmd0aCA9PSBzaXplKSB7CiAgICAgaWYgKGxlbmd0aCA9PSAwKSB7CiAg
ICAgICBzaXplID0gODsKQEAgLTU0LDcgKzU0LDcgQEAKICAgKytsZW5ndGg7CiB9CiAKLWlubGlu
ZSBEaWN0RW50cnkgKkRpY3Q6OmZpbmQoY2hhciAqa2V5KSB7CitpbmxpbmUgRGljdEVudHJ5ICpE
aWN0OjpmaW5kKGNvbnN0IGNoYXIgKmtleSkgewogICBpbnQgaTsKIAogICBmb3IgKGkgPSAwOyBp
IDwgbGVuZ3RoOyArK2kpIHsKQEAgLTY0LDI1ICs2NCwyNSBAQAogICByZXR1cm4gTlVMTDsKIH0K
IAotR0Jvb2wgRGljdDo6aXMoY2hhciAqdHlwZSkgeworR0Jvb2wgRGljdDo6aXMoY29uc3QgY2hh
ciAqdHlwZSkgewogICBEaWN0RW50cnkgKmU7CiAKICAgcmV0dXJuIChlID0gZmluZCgiVHlwZSIp
KSAmJiBlLT52YWwuaXNOYW1lKHR5cGUpOwogfQogCi1PYmplY3QgKkRpY3Q6Omxvb2t1cChjaGFy
ICprZXksIE9iamVjdCAqb2JqKSB7CitPYmplY3QgKkRpY3Q6Omxvb2t1cChjb25zdCBjaGFyICpr
ZXksIE9iamVjdCAqb2JqKSB7CiAgIERpY3RFbnRyeSAqZTsKIAogICByZXR1cm4gKGUgPSBmaW5k
KGtleSkpID8gZS0+dmFsLmZldGNoKHhyZWYsIG9iaikgOiBvYmotPmluaXROdWxsKCk7CiB9CiAK
LU9iamVjdCAqRGljdDo6bG9va3VwTkYoY2hhciAqa2V5LCBPYmplY3QgKm9iaikgeworT2JqZWN0
ICpEaWN0Ojpsb29rdXBORihjb25zdCBjaGFyICprZXksIE9iamVjdCAqb2JqKSB7CiAgIERpY3RF
bnRyeSAqZTsKIAogICByZXR1cm4gKGUgPSBmaW5kKGtleSkpID8gZS0+dmFsLmNvcHkob2JqKSA6
IG9iai0+aW5pdE51bGwoKTsKIH0KIAotY2hhciAqRGljdDo6Z2V0S2V5KGludCBpKSB7Citjb25z
dCBjaGFyICpEaWN0OjpnZXRLZXkoaW50IGkpIHsKICAgcmV0dXJuIGVudHJpZXNbaV0ua2V5Owog
fQogCmRpZmYgLXVyIHRleGxpdmUtMjAwODA4MTYtc291cmNlL2xpYnMveHBkZi5vcmlnL3hwZGYv
RGljdC5oIHRleGxpdmUtMjAwODA4MTYtc291cmNlL2xpYnMveHBkZi94cGRmL0RpY3QuaAotLS0g
dGV4bGl2ZS0yMDA4MDgxNi1zb3VyY2UvbGlicy94cGRmLm9yaWcveHBkZi9EaWN0LmgJMjAwNi0w
MS0xNiAwMzowOToyNi4wMDAwMDAwMDAgKzAzMDAKKysrIHRleGxpdmUtMjAwODA4MTYtc291cmNl
L2xpYnMveHBkZi94cGRmL0RpY3QuaAkyMDA4LTExLTIxIDE2OjQwOjE5LjAwMDAwMDAwMCArMDMw
MApAQCAtMjIsNyArMjIsNyBAQAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogc3RydWN0IERpY3RFbnRy
eSB7Ci0gIGNoYXIgKmtleTsKKyAgY29uc3QgY2hhciAqa2V5OwogICBPYmplY3QgdmFsOwogfTsK
IApAQCAtNDMsMTggKzQzLDE4IEBACiAgIGludCBnZXRMZW5ndGgoKSB7IHJldHVybiBsZW5ndGg7
IH0KIAogICAvLyBBZGQgYW4gZW50cnkuICBOQjogZG9lcyBub3QgY29weSBrZXkuCi0gIHZvaWQg
YWRkKGNoYXIgKmtleSwgT2JqZWN0ICp2YWwpOworICB2b2lkIGFkZChjb25zdCBjaGFyICprZXks
IE9iamVjdCAqdmFsKTsKIAogICAvLyBDaGVjayBpZiBkaWN0aW9uYXJ5IGlzIG9mIHNwZWNpZmll
ZCB0eXBlLgotICBHQm9vbCBpcyhjaGFyICp0eXBlKTsKKyAgR0Jvb2wgaXMoY29uc3QgY2hhciAq
dHlwZSk7CiAKICAgLy8gTG9vayB1cCBhbiBlbnRyeSBhbmQgcmV0dXJuIHRoZSB2YWx1ZS4gIFJl
dHVybnMgYSBudWxsIG9iamVjdAogICAvLyBpZiA8a2V5PiBpcyBub3QgaW4gdGhlIGRpY3Rpb25h
cnkuCi0gIE9iamVjdCAqbG9va3VwKGNoYXIgKmtleSwgT2JqZWN0ICpvYmopOwotICBPYmplY3Qg
Kmxvb2t1cE5GKGNoYXIgKmtleSwgT2JqZWN0ICpvYmopOworICBPYmplY3QgKmxvb2t1cChjb25z
dCBjaGFyICprZXksIE9iamVjdCAqb2JqKTsKKyAgT2JqZWN0ICpsb29rdXBORihjb25zdCBjaGFy
ICprZXksIE9iamVjdCAqb2JqKTsKIAogICAvLyBJdGVyYXRpdmUgYWNjZXNzb3JzLgotICBjaGFy
ICpnZXRLZXkoaW50IGkpOworICBjb25zdCBjaGFyICpnZXRLZXkoaW50IGkpOwogICBPYmplY3Qg
KmdldFZhbChpbnQgaSwgT2JqZWN0ICpvYmopOwogICBPYmplY3QgKmdldFZhbE5GKGludCBpLCBP
YmplY3QgKm9iaik7CiAKQEAgLTcxLDcgKzcxLDcgQEAKICAgaW50IGxlbmd0aDsJCQkvLyBudW1i
ZXIgb2YgZW50cmllcyBpbiBkaWN0aW9uYXJ5CiAgIGludCByZWY7CQkJLy8gcmVmZXJlbmNlIGNv
dW50CiAKLSAgRGljdEVudHJ5ICpmaW5kKGNoYXIgKmtleSk7CisgIERpY3RFbnRyeSAqZmluZChj
b25zdCBjaGFyICprZXkpOwogfTsKIAogI2VuZGlmCmRpZmYgLXVyIHRleGxpdmUtMjAwODA4MTYt
c291cmNlL2xpYnMveHBkZi5vcmlnL3hwZGYvRXJyb3IuY2MgdGV4bGl2ZS0yMDA4MDgxNi1zb3Vy
Y2UvbGlicy94cGRmL3hwZGYvRXJyb3IuY2MKLS0tIHRleGxpdmUtMjAwODA4MTYtc291cmNlL2xp
YnMveHBkZi5vcmlnL3hwZGYvRXJyb3IuY2MJMjAwNi0wMS0xNiAwMzowOToyNi4wMDAwMDAwMDAg
KzAzMDAKKysrIHRleGxpdmUtMjAwODA4MTYtc291cmNlL2xpYnMveHBkZi94cGRmL0Vycm9yLmNj
CTIwMDgtMTEtMjEgMTY6NDc6MzEuMDAwMDAwMDAwICswMzAwCkBAIC0xOCw3ICsxOCw3IEBACiAj
aW5jbHVkZSAiR2xvYmFsUGFyYW1zLmgiCiAjaW5jbHVkZSAiRXJyb3IuaCIKIAotdm9pZCBDREVD
TCBlcnJvcihpbnQgcG9zLCBjaGFyICptc2csIC4uLikgewordm9pZCBDREVDTCBlcnJvcihpbnQg
cG9zLCBjb25zdCBjaGFyICptc2csIC4uLikgewogICB2YV9saXN0IGFyZ3M7CiAKICAgLy8gTkI6
IHRoaXMgY2FuIGJlIGNhbGxlZCBiZWZvcmUgdGhlIGdsb2JhbFBhcmFtcyBvYmplY3QgaXMgY3Jl
YXRlZApkaWZmIC11ciB0ZXhsaXZlLTIwMDgwODE2LXNvdXJjZS9saWJzL3hwZGYub3JpZy94cGRm
L0Vycm9yLmggdGV4bGl2ZS0yMDA4MDgxNi1zb3VyY2UvbGlicy94cGRmL3hwZGYvRXJyb3IuaAot
LS0gdGV4bGl2ZS0yMDA4MDgxNi1zb3VyY2UvbGlicy94cGRmLm9yaWcveHBkZi9FcnJvci5oCTIw
MDYtMDEtMTYgMDM6MDk6MjYuMDAwMDAwMDAwICswMzAwCisrKyB0ZXhsaXZlLTIwMDgwODE2LXNv
dXJjZS9saWJzL3hwZGYveHBkZi9FcnJvci5oCTIwMDgtMTEtMjEgMTY6NDY6NTEuMDAwMDAwMDAw
ICswMzAwCkBAIC0xOCw2ICsxOCw2IEBACiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlICJj
b25maWcuaCIKIAotZXh0ZXJuIHZvaWQgQ0RFQ0wgZXJyb3IoaW50IHBvcywgY2hhciAqbXNnLCAu
Li4pOworZXh0ZXJuIHZvaWQgQ0RFQ0wgZXJyb3IoaW50IHBvcywgY29uc3QgY2hhciAqbXNnLCAu
Li4pOwogCiAjZW5kaWYKZGlmZiAtdXIgdGV4bGl2ZS0yMDA4MDgxNi1zb3VyY2UvbGlicy94cGRm
Lm9yaWcveHBkZi9Gb250RW5jb2RpbmdUYWJsZXMuY2MgdGV4bGl2ZS0yMDA4MDgxNi1zb3VyY2Uv
bGlicy94cGRmL3hwZGYvRm9udEVuY29kaW5nVGFibGVzLmNjCi0tLSB0ZXhsaXZlLTIwMDgwODE2
LXNvdXJjZS9saWJzL3hwZGYub3JpZy94cGRmL0ZvbnRFbmNvZGluZ1RhYmxlcy5jYwkyMDA2LTAx
LTE2IDAzOjA5OjI2LjAwMDAwMDAwMCArMDMwMAorKysgdGV4bGl2ZS0yMDA4MDgxNi1zb3VyY2Uv
bGlicy94cGRmL3hwZGYvRm9udEVuY29kaW5nVGFibGVzLmNjCTIwMDgtMTEtMjEgMTc6MTQ6NTQu
MDAwMDAwMDAwICswMzAwCkBAIC0xMCw3ICsxMCw3IEBACiAjaW5jbHVkZSA8c3RkbGliLmg+CiAj
aW5jbHVkZSAiRm9udEVuY29kaW5nVGFibGVzLmgiCiAKLWNoYXIgKm1hY1JvbWFuRW5jb2Rpbmdb
MjU2XSA9IHsKK2NvbnN0IGNoYXIgKm1hY1JvbWFuRW5jb2RpbmdbMjU2XSA9IHsKICAgTlVMTCwK
ICAgTlVMTCwKICAgTlVMTCwKQEAgLTI2OSw3ICsyNjksNyBAQAogICAiY2Fyb24iCiB9OwogCi1j
aGFyICptYWNFeHBlcnRFbmNvZGluZ1syNTZdID0geworY29uc3QgY2hhciAqbWFjRXhwZXJ0RW5j
b2RpbmdbMjU2XSA9IHsKICAgTlVMTCwKICAgTlVMTCwKICAgTlVMTCwKQEAgLTUyOCw3ICs1Mjgs
NyBAQAogICBOVUxMCiB9OwogCi1jaGFyICp3aW5BbnNpRW5jb2RpbmdbMjU2XSA9IHsKK2NvbnN0
IGNoYXIgKndpbkFuc2lFbmNvZGluZ1syNTZdID0gewogICBOVUxMLAogICBOVUxMLAogICBOVUxM
LApAQCAtNzg3LDcgKzc4Nyw3IEBACiAgICJ5ZGllcmVzaXMiCiB9OwogCi1jaGFyICpzdGFuZGFy
ZEVuY29kaW5nWzI1Nl0gPSB7Citjb25zdCBjaGFyICpzdGFuZGFyZEVuY29kaW5nWzI1Nl0gPSB7
CiAgIE5VTEwsCiAgIE5VTEwsCiAgIE5VTEwsCkBAIC0xMDQ2LDcgKzEwNDYsNyBAQAogICBOVUxM
CiB9OwogCi1jaGFyICpleHBlcnRFbmNvZGluZ1syNTZdID0geworY29uc3QgY2hhciAqZXhwZXJ0
RW5jb2RpbmdbMjU2XSA9IHsKICAgTlVMTCwKICAgTlVMTCwKICAgTlVMTCwKQEAgLTEzMDUsNyAr
MTMwNSw3IEBACiAgICJZZGllcmVzaXNzbWFsbCIKIH07CiAKLWNoYXIgKnN5bWJvbEVuY29kaW5n
WzI1Nl0gPSB7Citjb25zdCBjaGFyICpzeW1ib2xFbmNvZGluZ1syNTZdID0gewogICBOVUxMLAog
ICBOVUxMLAogICBOVUxMLApAQCAtMTU2NCw3ICsxNTY0LDcgQEAKICAgTlVMTAogfTsKIAotY2hh
ciAqemFwZkRpbmdiYXRzRW5jb2RpbmdbMjU2XSA9IHsKK2NvbnN0IGNoYXIgKnphcGZEaW5nYmF0
c0VuY29kaW5nWzI1Nl0gPSB7CiAgIE5VTEwsCiAgIE5VTEwsCiAgIE5VTEwsCmRpZmYgLXVyIHRl
eGxpdmUtMjAwODA4MTYtc291cmNlL2xpYnMveHBkZi5vcmlnL3hwZGYvRm9udEVuY29kaW5nVGFi
bGVzLmggdGV4bGl2ZS0yMDA4MDgxNi1zb3VyY2UvbGlicy94cGRmL3hwZGYvRm9udEVuY29kaW5n
VGFibGVzLmgKLS0tIHRleGxpdmUtMjAwODA4MTYtc291cmNlL2xpYnMveHBkZi5vcmlnL3hwZGYv
Rm9udEVuY29kaW5nVGFibGVzLmgJMjAwNi0wMS0xNiAwMzowOToyNi4wMDAwMDAwMDAgKzAzMDAK
KysrIHRleGxpdmUtMjAwODA4MTYtc291cmNlL2xpYnMveHBkZi94cGRmL0ZvbnRFbmNvZGluZ1Rh
Ymxlcy5oCTIwMDgtMTEtMjEgMTc6MTQ6MjUuMDAwMDAwMDAwICswMzAwCkBAIC05LDEyICs5LDEy
IEBACiAjaWZuZGVmIEZPTlRFTkNPRElOR1RBQkxFU19ICiAjZGVmaW5lIEZPTlRFTkNPRElOR1RB
QkxFU19ICiAKLWV4dGVybiBjaGFyICptYWNSb21hbkVuY29kaW5nW107Ci1leHRlcm4gY2hhciAq
bWFjRXhwZXJ0RW5jb2RpbmdbXTsKLWV4dGVybiBjaGFyICp3aW5BbnNpRW5jb2RpbmdbXTsKLWV4
dGVybiBjaGFyICpzdGFuZGFyZEVuY29kaW5nW107Ci1leHRlcm4gY2hhciAqZXhwZXJ0RW5jb2Rp
bmdbXTsKLWV4dGVybiBjaGFyICpzeW1ib2xFbmNvZGluZ1tdOwotZXh0ZXJuIGNoYXIgKnphcGZE
aW5nYmF0c0VuY29kaW5nW107CitleHRlcm4gY29uc3QgY2hhciAqbWFjUm9tYW5FbmNvZGluZ1td
OworZXh0ZXJuIGNvbnN0IGNoYXIgKm1hY0V4cGVydEVuY29kaW5nW107CitleHRlcm4gY29uc3Qg
Y2hhciAqd2luQW5zaUVuY29kaW5nW107CitleHRlcm4gY29uc3QgY2hhciAqc3RhbmRhcmRFbmNv
ZGluZ1tdOworZXh0ZXJuIGNvbnN0IGNoYXIgKmV4cGVydEVuY29kaW5nW107CitleHRlcm4gY29u
c3QgY2hhciAqc3ltYm9sRW5jb2RpbmdbXTsKK2V4dGVybiBjb25zdCBjaGFyICp6YXBmRGluZ2Jh
dHNFbmNvZGluZ1tdOwogCiAjZW5kaWYKZGlmZiAtdXIgdGV4bGl2ZS0yMDA4MDgxNi1zb3VyY2Uv
bGlicy94cGRmLm9yaWcveHBkZi9GdW5jdGlvbi5jYyB0ZXhsaXZlLTIwMDgwODE2LXNvdXJjZS9s
aWJzL3hwZGYveHBkZi9GdW5jdGlvbi5jYwotLS0gdGV4bGl2ZS0yMDA4MDgxNi1zb3VyY2UvbGli
cy94cGRmLm9yaWcveHBkZi9GdW5jdGlvbi5jYwkyMDA3LTA3LTEyIDAxOjEzOjU5LjAwMDAwMDAw
MCArMDQwMAorKysgdGV4bGl2ZS0yMDA4MDgxNi1zb3VyY2UvbGlicy94cGRmL3hwZGYvRnVuY3Rp
b24uY2MJMjAwOC0xMS0yMSAxNzowMzozNS4wMDAwMDAwMDAgKzAzMDAKQEAgLTc0OSw3ICs3NDks
NyBAQAogLy8gTm90ZTogJ2lmJyBhbmQgJ2lmZWxzZScgYXJlIHBhcnNlZCBzZXBhcmF0ZWx5Lgog
Ly8gVGhlIHJlc3QgYXJlIGxpc3RlZCBoZXJlIGluIGFscGhhYmV0aWNhbCBvcmRlci4KIC8vIFRo
ZSBpbmRleCBpbiB0aGlzIHRhYmxlIGlzIGVxdWl2YWxlbnQgdG8gdGhlIGVudHJ5IGluIFBTT3Au
Ci1jaGFyICpwc09wTmFtZXNbXSA9IHsKK2NvbnN0IGNoYXIgKnBzT3BOYW1lc1tdID0gewogICAi
YWJzIiwKICAgImFkZCIsCiAgICJhbmQiLApAQCAtMTA4Niw3ICsxMDg2LDcgQEAKIAogR0Jvb2wg
UG9zdFNjcmlwdEZ1bmN0aW9uOjpwYXJzZUNvZGUoU3RyZWFtICpzdHIsIGludCAqY29kZVB0cikg
ewogICBHU3RyaW5nICp0b2s7Ci0gIGNoYXIgKnA7CisgIGNvbnN0IGNoYXIgKnA7CiAgIEdCb29s
IGlzUmVhbDsKICAgaW50IG9wUHRyLCBlbHNlUHRyOwogICBpbnQgYSwgYiwgbWlkLCBjbXA7CmRp
ZmYgLXVyIHRleGxpdmUtMjAwODA4MTYtc291cmNlL2xpYnMveHBkZi5vcmlnL3hwZGYvR2Z4Rm9u
dC5jYyB0ZXhsaXZlLTIwMDgwODE2LXNvdXJjZS9saWJzL3hwZGYveHBkZi9HZnhGb250LmNjCi0t
LSB0ZXhsaXZlLTIwMDgwODE2LXNvdXJjZS9saWJzL3hwZGYub3JpZy94cGRmL0dmeEZvbnQuY2MJ
MjAwNy0wNy0xMiAwMToxMzo1OS4wMDAwMDAwMDAgKzA0MDAKKysrIHRleGxpdmUtMjAwODA4MTYt
c291cmNlL2xpYnMveHBkZi94cGRmL0dmeEZvbnQuY2MJMjAwOC0xMS0yMSAxNzo0MToxNC4wMDAw
MDAwMDAgKzAzMDAKQEAgLTMzLDggKzMzLDggQEAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIHN0cnVj
dCBTdGRGb250TWFwRW50cnkgewotICBjaGFyICphbHROYW1lOwotICBjaGFyICpwcm9wZXJOYW1l
OworICBjb25zdCBjaGFyICphbHROYW1lOworICBjb25zdCBjaGFyICpwcm9wZXJOYW1lOwogfTsK
IAogLy8gQWNyb2JhdCA0LjAgYW5kIGVhcmxpZXIgc3Vic3RpdHV0ZWQgQmFzZTE0LWNvbXBhdGli
bGUgZm9udHMgd2l0aG91dApAQCAtMTAwLDcgKzEwMCw3IEBACiAvLyBHZnhGb250CiAvLy0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQogCi1HZnhGb250ICpHZnhGb250OjptYWtlRm9udChYUmVmICp4cmVmLCBjaGFy
ICp0YWdBLCBSZWYgaWRBLCBEaWN0ICpmb250RGljdCkgeworR2Z4Rm9udCAqR2Z4Rm9udDo6bWFr
ZUZvbnQoWFJlZiAqeHJlZiwgY29uc3QgY2hhciAqdGFnQSwgUmVmIGlkQSwgRGljdCAqZm9udERp
Y3QpIHsKICAgR1N0cmluZyAqbmFtZUE7CiAgIEdmeEZvbnQgKmZvbnQ7CiAgIE9iamVjdCBvYmox
OwpAQCAtMTM2LDcgKzEzNiw3IEBACiAgIHJldHVybiBmb250OwogfQogCi1HZnhGb250OjpHZnhG
b250KGNoYXIgKnRhZ0EsIFJlZiBpZEEsIEdTdHJpbmcgKm5hbWVBKSB7CitHZnhGb250OjpHZnhG
b250KGNvbnN0IGNoYXIgKnRhZ0EsIFJlZiBpZEEsIEdTdHJpbmcgKm5hbWVBKSB7CiAgIG9rID0g
Z0ZhbHNlOwogICB0YWcgPSBuZXcgR1N0cmluZyh0YWdBKTsKICAgaWQgPSBpZEE7CkBAIC0zMzEs
OCArMzMxLDggQEAKIH0KIAogdm9pZCBHZnhGb250OjpmaW5kRXh0Rm9udEZpbGUoKSB7Ci0gIHN0
YXRpYyBjaGFyICp0eXBlMUV4dHNbXSA9IHsgIi5wZmEiLCAiLnBmYiIsICIucHMiLCAiIiwgTlVM
TCB9OwotICBzdGF0aWMgY2hhciAqdHRFeHRzW10gPSB7ICIudHRmIiwgTlVMTCB9OworICBzdGF0
aWMgY29uc3QgY2hhciAqdHlwZTFFeHRzW10gPSB7ICIucGZhIiwgIi5wZmIiLCAiLnBzIiwgIiIs
IE5VTEwgfTsKKyAgc3RhdGljIGNvbnN0IGNoYXIgKnR0RXh0c1tdID0geyAiLnR0ZiIsIE5VTEwg
fTsKIAogICBpZiAobmFtZSkgewogICAgIGlmICh0eXBlID09IGZvbnRUeXBlMSkgewpAQCAtMzQz
LDcgKzM0Myw3IEBACiAgIH0KIH0KIAotY2hhciAqR2Z4Rm9udDo6cmVhZEV4dEZvbnRGaWxlKGlu
dCAqbGVuKSB7Citjb25zdCBjaGFyICpHZnhGb250OjpyZWFkRXh0Rm9udEZpbGUoaW50ICpsZW4p
IHsKICAgRklMRSAqZjsKICAgY2hhciAqYnVmOwogCkBAIC0zNjMsNyArMzYzLDcgQEAKICAgcmV0
dXJuIGJ1ZjsKIH0KIAotY2hhciAqR2Z4Rm9udDo6cmVhZEVtYkZvbnRGaWxlKFhSZWYgKnhyZWYs
IGludCAqbGVuKSB7Citjb25zdCBjaGFyICpHZnhGb250OjpyZWFkRW1iRm9udEZpbGUoWFJlZiAq
eHJlZiwgaW50ICpsZW4pIHsKICAgY2hhciAqYnVmOwogICBPYmplY3Qgb2JqMSwgb2JqMjsKICAg
U3RyZWFtICpzdHI7CkBAIC00MDQsMjAgKzQwNCwyMCBAQAogLy8gR2Z4OEJpdEZvbnQKIC8vLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCiAKLUdmeDhCaXRGb250OjpHZng4Qml0Rm9udChYUmVmICp4cmVmLCBjaGFy
ICp0YWdBLCBSZWYgaWRBLCBHU3RyaW5nICpuYW1lQSwKK0dmeDhCaXRGb250OjpHZng4Qml0Rm9u
dChYUmVmICp4cmVmLCBjb25zdCBjaGFyICp0YWdBLCBSZWYgaWRBLCBHU3RyaW5nICpuYW1lQSwK
IAkJCSBHZnhGb250VHlwZSB0eXBlQSwgRGljdCAqZm9udERpY3QpOgogICBHZnhGb250KHRhZ0Es
IGlkQSwgbmFtZUEpCiB7CiAgIEdTdHJpbmcgKm5hbWUyOwogICBCdWlsdGluRm9udCAqYnVpbHRp
bkZvbnQ7Ci0gIGNoYXIgKipiYXNlRW5jOworICBjb25zdCBjaGFyICoqYmFzZUVuYzsKICAgR0Jv
b2wgYmFzZUVuY0Zyb21Gb250RmlsZTsKLSAgY2hhciAqYnVmOworICBjb25zdCBjaGFyICpidWY7
CiAgIGludCBsZW47CiAgIEZvRmlUeXBlMSAqZmZUMTsKICAgRm9GaVR5cGUxQyAqZmZUMUM7CiAg
IGludCBjb2RlLCBjb2RlMjsKLSAgY2hhciAqY2hhck5hbWU7CisgIGNvbnN0IGNoYXIgKmNoYXJO
YW1lOwogICBHQm9vbCBtaXNzaW5nLCBoZXg7CiAgIFVuaWNvZGUgdG9Vbmljb2RlWzI1Nl07CiAg
IENoYXJDb2RlVG9Vbmljb2RlICp1dHUsICpjdHUyOwpAQCAtNjI3LDcgKzYyNyw3IEBACiAgICAg
fQogICB9CiAgIGlmIChidWYpIHsKLSAgICBnZnJlZShidWYpOworICAgIGdmcmVlKGNvbnN0X2Nh
c3Q8Y2hhcio+KGJ1ZikpOwogICB9CiAKICAgLy8gZ2V0IGRlZmF1bHQgYmFzZSBlbmNvZGluZwpA
QCAtNjc3LDcgKzY3Nyw3IEBACiAJfSBlbHNlIGlmIChvYmozLmlzTmFtZSgpKSB7CiAJICBpZiAo
Y29kZSA+PSAwICYmIGNvZGUgPCAyNTYpIHsKIAkgICAgaWYgKGVuY0ZyZWVbY29kZV0pIHsKLQkg
ICAgICBnZnJlZShlbmNbY29kZV0pOworCSAgICAgIGdmcmVlKGNvbnN0X2Nhc3Q8Y2hhcio+KGVu
Y1tjb2RlXSkpOwogCSAgICB9CiAJICAgIGVuY1tjb2RlXSA9IGNvcHlTdHJpbmcob2JqMy5nZXRO
YW1lKCkpOwogCSAgICBlbmNGcmVlW2NvZGVdID0gZ1RydWU7CkBAIC04OTUsNyArODk1LDcgQEAK
IAogICBmb3IgKGkgPSAwOyBpIDwgMjU2OyArK2kpIHsKICAgICBpZiAoZW5jRnJlZVtpXSAmJiBl
bmNbaV0pIHsKLSAgICAgIGdmcmVlKGVuY1tpXSk7CisgICAgICBnZnJlZShjb25zdF9jYXN0PGNo
YXIqPihlbmNbaV0pKTsKICAgICB9CiAgIH0KICAgY3R1LT5kZWNSZWZDbnQoKTsKQEAgLTkwNyw3
ICs5MDcsNyBAQAogICB9CiB9CiAKLWludCBHZng4Qml0Rm9udDo6Z2V0TmV4dENoYXIoY2hhciAq
cywgaW50IGxlbiwgQ2hhckNvZGUgKmNvZGUsCitpbnQgR2Z4OEJpdEZvbnQ6OmdldE5leHRDaGFy
KGNvbnN0IGNoYXIgKnMsIGludCBsZW4sIENoYXJDb2RlICpjb2RlLAogCQkJICAgICBVbmljb2Rl
ICp1LCBpbnQgdVNpemUsIGludCAqdUxlbiwKIAkJCSAgICAgZG91YmxlICpkeCwgZG91YmxlICpk
eSwgZG91YmxlICpveCwgZG91YmxlICpveSkgewogICBDaGFyQ29kZSBjOwpAQCAtOTI5LDcgKzky
OSw3IEBACiAgIGludCBjbWFwUGxhdGZvcm0sIGNtYXBFbmNvZGluZzsKICAgaW50IHVuaWNvZGVD
bWFwLCBtYWNSb21hbkNtYXAsIG1zU3ltYm9sQ21hcCwgY21hcDsKICAgR0Jvb2wgdXNlTWFjUm9t
YW4sIHVzZVVuaWNvZGU7Ci0gIGNoYXIgKmNoYXJOYW1lOworICBjb25zdCBjaGFyICpjaGFyTmFt
ZTsKICAgVW5pY29kZSB1OwogICBpbnQgY29kZSwgaSwgbjsKIApAQCAtMTA3NCw3ICsxMDc0LDcg
QEAKICAgICAgICAgICgoR2Z4Rm9udENJRFdpZHRoRXhjZXBWICopdzIpLT5maXJzdDsKIH0KIAot
R2Z4Q0lERm9udDo6R2Z4Q0lERm9udChYUmVmICp4cmVmLCBjaGFyICp0YWdBLCBSZWYgaWRBLCBH
U3RyaW5nICpuYW1lQSwKK0dmeENJREZvbnQ6OkdmeENJREZvbnQoWFJlZiAqeHJlZiwgY29uc3Qg
Y2hhciAqdGFnQSwgUmVmIGlkQSwgR1N0cmluZyAqbmFtZUEsCiAJCSAgICAgICBEaWN0ICpmb250
RGljdCk6CiAgIEdmeEZvbnQodGFnQSwgaWRBLCBuYW1lQSkKIHsKQEAgLTE0MTEsNyArMTQxMSw3
IEBACiAgIH0KIH0KIAotaW50IEdmeENJREZvbnQ6OmdldE5leHRDaGFyKGNoYXIgKnMsIGludCBs
ZW4sIENoYXJDb2RlICpjb2RlLAoraW50IEdmeENJREZvbnQ6OmdldE5leHRDaGFyKGNvbnN0IGNo
YXIgKnMsIGludCBsZW4sIENoYXJDb2RlICpjb2RlLAogCQkJICAgIFVuaWNvZGUgKnUsIGludCB1
U2l6ZSwgaW50ICp1TGVuLAogCQkJICAgIGRvdWJsZSAqZHgsIGRvdWJsZSAqZHksIGRvdWJsZSAq
b3gsIGRvdWJsZSAqb3kpIHsKICAgQ0lEIGNpZDsKQEAgLTE1NTYsNyArMTU1Niw3IEBACiAgIGdm
cmVlKGZvbnRzKTsKIH0KIAotR2Z4Rm9udCAqR2Z4Rm9udERpY3Q6Omxvb2t1cChjaGFyICp0YWcp
IHsKK0dmeEZvbnQgKkdmeEZvbnREaWN0Ojpsb29rdXAoY29uc3QgY2hhciAqdGFnKSB7CiAgIGlu
dCBpOwogCiAgIGZvciAoaSA9IDA7IGkgPCBudW1Gb250czsgKytpKSB7CmRpZmYgLXVyIHRleGxp
dmUtMjAwODA4MTYtc291cmNlL2xpYnMveHBkZi5vcmlnL3hwZGYvR2Z4Rm9udC5oIHRleGxpdmUt
MjAwODA4MTYtc291cmNlL2xpYnMveHBkZi94cGRmL0dmeEZvbnQuaAotLS0gdGV4bGl2ZS0yMDA4
MDgxNi1zb3VyY2UvbGlicy94cGRmLm9yaWcveHBkZi9HZnhGb250LmgJMjAwNy0wNy0xMiAwMTox
Mzo1OS4wMDAwMDAwMDAgKzA0MDAKKysrIHRleGxpdmUtMjAwODA4MTYtc291cmNlL2xpYnMveHBk
Zi94cGRmL0dmeEZvbnQuaAkyMDA4LTExLTIxIDE3OjM4OjMyLjAwMDAwMDAwMCArMDMwMApAQCAt
ODksOSArODksOSBAQAogcHVibGljOgogCiAgIC8vIEJ1aWxkIGEgR2Z4Rm9udCBvYmplY3QuCi0g
IHN0YXRpYyBHZnhGb250ICptYWtlRm9udChYUmVmICp4cmVmLCBjaGFyICp0YWdBLCBSZWYgaWRB
LCBEaWN0ICpmb250RGljdCk7CisgIHN0YXRpYyBHZnhGb250ICptYWtlRm9udChYUmVmICp4cmVm
LCBjb25zdCBjaGFyICp0YWdBLCBSZWYgaWRBLCBEaWN0ICpmb250RGljdCk7CiAKLSAgR2Z4Rm9u
dChjaGFyICp0YWdBLCBSZWYgaWRBLCBHU3RyaW5nICpuYW1lQSk7CisgIEdmeEZvbnQoY29uc3Qg
Y2hhciAqdGFnQSwgUmVmIGlkQSwgR1N0cmluZyAqbmFtZUEpOwogCiAgIHZpcnR1YWwgfkdmeEZv
bnQoKTsKIApAQCAtMTA0LDcgKzEwNCw3IEBACiAgIFJlZiAqZ2V0SUQoKSB7IHJldHVybiAmaWQ7
IH0KIAogICAvLyBEb2VzIHRoaXMgZm9udCBtYXRjaCB0aGUgdGFnPwotICBHQm9vbCBtYXRjaGVz
KGNoYXIgKnRhZ0EpIHsgcmV0dXJuICF0YWctPmNtcCh0YWdBKTsgfQorICBHQm9vbCBtYXRjaGVz
KGNvbnN0IGNoYXIgKnRhZ0EpIHsgcmV0dXJuICF0YWctPmNtcCh0YWdBKTsgfQogCiAgIC8vIEdl
dCBiYXNlIGZvbnQgbmFtZS4KICAgR1N0cmluZyAqZ2V0TmFtZSgpIHsgcmV0dXJuIG5hbWU7IH0K
QEAgLTE1Miw4ICsxNTIsOCBAQAogICB2aXJ0dWFsIGludCBnZXRXTW9kZSgpIHsgcmV0dXJuIDA7
IH0KIAogICAvLyBSZWFkIGFuIGV4dGVybmFsIG9yIGVtYmVkZGVkIGZvbnQgZmlsZSBpbnRvIGEg
YnVmZmVyLgotICBjaGFyICpyZWFkRXh0Rm9udEZpbGUoaW50ICpsZW4pOwotICBjaGFyICpyZWFk
RW1iRm9udEZpbGUoWFJlZiAqeHJlZiwgaW50ICpsZW4pOworICBjb25zdCBjaGFyICpyZWFkRXh0
Rm9udEZpbGUoaW50ICpsZW4pOworICBjb25zdCBjaGFyICpyZWFkRW1iRm9udEZpbGUoWFJlZiAq
eHJlZiwgaW50ICpsZW4pOwogCiAgIC8vIEdldCB0aGUgbmV4dCBjaGFyIGZyb20gYSBzdHJpbmcg
PHM+IG9mIDxsZW4+IGJ5dGVzLCByZXR1cm5pbmcgdGhlCiAgIC8vIGNoYXIgPGNvZGU+LCBpdHMg
VW5pY29kZSBtYXBwaW5nIDx1PiwgaXRzIGRpc3BsYWNlbWVudCB2ZWN0b3IKQEAgLTE2MSw3ICsx
NjEsNyBAQAogICAvLyBpcyB0aGUgbnVtYmVyIG9mIGVudHJpZXMgYXZhaWxhYmxlIGluIDx1Piwg
YW5kIDx1TGVuPiBpcyBzZXQgdG8KICAgLy8gdGhlIG51bWJlciBhY3R1YWxseSB1c2VkLiAgUmV0
dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHVzZWQgYnkKICAgLy8gdGhlIGNoYXIgY29kZS4KLSAg
dmlydHVhbCBpbnQgZ2V0TmV4dENoYXIoY2hhciAqcywgaW50IGxlbiwgQ2hhckNvZGUgKmNvZGUs
CisgIHZpcnR1YWwgaW50IGdldE5leHRDaGFyKGNvbnN0IGNoYXIgKnMsIGludCBsZW4sIENoYXJD
b2RlICpjb2RlLAogCQkJICBVbmljb2RlICp1LCBpbnQgdVNpemUsIGludCAqdUxlbiwKIAkJCSAg
ZG91YmxlICpkeCwgZG91YmxlICpkeSwgZG91YmxlICpveCwgZG91YmxlICpveSkgPSAwOwogCkBA
IC0xOTYsMjMgKzE5NiwyMyBAQAogY2xhc3MgR2Z4OEJpdEZvbnQ6IHB1YmxpYyBHZnhGb250IHsK
IHB1YmxpYzoKIAotICBHZng4Qml0Rm9udChYUmVmICp4cmVmLCBjaGFyICp0YWdBLCBSZWYgaWRB
LCBHU3RyaW5nICpuYW1lQSwKKyAgR2Z4OEJpdEZvbnQoWFJlZiAqeHJlZiwgY29uc3QgY2hhciAq
dGFnQSwgUmVmIGlkQSwgR1N0cmluZyAqbmFtZUEsCiAJICAgICAgR2Z4Rm9udFR5cGUgdHlwZUEs
IERpY3QgKmZvbnREaWN0KTsKIAogICB2aXJ0dWFsIH5HZng4Qml0Rm9udCgpOwogCi0gIHZpcnR1
YWwgaW50IGdldE5leHRDaGFyKGNoYXIgKnMsIGludCBsZW4sIENoYXJDb2RlICpjb2RlLAorICB2
aXJ0dWFsIGludCBnZXROZXh0Q2hhcihjb25zdCBjaGFyICpzLCBpbnQgbGVuLCBDaGFyQ29kZSAq
Y29kZSwKIAkJCSAgVW5pY29kZSAqdSwgaW50IHVTaXplLCBpbnQgKnVMZW4sCiAJCQkgIGRvdWJs
ZSAqZHgsIGRvdWJsZSAqZHksIGRvdWJsZSAqb3gsIGRvdWJsZSAqb3kpOwogCiAgIC8vIFJldHVy
biB0aGUgZW5jb2RpbmcuCi0gIGNoYXIgKipnZXRFbmNvZGluZygpIHsgcmV0dXJuIGVuYzsgfQor
ICBjb25zdCBjaGFyICoqZ2V0RW5jb2RpbmcoKSB7IHJldHVybiBlbmM7IH0KIAogICAvLyBSZXR1
cm4gdGhlIFVuaWNvZGUgbWFwLgogICBDaGFyQ29kZVRvVW5pY29kZSAqZ2V0VG9Vbmljb2RlKCk7
CiAKICAgLy8gUmV0dXJuIHRoZSBjaGFyYWN0ZXIgbmFtZSBhc3NvY2lhdGVkIHdpdGggPGNvZGU+
LgotICBjaGFyICpnZXRDaGFyTmFtZShpbnQgY29kZSkgeyByZXR1cm4gZW5jW2NvZGVdOyB9Cisg
IGNvbnN0IGNoYXIgKmdldENoYXJOYW1lKGludCBjb2RlKSB7IHJldHVybiBlbmNbY29kZV07IH0K
IAogICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIFBERiBmb250IHNwZWNpZmllZCBhbiBlbmNvZGlu
Zy4KICAgR0Jvb2wgZ2V0SGFzRW5jb2RpbmcoKSB7IHJldHVybiBoYXNFbmNvZGluZzsgfQpAQCAt
MjM4LDcgKzIzOCw3IEBACiAKIHByaXZhdGU6CiAKLSAgY2hhciAqZW5jWzI1Nl07CQkvLyBjaGFy
IGNvZGUgLS0+IGNoYXIgbmFtZQorICBjb25zdCBjaGFyICplbmNbMjU2XTsJCS8vIGNoYXIgY29k
ZSAtLT4gY2hhciBuYW1lCiAgIGNoYXIgZW5jRnJlZVsyNTZdOwkJLy8gYm9vbGVhbiBmb3IgZWFj
aCBjaGFyIG5hbWU6IGlmIHNldCwKIAkJCQkvLyAgIHRoZSBzdHJpbmcgaXMgbWFsbG9jJ2VkCiAg
IENoYXJDb2RlVG9Vbmljb2RlICpjdHU7CS8vIGNoYXIgY29kZSAtLT4gVW5pY29kZQpAQCAtMjU2
LDE0ICsyNTYsMTQgQEAKIGNsYXNzIEdmeENJREZvbnQ6IHB1YmxpYyBHZnhGb250IHsKIHB1Ymxp
YzoKIAotICBHZnhDSURGb250KFhSZWYgKnhyZWYsIGNoYXIgKnRhZ0EsIFJlZiBpZEEsIEdTdHJp
bmcgKm5hbWVBLAorICBHZnhDSURGb250KFhSZWYgKnhyZWYsIGNvbnN0IGNoYXIgKnRhZ0EsIFJl
ZiBpZEEsIEdTdHJpbmcgKm5hbWVBLAogCSAgICAgRGljdCAqZm9udERpY3QpOwogCiAgIHZpcnR1
YWwgfkdmeENJREZvbnQoKTsKIAogICB2aXJ0dWFsIEdCb29sIGlzQ0lERm9udCgpIHsgcmV0dXJu
IGdUcnVlOyB9CiAKLSAgdmlydHVhbCBpbnQgZ2V0TmV4dENoYXIoY2hhciAqcywgaW50IGxlbiwg
Q2hhckNvZGUgKmNvZGUsCisgIHZpcnR1YWwgaW50IGdldE5leHRDaGFyKGNvbnN0IGNoYXIgKnMs
IGludCBsZW4sIENoYXJDb2RlICpjb2RlLAogCQkJICBVbmljb2RlICp1LCBpbnQgdVNpemUsIGlu
dCAqdUxlbiwKIAkJCSAgZG91YmxlICpkeCwgZG91YmxlICpkeSwgZG91YmxlICpveCwgZG91Ymxl
ICpveSk7CiAKQEAgLTMwNSw3ICszMDUsNyBAQAogICB+R2Z4Rm9udERpY3QoKTsKIAogICAvLyBH
ZXQgdGhlIHNwZWNpZmllZCBmb250LgotICBHZnhGb250ICpsb29rdXAoY2hhciAqdGFnKTsKKyAg
R2Z4Rm9udCAqbG9va3VwKGNvbnN0IGNoYXIgKnRhZyk7CiAKICAgLy8gSXRlcmF0aXZlIGFjY2Vz
cy4KICAgaW50IGdldE51bUZvbnRzKCkgeyByZXR1cm4gbnVtRm9udHM7IH0KZGlmZiAtdXIgdGV4
bGl2ZS0yMDA4MDgxNi1zb3VyY2UvbGlicy94cGRmLm9yaWcveHBkZi9HZnhTdGF0ZS5jYyB0ZXhs
aXZlLTIwMDgwODE2LXNvdXJjZS9saWJzL3hwZGYveHBkZi9HZnhTdGF0ZS5jYwotLS0gdGV4bGl2
ZS0yMDA4MDgxNi1zb3VyY2UvbGlicy94cGRmLm9yaWcveHBkZi9HZnhTdGF0ZS5jYwkyMDA3LTA3
LTEyIDAxOjEzOjU5LjAwMDAwMDAwMCArMDQwMAorKysgdGV4bGl2ZS0yMDA4MDgxNi1zb3VyY2Uv
bGlicy94cGRmL3hwZGYvR2Z4U3RhdGUuY2MJMjAwOC0xMS0yMSAxNzoxMjo1NC4wMDAwMDAwMDAg
KzAzMDAKQEAgLTM1LDcgKzM1LDcgQEAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIHN0cnVjdCBHZnhC
bGVuZE1vZGVJbmZvIHsKLSAgY2hhciAqbmFtZTsKKyAgY29uc3QgY2hhciAqbmFtZTsKICAgR2Z4
QmxlbmRNb2RlIG1vZGU7CiB9OwogCkBAIC02Niw3ICs2Niw3IEBACiAKIC8vIE5COiBUaGlzIG11
c3QgbWF0Y2ggdGhlIEdmeENvbG9yU3BhY2VNb2RlIGVudW0gZGVmaW5lZCBpbgogLy8gR2Z4U3Rh
dGUuaAotc3RhdGljIGNoYXIgKmdmeENvbG9yU3BhY2VNb2RlTmFtZXNbXSA9IHsKK3N0YXRpYyBj
b25zdCBjaGFyICpnZnhDb2xvclNwYWNlTW9kZU5hbWVzW10gPSB7CiAgICJEZXZpY2VHcmF5IiwK
ICAgIkNhbEdyYXkiLAogICAiRGV2aWNlUkdCIiwKQEAgLTE1Nyw3ICsxNTcsNyBAQAogICByZXR1
cm4gbkdmeENvbG9yU3BhY2VNb2RlczsKIH0KIAotY2hhciAqR2Z4Q29sb3JTcGFjZTo6Z2V0Q29s
b3JTcGFjZU1vZGVOYW1lKGludCBpZHgpIHsKK2NvbnN0IGNoYXIgKkdmeENvbG9yU3BhY2U6Omdl
dENvbG9yU3BhY2VNb2RlTmFtZShpbnQgaWR4KSB7CiAgIHJldHVybiBnZnhDb2xvclNwYWNlTW9k
ZU5hbWVzW2lkeF07CiB9CiAKQEAgLTk0OSw3ICs5NDksNyBAQAogICBpbnQgaW5kZXhIaWdoQTsK
ICAgT2JqZWN0IG9iajE7CiAgIGludCB4OwotICBjaGFyICpzOworICBjb25zdCBjaGFyICpzOwog
ICBpbnQgbiwgaSwgajsKIAogICBpZiAoYXJyLT5nZXRMZW5ndGgoKSAhPSA0KSB7CmRpZmYgLXVy
IHRleGxpdmUtMjAwODA4MTYtc291cmNlL2xpYnMveHBkZi5vcmlnL3hwZGYvR2Z4U3RhdGUuaCB0
ZXhsaXZlLTIwMDgwODE2LXNvdXJjZS9saWJzL3hwZGYveHBkZi9HZnhTdGF0ZS5oCi0tLSB0ZXhs
aXZlLTIwMDgwODE2LXNvdXJjZS9saWJzL3hwZGYub3JpZy94cGRmL0dmeFN0YXRlLmgJMjAwNy0w
Ny0xMiAwMToxMzo1OS4wMDAwMDAwMDAgKzA0MDAKKysrIHRleGxpdmUtMjAwODA4MTYtc291cmNl
L2xpYnMveHBkZi94cGRmL0dmeFN0YXRlLmgJMjAwOC0xMS0yMSAxNzowODo0OC4wMDAwMDAwMDAg
KzAzMDAKQEAgLTE2NCw3ICsxNjQsNyBAQAogICBzdGF0aWMgaW50IGdldE51bUNvbG9yU3BhY2VN
b2RlcygpOwogCiAgIC8vIFJldHVybiB0aGUgbmFtZSBvZiB0aGUgPGlkeD50aCBjb2xvciBzcGFj
ZSBtb2RlLgotICBzdGF0aWMgY2hhciAqZ2V0Q29sb3JTcGFjZU1vZGVOYW1lKGludCBpZHgpOwor
ICBzdGF0aWMgY29uc3QgY2hhciAqZ2V0Q29sb3JTcGFjZU1vZGVOYW1lKGludCBpZHgpOwogCiBw
cml2YXRlOgogfTsKZGlmZiAtdXIgdGV4bGl2ZS0yMDA4MDgxNi1zb3VyY2UvbGlicy94cGRmLm9y
aWcveHBkZi9HbG9iYWxQYXJhbXMuY2MgdGV4bGl2ZS0yMDA4MDgxNi1zb3VyY2UvbGlicy94cGRm
L3hwZGYvR2xvYmFsUGFyYW1zLmNjCi0tLSB0ZXhsaXZlLTIwMDgwODE2LXNvdXJjZS9saWJzL3hw
ZGYub3JpZy94cGRmL0dsb2JhbFBhcmFtcy5jYwkyMDA4LTA1LTA4IDE3OjQwOjQxLjAwMDAwMDAw
MCArMDQwMAorKysgdGV4bGl2ZS0yMDA4MDgxNi1zb3VyY2UvbGlicy94cGRmL3hwZGYvR2xvYmFs
UGFyYW1zLmNjCTIwMDgtMTEtMjEgMTc6Mjk6MTkuMDAwMDAwMDAwICswMzAwCkBAIC0xMTcsOSAr
MTE3LDkgQEAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIHN0YXRpYyBzdHJ1Y3QgewotICBjaGFyICpu
YW1lOwotICBjaGFyICp0MUZpbGVOYW1lOwotICBjaGFyICp0dEZpbGVOYW1lOworICBjb25zdCBj
aGFyICpuYW1lOworICBjb25zdCBjaGFyICp0MUZpbGVOYW1lOworICBjb25zdCBjaGFyICp0dEZp
bGVOYW1lOwogfSBkaXNwbGF5Rm9udFRhYltdID0gewogICB7IkNvdXJpZXIiLCAgICAgICAgICAg
ICAgICJuMDIyMDAzbC5wZmIiLCAiY291ci50dGYifSwKICAgeyJDb3VyaWVyLUJvbGQiLCAgICAg
ICAgICAibjAyMjAwNGwucGZiIiwgImNvdXJiZC50dGYifSwKQEAgLTEzOSwxMyArMTM5LDEzIEBA
CiB9OwogCiAjaWZkZWYgV0lOMzIKLXN0YXRpYyBjaGFyICpkaXNwbGF5Rm9udERpcnNbXSA9IHsK
K3N0YXRpYyBjb25zdCBjaGFyICpkaXNwbGF5Rm9udERpcnNbXSA9IHsKICAgImM6L3dpbmRvd3Mv
Zm9udHMiLAogICAiYzovd2lubnQvZm9udHMiLAogICBOVUxMCiB9OwogI2Vsc2UKLXN0YXRpYyBj
aGFyICpkaXNwbGF5Rm9udERpcnNbXSA9IHsKK3N0YXRpYyBjb25zdCBjaGFyICpkaXNwbGF5Rm9u
dERpcnNbXSA9IHsKICAgIi91c3Ivc2hhcmUvZ2hvc3RzY3JpcHQvZm9udHMiLAogICAiL3Vzci9s
b2NhbC9zaGFyZS9naG9zdHNjcmlwdC9mb250cyIsCiAgICIvdXNyL3NoYXJlL2ZvbnRzL2RlZmF1
bHQvVHlwZTEiLApAQCAtMjA1LDcgKzIwNSw3IEBACiAgIEdCb29sIGJvbGQsIGl0YWxpYzsKIAog
ICBzdGF0aWMgV2luRm9udEluZm8gKm1ha2UoR1N0cmluZyAqbmFtZUEsIEdCb29sIGJvbGRBLCBH
Qm9vbCBpdGFsaWNBLAotCQkJICAgSEtFWSByZWdLZXksIGNoYXIgKndpbkZvbnREaXIpOworCQkJ
ICAgSEtFWSByZWdLZXksIGNvbnN0IGNoYXIgKndpbkZvbnREaXIpOwogICBXaW5Gb250SW5mbyhH
U3RyaW5nICpuYW1lQSwgR0Jvb2wgYm9sZEEsIEdCb29sIGl0YWxpY0EsCiAJICAgICAgR1N0cmlu
ZyAqZmlsZU5hbWVBKTsKICAgdmlydHVhbCB+V2luRm9udEluZm8oKTsKQEAgLTIxMyw3ICsyMTMs
NyBAQAogfTsKIAogV2luRm9udEluZm8gKldpbkZvbnRJbmZvOjptYWtlKEdTdHJpbmcgKm5hbWVB
LCBHQm9vbCBib2xkQSwgR0Jvb2wgaXRhbGljQSwKLQkJCSAgICAgICBIS0VZIHJlZ0tleSwgY2hh
ciAqd2luRm9udERpcikgeworCQkJICAgICAgIEhLRVkgcmVnS2V5LCBjb25zdCBjaGFyICp3aW5G
b250RGlyKSB7CiAgIEdTdHJpbmcgKnJlZ05hbWU7CiAgIEdTdHJpbmcgKmZpbGVOYW1lQTsKICAg
Y2hhciBidWZbTUFYX1BBVEhdOwpAQCAtMjgwLDcgKzI4MCw3IEBACiBjbGFzcyBXaW5Gb250TGlz
dCB7CiBwdWJsaWM6CiAKLSAgV2luRm9udExpc3QoY2hhciAqd2luRm9udERpckEpOworICBXaW5G
b250TGlzdChjb25zdCBjaGFyICp3aW5Gb250RGlyQSk7CiAgIH5XaW5Gb250TGlzdCgpOwogICBX
aW5Gb250SW5mbyAqZmluZChHU3RyaW5nICpmb250KTsKIApAQCAtMjk3LDEyICsyOTcsMTIgQEAK
ICAgR0xpc3QgKmZvbnRzOwkJCS8vIFtXaW5Gb250SW5mb10KICAgSERDIGRjOwkJCS8vIChvbmx5
IHVzZWQgZHVyaW5nIGVudW1lcmF0aW9uKQogICBIS0VZIHJlZ0tleTsJCQkvLyAob25seSB1c2Vk
IGR1cmluZyBlbnVtZXJhdGlvbikKLSAgY2hhciAqd2luRm9udERpcjsJCS8vIChvbmx5IHVzZWQg
ZHVyaW5nIGVudW1lcmF0aW9uKQorICBjb25zdCBjaGFyICp3aW5Gb250RGlyOwkvLyAob25seSB1
c2VkIGR1cmluZyBlbnVtZXJhdGlvbikKIH07CiAKLVdpbkZvbnRMaXN0OjpXaW5Gb250TGlzdChj
aGFyICp3aW5Gb250RGlyQSkgeworV2luRm9udExpc3Q6OldpbkZvbnRMaXN0KGNvbnN0IGNoYXIg
KndpbkZvbnREaXJBKSB7CiAgIE9TVkVSU0lPTklORk8gdmVyc2lvbjsKLSAgY2hhciAqcGF0aDsK
KyAgY29uc3QgY2hhciAqcGF0aDsKIAogICBmb250cyA9IG5ldyBHTGlzdCgpOwogICBkYyA9IEdl
dERDKE5VTEwpOwpAQCAtNDYzLDcgKzQ2Myw3IEBACiAvLyBLZXlCaW5kaW5nCiAvLy0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQogCi1LZXlCaW5kaW5nOjpLZXlCaW5kaW5nKGludCBjb2RlQSwgaW50IG1vZHNBLCBp
bnQgY29udGV4dEEsIGNoYXIgKmNtZDApIHsKK0tleUJpbmRpbmc6OktleUJpbmRpbmcoaW50IGNv
ZGVBLCBpbnQgbW9kc0EsIGludCBjb250ZXh0QSwgY29uc3QgY2hhciAqY21kMCkgewogICBjb2Rl
ID0gY29kZUE7CiAgIG1vZHMgPSBtb2RzQTsKICAgY29udGV4dCA9IGNvbnRleHRBOwpAQCAtNDcy
LDcgKzQ3Miw3IEBACiB9CiAKIEtleUJpbmRpbmc6OktleUJpbmRpbmcoaW50IGNvZGVBLCBpbnQg
bW9kc0EsIGludCBjb250ZXh0QSwKLQkJICAgICAgIGNoYXIgKmNtZDAsIGNoYXIgKmNtZDEpIHsK
KwkJICAgICAgIGNvbnN0IGNoYXIgKmNtZDAsIGNvbnN0IGNoYXIgKmNtZDEpIHsKICAgY29kZSA9
IGNvZGVBOwogICBtb2RzID0gbW9kc0E7CiAgIGNvbnRleHQgPSBjb250ZXh0QTsKQEAgLTUwMSw3
ICs1MDEsNyBAQAogY2xhc3MgUGx1Z2luIHsKIHB1YmxpYzoKIAotICBzdGF0aWMgUGx1Z2luICps
b2FkKGNoYXIgKnR5cGUsIGNoYXIgKm5hbWUpOworICBzdGF0aWMgUGx1Z2luICpsb2FkKGNvbnN0
IGNoYXIgKnR5cGUsIGNvbnN0IGNoYXIgKm5hbWUpOwogICB+UGx1Z2luKCk7CiAKIHByaXZhdGU6
CkBAIC01MTUsNyArNTE1LDcgQEAKICNlbmRpZgogfTsKIAotUGx1Z2luICpQbHVnaW46OmxvYWQo
Y2hhciAqdHlwZSwgY2hhciAqbmFtZSkgeworUGx1Z2luICpQbHVnaW46OmxvYWQoY29uc3QgY2hh
ciAqdHlwZSwgY29uc3QgY2hhciAqbmFtZSkgewogICBHU3RyaW5nICpwYXRoOwogICBQbHVnaW4g
KnBsdWdpbjsKICAgWHBkZlBsdWdpblZlY1RhYmxlICp2dDsKQEAgLTY3Nyw3ICs2NzcsNyBAQAog
ICBkaXNwbGF5Q0lERm9udHMgPSBuZXcgR0hhc2goKTsKICAgZGlzcGxheU5hbWVkQ0lERm9udHMg
PSBuZXcgR0hhc2goKTsKICNpZiBIQVZFX1BBUEVSX0gKLSAgY2hhciAqcGFwZXJOYW1lOworICBj
b25zdCBjaGFyICpwYXBlck5hbWU7CiAgIGNvbnN0IHN0cnVjdCBwYXBlciAqcGFwZXJUeXBlOwog
ICBwYXBlcmluaXQoKTsKICAgaWYgKChwYXBlck5hbWUgPSBzeXN0ZW1wYXBlcm5hbWUoKSkpIHsK
QEAgLTc3MSw3ICs3NzEsNyBAQAogCiB9CiAKLUdsb2JhbFBhcmFtczo6R2xvYmFsUGFyYW1zKGNo
YXIgKmNmZ0ZpbGVOYW1lKSB7CitHbG9iYWxQYXJhbXM6Okdsb2JhbFBhcmFtcyhjb25zdCBjaGFy
ICpjZmdGaWxlTmFtZSkgewogICBVbmljb2RlTWFwICptYXA7CiAgIEdTdHJpbmcgKmZpbGVOYW1l
OwogICBGSUxFICpmOwpAQCAtODExLDcgKzgxMSw3IEBACiAgIGRpc3BsYXlDSURGb250cyA9IG5l
dyBHSGFzaCgpOwogICBkaXNwbGF5TmFtZWRDSURGb250cyA9IG5ldyBHSGFzaCgpOwogI2lmIEhB
VkVfUEFQRVJfSAotICBjaGFyICpwYXBlck5hbWU7CisgIGNvbnN0IGNoYXIgKnBhcGVyTmFtZTsK
ICAgY29uc3Qgc3RydWN0IHBhcGVyICpwYXBlclR5cGU7CiAgIHBhcGVyaW5pdCgpOwogICBpZiAo
KHBhcGVyTmFtZSA9IHN5c3RlbXBhcGVybmFtZSgpKSkgewpAQCAtMTA5Niw3ICsxMDk2LDcgQEAK
ICAgfQogfQogCi12b2lkIEdsb2JhbFBhcmFtczo6cGFyc2VMaW5lKGNoYXIgKmJ1ZiwgR1N0cmlu
ZyAqZmlsZU5hbWUsIGludCBsaW5lKSB7Cit2b2lkIEdsb2JhbFBhcmFtczo6cGFyc2VMaW5lKGNv
bnN0IGNoYXIgKmJ1ZiwgR1N0cmluZyAqZmlsZU5hbWUsIGludCBsaW5lKSB7CiAgIEdMaXN0ICp0
b2tlbnM7CiAgIEdTdHJpbmcgKmNtZCwgKmluY0ZpbGU7CiAgIGNoYXIgKnAxLCAqcDI7CkBAIC0x
NTMxLDcgKzE1MzEsNyBAQAogICBwc0ZvbnRzLT5hZGQocGFyYW0tPnBkZkZvbnROYW1lLCBwYXJh
bSk7CiB9CiAKLXZvaWQgR2xvYmFsUGFyYW1zOjpwYXJzZVBTRm9udDE2KGNoYXIgKmNtZE5hbWUs
IEdMaXN0ICpmb250TGlzdCwKK3ZvaWQgR2xvYmFsUGFyYW1zOjpwYXJzZVBTRm9udDE2KGNvbnN0
IGNoYXIgKmNtZE5hbWUsIEdMaXN0ICpmb250TGlzdCwKIAkJCQkgR0xpc3QgKnRva2VucywgR1N0
cmluZyAqZmlsZU5hbWUsIGludCBsaW5lKSB7CiAgIFBTRm9udFBhcmFtICpwYXJhbTsKICAgaW50
IHdNb2RlOwpAQCAtMTY5Miw5ICsxNjkyLDkgQEAKIAogR0Jvb2wgR2xvYmFsUGFyYW1zOjpwYXJz
ZUtleShHU3RyaW5nICptb2RLZXlTdHIsIEdTdHJpbmcgKmNvbnRleHRTdHIsCiAJCQkgICAgIGlu
dCAqY29kZSwgaW50ICptb2RzLCBpbnQgKmNvbnRleHQsCi0JCQkgICAgIGNoYXIgKmNtZE5hbWUs
CisJCQkgICAgIGNvbnN0IGNoYXIgKmNtZE5hbWUsCiAJCQkgICAgIEdMaXN0ICp0b2tlbnMsIEdT
dHJpbmcgKmZpbGVOYW1lLCBpbnQgbGluZSkgewotICBjaGFyICpwMDsKKyAgY29uc3QgY2hhciAq
cDA7CiAKICAgKm1vZHMgPSB4cGRmS2V5TW9kTm9uZTsKICAgcDAgPSBtb2RLZXlTdHItPmdldENT
dHJpbmcoKTsKQEAgLTE4MjEsNyArMTgyMSw3IEBACiB9CiAjZW5kaWYKIAotdm9pZCBHbG9iYWxQ
YXJhbXM6OnBhcnNlQ29tbWFuZChjaGFyICpjbWROYW1lLCBHU3RyaW5nICoqdmFsLAordm9pZCBH
bG9iYWxQYXJhbXM6OnBhcnNlQ29tbWFuZChjb25zdCBjaGFyICpjbWROYW1lLCBHU3RyaW5nICoq
dmFsLAogCQkJCUdMaXN0ICp0b2tlbnMsIEdTdHJpbmcgKmZpbGVOYW1lLCBpbnQgbGluZSkgewog
ICBpZiAodG9rZW5zLT5nZXRMZW5ndGgoKSAhPSAyKSB7CiAgICAgZXJyb3IoLTEsICJCYWQgJyVz
JyBjb25maWcgZmlsZSBjb21tYW5kICglczolZCkiLApAQCAtMTgzNCw3ICsxODM0LDcgQEAKICAg
KnZhbCA9ICgoR1N0cmluZyAqKXRva2Vucy0+Z2V0KDEpKS0+Y29weSgpOwogfQogCi12b2lkIEds
b2JhbFBhcmFtczo6cGFyc2VZZXNObyhjaGFyICpjbWROYW1lLCBHQm9vbCAqZmxhZywKK3ZvaWQg
R2xvYmFsUGFyYW1zOjpwYXJzZVllc05vKGNvbnN0IGNoYXIgKmNtZE5hbWUsIEdCb29sICpmbGFn
LAogCQkJICAgICAgR0xpc3QgKnRva2VucywgR1N0cmluZyAqZmlsZU5hbWUsIGludCBsaW5lKSB7
CiAgIEdTdHJpbmcgKnRvazsKIApAQCAtMTg1MCw3ICsxODUwLDcgQEAKICAgfQogfQogCi1HQm9v
bCBHbG9iYWxQYXJhbXM6OnBhcnNlWWVzTm8yKGNoYXIgKnRva2VuLCBHQm9vbCAqZmxhZykgewor
R0Jvb2wgR2xvYmFsUGFyYW1zOjpwYXJzZVllc05vMihjb25zdCBjaGFyICp0b2tlbiwgR0Jvb2wg
KmZsYWcpIHsKICAgaWYgKCFzdHJjbXAodG9rZW4sICJ5ZXMiKSkgewogICAgICpmbGFnID0gZ1Ry
dWU7CiAgIH0gZWxzZSBpZiAoIXN0cmNtcCh0b2tlbiwgIm5vIikpIHsKQEAgLTE4NjEsNyArMTg2
MSw3IEBACiAgIHJldHVybiBnVHJ1ZTsKIH0KIAotdm9pZCBHbG9iYWxQYXJhbXM6OnBhcnNlSW50
ZWdlcihjaGFyICpjbWROYW1lLCBpbnQgKnZhbCwKK3ZvaWQgR2xvYmFsUGFyYW1zOjpwYXJzZUlu
dGVnZXIoY29uc3QgY2hhciAqY21kTmFtZSwgaW50ICp2YWwsCiAJCQkJR0xpc3QgKnRva2Vucywg
R1N0cmluZyAqZmlsZU5hbWUsIGludCBsaW5lKSB7CiAgIEdTdHJpbmcgKnRvazsKICAgaW50IGk7
CkBAIC0xODkyLDcgKzE4OTIsNyBAQAogICAqdmFsID0gYXRvaSh0b2stPmdldENTdHJpbmcoKSk7
CiB9CiAKLXZvaWQgR2xvYmFsUGFyYW1zOjpwYXJzZUZsb2F0KGNoYXIgKmNtZE5hbWUsIGRvdWJs
ZSAqdmFsLAordm9pZCBHbG9iYWxQYXJhbXM6OnBhcnNlRmxvYXQoY29uc3QgY2hhciAqY21kTmFt
ZSwgZG91YmxlICp2YWwsCiAJCQkgICAgICBHTGlzdCAqdG9rZW5zLCBHU3RyaW5nICpmaWxlTmFt
ZSwgaW50IGxpbmUpIHsKICAgR1N0cmluZyAqdG9rOwogICBpbnQgaTsKQEAgLTE5OTIsMTIgKzE5
OTIsMTIgQEAKIAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotdm9pZCBHbG9iYWxQYXJhbXM6OnNldEJh
c2VEaXIoY2hhciAqZGlyKSB7Cit2b2lkIEdsb2JhbFBhcmFtczo6c2V0QmFzZURpcihjb25zdCBj
aGFyICpkaXIpIHsKICAgZGVsZXRlIGJhc2VEaXI7CiAgIGJhc2VEaXIgPSBuZXcgR1N0cmluZyhk
aXIpOwogfQogCi12b2lkIEdsb2JhbFBhcmFtczo6c2V0dXBCYXNlRm9udHMoY2hhciAqZGlyKSB7
Cit2b2lkIEdsb2JhbFBhcmFtczo6c2V0dXBCYXNlRm9udHMoY29uc3QgY2hhciAqZGlyKSB7CiAg
IEdTdHJpbmcgKmZvbnROYW1lOwogICBHU3RyaW5nICpmaWxlTmFtZTsKICNpZmRlZiBXSU4zMgpA
QCAtMjEwOSw3ICsyMTA5LDcgQEAKIC8vIGFjY2Vzc29ycwogLy8tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAot
Q2hhckNvZGUgR2xvYmFsUGFyYW1zOjpnZXRNYWNSb21hbkNoYXJDb2RlKGNoYXIgKmNoYXJOYW1l
KSB7CitDaGFyQ29kZSBHbG9iYWxQYXJhbXM6OmdldE1hY1JvbWFuQ2hhckNvZGUoY29uc3QgY2hh
ciAqY2hhck5hbWUpIHsKICAgLy8gbm8gbmVlZCB0byBsb2NrIC0gbWFjUm9tYW5SZXZlcnNlTWFw
IGlzIGNvbnN0YW50CiAgIHJldHVybiBtYWNSb21hblJldmVyc2VNYXAtPmxvb2t1cChjaGFyTmFt
ZSk7CiB9CkBAIC0yMTIzLDcgKzIxMjMsNyBAQAogICByZXR1cm4gczsKIH0KIAotVW5pY29kZSBH
bG9iYWxQYXJhbXM6Om1hcE5hbWVUb1VuaWNvZGUoY2hhciAqY2hhck5hbWUpIHsKK1VuaWNvZGUg
R2xvYmFsUGFyYW1zOjptYXBOYW1lVG9Vbmljb2RlKGNvbnN0IGNoYXIgKmNoYXJOYW1lKSB7CiAg
IC8vIG5vIG5lZWQgdG8gbG9jayAtIG5hbWVUb1VuaWNvZGUgaXMgY29uc3RhbnQKICAgcmV0dXJu
IG5hbWVUb1VuaWNvZGUtPmxvb2t1cChjaGFyTmFtZSk7CiB9CkBAIC0yNDU2LDkgKzI0NTYsOSBA
QAogICByZXR1cm4gdGlueTsKIH0KIAotR1N0cmluZyAqR2xvYmFsUGFyYW1zOjpmaW5kRm9udEZp
bGUoR1N0cmluZyAqZm9udE5hbWUsIGNoYXIgKipleHRzKSB7CitHU3RyaW5nICpHbG9iYWxQYXJh
bXM6OmZpbmRGb250RmlsZShHU3RyaW5nICpmb250TmFtZSwgY29uc3QgY2hhciAqKmV4dHMpIHsK
ICAgR1N0cmluZyAqZGlyLCAqZmlsZU5hbWU7Ci0gIGNoYXIgKipleHQ7CisgIGNvbnN0IGNoYXIg
KipleHQ7CiAgIEZJTEUgKmY7CiAgIGludCBpOwogCkBAIC0yNzQ1LDcgKzI3NDUsNyBAQAogICB1
bmxvY2tHbG9iYWxQYXJhbXM7CiB9CiAKLXZvaWQgR2xvYmFsUGFyYW1zOjpzZXRQU0ZpbGUoY2hh
ciAqZmlsZSkgewordm9pZCBHbG9iYWxQYXJhbXM6OnNldFBTRmlsZShjb25zdCBjaGFyICpmaWxl
KSB7CiAgIGxvY2tHbG9iYWxQYXJhbXM7CiAgIGlmIChwc0ZpbGUpIHsKICAgICBkZWxldGUgcHNG
aWxlOwpAQCAtMjc1NCw3ICsyNzU0LDcgQEAKICAgdW5sb2NrR2xvYmFsUGFyYW1zOwogfQogCi1H
Qm9vbCBHbG9iYWxQYXJhbXM6OnNldFBTUGFwZXJTaXplKGNoYXIgKnNpemUpIHsKK0dCb29sIEds
b2JhbFBhcmFtczo6c2V0UFNQYXBlclNpemUoY29uc3QgY2hhciAqc2l6ZSkgewogICBsb2NrR2xv
YmFsUGFyYW1zOwogICBpZiAoIXN0cmNtcChzaXplLCAibWF0Y2giKSkgewogICAgIHBzUGFwZXJX
aWR0aCA9IHBzUGFwZXJIZWlnaHQgPSAtMTsKQEAgLTI4ODQsMTQgKzI4ODQsMTQgQEAKICAgdW5s
b2NrR2xvYmFsUGFyYW1zOwogfQogCi12b2lkIEdsb2JhbFBhcmFtczo6c2V0VGV4dEVuY29kaW5n
KGNoYXIgKmVuY29kaW5nTmFtZSkgewordm9pZCBHbG9iYWxQYXJhbXM6OnNldFRleHRFbmNvZGlu
Zyhjb25zdCBjaGFyICplbmNvZGluZ05hbWUpIHsKICAgbG9ja0dsb2JhbFBhcmFtczsKICAgZGVs
ZXRlIHRleHRFbmNvZGluZzsKICAgdGV4dEVuY29kaW5nID0gbmV3IEdTdHJpbmcoZW5jb2RpbmdO
YW1lKTsKICAgdW5sb2NrR2xvYmFsUGFyYW1zOwogfQogCi1HQm9vbCBHbG9iYWxQYXJhbXM6OnNl
dFRleHRFT0woY2hhciAqcykgeworR0Jvb2wgR2xvYmFsUGFyYW1zOjpzZXRUZXh0RU9MKGNvbnN0
IGNoYXIgKnMpIHsKICAgbG9ja0dsb2JhbFBhcmFtczsKICAgaWYgKCFzdHJjbXAocywgInVuaXgi
KSkgewogICAgIHRleHRFT0wgPSBlb2xVbml4OwpAQCAtMjkxOSw3ICsyOTE5LDcgQEAKICAgdW5s
b2NrR2xvYmFsUGFyYW1zOwogfQogCi12b2lkIEdsb2JhbFBhcmFtczo6c2V0SW5pdGlhbFpvb20o
Y2hhciAqcykgewordm9pZCBHbG9iYWxQYXJhbXM6OnNldEluaXRpYWxab29tKGNvbnN0IGNoYXIg
KnMpIHsKICAgbG9ja0dsb2JhbFBhcmFtczsKICAgZGVsZXRlIGluaXRpYWxab29tOwogICBpbml0
aWFsWm9vbSA9IG5ldyBHU3RyaW5nKHMpOwpAQCAtMjkzMiw3ICsyOTMyLDcgQEAKICAgdW5sb2Nr
R2xvYmFsUGFyYW1zOwogfQogCi1HQm9vbCBHbG9iYWxQYXJhbXM6OnNldEVuYWJsZVQxbGliKGNo
YXIgKnMpIHsKK0dCb29sIEdsb2JhbFBhcmFtczo6c2V0RW5hYmxlVDFsaWIoY29uc3QgY2hhciAq
cykgewogICBHQm9vbCBvazsKIAogICBsb2NrR2xvYmFsUGFyYW1zOwpAQCAtMjk0MSw3ICsyOTQx
LDcgQEAKICAgcmV0dXJuIG9rOwogfQogCi1HQm9vbCBHbG9iYWxQYXJhbXM6OnNldEVuYWJsZUZy
ZWVUeXBlKGNoYXIgKnMpIHsKK0dCb29sIEdsb2JhbFBhcmFtczo6c2V0RW5hYmxlRnJlZVR5cGUo
Y29uc3QgY2hhciAqcykgewogICBHQm9vbCBvazsKIAogICBsb2NrR2xvYmFsUGFyYW1zOwpAQCAt
Mjk1MSw3ICsyOTUxLDcgQEAKIH0KIAogCi1HQm9vbCBHbG9iYWxQYXJhbXM6OnNldEFudGlhbGlh
cyhjaGFyICpzKSB7CitHQm9vbCBHbG9iYWxQYXJhbXM6OnNldEFudGlhbGlhcyhjb25zdCBjaGFy
ICpzKSB7CiAgIEdCb29sIG9rOwogCiAgIGxvY2tHbG9iYWxQYXJhbXM7CkBAIC0yOTYwLDcgKzI5
NjAsNyBAQAogICByZXR1cm4gb2s7CiB9CiAKLUdCb29sIEdsb2JhbFBhcmFtczo6c2V0VmVjdG9y
QW50aWFsaWFzKGNoYXIgKnMpIHsKK0dCb29sIEdsb2JhbFBhcmFtczo6c2V0VmVjdG9yQW50aWFs
aWFzKGNvbnN0IGNoYXIgKnMpIHsKICAgR0Jvb2wgb2s7CiAKICAgbG9ja0dsb2JhbFBhcmFtczsK
QEAgLTMwMzcsNyArMzAzNyw3IEBACiAjZW5kaWYKIH0KIAotWHBkZlNlY3VyaXR5SGFuZGxlciAq
R2xvYmFsUGFyYW1zOjpnZXRTZWN1cml0eUhhbmRsZXIoY2hhciAqbmFtZSkgeworWHBkZlNlY3Vy
aXR5SGFuZGxlciAqR2xvYmFsUGFyYW1zOjpnZXRTZWN1cml0eUhhbmRsZXIoY29uc3QgY2hhciAq
bmFtZSkgewogI2lmZGVmIEVOQUJMRV9QTFVHSU5TCiAgIFhwZGZTZWN1cml0eUhhbmRsZXIgKmhk
bHI7CiAgIGludCBpOwpAQCAtMzA3NSw3ICszMDc1LDcgQEAKIC8vIHBsdWdpbnMKIC8vLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCiAKLUdCb29sIEdsb2JhbFBhcmFtczo6bG9hZFBsdWdpbihjaGFyICp0eXBlLCBj
aGFyICpuYW1lKSB7CitHQm9vbCBHbG9iYWxQYXJhbXM6OmxvYWRQbHVnaW4oY29uc3QgY2hhciAq
dHlwZSwgY29uc3QgY2hhciAqbmFtZSkgewogICBQbHVnaW4gKnBsdWdpbjsKIAogICBpZiAoIShw
bHVnaW4gPSBQbHVnaW46OmxvYWQodHlwZSwgbmFtZSkpKSB7CmRpZmYgLXVyIHRleGxpdmUtMjAw
ODA4MTYtc291cmNlL2xpYnMveHBkZi5vcmlnL3hwZGYvR2xvYmFsUGFyYW1zLmggdGV4bGl2ZS0y
MDA4MDgxNi1zb3VyY2UvbGlicy94cGRmL3hwZGYvR2xvYmFsUGFyYW1zLmgKLS0tIHRleGxpdmUt
MjAwODA4MTYtc291cmNlL2xpYnMveHBkZi5vcmlnL3hwZGYvR2xvYmFsUGFyYW1zLmgJMjAwOC0w
NS0wOCAxNzo0MDo0MS4wMDAwMDAwMDAgKzA0MDAKKysrIHRleGxpdmUtMjAwODA4MTYtc291cmNl
L2xpYnMveHBkZi94cGRmL0dsb2JhbFBhcmFtcy5oCTIwMDgtMTEtMjEgMTc6Mjc6MDAuMDAwMDAw
MDAwICswMzAwCkBAIC0xNzIsOCArMTcyLDggQEAKIAkJCQkvLyAgIHRvZ2V0aGVyKQogICBHTGlz
dCAqY21kczsJCQkvLyBsaXN0IG9mIGNvbW1hbmRzIFtHU3RyaW5nXQogCi0gIEtleUJpbmRpbmco
aW50IGNvZGVBLCBpbnQgbW9kc0EsIGludCBjb250ZXh0QSwgY2hhciAqY21kMCk7Ci0gIEtleUJp
bmRpbmcoaW50IGNvZGVBLCBpbnQgbW9kc0EsIGludCBjb250ZXh0QSwgY2hhciAqY21kMCwgY2hh
ciAqY21kMSk7CisgIEtleUJpbmRpbmcoaW50IGNvZGVBLCBpbnQgbW9kc0EsIGludCBjb250ZXh0
QSwgY29uc3QgY2hhciAqY21kMCk7CisgIEtleUJpbmRpbmcoaW50IGNvZGVBLCBpbnQgbW9kc0Es
IGludCBjb250ZXh0QSwgY29uc3QgY2hhciAqY21kMCwgY29uc3QgY2hhciAqY21kMSk7CiAgIEtl
eUJpbmRpbmcoaW50IGNvZGVBLCBpbnQgbW9kc0EsIGludCBjb250ZXh0QSwgR0xpc3QgKmNtZHNB
KTsKICAgfktleUJpbmRpbmcoKTsKIH07CkBAIC0yMzIsMjYgKzIzMiwyNiBAQAogCiAgIC8vIElu
aXRpYWxpemUgdGhlIGdsb2JhbCBwYXJhbWV0ZXJzIGJ5IGF0dGVtcHRpbmcgdG8gcmVhZCBhIGNv
bmZpZwogICAvLyBmaWxlLgotICBHbG9iYWxQYXJhbXMoY2hhciAqY2ZnRmlsZU5hbWUpOworICBH
bG9iYWxQYXJhbXMoY29uc3QgY2hhciAqY2ZnRmlsZU5hbWUpOwogCiAgIC8vIEluaXRpYWxpemUg
aXQgd2l0aG91dCByZWFkaW5nIHRoZSBjb25maWcKICAgR2xvYmFsUGFyYW1zKCk7CiAKICAgfkds
b2JhbFBhcmFtcygpOwogCi0gIHZvaWQgc2V0QmFzZURpcihjaGFyICpkaXIpOwotICB2b2lkIHNl
dHVwQmFzZUZvbnRzKGNoYXIgKmRpcik7CisgIHZvaWQgc2V0QmFzZURpcihjb25zdCBjaGFyICpk
aXIpOworICB2b2lkIHNldHVwQmFzZUZvbnRzKGNvbnN0IGNoYXIgKmRpcik7CiAKICNpZm5kZWYg
UERGX1BBUlNFUl9PTkxZCi0gIHZvaWQgcGFyc2VMaW5lKGNoYXIgKmJ1ZiwgR1N0cmluZyAqZmls
ZU5hbWUsIGludCBsaW5lKTsKKyAgdm9pZCBwYXJzZUxpbmUoY29uc3QgY2hhciAqYnVmLCBHU3Ry
aW5nICpmaWxlTmFtZSwgaW50IGxpbmUpOwogI2VuZGlmCiAKICAgLy8tLS0tLSBhY2Nlc3NvcnMK
IAotICBDaGFyQ29kZSBnZXRNYWNSb21hbkNoYXJDb2RlKGNoYXIgKmNoYXJOYW1lKTsKKyAgQ2hh
ckNvZGUgZ2V0TWFjUm9tYW5DaGFyQ29kZShjb25zdCBjaGFyICpjaGFyTmFtZSk7CiAKICAgR1N0
cmluZyAqZ2V0QmFzZURpcigpOwotICBVbmljb2RlIG1hcE5hbWVUb1VuaWNvZGUoY2hhciAqY2hh
ck5hbWUpOworICBVbmljb2RlIG1hcE5hbWVUb1VuaWNvZGUoY29uc3QgY2hhciAqY2hhck5hbWUp
OwogICBVbmljb2RlTWFwICpnZXRSZXNpZGVudFVuaWNvZGVNYXAoR1N0cmluZyAqZW5jb2RpbmdO
YW1lKTsKICAgRklMRSAqZ2V0VW5pY29kZU1hcEZpbGUoR1N0cmluZyAqZW5jb2RpbmdOYW1lKTsK
ICAgRklMRSAqZmluZENNYXBGaWxlKEdTdHJpbmcgKmNvbGxlY3Rpb24sIEdTdHJpbmcgKmNNYXBO
YW1lKTsKQEAgLTI4MSw3ICsyODEsNyBAQAogICBFbmRPZkxpbmVLaW5kIGdldFRleHRFT0woKTsK
ICAgR0Jvb2wgZ2V0VGV4dFBhZ2VCcmVha3MoKTsKICAgR0Jvb2wgZ2V0VGV4dEtlZXBUaW55Q2hh
cnMoKTsKLSAgR1N0cmluZyAqZmluZEZvbnRGaWxlKEdTdHJpbmcgKmZvbnROYW1lLCBjaGFyICoq
ZXh0cyk7CisgIEdTdHJpbmcgKmZpbmRGb250RmlsZShHU3RyaW5nICpmb250TmFtZSwgY29uc3Qg
Y2hhciAqKmV4dHMpOwogICBHU3RyaW5nICpnZXRJbml0aWFsWm9vbSgpOwogICBHQm9vbCBnZXRD
b250aW51b3VzVmlldygpOwogICBHQm9vbCBnZXRFbmFibGVUMWxpYigpOwpAQCAtMzE0LDggKzMx
NCw4IEBACiAgIC8vLS0tLS0gZnVuY3Rpb25zIHRvIHNldCBwYXJhbWV0ZXJzCiAKICAgdm9pZCBh
ZGREaXNwbGF5Rm9udChEaXNwbGF5Rm9udFBhcmFtICpwYXJhbSk7Ci0gIHZvaWQgc2V0UFNGaWxl
KGNoYXIgKmZpbGUpOwotICBHQm9vbCBzZXRQU1BhcGVyU2l6ZShjaGFyICpzaXplKTsKKyAgdm9p
ZCBzZXRQU0ZpbGUoY29uc3QgY2hhciAqZmlsZSk7CisgIEdCb29sIHNldFBTUGFwZXJTaXplKGNv
bnN0IGNoYXIgKnNpemUpOwogICB2b2lkIHNldFBTUGFwZXJXaWR0aChpbnQgd2lkdGgpOwogICB2
b2lkIHNldFBTUGFwZXJIZWlnaHQoaW50IGhlaWdodCk7CiAgIHZvaWQgc2V0UFNJbWFnZWFibGVB
cmVhKGludCBsbHgsIGludCBsbHksIGludCB1cngsIGludCB1cnkpOwpAQCAtMzMyLDE2ICszMzIs
MTYgQEAKICAgdm9pZCBzZXRQU1ByZWxvYWQoR0Jvb2wgcHJlbG9hZCk7CiAgIHZvaWQgc2V0UFNP
UEkoR0Jvb2wgb3BpKTsKICAgdm9pZCBzZXRQU0FTQ0lJSGV4KEdCb29sIGhleCk7Ci0gIHZvaWQg
c2V0VGV4dEVuY29kaW5nKGNoYXIgKmVuY29kaW5nTmFtZSk7Ci0gIEdCb29sIHNldFRleHRFT0wo
Y2hhciAqcyk7CisgIHZvaWQgc2V0VGV4dEVuY29kaW5nKGNvbnN0IGNoYXIgKmVuY29kaW5nTmFt
ZSk7CisgIEdCb29sIHNldFRleHRFT0woY29uc3QgY2hhciAqcyk7CiAgIHZvaWQgc2V0VGV4dFBh
Z2VCcmVha3MoR0Jvb2wgcGFnZUJyZWFrcyk7CiAgIHZvaWQgc2V0VGV4dEtlZXBUaW55Q2hhcnMo
R0Jvb2wga2VlcCk7Ci0gIHZvaWQgc2V0SW5pdGlhbFpvb20oY2hhciAqcyk7CisgIHZvaWQgc2V0
SW5pdGlhbFpvb20oY29uc3QgY2hhciAqcyk7CiAgIHZvaWQgc2V0Q29udGludW91c1ZpZXcoR0Jv
b2wgY29udCk7Ci0gIEdCb29sIHNldEVuYWJsZVQxbGliKGNoYXIgKnMpOwotICBHQm9vbCBzZXRF
bmFibGVGcmVlVHlwZShjaGFyICpzKTsKLSAgR0Jvb2wgc2V0QW50aWFsaWFzKGNoYXIgKnMpOwot
ICBHQm9vbCBzZXRWZWN0b3JBbnRpYWxpYXMoY2hhciAqcyk7CisgIEdCb29sIHNldEVuYWJsZVQx
bGliKGNvbnN0IGNoYXIgKnMpOworICBHQm9vbCBzZXRFbmFibGVGcmVlVHlwZShjb25zdCBjaGFy
ICpzKTsKKyAgR0Jvb2wgc2V0QW50aWFsaWFzKGNvbnN0IGNoYXIgKnMpOworICBHQm9vbCBzZXRW
ZWN0b3JBbnRpYWxpYXMoY29uc3QgY2hhciAqcyk7CiAgIHZvaWQgc2V0U2NyZWVuVHlwZShTY3Jl
ZW5UeXBlIHQpOwogICB2b2lkIHNldFNjcmVlblNpemUoaW50IHNpemUpOwogICB2b2lkIHNldFNj
cmVlbkRvdFJhZGl1cyhpbnQgcik7CkBAIC0zNTYsNyArMzU2LDcgQEAKICAgLy8tLS0tLSBzZWN1
cml0eSBoYW5kbGVycwogCiAgIHZvaWQgYWRkU2VjdXJpdHlIYW5kbGVyKFhwZGZTZWN1cml0eUhh
bmRsZXIgKmhhbmRsZXIpOwotICBYcGRmU2VjdXJpdHlIYW5kbGVyICpnZXRTZWN1cml0eUhhbmRs
ZXIoY2hhciAqbmFtZSk7CisgIFhwZGZTZWN1cml0eUhhbmRsZXIgKmdldFNlY3VyaXR5SGFuZGxl
cihjb25zdCBjaGFyICpuYW1lKTsKIAogcHJpdmF0ZToKIApAQCAtMzc4LDcgKzM3OCw3IEBACiAg
IHZvaWQgcGFyc2VQU0ltYWdlYWJsZUFyZWEoR0xpc3QgKnRva2VucywgR1N0cmluZyAqZmlsZU5h
bWUsIGludCBsaW5lKTsKICAgdm9pZCBwYXJzZVBTTGV2ZWwoR0xpc3QgKnRva2VucywgR1N0cmlu
ZyAqZmlsZU5hbWUsIGludCBsaW5lKTsKICAgdm9pZCBwYXJzZVBTRm9udChHTGlzdCAqdG9rZW5z
LCBHU3RyaW5nICpmaWxlTmFtZSwgaW50IGxpbmUpOwotICB2b2lkIHBhcnNlUFNGb250MTYoY2hh
ciAqY21kTmFtZSwgR0xpc3QgKmZvbnRMaXN0LAorICB2b2lkIHBhcnNlUFNGb250MTYoY29uc3Qg
Y2hhciAqY21kTmFtZSwgR0xpc3QgKmZvbnRMaXN0LAogCQkgICAgIEdMaXN0ICp0b2tlbnMsIEdT
dHJpbmcgKmZpbGVOYW1lLCBpbnQgbGluZSk7CiAgIHZvaWQgcGFyc2VUZXh0RW5jb2RpbmcoR0xp
c3QgKnRva2VucywgR1N0cmluZyAqZmlsZU5hbWUsIGludCBsaW5lKTsKICAgdm9pZCBwYXJzZVRl
eHRFT0woR0xpc3QgKnRva2VucywgR1N0cmluZyAqZmlsZU5hbWUsIGludCBsaW5lKTsKQEAgLTM5
MCwyMSArMzkwLDIxIEBACiAgIHZvaWQgcGFyc2VVbmJpbmQoR0xpc3QgKnRva2VucywgR1N0cmlu
ZyAqZmlsZU5hbWUsIGludCBsaW5lKTsKICAgR0Jvb2wgcGFyc2VLZXkoR1N0cmluZyAqbW9kS2V5
U3RyLCBHU3RyaW5nICpjb250ZXh0U3RyLAogCQkgaW50ICpjb2RlLCBpbnQgKm1vZHMsIGludCAq
Y29udGV4dCwKLQkJIGNoYXIgKmNtZE5hbWUsCisJCSBjb25zdCBjaGFyICpjbWROYW1lLAogCQkg
R0xpc3QgKnRva2VucywgR1N0cmluZyAqZmlsZU5hbWUsIGludCBsaW5lKTsKICNlbmRpZgotICB2
b2lkIHBhcnNlQ29tbWFuZChjaGFyICpjbWROYW1lLCBHU3RyaW5nICoqdmFsLAorICB2b2lkIHBh
cnNlQ29tbWFuZChjb25zdCBjaGFyICpjbWROYW1lLCBHU3RyaW5nICoqdmFsLAogCQkgICAgR0xp
c3QgKnRva2VucywgR1N0cmluZyAqZmlsZU5hbWUsIGludCBsaW5lKTsKLSAgdm9pZCBwYXJzZVll
c05vKGNoYXIgKmNtZE5hbWUsIEdCb29sICpmbGFnLAorICB2b2lkIHBhcnNlWWVzTm8oY29uc3Qg
Y2hhciAqY21kTmFtZSwgR0Jvb2wgKmZsYWcsCiAJCSAgR0xpc3QgKnRva2VucywgR1N0cmluZyAq
ZmlsZU5hbWUsIGludCBsaW5lKTsKLSAgR0Jvb2wgcGFyc2VZZXNObzIoY2hhciAqdG9rZW4sIEdC
b29sICpmbGFnKTsKLSAgdm9pZCBwYXJzZUludGVnZXIoY2hhciAqY21kTmFtZSwgaW50ICp2YWws
CisgIEdCb29sIHBhcnNlWWVzTm8yKGNvbnN0IGNoYXIgKnRva2VuLCBHQm9vbCAqZmxhZyk7Cisg
IHZvaWQgcGFyc2VJbnRlZ2VyKGNvbnN0IGNoYXIgKmNtZE5hbWUsIGludCAqdmFsLAogCQkgICAg
R0xpc3QgKnRva2VucywgR1N0cmluZyAqZmlsZU5hbWUsIGludCBsaW5lKTsKLSAgdm9pZCBwYXJz
ZUZsb2F0KGNoYXIgKmNtZE5hbWUsIGRvdWJsZSAqdmFsLAorICB2b2lkIHBhcnNlRmxvYXQoY29u
c3QgY2hhciAqY21kTmFtZSwgZG91YmxlICp2YWwsCiAJCSAgR0xpc3QgKnRva2VucywgR1N0cmlu
ZyAqZmlsZU5hbWUsIGludCBsaW5lKTsKICAgVW5pY29kZU1hcCAqZ2V0VW5pY29kZU1hcDIoR1N0
cmluZyAqZW5jb2RpbmdOYW1lKTsKICNpZmRlZiBFTkFCTEVfUExVR0lOUwotICBHQm9vbCBsb2Fk
UGx1Z2luKGNoYXIgKnR5cGUsIGNoYXIgKm5hbWUpOworICBHQm9vbCBsb2FkUGx1Z2luKGNvbnN0
IGNoYXIgKnR5cGUsIGNvbnN0IGNoYXIgKm5hbWUpOwogI2VuZGlmCiAKICAgLy8tLS0tLSBzdGF0
aWMgdGFibGVzCmRpZmYgLXVyIHRleGxpdmUtMjAwODA4MTYtc291cmNlL2xpYnMveHBkZi5vcmln
L3hwZGYvTGluay5jYyB0ZXhsaXZlLTIwMDgwODE2LXNvdXJjZS9saWJzL3hwZGYveHBkZi9MaW5r
LmNjCi0tLSB0ZXhsaXZlLTIwMDgwODE2LXNvdXJjZS9saWJzL3hwZGYub3JpZy94cGRmL0xpbmsu
Y2MJMjAwNy0wNy0xMiAwMToxMzo1OS4wMDAwMDAwMDAgKzA0MDAKKysrIHRleGxpdmUtMjAwODA4
MTYtc291cmNlL2xpYnMveHBkZi94cGRmL0xpbmsuY2MJMjAwOC0xMS0yMSAxNzoxOToxMS4wMDAw
MDAwMDAgKzAzMDAKQEAgLTYyNiw3ICs2MjYsNyBAQAogLy8gTGlua1Vua25vd24KIC8vLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCiAKLUxpbmtVbmtub3duOjpMaW5rVW5rbm93bihjaGFyICphY3Rpb25BKSB7CitM
aW5rVW5rbm93bjo6TGlua1Vua25vd24oY29uc3QgY2hhciAqYWN0aW9uQSkgewogICBhY3Rpb24g
PSBuZXcgR1N0cmluZyhhY3Rpb25BKTsKIH0KIApkaWZmIC11ciB0ZXhsaXZlLTIwMDgwODE2LXNv
dXJjZS9saWJzL3hwZGYub3JpZy94cGRmL0xpbmsuaCB0ZXhsaXZlLTIwMDgwODE2LXNvdXJjZS9s
aWJzL3hwZGYveHBkZi9MaW5rLmgKLS0tIHRleGxpdmUtMjAwODA4MTYtc291cmNlL2xpYnMveHBk
Zi5vcmlnL3hwZGYvTGluay5oCTIwMDctMDctMTIgMDE6MTM6NTkuMDAwMDAwMDAwICswNDAwCisr
KyB0ZXhsaXZlLTIwMDgwODE2LXNvdXJjZS9saWJzL3hwZGYveHBkZi9MaW5rLmgJMjAwOC0xMS0y
MSAxNzoxODo0OC4wMDAwMDAwMDAgKzAzMDAKQEAgLTI4NCw3ICsyODQsNyBAQAogcHVibGljOgog
CiAgIC8vIEJ1aWxkIGEgTGlua1Vua25vd24gd2l0aCB0aGUgc3BlY2lmaWVkIGFjdGlvbiB0eXBl
LgotICBMaW5rVW5rbm93bihjaGFyICphY3Rpb25BKTsKKyAgTGlua1Vua25vd24oY29uc3QgY2hh
ciAqYWN0aW9uQSk7CiAKICAgLy8gRGVzdHJ1Y3Rvci4KICAgdmlydHVhbCB+TGlua1Vua25vd24o
KTsKZGlmZiAtdXIgdGV4bGl2ZS0yMDA4MDgxNi1zb3VyY2UvbGlicy94cGRmLm9yaWcveHBkZi9O
YW1lVG9DaGFyQ29kZS5jYyB0ZXhsaXZlLTIwMDgwODE2LXNvdXJjZS9saWJzL3hwZGYveHBkZi9O
YW1lVG9DaGFyQ29kZS5jYwotLS0gdGV4bGl2ZS0yMDA4MDgxNi1zb3VyY2UvbGlicy94cGRmLm9y
aWcveHBkZi9OYW1lVG9DaGFyQ29kZS5jYwkyMDA2LTAxLTE2IDAzOjA5OjI2LjAwMDAwMDAwMCAr
MDMwMAorKysgdGV4bGl2ZS0yMDA4MDgxNi1zb3VyY2UvbGlicy94cGRmL3hwZGYvTmFtZVRvQ2hh
ckNvZGUuY2MJMjAwOC0xMS0yMSAxNzoxOTo0Ni4wMDAwMDAwMDAgKzAzMDAKQEAgLTE5LDcgKzE5
LDcgQEAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIHN0cnVjdCBOYW1lVG9DaGFyQ29kZUVudHJ5IHsK
LSAgY2hhciAqbmFtZTsKKyAgY29uc3QgY2hhciAqbmFtZTsKICAgQ2hhckNvZGUgYzsKIH07CiAK
QEAgLTQxLDEzICs0MSwxMyBAQAogCiAgIGZvciAoaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKICAg
ICBpZiAodGFiW2ldLm5hbWUpIHsKLSAgICAgIGdmcmVlKHRhYltpXS5uYW1lKTsKKyAgICAgIGdm
cmVlKGNvbnN0X2Nhc3Q8Y2hhcio+KHRhYltpXS5uYW1lKSk7CiAgICAgfQogICB9CiAgIGdmcmVl
KHRhYik7CiB9CiAKLXZvaWQgTmFtZVRvQ2hhckNvZGU6OmFkZChjaGFyICpuYW1lLCBDaGFyQ29k
ZSBjKSB7Cit2b2lkIE5hbWVUb0NoYXJDb2RlOjphZGQoY29uc3QgY2hhciAqbmFtZSwgQ2hhckNv
ZGUgYykgewogICBOYW1lVG9DaGFyQ29kZUVudHJ5ICpvbGRUYWI7CiAgIGludCBoLCBpLCBvbGRT
aXplOwogCkBAIC04OSw3ICs4OSw3IEBACiAgICsrbGVuOwogfQogCi1DaGFyQ29kZSBOYW1lVG9D
aGFyQ29kZTo6bG9va3VwKGNoYXIgKm5hbWUpIHsKK0NoYXJDb2RlIE5hbWVUb0NoYXJDb2RlOjps
b29rdXAoY29uc3QgY2hhciAqbmFtZSkgewogICBpbnQgaDsKIAogICBoID0gaGFzaChuYW1lKTsK
QEAgLTEwNCw4ICsxMDQsOCBAQAogICByZXR1cm4gMDsKIH0KIAotaW50IE5hbWVUb0NoYXJDb2Rl
OjpoYXNoKGNoYXIgKm5hbWUpIHsKLSAgY2hhciAqcDsKK2ludCBOYW1lVG9DaGFyQ29kZTo6aGFz
aChjb25zdCBjaGFyICpuYW1lKSB7CisgIGNvbnN0IGNoYXIgKnA7CiAgIHVuc2lnbmVkIGludCBo
OwogCiAgIGggPSAwOwpkaWZmIC11ciB0ZXhsaXZlLTIwMDgwODE2LXNvdXJjZS9saWJzL3hwZGYu
b3JpZy94cGRmL05hbWVUb0NoYXJDb2RlLmggdGV4bGl2ZS0yMDA4MDgxNi1zb3VyY2UvbGlicy94
cGRmL3hwZGYvTmFtZVRvQ2hhckNvZGUuaAotLS0gdGV4bGl2ZS0yMDA4MDgxNi1zb3VyY2UvbGli
cy94cGRmLm9yaWcveHBkZi9OYW1lVG9DaGFyQ29kZS5oCTIwMDYtMDEtMTYgMDM6MDk6MjYuMDAw
MDAwMDAwICswMzAwCisrKyB0ZXhsaXZlLTIwMDgwODE2LXNvdXJjZS9saWJzL3hwZGYveHBkZi9O
YW1lVG9DaGFyQ29kZS5oCTIwMDgtMTEtMjEgMTc6MDU6MjUuMDAwMDAwMDAwICswMzAwCkBAIC0y
NywxMiArMjcsMTIgQEAKICAgTmFtZVRvQ2hhckNvZGUoKTsKICAgfk5hbWVUb0NoYXJDb2RlKCk7
CiAKLSAgdm9pZCBhZGQoY2hhciAqbmFtZSwgQ2hhckNvZGUgYyk7Ci0gIENoYXJDb2RlIGxvb2t1
cChjaGFyICpuYW1lKTsKKyAgdm9pZCBhZGQoY29uc3QgY2hhciAqbmFtZSwgQ2hhckNvZGUgYyk7
CisgIENoYXJDb2RlIGxvb2t1cChjb25zdCBjaGFyICpuYW1lKTsKIAogcHJpdmF0ZToKIAotICBp
bnQgaGFzaChjaGFyICpuYW1lKTsKKyAgaW50IGhhc2goY29uc3QgY2hhciAqbmFtZSk7CiAKICAg
TmFtZVRvQ2hhckNvZGVFbnRyeSAqdGFiOwogICBpbnQgc2l6ZTsKZGlmZiAtdXIgdGV4bGl2ZS0y
MDA4MDgxNi1zb3VyY2UvbGlicy94cGRmLm9yaWcveHBkZi9OYW1lVG9Vbmljb2RlVGFibGUuaCB0
ZXhsaXZlLTIwMDgwODE2LXNvdXJjZS9saWJzL3hwZGYveHBkZi9OYW1lVG9Vbmljb2RlVGFibGUu
aAotLS0gdGV4bGl2ZS0yMDA4MDgxNi1zb3VyY2UvbGlicy94cGRmLm9yaWcveHBkZi9OYW1lVG9V
bmljb2RlVGFibGUuaAkyMDA2LTAxLTE2IDAzOjA5OjI2LjAwMDAwMDAwMCArMDMwMAorKysgdGV4
bGl2ZS0yMDA4MDgxNi1zb3VyY2UvbGlicy94cGRmL3hwZGYvTmFtZVRvVW5pY29kZVRhYmxlLmgJ
MjAwOC0xMS0yMSAxNjoxODoxOS4wMDAwMDAwMDAgKzAzMDAKQEAgLTgsNyArOCw3IEBACiAKIHN0
YXRpYyBzdHJ1Y3QgewogICBVbmljb2RlIHU7Ci0gIGNoYXIgKm5hbWU7CisgIGNvbnN0IGNoYXIg
Km5hbWU7CiB9IG5hbWVUb1VuaWNvZGVUYWJbXSA9IHsKICAgezB4MDAyMSwgIiEifSwKICAgezB4
MDAyMywgIiMifSwKZGlmZiAtdXIgdGV4bGl2ZS0yMDA4MDgxNi1zb3VyY2UvbGlicy94cGRmLm9y
aWcveHBkZi9PYmplY3QuY2MgdGV4bGl2ZS0yMDA4MDgxNi1zb3VyY2UvbGlicy94cGRmL3hwZGYv
T2JqZWN0LmNjCi0tLSB0ZXhsaXZlLTIwMDgwODE2LXNvdXJjZS9saWJzL3hwZGYub3JpZy94cGRm
L09iamVjdC5jYwkyMDA2LTAxLTE2IDAzOjA5OjI2LjAwMDAwMDAwMCArMDMwMAorKysgdGV4bGl2
ZS0yMDA4MDgxNi1zb3VyY2UvbGlicy94cGRmL3hwZGYvT2JqZWN0LmNjCTIwMDgtMTEtMjEgMTc6
MjM6MjYuMDAwMDAwMDAwICswMzAwCkBAIC0yNCw3ICsyNCw3IEBACiAvLyBPYmplY3QKIC8vLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCiAKLWNoYXIgKm9ialR5cGVOYW1lc1tudW1PYmpUeXBlc10gPSB7Citjb25z
dCBjaGFyICpvYmpUeXBlTmFtZXNbbnVtT2JqVHlwZXNdID0gewogICAiYm9vbGVhbiIsCiAgICJp
bnRlZ2VyIiwKICAgInJlYWwiLApAQCAtMTEyLDcgKzExMiw3IEBACiAgICAgZGVsZXRlIHN0cmlu
ZzsKICAgICBicmVhazsKICAgY2FzZSBvYmpOYW1lOgotICAgIGdmcmVlKG5hbWUpOworICAgIGdm
cmVlKGNvbnN0X2Nhc3Q8Y2hhcio+KG5hbWUpKTsKICAgICBicmVhazsKICAgY2FzZSBvYmpBcnJh
eToKICAgICBpZiAoIWFycmF5LT5kZWNSZWYoKSkgewpAQCAtMTMwLDcgKzEzMCw3IEBACiAgICAg
fQogICAgIGJyZWFrOwogICBjYXNlIG9iakNtZDoKLSAgICBnZnJlZShjbWQpOworICAgIGdmcmVl
KGNvbnN0X2Nhc3Q8Y2hhcio+KGNtZCkpOwogICAgIGJyZWFrOwogICBkZWZhdWx0OgogICAgIGJy
ZWFrOwpAQCAtMTQxLDcgKzE0MSw3IEBACiAgIHR5cGUgPSBvYmpOb25lOwogfQogCi1jaGFyICpP
YmplY3Q6OmdldFR5cGVOYW1lKCkgeworY29uc3QgY2hhciAqT2JqZWN0OjpnZXRUeXBlTmFtZSgp
IHsKICAgcmV0dXJuIG9ialR5cGVOYW1lc1t0eXBlXTsKIH0KIApkaWZmIC11ciB0ZXhsaXZlLTIw
MDgwODE2LXNvdXJjZS9saWJzL3hwZGYub3JpZy94cGRmL09iamVjdC5oIHRleGxpdmUtMjAwODA4
MTYtc291cmNlL2xpYnMveHBkZi94cGRmL09iamVjdC5oCi0tLSB0ZXhsaXZlLTIwMDgwODE2LXNv
dXJjZS9saWJzL3hwZGYub3JpZy94cGRmL09iamVjdC5oCTIwMDYtMDEtMTYgMDM6MDk6MjYuMDAw
MDAwMDAwICswMzAwCisrKyB0ZXhsaXZlLTIwMDgwODE2LXNvdXJjZS9saWJzL3hwZGYveHBkZi9P
YmplY3QuaAkyMDA4LTExLTIxIDE3OjQ5OjMwLjAwMDAwMDAwMCArMDMwMApAQCAtODksNyArODks
NyBAQAogICAgIHsgaW5pdE9iaihvYmpSZWFsKTsgcmVhbCA9IHJlYWxBOyByZXR1cm4gdGhpczsg
fQogICBPYmplY3QgKmluaXRTdHJpbmcoR1N0cmluZyAqc3RyaW5nQSkKICAgICB7IGluaXRPYmoo
b2JqU3RyaW5nKTsgc3RyaW5nID0gc3RyaW5nQTsgcmV0dXJuIHRoaXM7IH0KLSAgT2JqZWN0ICpp
bml0TmFtZShjaGFyICpuYW1lQSkKKyAgT2JqZWN0ICppbml0TmFtZShjb25zdCBjaGFyICpuYW1l
QSkKICAgICB7IGluaXRPYmoob2JqTmFtZSk7IG5hbWUgPSBjb3B5U3RyaW5nKG5hbWVBKTsgcmV0
dXJuIHRoaXM7IH0KICAgT2JqZWN0ICppbml0TnVsbCgpCiAgICAgeyBpbml0T2JqKG9iak51bGwp
OyByZXR1cm4gdGhpczsgfQpAQCAtOTksNyArOTksNyBAQAogICBPYmplY3QgKmluaXRTdHJlYW0o
U3RyZWFtICpzdHJlYW1BKTsKICAgT2JqZWN0ICppbml0UmVmKGludCBudW1BLCBpbnQgZ2VuQSkK
ICAgICB7IGluaXRPYmoob2JqUmVmKTsgcmVmLm51bSA9IG51bUE7IHJlZi5nZW4gPSBnZW5BOyBy
ZXR1cm4gdGhpczsgfQotICBPYmplY3QgKmluaXRDbWQoY2hhciAqY21kQSkKKyAgT2JqZWN0ICpp
bml0Q21kKGNvbnN0IGNoYXIgKmNtZEEpCiAgICAgeyBpbml0T2JqKG9iakNtZCk7IGNtZCA9IGNv
cHlTdHJpbmcoY21kQSk7IHJldHVybiB0aGlzOyB9CiAgIE9iamVjdCAqaW5pdEVycm9yKCkKICAg
ICB7IGluaXRPYmoob2JqRXJyb3IpOyByZXR1cm4gdGhpczsgfQpAQCAtMTM1LDExICsxMzUsMTEg
QEAKICAgR0Jvb2wgaXNOb25lKCkgeyByZXR1cm4gdHlwZSA9PSBvYmpOb25lOyB9CiAKICAgLy8g
U3BlY2lhbCB0eXBlIGNoZWNraW5nLgotICBHQm9vbCBpc05hbWUoY2hhciAqbmFtZUEpCisgIEdC
b29sIGlzTmFtZShjb25zdCBjaGFyICpuYW1lQSkKICAgICB7IHJldHVybiB0eXBlID09IG9iak5h
bWUgJiYgIXN0cmNtcChuYW1lLCBuYW1lQSk7IH0KLSAgR0Jvb2wgaXNEaWN0KGNoYXIgKmRpY3RU
eXBlKTsKLSAgR0Jvb2wgaXNTdHJlYW0oY2hhciAqZGljdFR5cGUpOwotICBHQm9vbCBpc0NtZChj
aGFyICpjbWRBKQorICBHQm9vbCBpc0RpY3QoY29uc3QgY2hhciAqZGljdFR5cGUpOworICBHQm9v
bCBpc1N0cmVhbShjb25zdCBjaGFyICpkaWN0VHlwZSk7CisgIEdCb29sIGlzQ21kKGNvbnN0IGNo
YXIgKmNtZEEpCiAgICAgeyByZXR1cm4gdHlwZSA9PSBvYmpDbWQgJiYgIXN0cmNtcChjbWQsIGNt
ZEEpOyB9CiAKICAgLy8gQWNjZXNzb3JzLiAgTkI6IHRoZXNlIGFzc3VtZSBvYmplY3QgaXMgb2Yg
Y29ycmVjdCB0eXBlLgpAQCAtMTQ4LDE0ICsxNDgsMTQgQEAKICAgZG91YmxlIGdldFJlYWwoKSB7
IHJldHVybiByZWFsOyB9CiAgIGRvdWJsZSBnZXROdW0oKSB7IHJldHVybiB0eXBlID09IG9iaklu
dCA/IChkb3VibGUpaW50ZyA6IHJlYWw7IH0KICAgR1N0cmluZyAqZ2V0U3RyaW5nKCkgeyByZXR1
cm4gc3RyaW5nOyB9Ci0gIGNoYXIgKmdldE5hbWUoKSB7IHJldHVybiBuYW1lOyB9CisgIGNvbnN0
IGNoYXIgKmdldE5hbWUoKSB7IHJldHVybiBuYW1lOyB9CiAgIEFycmF5ICpnZXRBcnJheSgpIHsg
cmV0dXJuIGFycmF5OyB9CiAgIERpY3QgKmdldERpY3QoKSB7IHJldHVybiBkaWN0OyB9CiAgIFN0
cmVhbSAqZ2V0U3RyZWFtKCkgeyByZXR1cm4gc3RyZWFtOyB9CiAgIFJlZiBnZXRSZWYoKSB7IHJl
dHVybiByZWY7IH0KICAgaW50IGdldFJlZk51bSgpIHsgcmV0dXJuIHJlZi5udW07IH0KICAgaW50
IGdldFJlZkdlbigpIHsgcmV0dXJuIHJlZi5nZW47IH0KLSAgY2hhciAqZ2V0Q21kKCkgeyByZXR1
cm4gY21kOyB9CisgIGNvbnN0IGNoYXIgKmdldENtZCgpIHsgcmV0dXJuIGNtZDsgfQogCiAgIC8v
IEFycmF5IGFjY2Vzc29ycy4KICAgaW50IGFycmF5R2V0TGVuZ3RoKCk7CkBAIC0xNjUsMTYgKzE2
NSwxNiBAQAogCiAgIC8vIERpY3QgYWNjZXNzb3JzLgogICBpbnQgZGljdEdldExlbmd0aCgpOwot
ICB2b2lkIGRpY3RBZGQoY2hhciAqa2V5LCBPYmplY3QgKnZhbCk7Ci0gIEdCb29sIGRpY3RJcyhj
aGFyICpkaWN0VHlwZSk7Ci0gIE9iamVjdCAqZGljdExvb2t1cChjaGFyICprZXksIE9iamVjdCAq
b2JqKTsKLSAgT2JqZWN0ICpkaWN0TG9va3VwTkYoY2hhciAqa2V5LCBPYmplY3QgKm9iaik7Ci0g
IGNoYXIgKmRpY3RHZXRLZXkoaW50IGkpOworICB2b2lkIGRpY3RBZGQoY29uc3QgY2hhciAqa2V5
LCBPYmplY3QgKnZhbCk7CisgIEdCb29sIGRpY3RJcyhjb25zdCBjaGFyICpkaWN0VHlwZSk7Cisg
IE9iamVjdCAqZGljdExvb2t1cChjb25zdCBjaGFyICprZXksIE9iamVjdCAqb2JqKTsKKyAgT2Jq
ZWN0ICpkaWN0TG9va3VwTkYoY29uc3QgY2hhciAqa2V5LCBPYmplY3QgKm9iaik7CisgIGNvbnN0
IGNoYXIgKmRpY3RHZXRLZXkoaW50IGkpOwogICBPYmplY3QgKmRpY3RHZXRWYWwoaW50IGksIE9i
amVjdCAqb2JqKTsKICAgT2JqZWN0ICpkaWN0R2V0VmFsTkYoaW50IGksIE9iamVjdCAqb2JqKTsK
IAogICAvLyBTdHJlYW0gYWNjZXNzb3JzLgotICBHQm9vbCBzdHJlYW1JcyhjaGFyICpkaWN0VHlw
ZSk7CisgIEdCb29sIHN0cmVhbUlzKGNvbnN0IGNoYXIgKmRpY3RUeXBlKTsKICAgdm9pZCBzdHJl
YW1SZXNldCgpOwogICB2b2lkIHN0cmVhbUNsb3NlKCk7CiAgIGludCBzdHJlYW1HZXRDaGFyKCk7
CkBAIC0xODUsNyArMTg1LDcgQEAKICAgRGljdCAqc3RyZWFtR2V0RGljdCgpOwogCiAgIC8vIE91
dHB1dC4KLSAgY2hhciAqZ2V0VHlwZU5hbWUoKTsKKyAgY29uc3QgY2hhciAqZ2V0VHlwZU5hbWUo
KTsKICAgdm9pZCBwcmludChGSUxFICpmID0gc3Rkb3V0KTsKIAogICAvLyBNZW1vcnkgdGVzdGlu
Zy4KQEAgLTE5OSwxMiArMTk5LDEyIEBACiAgICAgaW50IGludGc7CQkJLy8gICBpbnRlZ2VyCiAg
ICAgZG91YmxlIHJlYWw7CQkvLyAgIHJlYWwKICAgICBHU3RyaW5nICpzdHJpbmc7CQkvLyAgIHN0
cmluZwotICAgIGNoYXIgKm5hbWU7CQkJLy8gICBuYW1lCisgICAgY29uc3QgY2hhciAqbmFtZTsJ
CS8vICAgbmFtZQogICAgIEFycmF5ICphcnJheTsJCS8vICAgYXJyYXkKICAgICBEaWN0ICpkaWN0
OwkJCS8vICAgZGljdGlvbmFyeQogICAgIFN0cmVhbSAqc3RyZWFtOwkJLy8gICBzdHJlYW0KICAg
ICBSZWYgcmVmOwkJCS8vICAgaW5kaXJlY3QgcmVmZXJlbmNlCi0gICAgY2hhciAqY21kOwkJCS8v
ICAgY29tbWFuZAorICAgIGNvbnN0IGNoYXIgKmNtZDsJCS8vICAgY29tbWFuZAogICB9OwogCiAj
aWZkZWYgREVCVUdfTUVNCkBAIC0yNDAsMjIgKzI0MCwyMiBAQAogaW5saW5lIGludCBPYmplY3Q6
OmRpY3RHZXRMZW5ndGgoKQogICB7IHJldHVybiBkaWN0LT5nZXRMZW5ndGgoKTsgfQogCi1pbmxp
bmUgdm9pZCBPYmplY3Q6OmRpY3RBZGQoY2hhciAqa2V5LCBPYmplY3QgKnZhbCkKK2lubGluZSB2
b2lkIE9iamVjdDo6ZGljdEFkZChjb25zdCBjaGFyICprZXksIE9iamVjdCAqdmFsKQogICB7IGRp
Y3QtPmFkZChrZXksIHZhbCk7IH0KIAotaW5saW5lIEdCb29sIE9iamVjdDo6ZGljdElzKGNoYXIg
KmRpY3RUeXBlKQoraW5saW5lIEdCb29sIE9iamVjdDo6ZGljdElzKGNvbnN0IGNoYXIgKmRpY3RU
eXBlKQogICB7IHJldHVybiBkaWN0LT5pcyhkaWN0VHlwZSk7IH0KIAotaW5saW5lIEdCb29sIE9i
amVjdDo6aXNEaWN0KGNoYXIgKmRpY3RUeXBlKQoraW5saW5lIEdCb29sIE9iamVjdDo6aXNEaWN0
KGNvbnN0IGNoYXIgKmRpY3RUeXBlKQogICB7IHJldHVybiB0eXBlID09IG9iakRpY3QgJiYgZGlj
dElzKGRpY3RUeXBlKTsgfQogCi1pbmxpbmUgT2JqZWN0ICpPYmplY3Q6OmRpY3RMb29rdXAoY2hh
ciAqa2V5LCBPYmplY3QgKm9iaikKK2lubGluZSBPYmplY3QgKk9iamVjdDo6ZGljdExvb2t1cChj
b25zdCBjaGFyICprZXksIE9iamVjdCAqb2JqKQogICB7IHJldHVybiBkaWN0LT5sb29rdXAoa2V5
LCBvYmopOyB9CiAKLWlubGluZSBPYmplY3QgKk9iamVjdDo6ZGljdExvb2t1cE5GKGNoYXIgKmtl
eSwgT2JqZWN0ICpvYmopCitpbmxpbmUgT2JqZWN0ICpPYmplY3Q6OmRpY3RMb29rdXBORihjb25z
dCBjaGFyICprZXksIE9iamVjdCAqb2JqKQogICB7IHJldHVybiBkaWN0LT5sb29rdXBORihrZXks
IG9iaik7IH0KIAotaW5saW5lIGNoYXIgKk9iamVjdDo6ZGljdEdldEtleShpbnQgaSkKK2lubGlu
ZSBjb25zdCBjaGFyICpPYmplY3Q6OmRpY3RHZXRLZXkoaW50IGkpCiAgIHsgcmV0dXJuIGRpY3Qt
PmdldEtleShpKTsgfQogCiBpbmxpbmUgT2JqZWN0ICpPYmplY3Q6OmRpY3RHZXRWYWwoaW50IGks
IE9iamVjdCAqb2JqKQpAQCAtMjcwLDEwICsyNzAsMTAgQEAKIAogI2luY2x1ZGUgIlN0cmVhbS5o
IgogCi1pbmxpbmUgR0Jvb2wgT2JqZWN0OjpzdHJlYW1JcyhjaGFyICpkaWN0VHlwZSkKK2lubGlu
ZSBHQm9vbCBPYmplY3Q6OnN0cmVhbUlzKGNvbnN0IGNoYXIgKmRpY3RUeXBlKQogICB7IHJldHVy
biBzdHJlYW0tPmdldERpY3QoKS0+aXMoZGljdFR5cGUpOyB9CiAKLWlubGluZSBHQm9vbCBPYmpl
Y3Q6OmlzU3RyZWFtKGNoYXIgKmRpY3RUeXBlKQoraW5saW5lIEdCb29sIE9iamVjdDo6aXNTdHJl
YW0oY29uc3QgY2hhciAqZGljdFR5cGUpCiAgIHsgcmV0dXJuIHR5cGUgPT0gb2JqU3RyZWFtICYm
IHN0cmVhbUlzKGRpY3RUeXBlKTsgfQogCiBpbmxpbmUgdm9pZCBPYmplY3Q6OnN0cmVhbVJlc2V0
KCkKZGlmZiAtdXIgdGV4bGl2ZS0yMDA4MDgxNi1zb3VyY2UvbGlicy94cGRmLm9yaWcveHBkZi9Q
YWdlLmNjIHRleGxpdmUtMjAwODA4MTYtc291cmNlL2xpYnMveHBkZi94cGRmL1BhZ2UuY2MKLS0t
IHRleGxpdmUtMjAwODA4MTYtc291cmNlL2xpYnMveHBkZi5vcmlnL3hwZGYvUGFnZS5jYwkyMDA4
LTA1LTA4IDE3OjQwOjQxLjAwMDAwMDAwMCArMDQwMAorKysgdGV4bGl2ZS0yMDA4MDgxNi1zb3Vy
Y2UvbGlicy94cGRmL3hwZGYvUGFnZS5jYwkyMDA4LTExLTIxIDE3OjQzOjI1LjAwMDAwMDAwMCAr
MDMwMApAQCAtMTg0LDcgKzE4NCw3IEBACiAgIHJlc291cmNlcy5mcmVlKCk7CiB9CiAKLUdCb29s
IFBhZ2VBdHRyczo6cmVhZEJveChEaWN0ICpkaWN0LCBjaGFyICprZXksIFBERlJlY3RhbmdsZSAq
Ym94KSB7CitHQm9vbCBQYWdlQXR0cnM6OnJlYWRCb3goRGljdCAqZGljdCwgY29uc3QgY2hhciAq
a2V5LCBQREZSZWN0YW5nbGUgKmJveCkgewogICBQREZSZWN0YW5nbGUgdG1wOwogICBkb3VibGUg
dDsKICAgT2JqZWN0IG9iajEsIG9iajI7CmRpZmYgLXVyIHRleGxpdmUtMjAwODA4MTYtc291cmNl
L2xpYnMveHBkZi5vcmlnL3hwZGYvUGFnZS5oIHRleGxpdmUtMjAwODA4MTYtc291cmNlL2xpYnMv
eHBkZi94cGRmL1BhZ2UuaAotLS0gdGV4bGl2ZS0yMDA4MDgxNi1zb3VyY2UvbGlicy94cGRmLm9y
aWcveHBkZi9QYWdlLmgJMjAwOC0wNS0wOCAxNzo0MDo0MS4wMDAwMDAwMDAgKzA0MDAKKysrIHRl
eGxpdmUtMjAwODA4MTYtc291cmNlL2xpYnMveHBkZi94cGRmL1BhZ2UuaAkyMDA4LTExLTIxIDE3
OjQzOjM2LjAwMDAwMDAwMCArMDMwMApAQCAtMTE0LDcgKzExNCw3IEBACiAKIHByaXZhdGU6CiAK
LSAgR0Jvb2wgcmVhZEJveChEaWN0ICpkaWN0LCBjaGFyICprZXksIFBERlJlY3RhbmdsZSAqYm94
KTsKKyAgR0Jvb2wgcmVhZEJveChEaWN0ICpkaWN0LCBjb25zdCBjaGFyICprZXksIFBERlJlY3Rh
bmdsZSAqYm94KTsKIAogICBQREZSZWN0YW5nbGUgbWVkaWFCb3g7CiAgIFBERlJlY3RhbmdsZSBj
cm9wQm94OwpkaWZmIC11ciB0ZXhsaXZlLTIwMDgwODE2LXNvdXJjZS9saWJzL3hwZGYub3JpZy94
cGRmL1N0cmVhbS5jYyB0ZXhsaXZlLTIwMDgwODE2LXNvdXJjZS9saWJzL3hwZGYveHBkZi9TdHJl
YW0uY2MKLS0tIHRleGxpdmUtMjAwODA4MTYtc291cmNlL2xpYnMveHBkZi5vcmlnL3hwZGYvU3Ry
ZWFtLmNjCTIwMDgtMDMtMjMgMTk6Mzg6MzMuMDAwMDAwMDAwICswMzAwCisrKyB0ZXhsaXZlLTIw
MDgwODE2LXNvdXJjZS9saWJzL3hwZGYveHBkZi9TdHJlYW0uY2MJMjAwOC0xMS0yMSAxNzo1MDow
OC4wMDAwMDAwMDAgKzAzMDAKQEAgLTg1LDcgKzg1LDcgQEAKICAgcmV0dXJuIGJ1ZjsKIH0KIAot
R1N0cmluZyAqU3RyZWFtOjpnZXRQU0ZpbHRlcihpbnQgcHNMZXZlbCwgY2hhciAqaW5kZW50KSB7
CitHU3RyaW5nICpTdHJlYW06OmdldFBTRmlsdGVyKGludCBwc0xldmVsLCBjb25zdCBjaGFyICpp
bmRlbnQpIHsKICAgcmV0dXJuIG5ldyBHU3RyaW5nKCk7CiB9CiAKQEAgLTEzMyw3ICsxMzMsNyBA
QAogICByZXR1cm4gc3RyOwogfQogCi1TdHJlYW0gKlN0cmVhbTo6bWFrZUZpbHRlcihjaGFyICpu
YW1lLCBTdHJlYW0gKnN0ciwgT2JqZWN0ICpwYXJhbXMpIHsKK1N0cmVhbSAqU3RyZWFtOjptYWtl
RmlsdGVyKGNvbnN0IGNoYXIgKm5hbWUsIFN0cmVhbSAqc3RyLCBPYmplY3QgKnBhcmFtcykgewog
ICBpbnQgcHJlZDsJCQkvLyBwYXJhbWV0ZXJzCiAgIGludCBjb2xvcnM7CiAgIGludCBiaXRzOwpA
QCAtODc4LDcgKzg3OCw3IEBACiAgIHJldHVybiBidWY7CiB9CiAKLUdTdHJpbmcgKkFTQ0lJSGV4
U3RyZWFtOjpnZXRQU0ZpbHRlcihpbnQgcHNMZXZlbCwgY2hhciAqaW5kZW50KSB7CitHU3RyaW5n
ICpBU0NJSUhleFN0cmVhbTo6Z2V0UFNGaWx0ZXIoaW50IHBzTGV2ZWwsIGNvbnN0IGNoYXIgKmlu
ZGVudCkgewogICBHU3RyaW5nICpzOwogCiAgIGlmIChwc0xldmVsIDwgMikgewpAQCAtOTU5LDcg
Kzk1OSw3IEBACiAgIHJldHVybiBiW2luZGV4XTsKIH0KIAotR1N0cmluZyAqQVNDSUk4NVN0cmVh
bTo6Z2V0UFNGaWx0ZXIoaW50IHBzTGV2ZWwsIGNoYXIgKmluZGVudCkgeworR1N0cmluZyAqQVND
SUk4NVN0cmVhbTo6Z2V0UFNGaWx0ZXIoaW50IHBzTGV2ZWwsIGNvbnN0IGNoYXIgKmluZGVudCkg
ewogICBHU3RyaW5nICpzOwogCiAgIGlmIChwc0xldmVsIDwgMikgewpAQCAtMTE0NSw3ICsxMTQ1
LDcgQEAKICAgcmV0dXJuIGNvZGU7CiB9CiAKLUdTdHJpbmcgKkxaV1N0cmVhbTo6Z2V0UFNGaWx0
ZXIoaW50IHBzTGV2ZWwsIGNoYXIgKmluZGVudCkgeworR1N0cmluZyAqTFpXU3RyZWFtOjpnZXRQ
U0ZpbHRlcihpbnQgcHNMZXZlbCwgY29uc3QgY2hhciAqaW5kZW50KSB7CiAgIEdTdHJpbmcgKnM7
CiAKICAgaWYgKHBzTGV2ZWwgPCAyIHx8IHByZWQpIHsKQEAgLTExODYsNyArMTE4Niw3IEBACiAg
IGVvZiA9IGdGYWxzZTsKIH0KIAotR1N0cmluZyAqUnVuTGVuZ3RoU3RyZWFtOjpnZXRQU0ZpbHRl
cihpbnQgcHNMZXZlbCwgY2hhciAqaW5kZW50KSB7CitHU3RyaW5nICpSdW5MZW5ndGhTdHJlYW06
OmdldFBTRmlsdGVyKGludCBwc0xldmVsLCBjb25zdCBjaGFyICppbmRlbnQpIHsKICAgR1N0cmlu
ZyAqczsKIAogICBpZiAocHNMZXZlbCA8IDIpIHsKQEAgLTE4MzQsNyArMTgzNCw3IEBACiAgIHJl
dHVybiAoaW5wdXRCdWYgPj4gKGlucHV0Qml0cyAtIG4pKSAmICgweGZmZmYgPj4gKDE2IC0gbikp
OwogfQogCi1HU3RyaW5nICpDQ0lUVEZheFN0cmVhbTo6Z2V0UFNGaWx0ZXIoaW50IHBzTGV2ZWws
IGNoYXIgKmluZGVudCkgeworR1N0cmluZyAqQ0NJVFRGYXhTdHJlYW06OmdldFBTRmlsdGVyKGlu
dCBwc0xldmVsLCBjb25zdCBjaGFyICppbmRlbnQpIHsKICAgR1N0cmluZyAqczsKICAgY2hhciBz
MVs1MF07CiAKQEAgLTMyODksNyArMzI4OSw3IEBACiAgIHJldHVybiAoYzEgPDwgOCkgKyBjMjsK
IH0KIAotR1N0cmluZyAqRENUU3RyZWFtOjpnZXRQU0ZpbHRlcihpbnQgcHNMZXZlbCwgY2hhciAq
aW5kZW50KSB7CitHU3RyaW5nICpEQ1RTdHJlYW06OmdldFBTRmlsdGVyKGludCBwc0xldmVsLCBj
b25zdCBjaGFyICppbmRlbnQpIHsKICAgR1N0cmluZyAqczsKIAogICBpZiAocHNMZXZlbCA8IDIp
IHsKQEAgLTQwNTEsNyArNDA1MSw3IEBACiAgIHJldHVybiBjOwogfQogCi1HU3RyaW5nICpGbGF0
ZVN0cmVhbTo6Z2V0UFNGaWx0ZXIoaW50IHBzTGV2ZWwsIGNoYXIgKmluZGVudCkgeworR1N0cmlu
ZyAqRmxhdGVTdHJlYW06OmdldFBTRmlsdGVyKGludCBwc0xldmVsLCBjb25zdCBjaGFyICppbmRl
bnQpIHsKICAgR1N0cmluZyAqczsKIAogICBpZiAocHNMZXZlbCA8IDMgfHwgcHJlZCkgewpAQCAt
NDQ2Niw3ICs0NDY2LDcgQEAKIH0KIAogR0Jvb2wgQVNDSUlIZXhFbmNvZGVyOjpmaWxsQnVmKCkg
ewotICBzdGF0aWMgY2hhciAqaGV4ID0gIjAxMjM0NTY3ODlhYmNkZWYiOworICBzdGF0aWMgY29u
c3QgY2hhciAqaGV4ID0gIjAxMjM0NTY3ODlhYmNkZWYiOwogICBpbnQgYzsKIAogICBpZiAoZW9m
KSB7CmRpZmYgLXVyIHRleGxpdmUtMjAwODA4MTYtc291cmNlL2xpYnMveHBkZi5vcmlnL3hwZGYv
U3RyZWFtLmggdGV4bGl2ZS0yMDA4MDgxNi1zb3VyY2UvbGlicy94cGRmL3hwZGYvU3RyZWFtLmgK
LS0tIHRleGxpdmUtMjAwODA4MTYtc291cmNlL2xpYnMveHBkZi5vcmlnL3hwZGYvU3RyZWFtLmgJ
MjAwOC0wNS0wOCAxNzo0MDo0MS4wMDAwMDAwMDAgKzA0MDAKKysrIHRleGxpdmUtMjAwODA4MTYt
c291cmNlL2xpYnMveHBkZi94cGRmL1N0cmVhbS5oCTIwMDgtMTEtMjEgMTc6NTA6MjMuMDAwMDAw
MDAwICswMzAwCkBAIC0xNTQsNyArMTU0LDcgQEAKICAgdmlydHVhbCB2b2lkIHNldFBvcyhHdWlu
dCBwb3MsIGludCBkaXIgPSAwKSA9IDA7CiAKICAgLy8gR2V0IFBvc3RTY3JpcHQgY29tbWFuZCBm
b3IgdGhlIGZpbHRlcihzKS4KLSAgdmlydHVhbCBHU3RyaW5nICpnZXRQU0ZpbHRlcihpbnQgcHNM
ZXZlbCwgY2hhciAqaW5kZW50KTsKKyAgdmlydHVhbCBHU3RyaW5nICpnZXRQU0ZpbHRlcihpbnQg
cHNMZXZlbCwgY29uc3QgY2hhciAqaW5kZW50KTsKIAogICAvLyBEb2VzIHRoaXMgc3RyZWFtIHR5
cGUgcG90ZW50aWFsbHkgY29udGFpbiBub24tcHJpbnRhYmxlIGNoYXJzPwogICB2aXJ0dWFsIEdC
b29sIGlzQmluYXJ5KEdCb29sIGxhc3QgPSBnVHJ1ZSkgPSAwOwpAQCAtMTg1LDcgKzE4NSw3IEBA
CiAKIHByaXZhdGU6CiAKLSAgU3RyZWFtICptYWtlRmlsdGVyKGNoYXIgKm5hbWUsIFN0cmVhbSAq
c3RyLCBPYmplY3QgKnBhcmFtcyk7CisgIFN0cmVhbSAqbWFrZUZpbHRlcihjb25zdCBjaGFyICpu
YW1lLCBTdHJlYW0gKnN0ciwgT2JqZWN0ICpwYXJhbXMpOwogCiAgIGludCByZWY7CQkJLy8gcmVm
ZXJlbmNlIGNvdW50CiB9OwpAQCAtNDQwLDcgKzQ0MCw3IEBACiAgIHZpcnR1YWwgaW50IGdldENo
YXIoKQogICAgIHsgaW50IGMgPSBsb29rQ2hhcigpOyBidWYgPSBFT0Y7IHJldHVybiBjOyB9CiAg
IHZpcnR1YWwgaW50IGxvb2tDaGFyKCk7Ci0gIHZpcnR1YWwgR1N0cmluZyAqZ2V0UFNGaWx0ZXIo
aW50IHBzTGV2ZWwsIGNoYXIgKmluZGVudCk7CisgIHZpcnR1YWwgR1N0cmluZyAqZ2V0UFNGaWx0
ZXIoaW50IHBzTGV2ZWwsIGNvbnN0IGNoYXIgKmluZGVudCk7CiAgIHZpcnR1YWwgR0Jvb2wgaXNC
aW5hcnkoR0Jvb2wgbGFzdCA9IGdUcnVlKTsKIAogcHJpdmF0ZToKQEAgLTQ2Myw3ICs0NjMsNyBA
QAogICB2aXJ0dWFsIGludCBnZXRDaGFyKCkKICAgICB7IGludCBjaCA9IGxvb2tDaGFyKCk7ICsr
aW5kZXg7IHJldHVybiBjaDsgfQogICB2aXJ0dWFsIGludCBsb29rQ2hhcigpOwotICB2aXJ0dWFs
IEdTdHJpbmcgKmdldFBTRmlsdGVyKGludCBwc0xldmVsLCBjaGFyICppbmRlbnQpOworICB2aXJ0
dWFsIEdTdHJpbmcgKmdldFBTRmlsdGVyKGludCBwc0xldmVsLCBjb25zdCBjaGFyICppbmRlbnQp
OwogICB2aXJ0dWFsIEdCb29sIGlzQmluYXJ5KEdCb29sIGxhc3QgPSBnVHJ1ZSk7CiAKIHByaXZh
dGU6CkBAIC00ODksNyArNDg5LDcgQEAKICAgdmlydHVhbCBpbnQgZ2V0Q2hhcigpOwogICB2aXJ0
dWFsIGludCBsb29rQ2hhcigpOwogICB2aXJ0dWFsIGludCBnZXRSYXdDaGFyKCk7Ci0gIHZpcnR1
YWwgR1N0cmluZyAqZ2V0UFNGaWx0ZXIoaW50IHBzTGV2ZWwsIGNoYXIgKmluZGVudCk7CisgIHZp
cnR1YWwgR1N0cmluZyAqZ2V0UFNGaWx0ZXIoaW50IHBzTGV2ZWwsIGNvbnN0IGNoYXIgKmluZGVu
dCk7CiAgIHZpcnR1YWwgR0Jvb2wgaXNCaW5hcnkoR0Jvb2wgbGFzdCA9IGdUcnVlKTsKIAogcHJp
dmF0ZToKQEAgLTUzMyw3ICs1MzMsNyBAQAogICAgIHsgcmV0dXJuIChidWZQdHIgPj0gYnVmRW5k
ICYmICFmaWxsQnVmKCkpID8gRU9GIDogKCpidWZQdHIrKyAmIDB4ZmYpOyB9CiAgIHZpcnR1YWwg
aW50IGxvb2tDaGFyKCkKICAgICB7IHJldHVybiAoYnVmUHRyID49IGJ1ZkVuZCAmJiAhZmlsbEJ1
ZigpKSA/IEVPRiA6ICgqYnVmUHRyICYgMHhmZik7IH0KLSAgdmlydHVhbCBHU3RyaW5nICpnZXRQ
U0ZpbHRlcihpbnQgcHNMZXZlbCwgY2hhciAqaW5kZW50KTsKKyAgdmlydHVhbCBHU3RyaW5nICpn
ZXRQU0ZpbHRlcihpbnQgcHNMZXZlbCwgY29uc3QgY2hhciAqaW5kZW50KTsKICAgdmlydHVhbCBH
Qm9vbCBpc0JpbmFyeShHQm9vbCBsYXN0ID0gZ1RydWUpOwogCiBwcml2YXRlOgpAQCAtNTY0LDcg
KzU2NCw3IEBACiAgIHZpcnR1YWwgaW50IGdldENoYXIoKQogICAgIHsgaW50IGMgPSBsb29rQ2hh
cigpOyBidWYgPSBFT0Y7IHJldHVybiBjOyB9CiAgIHZpcnR1YWwgaW50IGxvb2tDaGFyKCk7Ci0g
IHZpcnR1YWwgR1N0cmluZyAqZ2V0UFNGaWx0ZXIoaW50IHBzTGV2ZWwsIGNoYXIgKmluZGVudCk7
CisgIHZpcnR1YWwgR1N0cmluZyAqZ2V0UFNGaWx0ZXIoaW50IHBzTGV2ZWwsIGNvbnN0IGNoYXIg
KmluZGVudCk7CiAgIHZpcnR1YWwgR0Jvb2wgaXNCaW5hcnkoR0Jvb2wgbGFzdCA9IGdUcnVlKTsK
IAogcHJpdmF0ZToKQEAgLTYzNyw3ICs2MzcsNyBAQAogICB2aXJ0dWFsIHZvaWQgY2xvc2UoKTsK
ICAgdmlydHVhbCBpbnQgZ2V0Q2hhcigpOwogICB2aXJ0dWFsIGludCBsb29rQ2hhcigpOwotICB2
aXJ0dWFsIEdTdHJpbmcgKmdldFBTRmlsdGVyKGludCBwc0xldmVsLCBjaGFyICppbmRlbnQpOwor
ICB2aXJ0dWFsIEdTdHJpbmcgKmdldFBTRmlsdGVyKGludCBwc0xldmVsLCBjb25zdCBjaGFyICpp
bmRlbnQpOwogICB2aXJ0dWFsIEdCb29sIGlzQmluYXJ5KEdCb29sIGxhc3QgPSBnVHJ1ZSk7CiAg
IFN0cmVhbSAqZ2V0UmF3U3RyZWFtKCkgeyByZXR1cm4gc3RyOyB9CiAKQEAgLTc0MCw3ICs3NDAs
NyBAQAogICB2aXJ0dWFsIGludCBnZXRDaGFyKCk7CiAgIHZpcnR1YWwgaW50IGxvb2tDaGFyKCk7
CiAgIHZpcnR1YWwgaW50IGdldFJhd0NoYXIoKTsKLSAgdmlydHVhbCBHU3RyaW5nICpnZXRQU0Zp
bHRlcihpbnQgcHNMZXZlbCwgY2hhciAqaW5kZW50KTsKKyAgdmlydHVhbCBHU3RyaW5nICpnZXRQ
U0ZpbHRlcihpbnQgcHNMZXZlbCwgY29uc3QgY2hhciAqaW5kZW50KTsKICAgdmlydHVhbCBHQm9v
bCBpc0JpbmFyeShHQm9vbCBsYXN0ID0gZ1RydWUpOwogCiBwcml2YXRlOgpAQCAtNzkzLDcgKzc5
Myw3IEBACiAgIHZpcnR1YWwgdm9pZCByZXNldCgpIHt9CiAgIHZpcnR1YWwgaW50IGdldENoYXIo
KSB7IHJldHVybiBFT0Y7IH0KICAgdmlydHVhbCBpbnQgbG9va0NoYXIoKSB7IHJldHVybiBFT0Y7
IH0KLSAgdmlydHVhbCBHU3RyaW5nICpnZXRQU0ZpbHRlcihpbnQgcHNMZXZlbCwgY2hhciAqaW5k
ZW50KSAgeyByZXR1cm4gTlVMTDsgfQorICB2aXJ0dWFsIEdTdHJpbmcgKmdldFBTRmlsdGVyKGlu
dCBwc0xldmVsLCBjb25zdCBjaGFyICppbmRlbnQpICB7IHJldHVybiBOVUxMOyB9CiAgIHZpcnR1
YWwgR0Jvb2wgaXNCaW5hcnkoR0Jvb2wgbGFzdCA9IGdUcnVlKSB7IHJldHVybiBnRmFsc2U7IH0K
IH07CiAKQEAgLTgxMCw3ICs4MTAsNyBAQAogICB2aXJ0dWFsIHZvaWQgcmVzZXQoKTsKICAgdmly
dHVhbCBpbnQgZ2V0Q2hhcigpOwogICB2aXJ0dWFsIGludCBsb29rQ2hhcigpOwotICB2aXJ0dWFs
IEdTdHJpbmcgKmdldFBTRmlsdGVyKGludCBwc0xldmVsLCBjaGFyICppbmRlbnQpIHsgcmV0dXJu
IE5VTEw7IH0KKyAgdmlydHVhbCBHU3RyaW5nICpnZXRQU0ZpbHRlcihpbnQgcHNMZXZlbCwgY29u
c3QgY2hhciAqaW5kZW50KSB7IHJldHVybiBOVUxMOyB9CiAgIHZpcnR1YWwgR0Jvb2wgaXNCaW5h
cnkoR0Jvb2wgbGFzdCA9IGdUcnVlKTsKICAgdmlydHVhbCBHQm9vbCBpc0VuY29kZXIoKSB7IHJl
dHVybiBnVHJ1ZTsgfQogCkBAIC04MzUsNyArODM1LDcgQEAKICAgICB7IHJldHVybiAoYnVmUHRy
ID49IGJ1ZkVuZCAmJiAhZmlsbEJ1ZigpKSA/IEVPRiA6ICgqYnVmUHRyKysgJiAweGZmKTsgfQog
ICB2aXJ0dWFsIGludCBsb29rQ2hhcigpCiAgICAgeyByZXR1cm4gKGJ1ZlB0ciA+PSBidWZFbmQg
JiYgIWZpbGxCdWYoKSkgPyBFT0YgOiAoKmJ1ZlB0ciAmIDB4ZmYpOyB9Ci0gIHZpcnR1YWwgR1N0
cmluZyAqZ2V0UFNGaWx0ZXIoaW50IHBzTGV2ZWwsIGNoYXIgKmluZGVudCkgeyByZXR1cm4gTlVM
TDsgfQorICB2aXJ0dWFsIEdTdHJpbmcgKmdldFBTRmlsdGVyKGludCBwc0xldmVsLCBjb25zdCBj
aGFyICppbmRlbnQpIHsgcmV0dXJuIE5VTEw7IH0KICAgdmlydHVhbCBHQm9vbCBpc0JpbmFyeShH
Qm9vbCBsYXN0ID0gZ1RydWUpIHsgcmV0dXJuIGdGYWxzZTsgfQogICB2aXJ0dWFsIEdCb29sIGlz
RW5jb2RlcigpIHsgcmV0dXJuIGdUcnVlOyB9CiAKQEAgLTg2NSw3ICs4NjUsNyBAQAogICAgIHsg
cmV0dXJuIChidWZQdHIgPj0gYnVmRW5kICYmICFmaWxsQnVmKCkpID8gRU9GIDogKCpidWZQdHIr
KyAmIDB4ZmYpOyB9CiAgIHZpcnR1YWwgaW50IGxvb2tDaGFyKCkKICAgICB7IHJldHVybiAoYnVm
UHRyID49IGJ1ZkVuZCAmJiAhZmlsbEJ1ZigpKSA/IEVPRiA6ICgqYnVmUHRyICYgMHhmZik7IH0K
LSAgdmlydHVhbCBHU3RyaW5nICpnZXRQU0ZpbHRlcihpbnQgcHNMZXZlbCwgY2hhciAqaW5kZW50
KSB7IHJldHVybiBOVUxMOyB9CisgIHZpcnR1YWwgR1N0cmluZyAqZ2V0UFNGaWx0ZXIoaW50IHBz
TGV2ZWwsIGNvbnN0IGNoYXIgKmluZGVudCkgeyByZXR1cm4gTlVMTDsgfQogICB2aXJ0dWFsIEdC
b29sIGlzQmluYXJ5KEdCb29sIGxhc3QgPSBnVHJ1ZSkgeyByZXR1cm4gZ0ZhbHNlOyB9CiAgIHZp
cnR1YWwgR0Jvb2wgaXNFbmNvZGVyKCkgeyByZXR1cm4gZ1RydWU7IH0KIApAQCAtODk1LDcgKzg5
NSw3IEBACiAgICAgeyByZXR1cm4gKGJ1ZlB0ciA+PSBidWZFbmQgJiYgIWZpbGxCdWYoKSkgPyBF
T0YgOiAoKmJ1ZlB0cisrICYgMHhmZik7IH0KICAgdmlydHVhbCBpbnQgbG9va0NoYXIoKQogICAg
IHsgcmV0dXJuIChidWZQdHIgPj0gYnVmRW5kICYmICFmaWxsQnVmKCkpID8gRU9GIDogKCpidWZQ
dHIgJiAweGZmKTsgfQotICB2aXJ0dWFsIEdTdHJpbmcgKmdldFBTRmlsdGVyKGludCBwc0xldmVs
LCBjaGFyICppbmRlbnQpIHsgcmV0dXJuIE5VTEw7IH0KKyAgdmlydHVhbCBHU3RyaW5nICpnZXRQ
U0ZpbHRlcihpbnQgcHNMZXZlbCwgY29uc3QgY2hhciAqaW5kZW50KSB7IHJldHVybiBOVUxMOyB9
CiAgIHZpcnR1YWwgR0Jvb2wgaXNCaW5hcnkoR0Jvb2wgbGFzdCA9IGdUcnVlKSB7IHJldHVybiBn
VHJ1ZTsgfQogICB2aXJ0dWFsIEdCb29sIGlzRW5jb2RlcigpIHsgcmV0dXJuIGdUcnVlOyB9CiAK
ZGlmZiAtdXIgdGV4bGl2ZS0yMDA4MDgxNi1zb3VyY2UvbGlicy94cGRmLm9yaWcveHBkZi9Vbmlj
b2RlTWFwLmNjIHRleGxpdmUtMjAwODA4MTYtc291cmNlL2xpYnMveHBkZi94cGRmL1VuaWNvZGVN
YXAuY2MKLS0tIHRleGxpdmUtMjAwODA4MTYtc291cmNlL2xpYnMveHBkZi5vcmlnL3hwZGYvVW5p
Y29kZU1hcC5jYwkyMDA2LTAxLTE2IDAzOjA5OjI2LjAwMDAwMDAwMCArMDMwMAorKysgdGV4bGl2
ZS0yMDA4MDgxNi1zb3VyY2UvbGlicy94cGRmL3hwZGYvVW5pY29kZU1hcC5jYwkyMDA4LTExLTIx
IDE3OjIwOjUwLjAwMDAwMDAwMCArMDMwMApAQCAtMTIxLDcgKzEyMSw3IEBACiAjZW5kaWYKIH0K
IAotVW5pY29kZU1hcDo6VW5pY29kZU1hcChjaGFyICplbmNvZGluZ05hbWVBLCBHQm9vbCB1bmlj
b2RlT3V0QSwKK1VuaWNvZGVNYXA6OlVuaWNvZGVNYXAoY29uc3QgY2hhciAqZW5jb2RpbmdOYW1l
QSwgR0Jvb2wgdW5pY29kZU91dEEsCiAJCSAgICAgICBVbmljb2RlTWFwUmFuZ2UgKnJhbmdlc0Es
IGludCBsZW5BKSB7CiAgIGVuY29kaW5nTmFtZSA9IG5ldyBHU3RyaW5nKGVuY29kaW5nTmFtZUEp
OwogICB1bmljb2RlT3V0ID0gdW5pY29kZU91dEE7CkBAIC0xMzYsNyArMTM2LDcgQEAKICNlbmRp
ZgogfQogCi1Vbmljb2RlTWFwOjpVbmljb2RlTWFwKGNoYXIgKmVuY29kaW5nTmFtZUEsIEdCb29s
IHVuaWNvZGVPdXRBLAorVW5pY29kZU1hcDo6VW5pY29kZU1hcChjb25zdCBjaGFyICplbmNvZGlu
Z05hbWVBLCBHQm9vbCB1bmljb2RlT3V0QSwKIAkJICAgICAgIFVuaWNvZGVNYXBGdW5jIGZ1bmNB
KSB7CiAgIGVuY29kaW5nTmFtZSA9IG5ldyBHU3RyaW5nKGVuY29kaW5nTmFtZUEpOwogICB1bmlj
b2RlT3V0ID0gdW5pY29kZU91dEE7CmRpZmYgLXVyIHRleGxpdmUtMjAwODA4MTYtc291cmNlL2xp
YnMveHBkZi5vcmlnL3hwZGYvVW5pY29kZU1hcC5oIHRleGxpdmUtMjAwODA4MTYtc291cmNlL2xp
YnMveHBkZi94cGRmL1VuaWNvZGVNYXAuaAotLS0gdGV4bGl2ZS0yMDA4MDgxNi1zb3VyY2UvbGli
cy94cGRmLm9yaWcveHBkZi9Vbmljb2RlTWFwLmgJMjAwNi0wMS0xNiAwMzowOToyNi4wMDAwMDAw
MDAgKzAzMDAKKysrIHRleGxpdmUtMjAwODA4MTYtc291cmNlL2xpYnMveHBkZi94cGRmL1VuaWNv
ZGVNYXAuaAkyMDA4LTExLTIxIDE3OjIwOjM0LjAwMDAwMDAwMCArMDMwMApAQCAtNTMsMTIgKzUz
LDEyIEBACiAgIHN0YXRpYyBVbmljb2RlTWFwICpwYXJzZShHU3RyaW5nICplbmNvZGluZ05hbWVB
KTsKIAogICAvLyBDcmVhdGUgYSByZXNpZGVudCBVbmljb2RlTWFwLgotICBVbmljb2RlTWFwKGNo
YXIgKmVuY29kaW5nTmFtZUEsIEdCb29sIHVuaWNvZGVPdXRBLAorICBVbmljb2RlTWFwKGNvbnN0
IGNoYXIgKmVuY29kaW5nTmFtZUEsIEdCb29sIHVuaWNvZGVPdXRBLAogCSAgICAgVW5pY29kZU1h
cFJhbmdlICpyYW5nZXNBLCBpbnQgbGVuQSk7CiAKICAgLy8gQ3JlYXRlIGEgcmVzaWRlbnQgVW5p
Y29kZU1hcCB0aGF0IHVzZXMgYSBmdW5jdGlvbiBpbnN0ZWFkIG9mIGEKICAgLy8gbGlzdCBvZiBy
YW5nZXMuCi0gIFVuaWNvZGVNYXAoY2hhciAqZW5jb2RpbmdOYW1lQSwgR0Jvb2wgdW5pY29kZU91
dEEsCisgIFVuaWNvZGVNYXAoY29uc3QgY2hhciAqZW5jb2RpbmdOYW1lQSwgR0Jvb2wgdW5pY29k
ZU91dEEsCiAJICAgICBVbmljb2RlTWFwRnVuYyBmdW5jQSk7CiAKICAgflVuaWNvZGVNYXAoKTsK
</data>        

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>172705</attachid>
            <date>2008-11-21 16:16 0000</date>
            <desc>emerge --info output result</desc>
            <filename>emerge_info.txt</filename>
            <type>text/plain</type>
            <data encoding="base64">UG9ydGFnZSAyLjEuNC41IChkZWZhdWx0L2xpbnV4L2FtZDY0LzIwMDguMC9kZXNrdG9wLCBnY2Mt
NC4zLjIsIGdsaWJjLTIuNy1yMiwgMi42LjI1LWdlbnRvby1yNyB4ODZfNjQpCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClN5
c3RlbSB1bmFtZTogMi42LjI1LWdlbnRvby1yNyB4ODZfNjQgSW50ZWwoUikgUGVudGl1bShSKSBE
dWFsIENQVSBFMjE2MCBAIDEuODBHSHoKVGltZXN0YW1wIG9mIHRyZWU6IEZyaSwgMjEgTm92IDIw
MDggMDk6MTU6MDMgKzAwMDAKZGlzdGNjIDIuMTguMyB4ODZfNjQtcGMtbGludXgtZ251IChwcm90
b2NvbHMgMSBhbmQgMikgKGRlZmF1bHQgcG9ydCAzNjMyKSBbZW5hYmxlZF0KY2NhY2hlIHZlcnNp
b24gMi40IFtkaXNhYmxlZF0KYXBwLXNoZWxscy9iYXNoOiAgICAgMy4yX3AzMy1yMQpkZXYtbGFu
Zy9weXRob246ICAgICAyLjUuMi1yNwpkZXYtcHl0aG9uL3B5Y3J5cHRvOiAyLjAuMS1yNgpkZXYt
dXRpbC9jY2FjaGU6ICAgICAyLjQtcjcKZGV2LXV0aWwvY21ha2U6ICAgICAgMi42LjIKc3lzLWFw
cHMvYmFzZWxheW91dDogMi4wLjAKc3lzLWFwcHMvb3BlbnJjOiAgICAgMC4zLjAtcjEKc3lzLWFw
cHMvc2FuZGJveDogICAgMS4yLjE4LjEtcjIKc3lzLWRldmVsL2F1dG9jb25mOiAgMi4xMywgMi42
MS1yMwpzeXMtZGV2ZWwvYXV0b21ha2U6ICAxLjUsIDEuNi4zLCAxLjcuOS1yMSwgMS44LjUtcjMs
IDEuOS42LXIyLCAxLjEwLjEtcjEKc3lzLWRldmVsL2JpbnV0aWxzOiAgMi4xOC1yMwpzeXMtZGV2
ZWwvZ2NjLWNvbmZpZzogMS40LjAtcjQKc3lzLWRldmVsL2xpYnRvb2w6ICAgMS41LjI2CnZpcnR1
YWwvb3MtaGVhZGVyczogIDIuNi4yMy1yMwpBQ0NFUFRfS0VZV09SRFM9ImFtZDY0IgpDQlVJTEQ9
Ing4Nl82NC1wYy1saW51eC1nbnUiCkNGTEFHUz0iLW1hcmNoPWNvcmUyIC1PMyAtbWN4MTYgLW1z
YWhmIC1waXBlIgpDSE9TVD0ieDg2XzY0LXBjLWxpbnV4LWdudSIKQ09ORklHX1BST1RFQ1Q9Ii9l
dGMgL3Vzci9rZGUvMy41L2VudiAvdXNyL2tkZS8zLjUvc2hhcmUvY29uZmlnIC91c3Iva2RlLzMu
NS9zaHV0ZG93biAvdXNyL3NoYXJlL2NvbmZpZyIKQ09ORklHX1BST1RFQ1RfTUFTSz0iL2V0Yy9j
YS1jZXJ0aWZpY2F0ZXMuY29uZiAvZXRjL2Vudi5kIC9ldGMvZm9udHMvZm9udHMuY29uZiAvZXRj
L2djb25mIC9ldGMvZ2VudG9vLXJlbGVhc2UgL2V0Yy90ZXJtaW5mbyAvZXRjL3RleG1mL2xhbmd1
YWdlLmRhdC5kIC9ldGMvdGV4bWYvbGFuZ3VhZ2UuZGVmLmQgL2V0Yy90ZXhtZi91cGRtYXAuZCAv
ZXRjL3RleG1mL3dlYjJjIC9ldGMvdWRldi9ydWxlcy5kIgpDWFhGTEFHUz0iLW1hcmNoPWNvcmUy
IC1PMyAtbWN4MTYgLW1zYWhmIC1waXBlIgpESVNURElSPSIvZGF0YS9wb3J0YWdlL2Rpc3RmaWxl
cyIKRkVBVFVSRVM9ImNvbGxpc2lvbi1wcm90ZWN0IGRpc3RjYyBkaXN0bG9ja3MgbWV0YWRhdGEt
dHJhbnNmZXIgcGFyYWxsZWwtZmV0Y2ggc2FuZGJveCBzZnBlcm1zIHN0cmljdCB1bm1lcmdlLW9y
cGhhbnMgdXNlcmZldGNoIgpHRU5UT09fTUlSUk9SUz0iZnRwOi8vbGludXg0dS5qaW5yLnJ1L3B1
Yi9nZW50b28gaHR0cDovL21pcnJvci5zd2l0Y2guY2gvZnRwL21pcnJvci9nZW50b28iCkxBTkc9
InJ1X1JVLlVURi04IgpMREZMQUdTPSItV2wsLS1oYXNoLXN0eWxlPWdudSIKTElOR1VBUz0icnUi
Ck1BS0VPUFRTPSItajYiClBLR0RJUj0iL2RhdGEvcG9ydGFnZS9wYWNrYWdlcyIKUE9SVEFHRV9S
U1lOQ19PUFRTPSItLXJlY3Vyc2l2ZSAtLWxpbmtzIC0tc2FmZS1saW5rcyAtLXBlcm1zIC0tdGlt
ZXMgLS1jb21wcmVzcyAtLWZvcmNlIC0td2hvbGUtZmlsZSAtLWRlbGV0ZSAtLXN0YXRzIC0tdGlt
ZW91dD0xODAgLS1leGNsdWRlPS9kaXN0ZmlsZXMgLS1leGNsdWRlPS9sb2NhbCAtLWV4Y2x1ZGU9
L3BhY2thZ2VzIgpQT1JUQUdFX1RNUERJUj0iL2RhdGEvcG9ydGFnZS90bXAiClBPUlRESVI9Ii91
c3IvcG9ydGFnZSIKUE9SVERJUl9PVkVSTEFZPSIvdXNyL2xvY2FsL3BvcnRhZ2UiClNZTkM9InJz
eW5jOi8vcnN5bmMuZ2VudG9vLm9yZy9nZW50b28tcG9ydGFnZSIKVVNFPSI3emlwIFggYWFjIGFj
bCBhY3BpIGFsc2EgYW1kNjQgYmFzaC1jb21wbGV0aW9uIGJlcmtkYiBibHVldG9vdGggYnJhbmRp
bmcgYnppcDIgY2Fpcm8gY2FwcyBjZHIgY2xpIGNyYWNrbGliIGNyeXB0IGNzY29wZSBjdXBzIGRi
dXMgZGxsb2FkZXIgZHJpIGR2ZCBkdmRyIGR2ZHJlYWQgZW1ib3NzIGVuY29kZSBleGlmIGZhbSBm
Zm1wZWcgZmlyZWZveCBmbGFjIGZvcnRyYW4gZ2RibSBnaWYgZ251dGxzIGdwbSBnc2wgZ3N0cmVh
bWVyIGd0ayBoYWwgaWNlY2FzdCBpY29udiBpc2RubG9nIGpwZWcga2RlaGlkZGVudmlzaWJpbGl0
eSBsaWJub3RpZnkgbGlic2FtcGxlcmF0ZSBsbV9zZW5zb3JzIGx6byBtYWQgbWlkaSBtaWttb2Qg
bW1hcCBtbXggbXAzIG1wZWcgbXVkZmxhcCBtdWx0aWxpYiBtdXNlcGFjayBuY3Vyc2VzIG5scyBu
cHRsIG5wdGxvbmx5IG5zcGx1Z2luIG9nZyBvcGVuZ2wgb3Blbm1wIHBhbHVkaXMgcGFtIHBjaCBw
Y3JlIHBkZiBwaWMgcG5nIHBwZHMgcHBwZCBweXRob24gcXQzIHF0M3N1cHBvcnQgcXQ0IHF1aWNr
dGltZSByZWFkbGluZSByZWZsZWN0aW9uIHNkbCBzZXNzaW9uIHNwZWV4IHNwZWxsIHNwbCBzcWxp
dGUgc3FsaXRlMyBzc2Ugc3NlMiBzc2wgc3RhcnR1cC1ub3RpZmljYXRpb24gc3VidmVyc2lvbiBz
dmcgc3lzZnMgdGNwZCB0aHJlYWRzIHRpZmYgdHJ1ZXR5cGUgdW5pY29kZSB1c2IgdmltLXN5bnRh
eCB2b3JiaXMgeDI2NCB4Y2IgeG9yZyB4diB4dmlkIHpsaWIiIEFMU0FfQ0FSRFM9ImhkYS1pbnRl
bCIgQUxTQV9QQ01fUExVR0lOUz0iYWRwY20gYWxhdyBhc3ltIGNvcHkgZG1peCBkc2hhcmUgZHNu
b29wIGVtcHR5IGV4dHBsdWcgZmlsZSBob29rcyBpZWM5NTggaW9wbHVnIGxhZHNwYSBsZmxvYXQg
bGluZWFyIG1ldGVyIG1tYXBfZW11bCBtdWxhdyBtdWx0aSBudWxsIHBsdWcgcmF0ZSByb3V0ZSBz
aGFyZSBzaG0gc29mdHZvbCIgQVBBQ0hFMl9NT0RVTEVTPSJhY3Rpb25zIGFsaWFzIGF1dGhfYmFz
aWMgYXV0aG5fYWxpYXMgYXV0aG5fYW5vbiBhdXRobl9kYm0gYXV0aG5fZGVmYXVsdCBhdXRobl9m
aWxlIGF1dGh6X2RibSBhdXRoel9kZWZhdWx0IGF1dGh6X2dyb3VwZmlsZSBhdXRoel9ob3N0IGF1
dGh6X293bmVyIGF1dGh6X3VzZXIgYXV0b2luZGV4IGNhY2hlIGRhdiBkYXZfZnMgZGF2X2xvY2sg
ZGVmbGF0ZSBkaXIgZGlza19jYWNoZSBlbnYgZXhwaXJlcyBleHRfZmlsdGVyIGZpbGVfY2FjaGUg
ZmlsdGVyIGhlYWRlcnMgaW5jbHVkZSBpbmZvIGxvZ19jb25maWcgbG9naW8gbWVtX2NhY2hlIG1p
bWUgbWltZV9tYWdpYyBuZWdvdGlhdGlvbiByZXdyaXRlIHNldGVudmlmIHNwZWxpbmcgc3RhdHVz
IHVuaXF1ZV9pZCB1c2VyZGlyIHVzZXJ0cmFjayB2aG9zdF9hbGlhcyIgRUxJQkM9ImdsaWJjIiBJ
TlBVVF9ERVZJQ0VTPSJrZXlib2FyZCBtb3VzZSIgS0VSTkVMPSJsaW51eCIgTENEX0RFVklDRVM9
ImJheXJhZCBjZm9udHogY2ZvbnR6NjMzIGdsayBoZDQ0NzgwIGxiMjE2IGxjZG0wMDEgbXR4b3Ji
IG5jdXJzZXMgdGV4dCIgTElOR1VBUz0icnUiIFVTRVJMQU5EPSJHTlUiIFZJREVPX0NBUkRTPSJ2
Z2EgdmVzYSBudiBudmlkaWEiClVuc2V0OiAgQ1BQRkxBR1MsIENUQVJHRVQsIEVNRVJHRV9ERUZB
VUxUX09QVFMsIEZGTEFHUywgSU5TVEFMTF9NQVNLLCBMQ19BTEwsIFBPUlRBR0VfQ09NUFJFU1Ms
IFBPUlRBR0VfQ09NUFJFU1NfRkxBR1MsIFBPUlRBR0VfUlNZTkNfRVhUUkFfT1BUUwoK
</data>        

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>172725</attachid>
            <date>2008-11-21 17:25 0000</date>
            <desc>Patch to eliminate xpdf deprecated char* coversion warnings</desc>
            <filename>99_all_xpdf_const_char.patch</filename>
            <type>text/plain</type>
            <data encoding="base64">ZGlmZiAtdXIgdGV4bGl2ZS0yMDA4MDgxNi1zb3VyY2UvdGV4ay93ZWIyYy9wZGZ0ZXhkaXIub3Jp
Zy9lcGRmLmggdGV4bGl2ZS0yMDA4MDgxNi1zb3VyY2UvdGV4ay93ZWIyYy9wZGZ0ZXhkaXIvZXBk
Zi5oCi0tLSB0ZXhsaXZlLTIwMDgwODE2LXNvdXJjZS90ZXhrL3dlYjJjL3BkZnRleGRpci5vcmln
L2VwZGYuaAkyMDA4LTExLTIxIDE5OjQwOjMwLjAwMDAwMDAwMCArMDMwMAorKysgdGV4bGl2ZS0y
MDA4MDgxNi1zb3VyY2UvdGV4ay93ZWIyYy9wZGZ0ZXhkaXIvZXBkZi5oCTIwMDgtMTEtMjEgMTk6
NTE6MTYuMDAwMDAwMDAwICswMzAwCkBAIC03OCw3ICs3OCw3IEBACiAgICAgZXh0ZXJuIGNoYXIg
bm90ZGVmW107CiAKICAgICBleHRlcm4gaW50IGlzX3N1YnNldGFibGUoc3RydWN0IGZtX2VudHJ5
ICopOwotICAgIGV4dGVybiBzdHJ1Y3QgZm1fZW50cnkgKmxvb2t1cF9mb250bWFwKGNoYXIgKik7
CisgICAgZXh0ZXJuIHN0cnVjdCBmbV9lbnRyeSAqbG9va3VwX2ZvbnRtYXAoY29uc3QgY2hhciAq
KTsKICAgICBleHRlcm4gaW50ZWdlciBnZXRfZm9udGZpbGUoc3RydWN0IGZtX2VudHJ5ICopOwog
ICAgIGV4dGVybiBpbnRlZ2VyIGdldF9mb250bmFtZShzdHJ1Y3QgZm1fZW50cnkgKik7CiAgICAg
ZXh0ZXJuIGludGVnZXIgcGRmbmV3b2JqbnVtKHZvaWQpOwpAQCAtMTE2LDcgKzExNiw3IEBACiAg
ICAgZXh0ZXJuIGludCBnZXRfZm5fb2JqbnVtKHN0cnVjdCBmZF9lbnRyeSAqKTsKIAogLyogd3Jp
dGVfZW5jLmMgKi8KLSAgICBleHRlcm4gdm9pZCBlcGRmX3dyaXRlX2VuYyhjaGFyICoqLCBpbnRl
Z2VyKTsKKyAgICBleHRlcm4gdm9pZCBlcGRmX3dyaXRlX2VuYyhjb25zdCBjaGFyICoqLCBpbnRl
Z2VyKTsKIAogLyogdXRpbHMuYyAqLwogICAgIGV4dGVybiBjaGFyICpjb252ZXJ0U3RyaW5nVG9Q
REZTdHJpbmcoY2hhciAqaW4sIGludCBsZW4pOwpkaWZmIC11ciB0ZXhsaXZlLTIwMDgwODE2LXNv
dXJjZS90ZXhrL3dlYjJjL3BkZnRleGRpci5vcmlnL21hcGZpbGUuYyB0ZXhsaXZlLTIwMDgwODE2
LXNvdXJjZS90ZXhrL3dlYjJjL3BkZnRleGRpci9tYXBmaWxlLmMKLS0tIHRleGxpdmUtMjAwODA4
MTYtc291cmNlL3RleGsvd2ViMmMvcGRmdGV4ZGlyLm9yaWcvbWFwZmlsZS5jCTIwMDgtMTEtMjEg
MTk6NDA6MzAuMDAwMDAwMDAwICswMzAwCisrKyB0ZXhsaXZlLTIwMDgwODE2LXNvdXJjZS90ZXhr
L3dlYjJjL3BkZnRleGRpci9tYXBmaWxlLmMJMjAwOC0xMS0yMSAxOTo1Njo1NC4wMDAwMDAwMDAg
KzAzMDAKQEAgLTY0NSwxMCArNjQ1LDExIEBACiAgKiB1c2VkIGZvciBUeXBlMSBmb250IHJlcGxh
Y2VtZW50IHdoZW4gZW1iZWRkaW5nIG9mIFBERiBmaWxlcwogICovCiAKLWZtX2VudHJ5ICpsb29r
dXBfZm9udG1hcChjaGFyICpwc19uYW1lKQorZm1fZW50cnkgKmxvb2t1cF9mb250bWFwKGNvbnN0
IGNoYXIgKnBzX25hbWUpCiB7CiAgICAgZm1fZW50cnkgKmZtLCAqZm0yLCB0bXA7Ci0gICAgY2hh
ciAqYSwgKmIsICpjLCAqZCwgKmUsICpzOworICAgIGNoYXIgKmEsICpiLCAqYywgKmQsICplOwor
ICAgIGNvbnN0IGNoYXIgKnM7CiAgICAgaW50IGksIHNsLCBleDsKICAgICBzdHJ1Y3QgYXZsX3Ry
YXZlcnNlciB0LCB0MjsKICAgICBpZiAodGZtX3RyZWUgPT0gTlVMTCkKQEAgLTcwNSw3ICs3MDYs
NyBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotICAgIHRtcC5wc19uYW1lID0g
czsKKyAgICB0bXAucHNfbmFtZSA9IChjaGFyKilzOwogCiAgICAgZm0gPSAoZm1fZW50cnkgKikg
YXZsX3RfZmluZCgmdCwgcHNfdHJlZSwgJnRtcCk7CiAgICAgaWYgKGZtID09IE5VTEwpCmRpZmYg
LXVyIHRleGxpdmUtMjAwODA4MTYtc291cmNlL3RleGsvd2ViMmMvcGRmdGV4ZGlyLm9yaWcvcGRm
dG9lcGRmLmNjIHRleGxpdmUtMjAwODA4MTYtc291cmNlL3RleGsvd2ViMmMvcGRmdGV4ZGlyL3Bk
ZnRvZXBkZi5jYwotLS0gdGV4bGl2ZS0yMDA4MDgxNi1zb3VyY2UvdGV4ay93ZWIyYy9wZGZ0ZXhk
aXIub3JpZy9wZGZ0b2VwZGYuY2MJMjAwOC0xMS0yMSAxOTo0MDozMC4wMDAwMDAwMDAgKzAzMDAK
KysrIHRleGxpdmUtMjAwODA4MTYtc291cmNlL3RleGsvd2ViMmMvcGRmdGV4ZGlyL3BkZnRvZXBk
Zi5jYwkyMDA4LTExLTIxIDE5OjU3OjQzLjAwMDAwMDAwMCArMDMwMApAQCAtMjgxLDcgKzI4MSw3
IEBACiAKIHN0YXRpYyB2b2lkIGNvcHlPYmplY3QoT2JqZWN0ICopOwogCi1zdGF0aWMgdm9pZCBj
b3B5TmFtZShjaGFyICpzKQorc3RhdGljIHZvaWQgY29weU5hbWUoY29uc3QgY2hhciAqcykKIHsK
ICAgICBwZGZfcHV0cygiLyIpOwogICAgIGZvciAoOyAqcyAhPSAwOyBzKyspIHsKQEAgLTMxNiw3
ICszMTYsNyBAQAogc3RhdGljIHZvaWQgY29weUZvbnREaWN0KE9iamVjdCAqIG9iaiwgSW5PYmog
KiByKQogewogICAgIGludCBpLCBsOwotICAgIGNoYXIgKmtleTsKKyAgICBjb25zdCBjaGFyICpr
ZXk7CiAgICAgaWYgKCFvYmotPmlzRGljdCgpKQogICAgICAgICBwZGZ0ZXhfZmFpbCgiUERGIGlu
Y2x1c2lvbjogaW52YWxpZCBkaWN0IHR5cGUgPCVzPiIsCiAgICAgICAgICAgICAgICAgICAgIG9i
ai0+Z2V0VHlwZU5hbWUoKSk7CkBAIC0zNjksNyArMzY5LDcgQEAKIAogI2RlZmluZSBSRVBMQUNF
X1RZUEUxQyB0cnVlCiAKLXN0YXRpYyB2b2lkIGNvcHlGb250KGNoYXIgKnRhZywgT2JqZWN0ICog
Zm9udFJlZikKK3N0YXRpYyB2b2lkIGNvcHlGb250KGNvbnN0IGNoYXIgKnRhZywgT2JqZWN0ICog
Zm9udFJlZikKIHsKICAgICBQZGZPYmplY3QgZm9udGRpY3QsIHN1YnR5cGUsIGJhc2Vmb250LCBm
b250ZGVzY1JlZiwgZm9udGRlc2MsIGNoYXJzZXQsCiAgICAgICAgIGZvbnRmaWxlLCBmZnN1YnR5
cGUsIHN0ZW1WOwpAQCAtNDQxLDcgKzQ0MSw3IEBACiAgICAgcGRmX3B1dHMoIj4+XG4iKTsKIH0K
IAotc3RhdGljIHZvaWQgY29weU90aGVyUmVzb3VyY2VzKE9iamVjdCAqIG9iaiwgY2hhciAqa2V5
KQorc3RhdGljIHZvaWQgY29weU90aGVyUmVzb3VyY2VzKE9iamVjdCAqIG9iaiwgY29uc3QgY2hh
ciAqa2V5KQogewogICAgIC8vIGNvcGllcyBhbGwgb3RoZXIgcmVzb3VyY2VzICh3cml0ZV9lcGRm
IGhhbmRsZXMgRm9udHMgYW5kIFByb2NTZXRzKSwKICAgICAvLyBidXQgZ2l2ZXMgYSB3YXJuaW5n
IGlmIGFuIG9iamVjdCBpcyBub3QgYSBkaWN0aW9uYXJ5LgpAQCAtNjI2LDcgKzYyNiw3IEBACiBz
dGF0aWMgdm9pZCB3cml0ZUVuY29kaW5ncygpCiB7CiAgICAgVXNlZEVuY29kaW5nICpyLCAqbjsK
LSAgICBjaGFyICpnbHlwaE5hbWVzWzI1Nl0sICpzOworICAgIGNvbnN0IGNoYXIgKmdseXBoTmFt
ZXNbMjU2XSwgKnM7CiAgICAgaW50IGk7CiAgICAgZm9yIChyID0gZW5jb2RpbmdMaXN0OyByICE9
IDA7IHIgPSByLT5uZXh0KSB7CiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykgewpA
QCAtODA5LDcgKzgwOSw3IEBACiAgICAgUGRmT2JqZWN0IGNvbnRlbnRzLCBvYmoxLCBvYmoyOwog
ICAgIFBkZk9iamVjdCBtZXRhZGF0YSwgcGllY2VpbmZvLCBzZXBhcmF0aW9uSW5mbzsKICAgICBP
YmplY3QgaW5mbzsKLSAgICBjaGFyICprZXk7CisgICAgY29uc3QgY2hhciAqa2V5OwogICAgIGNo
YXIgc1syNTZdOwogICAgIGludCBpLCBsOwogICAgIGludCByb3RhdGU7CmRpZmYgLXVyIHRleGxp
dmUtMjAwODA4MTYtc291cmNlL3RleGsvd2ViMmMvcGRmdGV4ZGlyLm9yaWcvcHRleGxpYi5oIHRl
eGxpdmUtMjAwODA4MTYtc291cmNlL3RleGsvd2ViMmMvcGRmdGV4ZGlyL3B0ZXhsaWIuaAotLS0g
dGV4bGl2ZS0yMDA4MDgxNi1zb3VyY2UvdGV4ay93ZWIyYy9wZGZ0ZXhkaXIub3JpZy9wdGV4bGli
LmgJMjAwOC0xMS0yMSAxOTo0MDozMC4wMDAwMDAwMDAgKzAzMDAKKysrIHRleGxpdmUtMjAwODA4
MTYtc291cmNlL3RleGsvd2ViMmMvcGRmdGV4ZGlyL3B0ZXhsaWIuaAkyMDA4LTExLTIxIDE5OjQ0
OjEwLjAwMDAwMDAwMCArMDMwMApAQCAtMTcyLDcgKzE3Miw3IEBACiBleHRlcm4gdm9pZCBlcGRm
X2ZyZWUodm9pZCk7CiAKIC8qIG1hcGZpbGUuYyAqLwotZXh0ZXJuIGZtX2VudHJ5ICpsb29rdXBf
Zm9udG1hcChjaGFyICopOworZXh0ZXJuIGZtX2VudHJ5ICpsb29rdXBfZm9udG1hcChjb25zdCBj
aGFyICopOwogZXh0ZXJuIGJvb2xlYW4gaGFzZm1lbnRyeShpbnRlcm5hbGZvbnRudW1iZXIpOwog
ZXh0ZXJuIHZvaWQgZm1fZnJlZSh2b2lkKTsKIGV4dGVybiB2b2lkIGZtX3JlYWRfaW5mbyh2b2lk
KTsKZGlmZiAtdXIgdGV4bGl2ZS0yMDA4MDgxNi1zb3VyY2UvdGV4ay93ZWIyYy9wZGZ0ZXhkaXIu
b3JpZy93cml0ZWVuYy5jIHRleGxpdmUtMjAwODA4MTYtc291cmNlL3RleGsvd2ViMmMvcGRmdGV4
ZGlyL3dyaXRlZW5jLmMKLS0tIHRleGxpdmUtMjAwODA4MTYtc291cmNlL3RleGsvd2ViMmMvcGRm
dGV4ZGlyLm9yaWcvd3JpdGVlbmMuYwkyMDA4LTExLTIxIDE5OjQwOjMwLjAwMDAwMDAwMCArMDMw
MAorKysgdGV4bGl2ZS0yMDA4MDgxNi1zb3VyY2UvdGV4ay93ZWIyYy9wZGZ0ZXhkaXIvd3JpdGVl
bmMuYwkyMDA4LTExLTIxIDE5OjUxOjQwLjAwMDAwMDAwMCArMDMwMApAQCAtMTExLDcgKzExMSw3
IEBACiAgICAgcGRmZW5kZGljdCgpOwogfQogCi12b2lkIHdyaXRlX2VuYyhjaGFyICoqZ2x5cGhf
bmFtZXMsIHN0cnVjdCBhdmxfdGFibGUgKnR4X3RyZWUsIGludGVnZXIgZmVfb2JqbnVtKQordm9p
ZCB3cml0ZV9lbmMoY29uc3QgY2hhciAqKmdseXBoX25hbWVzLCBzdHJ1Y3QgYXZsX3RhYmxlICp0
eF90cmVlLCBpbnRlZ2VyIGZlX29iam51bSkKIHsKICAgICBpbnQgaV9vbGQsICpwOwogICAgIHN0
cnVjdCBhdmxfdHJhdmVyc2VyIHQ7CmRpZmYgLXVyIHRleGxpdmUtMjAwODA4MTYtc291cmNlL2xp
YnMveHBkZi5vcmlnL2ZvZmkvRm9GaUJhc2UuY2MgdGV4bGl2ZS0yMDA4MDgxNi1zb3VyY2UvbGli
cy94cGRmL2ZvZmkvRm9GaUJhc2UuY2MKLS0tIHRleGxpdmUtMjAwODA4MTYtc291cmNlL2xpYnMv
eHBkZi5vcmlnL2ZvZmkvRm9GaUJhc2UuY2MJMjAwNi0wMS0xNiAwMzowOToyNi4wMDAwMDAwMDAg
KzAzMDAKKysrIHRleGxpdmUtMjAwODA4MTYtc291cmNlL2xpYnMveHBkZi9mb2ZpL0ZvRmlCYXNl
LmNjCTIwMDgtMTEtMjEgMTc6MTI6MTUuMDAwMDAwMDAwICswMzAwCkBAIC0yMCw3ICsyMCw3IEBA
CiAvLyBGb0ZpQmFzZQogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotRm9GaUJhc2U6OkZvRmlCYXNlKGNo
YXIgKmZpbGVBLCBpbnQgbGVuQSwgR0Jvb2wgZnJlZUZpbGVEYXRhQSkgeworRm9GaUJhc2U6OkZv
RmlCYXNlKGNvbnN0IGNoYXIgKmZpbGVBLCBpbnQgbGVuQSwgR0Jvb2wgZnJlZUZpbGVEYXRhQSkg
ewogICBmaWxlRGF0YSA9IGZpbGUgPSAoR3VjaGFyICopZmlsZUE7CiAgIGxlbiA9IGxlbkE7CiAg
IGZyZWVGaWxlRGF0YSA9IGZyZWVGaWxlRGF0YUE7CkBAIC0zMiw3ICszMiw3IEBACiAgIH0KIH0K
IAotY2hhciAqRm9GaUJhc2U6OnJlYWRGaWxlKGNoYXIgKmZpbGVOYW1lLCBpbnQgKmZpbGVMZW4p
IHsKK2NvbnN0IGNoYXIgKkZvRmlCYXNlOjpyZWFkRmlsZShjb25zdCBjaGFyICpmaWxlTmFtZSwg
aW50ICpmaWxlTGVuKSB7CiAgIEZJTEUgKmY7CiAgIGNoYXIgKmJ1ZjsKICAgaW50IG47CmRpZmYg
LXVyIHRleGxpdmUtMjAwODA4MTYtc291cmNlL2xpYnMveHBkZi5vcmlnL2ZvZmkvRm9GaUJhc2Uu
aCB0ZXhsaXZlLTIwMDgwODE2LXNvdXJjZS9saWJzL3hwZGYvZm9maS9Gb0ZpQmFzZS5oCi0tLSB0
ZXhsaXZlLTIwMDgwODE2LXNvdXJjZS9saWJzL3hwZGYub3JpZy9mb2ZpL0ZvRmlCYXNlLmgJMjAw
Ni0wMS0xNiAwMzowOToyNi4wMDAwMDAwMDAgKzAzMDAKKysrIHRleGxpdmUtMjAwODA4MTYtc291
cmNlL2xpYnMveHBkZi9mb2ZpL0ZvRmlCYXNlLmgJMjAwOC0xMS0yMSAxNzoxMTozMC4wMDAwMDAw
MDAgKzAzMDAKQEAgLTE5LDcgKzE5LDcgQEAKIAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotdHlwZWRl
ZiB2b2lkICgqRm9GaU91dHB1dEZ1bmMpKHZvaWQgKnN0cmVhbSwgY2hhciAqZGF0YSwgaW50IGxl
bik7Cit0eXBlZGVmIHZvaWQgKCpGb0ZpT3V0cHV0RnVuYykodm9pZCAqc3RyZWFtLCBjb25zdCBj
aGFyICpkYXRhLCBpbnQgbGVuKTsKIAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vIEZvRmlCYXNlCkBA
IC0zMiw4ICszMiw4IEBACiAKIHByb3RlY3RlZDoKIAotICBGb0ZpQmFzZShjaGFyICpmaWxlQSwg
aW50IGxlbkEsIEdCb29sIGZyZWVGaWxlRGF0YUEpOwotICBzdGF0aWMgY2hhciAqcmVhZEZpbGUo
Y2hhciAqZmlsZU5hbWUsIGludCAqZmlsZUxlbik7CisgIEZvRmlCYXNlKGNvbnN0IGNoYXIgKmZp
bGVBLCBpbnQgbGVuQSwgR0Jvb2wgZnJlZUZpbGVEYXRhQSk7CisgIHN0YXRpYyBjb25zdCBjaGFy
ICpyZWFkRmlsZShjb25zdCBjaGFyICpmaWxlTmFtZSwgaW50ICpmaWxlTGVuKTsKIAogICAvLyBT
ID0gc2lnbmVkIC8gVSA9IHVuc2lnbmVkCiAgIC8vIDgvMTYvMzIvVmFyID0gd29yZCBsZW5ndGgs
IGluIGJ5dGVzCmRpZmYgLXVyIHRleGxpdmUtMjAwODA4MTYtc291cmNlL2xpYnMveHBkZi5vcmln
L2ZvZmkvRm9GaUVuY29kaW5ncy5jYyB0ZXhsaXZlLTIwMDgwODE2LXNvdXJjZS9saWJzL3hwZGYv
Zm9maS9Gb0ZpRW5jb2RpbmdzLmNjCi0tLSB0ZXhsaXZlLTIwMDgwODE2LXNvdXJjZS9saWJzL3hw
ZGYub3JpZy9mb2ZpL0ZvRmlFbmNvZGluZ3MuY2MJMjAwNi0wMS0xNiAwMzowOToyNi4wMDAwMDAw
MDAgKzAzMDAKKysrIHRleGxpdmUtMjAwODA4MTYtc291cmNlL2xpYnMveHBkZi9mb2ZpL0ZvRmlF
bmNvZGluZ3MuY2MJMjAwOC0xMS0yMSAxNzo1NzoxOC4wMDAwMDAwMDAgKzAzMDAKQEAgLTE5LDcg
KzE5LDcgQEAKIC8vIFR5cGUgMSBhbmQgMUMgZm9udCBkYXRhCiAvLy0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQog
Ci1jaGFyICpmb2ZpVHlwZTFTdGFuZGFyZEVuY29kaW5nWzI1Nl0gPSB7Citjb25zdCBjaGFyICpm
b2ZpVHlwZTFTdGFuZGFyZEVuY29kaW5nWzI1Nl0gPSB7CiAgIE5VTEwsCiAgIE5VTEwsCiAgIE5V
TEwsCkBAIC0yNzgsNyArMjc4LDcgQEAKICAgTlVMTAogfTsKIAotY2hhciAqZm9maVR5cGUxRXhw
ZXJ0RW5jb2RpbmdbMjU2XSA9IHsKK2NvbnN0IGNoYXIgKmZvZmlUeXBlMUV4cGVydEVuY29kaW5n
WzI1Nl0gPSB7CiAgIE5VTEwsCiAgIE5VTEwsCiAgIE5VTEwsCkBAIC01NDEsNyArNTQxLDcgQEAK
IC8vIFR5cGUgMUMgZm9udCBkYXRhCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1jaGFyICpmb2ZpVHlw
ZTFDU3RkU3RyaW5nc1szOTFdID0geworY29uc3QgY2hhciAqZm9maVR5cGUxQ1N0ZFN0cmluZ3Nb
MzkxXSA9IHsKICAgIi5ub3RkZWYiLAogICAic3BhY2UiLAogICAiZXhjbGFtIiwKZGlmZiAtdXIg
dGV4bGl2ZS0yMDA4MDgxNi1zb3VyY2UvbGlicy94cGRmLm9yaWcvZm9maS9Gb0ZpRW5jb2Rpbmdz
LmggdGV4bGl2ZS0yMDA4MDgxNi1zb3VyY2UvbGlicy94cGRmL2ZvZmkvRm9GaUVuY29kaW5ncy5o
Ci0tLSB0ZXhsaXZlLTIwMDgwODE2LXNvdXJjZS9saWJzL3hwZGYub3JpZy9mb2ZpL0ZvRmlFbmNv
ZGluZ3MuaAkyMDA2LTAxLTE2IDAzOjA5OjI2LjAwMDAwMDAwMCArMDMwMAorKysgdGV4bGl2ZS0y
MDA4MDgxNi1zb3VyY2UvbGlicy94cGRmL2ZvZmkvRm9GaUVuY29kaW5ncy5oCTIwMDgtMTEtMjEg
MTc6NTY6NTUuMDAwMDAwMDAwICswMzAwCkBAIC0yMSwxNCArMjEsMTQgQEAKIC8vIFR5cGUgMSBh
bmQgMUMgZm9udCBkYXRhCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1leHRlcm4gY2hhciAqZm9maVR5
cGUxU3RhbmRhcmRFbmNvZGluZ1syNTZdOwotZXh0ZXJuIGNoYXIgKmZvZmlUeXBlMUV4cGVydEVu
Y29kaW5nWzI1Nl07CitleHRlcm4gY29uc3QgY2hhciAqZm9maVR5cGUxU3RhbmRhcmRFbmNvZGlu
Z1syNTZdOworZXh0ZXJuIGNvbnN0IGNoYXIgKmZvZmlUeXBlMUV4cGVydEVuY29kaW5nWzI1Nl07
CiAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLyBUeXBlIDFDIGZvbnQgZGF0YQogLy8tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KIAotZXh0ZXJuIGNoYXIgKmZvZmlUeXBlMUNTdGRTdHJpbmdzWzM5MV07CitleHRlcm4g
Y29uc3QgY2hhciAqZm9maVR5cGUxQ1N0ZFN0cmluZ3NbMzkxXTsKIGV4dGVybiBHdXNob3J0IGZv
ZmlUeXBlMUNJU09BZG9iZUNoYXJzZXRbMjI5XTsKIGV4dGVybiBHdXNob3J0IGZvZmlUeXBlMUNF
eHBlcnRDaGFyc2V0WzE2Nl07CiBleHRlcm4gR3VzaG9ydCBmb2ZpVHlwZTFDRXhwZXJ0U3Vic2V0
Q2hhcnNldFs4N107CmRpZmYgLXVyIHRleGxpdmUtMjAwODA4MTYtc291cmNlL2xpYnMveHBkZi5v
cmlnL2ZvZmkvRm9GaVRydWVUeXBlLmNjIHRleGxpdmUtMjAwODA4MTYtc291cmNlL2xpYnMveHBk
Zi9mb2ZpL0ZvRmlUcnVlVHlwZS5jYwotLS0gdGV4bGl2ZS0yMDA4MDgxNi1zb3VyY2UvbGlicy94
cGRmLm9yaWcvZm9maS9Gb0ZpVHJ1ZVR5cGUuY2MJMjAwNy0wNy0xMiAwMToxMzo1OS4wMDAwMDAw
MDAgKzA0MDAKKysrIHRleGxpdmUtMjAwODA4MTYtc291cmNlL2xpYnMveHBkZi9mb2ZpL0ZvRmlU
cnVlVHlwZS5jYwkyMDA4LTExLTIxIDE3OjM2OjUwLjAwMDAwMDAwMCArMDMwMApAQCAtMTQzLDcg
KzE0Myw3IEBACiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBzdHJ1Y3QgVDQyVGFibGUgewotICBjaGFy
ICp0YWc7CQkJLy8gNC1ieXRlIHRhZworICBjb25zdCBjaGFyICp0YWc7CQkvLyA0LWJ5dGUgdGFn
CiAgIEdCb29sIHJlcXVpcmVkOwkJLy8gcmVxdWlyZWQgYnkgdGhlIFRydWVUeXBlIHNwZWM/CiB9
OwogCkBAIC0xNzMsNyArMTczLDcgQEAKIAogLy8gR2x5cGggbmFtZXMgaW4gc29tZSBhcmJpdHJh
cnkgc3RhbmRhcmQgb3JkZXIgdGhhdCBBcHBsZSB1c2VzIGZvcgogLy8gdGhlaXIgVHJ1ZVR5cGUg
Zm9udHMuCi1zdGF0aWMgY2hhciAqbWFjR2x5cGhOYW1lc1syNThdID0geworc3RhdGljIGNvbnN0
IGNoYXIgKm1hY0dseXBoTmFtZXNbMjU4XSA9IHsKICAgIi5ub3RkZWYiLCAgICAgICAgIm51bGwi
LCAgICAgICAgICAgIkNSIiwgICAgICAgICAgICAgInNwYWNlIiwKICAgImV4Y2xhbSIsICAgICAg
ICAgInF1b3RlZGJsIiwgICAgICAgIm51bWJlcnNpZ24iLCAgICAgImRvbGxhciIsCiAgICJwZXJj
ZW50IiwgICAgICAgICJhbXBlcnNhbmQiLCAgICAgICJxdW90ZXNpbmdsZSIsICAgICJwYXJlbmxl
ZnQiLApAQCAtMjQ1LDcgKzI0NSw3IEBACiAvLyBGb0ZpVHJ1ZVR5cGUKIC8vLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCiAKLUZvRmlUcnVlVHlwZSAqRm9GaVRydWVUeXBlOjptYWtlKGNoYXIgKmZpbGVBLCBpbnQg
bGVuQSkgeworRm9GaVRydWVUeXBlICpGb0ZpVHJ1ZVR5cGU6Om1ha2UoY29uc3QgY2hhciAqZmls
ZUEsIGludCBsZW5BKSB7CiAgIEZvRmlUcnVlVHlwZSAqZmY7CiAKICAgZmYgPSBuZXcgRm9GaVRy
dWVUeXBlKGZpbGVBLCBsZW5BLCBnRmFsc2UpOwpAQCAtMjU2LDkgKzI1Niw5IEBACiAgIHJldHVy
biBmZjsKIH0KIAotRm9GaVRydWVUeXBlICpGb0ZpVHJ1ZVR5cGU6OmxvYWQoY2hhciAqZmlsZU5h
bWUpIHsKK0ZvRmlUcnVlVHlwZSAqRm9GaVRydWVUeXBlOjpsb2FkKGNvbnN0IGNoYXIgKmZpbGVO
YW1lKSB7CiAgIEZvRmlUcnVlVHlwZSAqZmY7Ci0gIGNoYXIgKmZpbGVBOworICBjb25zdCBjaGFy
ICpmaWxlQTsKICAgaW50IGxlbkE7CiAKICAgaWYgKCEoZmlsZUEgPSBGb0ZpQmFzZTo6cmVhZEZp
bGUoZmlsZU5hbWUsICZsZW5BKSkpIHsKQEAgLTI3Miw3ICsyNzIsNyBAQAogICByZXR1cm4gZmY7
CiB9CiAKLUZvRmlUcnVlVHlwZTo6Rm9GaVRydWVUeXBlKGNoYXIgKmZpbGVBLCBpbnQgbGVuQSwg
R0Jvb2wgZnJlZUZpbGVEYXRhQSk6CitGb0ZpVHJ1ZVR5cGU6OkZvRmlUcnVlVHlwZShjb25zdCBj
aGFyICpmaWxlQSwgaW50IGxlbkEsIEdCb29sIGZyZWVGaWxlRGF0YUEpOgogICBGb0ZpQmFzZShm
aWxlQSwgbGVuQSwgZnJlZUZpbGVEYXRhQSkKIHsKICAgdGFibGVzID0gTlVMTDsKQEAgLTM4OCw3
ICszODgsNyBAQAogICByZXR1cm4gZ2lkOwogfQogCi1pbnQgRm9GaVRydWVUeXBlOjptYXBOYW1l
VG9HSUQoY2hhciAqbmFtZSkgeworaW50IEZvRmlUcnVlVHlwZTo6bWFwTmFtZVRvR0lEKGNvbnN0
IGNoYXIgKm5hbWUpIHsKICAgaWYgKCFuYW1lVG9HSUQpIHsKICAgICByZXR1cm4gMDsKICAgfQpA
QCAtNDA4LDcgKzQwOCw3IEBACiAgIGlmICghY2hlY2tSZWdpb24odGFibGVzW2ldLm9mZnNldCwg
dGFibGVzW2ldLmxlbikpIHsKICAgICByZXR1cm4gTlVMTDsKICAgfQotICBpZiAoIShmZiA9IEZv
RmlUeXBlMUM6Om1ha2UoKGNoYXIgKilmaWxlICsgdGFibGVzW2ldLm9mZnNldCwKKyAgaWYgKCEo
ZmYgPSBGb0ZpVHlwZTFDOjptYWtlKChjb25zdCBjaGFyICopZmlsZSArIHRhYmxlc1tpXS5vZmZz
ZXQsCiAJCQkgICAgICB0YWJsZXNbaV0ubGVuKSkpIHsKICAgICByZXR1cm4gTlVMTDsKICAgfQpA
QCAtNDQxLDcgKzQ0MSw3IEBACiAgIHJldHVybiAzOwogfQogCi12b2lkIEZvRmlUcnVlVHlwZTo6
Y29udmVydFRvVHlwZTQyKGNoYXIgKnBzTmFtZSwgY2hhciAqKmVuY29kaW5nLAordm9pZCBGb0Zp
VHJ1ZVR5cGU6OmNvbnZlcnRUb1R5cGU0Mihjb25zdCBjaGFyICpwc05hbWUsIGNvbnN0IGNoYXIg
KiplbmNvZGluZywKIAkJCQkgICBHdXNob3J0ICpjb2RlVG9HSUQsCiAJCQkJICAgRm9GaU91dHB1
dEZ1bmMgb3V0cHV0RnVuYywKIAkJCQkgICB2b2lkICpvdXRwdXRTdHJlYW0pIHsKQEAgLTQ4MSw3
ICs0ODEsNyBAQAogICAoKm91dHB1dEZ1bmMpKG91dHB1dFN0cmVhbSwgIkZvbnROYW1lIGN1cnJl
bnRkaWN0IGVuZCBkZWZpbmVmb250IHBvcFxuIiwgNDApOwogfQogCi12b2lkIEZvRmlUcnVlVHlw
ZTo6Y29udmVydFRvVHlwZTEoY2hhciAqcHNOYW1lLCBjaGFyICoqbmV3RW5jb2RpbmcsCit2b2lk
IEZvRmlUcnVlVHlwZTo6Y29udmVydFRvVHlwZTEoY29uc3QgY2hhciAqcHNOYW1lLCBjb25zdCBj
aGFyICoqbmV3RW5jb2RpbmcsCiAJCQkJICBHQm9vbCBhc2NpaSwgRm9GaU91dHB1dEZ1bmMgb3V0
cHV0RnVuYywKIAkJCQkgIHZvaWQgKm91dHB1dFN0cmVhbSkgewogICBGb0ZpVHlwZTFDICpmZjsK
QEAgLTQ5NCw3ICs0OTQsNyBAQAogICBpZiAoIWNoZWNrUmVnaW9uKHRhYmxlc1tpXS5vZmZzZXQs
IHRhYmxlc1tpXS5sZW4pKSB7CiAgICAgcmV0dXJuOwogICB9Ci0gIGlmICghKGZmID0gRm9GaVR5
cGUxQzo6bWFrZSgoY2hhciAqKWZpbGUgKyB0YWJsZXNbaV0ub2Zmc2V0LAorICBpZiAoIShmZiA9
IEZvRmlUeXBlMUM6Om1ha2UoKGNvbnN0IGNoYXIgKilmaWxlICsgdGFibGVzW2ldLm9mZnNldCwK
IAkJCSAgICAgIHRhYmxlc1tpXS5sZW4pKSkgewogICAgIHJldHVybjsKICAgfQpAQCAtNTAyLDcg
KzUwMiw3IEBACiAgIGRlbGV0ZSBmZjsKIH0KIAotdm9pZCBGb0ZpVHJ1ZVR5cGU6OmNvbnZlcnRU
b0NJRFR5cGUyKGNoYXIgKnBzTmFtZSwKK3ZvaWQgRm9GaVRydWVUeXBlOjpjb252ZXJ0VG9DSURU
eXBlMihjb25zdCBjaGFyICpwc05hbWUsCiAJCQkJICAgICBHdXNob3J0ICpjaWRNYXAsIGludCBu
Q0lEcywKIAkJCQkgICAgIEdCb29sIG5lZWRWZXJ0aWNhbE1ldHJpY3MsCiAJCQkJICAgICBGb0Zp
T3V0cHV0RnVuYyBvdXRwdXRGdW5jLApAQCAtNjMyLDcgKzYzMiw3IEBACiAJCTU2KTsKIH0KIAot
dm9pZCBGb0ZpVHJ1ZVR5cGU6OmNvbnZlcnRUb0NJRFR5cGUwKGNoYXIgKnBzTmFtZSwKK3ZvaWQg
Rm9GaVRydWVUeXBlOjpjb252ZXJ0VG9DSURUeXBlMChjb25zdCBjaGFyICpwc05hbWUsCiAJCQkJ
ICAgICBGb0ZpT3V0cHV0RnVuYyBvdXRwdXRGdW5jLAogCQkJCSAgICAgdm9pZCAqb3V0cHV0U3Ry
ZWFtKSB7CiAgIEZvRmlUeXBlMUMgKmZmOwpAQCAtNjQ1LDcgKzY0NSw3IEBACiAgIGlmICghY2hl
Y2tSZWdpb24odGFibGVzW2ldLm9mZnNldCwgdGFibGVzW2ldLmxlbikpIHsKICAgICByZXR1cm47
CiAgIH0KLSAgaWYgKCEoZmYgPSBGb0ZpVHlwZTFDOjptYWtlKChjaGFyICopZmlsZSArIHRhYmxl
c1tpXS5vZmZzZXQsCisgIGlmICghKGZmID0gRm9GaVR5cGUxQzo6bWFrZSgoY29uc3QgY2hhciAq
KWZpbGUgKyB0YWJsZXNbaV0ub2Zmc2V0LAogCQkJICAgICAgdGFibGVzW2ldLmxlbikpKSB7CiAg
ICAgcmV0dXJuOwogICB9CkBAIC02NTMsNyArNjUzLDcgQEAKICAgZGVsZXRlIGZmOwogfQogCi12
b2lkIEZvRmlUcnVlVHlwZTo6Y29udmVydFRvVHlwZTAoY2hhciAqcHNOYW1lLCBHdXNob3J0ICpj
aWRNYXAsIGludCBuQ0lEcywKK3ZvaWQgRm9GaVRydWVUeXBlOjpjb252ZXJ0VG9UeXBlMChjb25z
dCBjaGFyICpwc05hbWUsIEd1c2hvcnQgKmNpZE1hcCwgaW50IG5DSURzLAogCQkJCSAgR0Jvb2wg
bmVlZFZlcnRpY2FsTWV0cmljcywKIAkJCQkgIEZvRmlPdXRwdXRGdW5jIG91dHB1dEZ1bmMsCiAJ
CQkJICB2b2lkICpvdXRwdXRTdHJlYW0pIHsKQEAgLTczNiw3ICs3MzYsNyBAQAogICAoKm91dHB1
dEZ1bmMpKG91dHB1dFN0cmVhbSwgIkZvbnROYW1lIGN1cnJlbnRkaWN0IGVuZCBkZWZpbmVmb250
IHBvcFxuIiwgNDApOwogfQogCi12b2lkIEZvRmlUcnVlVHlwZTo6Y29udmVydFRvVHlwZTAoY2hh
ciAqcHNOYW1lLAordm9pZCBGb0ZpVHJ1ZVR5cGU6OmNvbnZlcnRUb1R5cGUwKGNvbnN0IGNoYXIg
KnBzTmFtZSwKIAkJCQkgIEZvRmlPdXRwdXRGdW5jIG91dHB1dEZ1bmMsCiAJCQkJICB2b2lkICpv
dXRwdXRTdHJlYW0pIHsKICAgRm9GaVR5cGUxQyAqZmY7CkBAIC03NDksNyArNzQ5LDcgQEAKICAg
aWYgKCFjaGVja1JlZ2lvbih0YWJsZXNbaV0ub2Zmc2V0LCB0YWJsZXNbaV0ubGVuKSkgewogICAg
IHJldHVybjsKICAgfQotICBpZiAoIShmZiA9IEZvRmlUeXBlMUM6Om1ha2UoKGNoYXIgKilmaWxl
ICsgdGFibGVzW2ldLm9mZnNldCwKKyAgaWYgKCEoZmYgPSBGb0ZpVHlwZTFDOjptYWtlKChjb25z
dCBjaGFyICopZmlsZSArIHRhYmxlc1tpXS5vZmZzZXQsCiAJCQkgICAgICB0YWJsZXNbaV0ubGVu
KSkpIHsKICAgICByZXR1cm47CiAgIH0KQEAgLTc1OCw3ICs3NTgsNyBAQAogfQogCiB2b2lkIEZv
RmlUcnVlVHlwZTo6d3JpdGVUVEYoRm9GaU91dHB1dEZ1bmMgb3V0cHV0RnVuYywKLQkJCSAgICB2
b2lkICpvdXRwdXRTdHJlYW0sIGNoYXIgKm5hbWUsCisJCQkgICAgdm9pZCAqb3V0cHV0U3RyZWFt
LCBjb25zdCBjaGFyICpuYW1lLAogCQkJICAgIEd1c2hvcnQgKmNvZGVUb0dJRCkgewogICAvLyB0
aGlzIHN1YnN0aXR1dGUgY21hcCB0YWJsZSBtYXBzIGNoYXIgY29kZXMgMDAwMC1mZmZmIGRpcmVj
dGx5IHRvCiAgIC8vIGdseXBocyAwMDAwLWZmZmYKQEAgLTkzMCw3ICs5MzAsNyBAQAogICBpZiAo
IW1pc3NpbmdDbWFwICYmICFtaXNzaW5nTmFtZSAmJiAhbWlzc2luZ1Bvc3QgJiYgIW1pc3NpbmdP
UzIgJiYKICAgICAgICF1bnNvcnRlZExvY2EgJiYgIWJhZENtYXBMZW4gJiYgIWFiYnJldkhNVFgg
JiYgblplcm9MZW5ndGhUYWJsZXMgPT0gMCAmJgogICAgICAgIW5hbWUgJiYgIWNvZGVUb0dJRCkg
ewotICAgICgqb3V0cHV0RnVuYykob3V0cHV0U3RyZWFtLCAoY2hhciAqKWZpbGUsIGxlbik7Cisg
ICAgKCpvdXRwdXRGdW5jKShvdXRwdXRTdHJlYW0sIChjb25zdCBjaGFyICopZmlsZSwgbGVuKTsK
ICAgICBnb3RvIGRvbmUxOwogICB9CiAKQEAgLTEyNzksMTQgKzEyNzksMTQgQEAKICAgZm9yIChp
ID0gMDsgaSA8IG5OZXdUYWJsZXM7ICsraSkgewogICAgIGlmIChuZXdUYWJsZXNbaV0udGFnID09
IGhlYWRUYWcpIHsKICAgICAgIGlmIChjaGVja1JlZ2lvbihuZXdUYWJsZXNbaV0ub3JpZ09mZnNl
dCwgbmV3VGFibGVzW2ldLmxlbikpIHsKLQkoKm91dHB1dEZ1bmMpKG91dHB1dFN0cmVhbSwgKGNo
YXIgKilmaWxlICsgbmV3VGFibGVzW2ldLm9yaWdPZmZzZXQsIDgpOworCSgqb3V0cHV0RnVuYyko
b3V0cHV0U3RyZWFtLCAoY29uc3QgY2hhciAqKWZpbGUgKyBuZXdUYWJsZXNbaV0ub3JpZ09mZnNl
dCwgOCk7CiAJY2hlY2tzdW1CdWZbMF0gPSBmaWxlQ2hlY2tzdW0gPj4gMjQ7CiAJY2hlY2tzdW1C
dWZbMV0gPSBmaWxlQ2hlY2tzdW0gPj4gMTY7CiAJY2hlY2tzdW1CdWZbMl0gPSBmaWxlQ2hlY2tz
dW0gPj4gODsKIAljaGVja3N1bUJ1ZlszXSA9IGZpbGVDaGVja3N1bTsKIAkoKm91dHB1dEZ1bmMp
KG91dHB1dFN0cmVhbSwgY2hlY2tzdW1CdWYsIDQpOwogCSgqb3V0cHV0RnVuYykob3V0cHV0U3Ry
ZWFtLAotCQkgICAgICAoY2hhciAqKWZpbGUgKyBuZXdUYWJsZXNbaV0ub3JpZ09mZnNldCArIDEy
LAorCQkgICAgICAoY29uc3QgY2hhciAqKWZpbGUgKyBuZXdUYWJsZXNbaV0ub3JpZ09mZnNldCAr
IDEyLAogCQkgICAgICBuZXdUYWJsZXNbaV0ubGVuIC0gMTIpOwogICAgICAgfSBlbHNlIHsKIAlm
b3IgKGogPSAwOyBqIDwgbmV3VGFibGVzW2ldLmxlbjsgKytqKSB7CkBAIC0xMzMwLDcgKzEzMzAs
NyBAQAogCWlmIChuID4gMCkgewogCSAgayA9IGxvY2FUYWJsZVtqXS5vcmlnT2Zmc2V0OwogCSAg
aWYgKGNoZWNrUmVnaW9uKHBvcyArIGssIG4pKSB7Ci0JICAgICgqb3V0cHV0RnVuYykob3V0cHV0
U3RyZWFtLCAoY2hhciAqKWZpbGUgKyBwb3MgKyBrLCBuKTsKKwkgICAgKCpvdXRwdXRGdW5jKShv
dXRwdXRTdHJlYW0sIChjb25zdCBjaGFyICopZmlsZSArIHBvcyArIGssIG4pOwogCSAgfSBlbHNl
IHsKIAkgICAgZm9yIChrID0gMDsgayA8IG47ICsraykgewogCSAgICAgICgqb3V0cHV0RnVuYyko
b3V0cHV0U3RyZWFtLCAiXDAiLCAxKTsKQEAgLTEzNDMsNyArMTM0Myw3IEBACiAgICAgICB9CiAg
ICAgfSBlbHNlIHsKICAgICAgIGlmIChjaGVja1JlZ2lvbihuZXdUYWJsZXNbaV0ub3JpZ09mZnNl
dCwgbmV3VGFibGVzW2ldLmxlbikpIHsKLQkoKm91dHB1dEZ1bmMpKG91dHB1dFN0cmVhbSwgKGNo
YXIgKilmaWxlICsgbmV3VGFibGVzW2ldLm9yaWdPZmZzZXQsCisJKCpvdXRwdXRGdW5jKShvdXRw
dXRTdHJlYW0sIChjb25zdCBjaGFyICopZmlsZSArIG5ld1RhYmxlc1tpXS5vcmlnT2Zmc2V0LAog
CQkgICAgICBuZXdUYWJsZXNbaV0ubGVuKTsKICAgICAgIH0gZWxzZSB7CiAJZm9yIChqID0gMDsg
aiA8IG5ld1RhYmxlc1tpXS5sZW47ICsraikgewpAQCAtMTM2NiwxMCArMTM2NiwxMCBAQAogICBn
ZnJlZShsb2NhVGFibGUpOwogfQogCi12b2lkIEZvRmlUcnVlVHlwZTo6Y3Z0RW5jb2RpbmcoY2hh
ciAqKmVuY29kaW5nLAordm9pZCBGb0ZpVHJ1ZVR5cGU6OmN2dEVuY29kaW5nKGNvbnN0IGNoYXIg
KiplbmNvZGluZywKIAkJCSAgICAgICBGb0ZpT3V0cHV0RnVuYyBvdXRwdXRGdW5jLAogCQkJICAg
ICAgIHZvaWQgKm91dHB1dFN0cmVhbSkgewotICBjaGFyICpuYW1lOworICBjb25zdCBjaGFyICpu
YW1lOwogICBHU3RyaW5nICpidWY7CiAgIGludCBpOwogCkBAIC0xMzk1LDExICsxMzk1LDExIEBA
CiAgICgqb3V0cHV0RnVuYykob3V0cHV0U3RyZWFtLCAicmVhZG9ubHkgZGVmXG4iLCAxMyk7CiB9
CiAKLXZvaWQgRm9GaVRydWVUeXBlOjpjdnRDaGFyU3RyaW5ncyhjaGFyICoqZW5jb2RpbmcsCit2
b2lkIEZvRmlUcnVlVHlwZTo6Y3Z0Q2hhclN0cmluZ3MoY29uc3QgY2hhciAqKmVuY29kaW5nLAog
CQkJCSAgR3VzaG9ydCAqY29kZVRvR0lELAogCQkJCSAgRm9GaU91dHB1dEZ1bmMgb3V0cHV0RnVu
YywKIAkJCQkgIHZvaWQgKm91dHB1dFN0cmVhbSkgewotICBjaGFyICpuYW1lOworICBjb25zdCBj
aGFyICpuYW1lOwogICBHU3RyaW5nICpidWY7CiAgIGNoYXIgYnVmMlsxNl07CiAgIGludCBpLCBr
OwpAQCAtMTk4MCw3ICsxOTgwLDcgQEAKIAlpZiAoIW9rIHx8ICFjaGVja1JlZ2lvbihzdHJpbmdQ
b3MgKyAxLCBtKSkgewogCSAgZ290byBlcnI7CiAJfQotCW5hbWUgPSBuZXcgR1N0cmluZygoY2hh
ciAqKSZmaWxlW3N0cmluZ1BvcyArIDFdLCBtKTsKKwluYW1lID0gbmV3IEdTdHJpbmcoKGNvbnN0
IGNoYXIgKikmZmlsZVtzdHJpbmdQb3MgKyAxXSwgbSk7CiAJbmFtZVRvR0lELT5yZW1vdmVJbnQo
bmFtZSk7CiAJbmFtZVRvR0lELT5hZGQobmFtZSwgaSk7CiAJKytzdHJpbmdJZHg7CkBAIC0yMDEw
LDcgKzIwMTAsNyBAQAogICB9CiB9CiAKLWludCBGb0ZpVHJ1ZVR5cGU6OnNlZWtUYWJsZShjaGFy
ICp0YWcpIHsKK2ludCBGb0ZpVHJ1ZVR5cGU6OnNlZWtUYWJsZShjb25zdCBjaGFyICp0YWcpIHsK
ICAgR3VpbnQgdGFnSTsKICAgaW50IGk7CiAKZGlmZiAtdXIgdGV4bGl2ZS0yMDA4MDgxNi1zb3Vy
Y2UvbGlicy94cGRmLm9yaWcvZm9maS9Gb0ZpVHJ1ZVR5cGUuaCB0ZXhsaXZlLTIwMDgwODE2LXNv
dXJjZS9saWJzL3hwZGYvZm9maS9Gb0ZpVHJ1ZVR5cGUuaAotLS0gdGV4bGl2ZS0yMDA4MDgxNi1z
b3VyY2UvbGlicy94cGRmLm9yaWcvZm9maS9Gb0ZpVHJ1ZVR5cGUuaAkyMDA3LTA3LTEyIDAxOjEz
OjU5LjAwMDAwMDAwMCArMDQwMAorKysgdGV4bGl2ZS0yMDA4MDgxNi1zb3VyY2UvbGlicy94cGRm
L2ZvZmkvRm9GaVRydWVUeXBlLmgJMjAwOC0xMS0yMSAxNzozMzozMy4wMDAwMDAwMDAgKzAzMDAK
QEAgLTMxLDEwICszMSwxMCBAQAogcHVibGljOgogCiAgIC8vIENyZWF0ZSBhIEZvRmlUcnVlVHlw
ZSBvYmplY3QgZnJvbSBhIG1lbW9yeSBidWZmZXIuCi0gIHN0YXRpYyBGb0ZpVHJ1ZVR5cGUgKm1h
a2UoY2hhciAqZmlsZUEsIGludCBsZW5BKTsKKyAgc3RhdGljIEZvRmlUcnVlVHlwZSAqbWFrZShj
b25zdCBjaGFyICpmaWxlQSwgaW50IGxlbkEpOwogCiAgIC8vIENyZWF0ZSBhIEZvRmlUcnVlVHlw
ZSBvYmplY3QgZnJvbSBhIGZpbGUgb24gZGlzay4KLSAgc3RhdGljIEZvRmlUcnVlVHlwZSAqbG9h
ZChjaGFyICpmaWxlTmFtZSk7CisgIHN0YXRpYyBGb0ZpVHJ1ZVR5cGUgKmxvYWQoY29uc3QgY2hh
ciAqZmlsZU5hbWUpOwogCiAgIHZpcnR1YWwgfkZvRmlUcnVlVHlwZSgpOwogCkBAIC02MSw3ICs2
MSw3IEBACiAgIC8vIFJldHVybnMgdGhlIEdJRCBjb3JyZXNwb25kaW5nIHRvIDxuYW1lPiBhY2Nv
cmRpbmcgdG8gdGhlIHBvc3QKICAgLy8gdGFibGUuICBSZXR1cm5zIDAgaWYgdGhlcmUgaXMgbm8g
bWFwcGluZyBmb3IgPG5hbWU+IG9yIGlmIHRoZQogICAvLyBmb250IGRvZXMgbm90IGhhdmUgYSBw
b3N0IHRhYmxlLgotICBpbnQgbWFwTmFtZVRvR0lEKGNoYXIgKm5hbWUpOworICBpbnQgbWFwTmFt
ZVRvR0lEKGNvbnN0IGNoYXIgKm5hbWUpOwogCiAgIC8vIFJldHVybiB0aGUgbWFwcGluZyBmcm9t
IENJRHMgdG8gR0lEcywgYW5kIHJldHVybiB0aGUgbnVtYmVyIG9mCiAgIC8vIENJRHMgaW4gKjxu
Q0lEcz4uICBUaGlzIGlzIG9ubHkgdXNlZnVsIGZvciBDSUQgZm9udHMuICAoT25seQpAQCAtODQs
NyArODQsNyBAQAogICAvLyBJZiA8ZW5jb2Rpbmc+IGlzIE5VTEwsIHRoZSBlbmNvZGluZyBpcyB1
bmtub3duIG9yIHVuZGVmaW5lZC4gIFRoZQogICAvLyA8Y29kZVRvR0lEPiBhcnJheSBzcGVjaWZp
ZXMgdGhlIG1hcHBpbmcgZnJvbSBjaGFyIGNvZGVzIHRvIEdJRHMuCiAgIC8vIChOb3QgdXNlZnVs
IGZvciBPcGVuVHlwZSBDRkYgZm9udHMuKQotICB2b2lkIGNvbnZlcnRUb1R5cGU0MihjaGFyICpw
c05hbWUsIGNoYXIgKiplbmNvZGluZywKKyAgdm9pZCBjb252ZXJ0VG9UeXBlNDIoY29uc3QgY2hh
ciAqcHNOYW1lLCBjb25zdCBjaGFyICoqZW5jb2RpbmcsCiAJCSAgICAgICBHdXNob3J0ICpjb2Rl
VG9HSUQsCiAJCSAgICAgICBGb0ZpT3V0cHV0RnVuYyBvdXRwdXRGdW5jLCB2b2lkICpvdXRwdXRT
dHJlYW0pOwogCkBAIC05NSw3ICs5NSw3IEBACiAgIC8vIG90aGVyd2lzZSBpdCB3aWxsIGJlIGxl
ZnQgYXMgYmluYXJ5IGRhdGEuICBJZiA8cHNOYW1lPiBpcwogICAvLyBub24tTlVMTCwgaXQgd2ls
bCBiZSB1c2VkIGFzIHRoZSBQb3N0U2NyaXB0IGZvbnQgbmFtZS4gIChPbmx5CiAgIC8vIHVzZWZ1
bCBmb3IgT3BlblR5cGUgQ0ZGIGZvbnRzLikKLSAgdm9pZCBjb252ZXJ0VG9UeXBlMShjaGFyICpw
c05hbWUsIGNoYXIgKipuZXdFbmNvZGluZywgR0Jvb2wgYXNjaWksCisgIHZvaWQgY29udmVydFRv
VHlwZTEoY29uc3QgY2hhciAqcHNOYW1lLCBjb25zdCBjaGFyICoqbmV3RW5jb2RpbmcsIEdCb29s
IGFzY2lpLAogCQkgICAgICBGb0ZpT3V0cHV0RnVuYyBvdXRwdXRGdW5jLCB2b2lkICpvdXRwdXRT
dHJlYW0pOwogCiAgIC8vIENvbnZlcnQgdG8gYSBUeXBlIDIgQ0lERm9udCwgc3VpdGFibGUgZm9y
IGVtYmVkZGluZyBpbiBhCkBAIC0xMDMsMTQgKzEwMywxNCBAQAogICAvLyBuYW1lIChzbyB3ZSBk
b24ndCBuZWVkIHRvIGRlcGVuZCBvbiB0aGUgJ25hbWUnIHRhYmxlIGluIHRoZQogICAvLyBmb250
KS4gIFRoZSA8Y2lkTWFwPiBhcnJheSBtYXBzIENJRHMgdG8gR0lEczsgaXQgaGFzIDxuQ0lEcz4K
ICAgLy8gZW50cmllcy4gIChOb3QgdXNlZnVsIGZvciBPcGVuVHlwZSBDRkYgZm9udHMuKQotICB2
b2lkIGNvbnZlcnRUb0NJRFR5cGUyKGNoYXIgKnBzTmFtZSwgR3VzaG9ydCAqY2lkTWFwLCBpbnQg
bkNJRHMsCisgIHZvaWQgY29udmVydFRvQ0lEVHlwZTIoY29uc3QgY2hhciAqcHNOYW1lLCBHdXNo
b3J0ICpjaWRNYXAsIGludCBuQ0lEcywKIAkJCSBHQm9vbCBuZWVkVmVydGljYWxNZXRyaWNzLAog
CQkJIEZvRmlPdXRwdXRGdW5jIG91dHB1dEZ1bmMsIHZvaWQgKm91dHB1dFN0cmVhbSk7CiAKICAg
Ly8gQ29udmVydCB0byBhIFR5cGUgMCBDSURGb250LCBzdWl0YWJsZSBmb3IgZW1iZWRkaW5nIGlu
IGEKICAgLy8gUG9zdFNjcmlwdCBmaWxlLiAgPHBzTmFtZT4gd2lsbCBiZSB1c2VkIGFzIHRoZSBQ
b3N0U2NyaXB0IGZvbnQKICAgLy8gbmFtZS4gIChPbmx5IHVzZWZ1bCBmb3IgT3BlblR5cGUgQ0ZG
IGZvbnRzLikKLSAgdm9pZCBjb252ZXJ0VG9DSURUeXBlMChjaGFyICpwc05hbWUsCisgIHZvaWQg
Y29udmVydFRvQ0lEVHlwZTAoY29uc3QgY2hhciAqcHNOYW1lLAogCQkJIEZvRmlPdXRwdXRGdW5j
IG91dHB1dEZ1bmMsIHZvaWQgKm91dHB1dFN0cmVhbSk7CiAKICAgLy8gQ29udmVydCB0byBhIFR5
cGUgMCAoYnV0IG5vbi1DSUQpIGNvbXBvc2l0ZSBmb250LCBzdWl0YWJsZSBmb3IKQEAgLTExOCwx
NCArMTE4LDE0IEBACiAgIC8vIFBvc3RTY3JpcHQgZm9udCBuYW1lIChzbyB3ZSBkb24ndCBuZWVk
IHRvIGRlcGVuZCBvbiB0aGUgJ25hbWUnCiAgIC8vIHRhYmxlIGluIHRoZSBmb250KS4gIFRoZSA8
Y2lkTWFwPiBhcnJheSBtYXBzIENJRHMgdG8gR0lEczsgaXQgaGFzCiAgIC8vIDxuQ0lEcz4gZW50
cmllcy4gIChOb3QgdXNlZnVsIGZvciBPcGVuVHlwZSBDRkYgZm9udHMuKQotICB2b2lkIGNvbnZl
cnRUb1R5cGUwKGNoYXIgKnBzTmFtZSwgR3VzaG9ydCAqY2lkTWFwLCBpbnQgbkNJRHMsCisgIHZv
aWQgY29udmVydFRvVHlwZTAoY29uc3QgY2hhciAqcHNOYW1lLCBHdXNob3J0ICpjaWRNYXAsIGlu
dCBuQ0lEcywKIAkJICAgICAgR0Jvb2wgbmVlZFZlcnRpY2FsTWV0cmljcywKIAkJICAgICAgRm9G
aU91dHB1dEZ1bmMgb3V0cHV0RnVuYywgdm9pZCAqb3V0cHV0U3RyZWFtKTsKIAogICAvLyBDb252
ZXJ0IHRvIGEgVHlwZSAwIChidXQgbm9uLUNJRCkgY29tcG9zaXRlIGZvbnQsIHN1aXRhYmxlIGZv
cgogICAvLyBlbWJlZGRpbmcgaW4gYSBQb3N0U2NyaXB0IGZpbGUuICA8cHNOYW1lPiB3aWxsIGJl
IHVzZWQgYXMgdGhlCiAgIC8vIFBvc3RTY3JpcHQgZm9udCBuYW1lLiAgKE9ubHkgdXNlZnVsIGZv
ciBPcGVuVHlwZSBDRkYgZm9udHMuKQotICB2b2lkIGNvbnZlcnRUb1R5cGUwKGNoYXIgKnBzTmFt
ZSwKKyAgdm9pZCBjb252ZXJ0VG9UeXBlMChjb25zdCBjaGFyICpwc05hbWUsCiAJCSAgICAgIEZv
RmlPdXRwdXRGdW5jIG91dHB1dEZ1bmMsIHZvaWQgKm91dHB1dFN0cmVhbSk7CiAKICAgLy8gV3Jp
dGUgYSBjbGVhbiBUVEYgZmlsZSwgZmlsbGluZyBpbiBtaXNzaW5nIHRhYmxlcyBhbmQgY29ycmVj
dGluZwpAQCAtMTM1LDE1ICsxMzUsMTUgQEAKICAgLy8gY29tcGxldGUgYW5kIGNvcnJlY3QsIGl0
IHdpbGwgYmUgd3JpdHRlbiB1bm1vZGlmaWVkLiAgKE5vdCB1c2VmdWwKICAgLy8gZm9yIE9wZW5U
eXBlIENGRiBmb250cy4pCiAgIHZvaWQgd3JpdGVUVEYoRm9GaU91dHB1dEZ1bmMgb3V0cHV0RnVu
Yywgdm9pZCAqb3V0cHV0U3RyZWFtLAotCQljaGFyICpuYW1lID0gTlVMTCwgR3VzaG9ydCAqY29k
ZVRvR0lEID0gTlVMTCk7CisJCWNvbnN0IGNoYXIgKm5hbWUgPSBOVUxMLCBHdXNob3J0ICpjb2Rl
VG9HSUQgPSBOVUxMKTsKIAogcHJpdmF0ZToKIAotICBGb0ZpVHJ1ZVR5cGUoY2hhciAqZmlsZUEs
IGludCBsZW5BLCBHQm9vbCBmcmVlRmlsZURhdGFBKTsKLSAgdm9pZCBjdnRFbmNvZGluZyhjaGFy
ICoqZW5jb2RpbmcsCisgIEZvRmlUcnVlVHlwZShjb25zdCBjaGFyICpmaWxlQSwgaW50IGxlbkEs
IEdCb29sIGZyZWVGaWxlRGF0YUEpOworICB2b2lkIGN2dEVuY29kaW5nKGNvbnN0IGNoYXIgKipl
bmNvZGluZywKIAkJICAgRm9GaU91dHB1dEZ1bmMgb3V0cHV0RnVuYywKIAkJICAgdm9pZCAqb3V0
cHV0U3RyZWFtKTsKLSAgdm9pZCBjdnRDaGFyU3RyaW5ncyhjaGFyICoqZW5jb2RpbmcsCisgIHZv
aWQgY3Z0Q2hhclN0cmluZ3MoY29uc3QgY2hhciAqKmVuY29kaW5nLAogCQkgICAgICBHdXNob3J0
ICpjb2RlVG9HSUQsCiAJCSAgICAgIEZvRmlPdXRwdXRGdW5jIG91dHB1dEZ1bmMsCiAJCSAgICAg
IHZvaWQgKm91dHB1dFN0cmVhbSk7CkBAIC0xNTYsNyArMTU2LDcgQEAKICAgR3VpbnQgY29tcHV0
ZVRhYmxlQ2hlY2tzdW0oR3VjaGFyICpkYXRhLCBpbnQgbGVuZ3RoKTsKICAgdm9pZCBwYXJzZSgp
OwogICB2b2lkIHJlYWRQb3N0VGFibGUoKTsKLSAgaW50IHNlZWtUYWJsZShjaGFyICp0YWcpOwor
ICBpbnQgc2Vla1RhYmxlKGNvbnN0IGNoYXIgKnRhZyk7CiAKICAgVHJ1ZVR5cGVUYWJsZSAqdGFi
bGVzOwogICBpbnQgblRhYmxlczsKZGlmZiAtdXIgdGV4bGl2ZS0yMDA4MDgxNi1zb3VyY2UvbGli
cy94cGRmLm9yaWcvZm9maS9Gb0ZpVHlwZTEuY2MgdGV4bGl2ZS0yMDA4MDgxNi1zb3VyY2UvbGli
cy94cGRmL2ZvZmkvRm9GaVR5cGUxLmNjCi0tLSB0ZXhsaXZlLTIwMDgwODE2LXNvdXJjZS9saWJz
L3hwZGYub3JpZy9mb2ZpL0ZvRmlUeXBlMS5jYwkyMDA3LTA3LTEyIDAxOjEzOjU5LjAwMDAwMDAw
MCArMDQwMAorKysgdGV4bGl2ZS0yMDA4MDgxNi1zb3VyY2UvbGlicy94cGRmL2ZvZmkvRm9GaVR5
cGUxLmNjCTIwMDgtMTEtMjEgMTg6MDg6MjIuMDAwMDAwMDAwICswMzAwCkBAIC0yMiwxMiArMjIs
MTIgQEAKIC8vIEZvRmlUeXBlMQogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotRm9GaVR5cGUxICpGb0Zp
VHlwZTE6Om1ha2UoY2hhciAqZmlsZUEsIGludCBsZW5BKSB7CitGb0ZpVHlwZTEgKkZvRmlUeXBl
MTo6bWFrZShjb25zdCBjaGFyICpmaWxlQSwgaW50IGxlbkEpIHsKICAgcmV0dXJuIG5ldyBGb0Zp
VHlwZTEoZmlsZUEsIGxlbkEsIGdGYWxzZSk7CiB9CiAKLUZvRmlUeXBlMSAqRm9GaVR5cGUxOjps
b2FkKGNoYXIgKmZpbGVOYW1lKSB7Ci0gIGNoYXIgKmZpbGVBOworRm9GaVR5cGUxICpGb0ZpVHlw
ZTE6OmxvYWQoY29uc3QgY2hhciAqZmlsZU5hbWUpIHsKKyAgY29uc3QgY2hhciAqZmlsZUE7CiAg
IGludCBsZW5BOwogCiAgIGlmICghKGZpbGVBID0gRm9GaUJhc2U6OnJlYWRGaWxlKGZpbGVOYW1l
LCAmbGVuQSkpKSB7CkBAIC0zNiw3ICszNiw3IEBACiAgIHJldHVybiBuZXcgRm9GaVR5cGUxKGZp
bGVBLCBsZW5BLCBnVHJ1ZSk7CiB9CiAKLUZvRmlUeXBlMTo6Rm9GaVR5cGUxKGNoYXIgKmZpbGVB
LCBpbnQgbGVuQSwgR0Jvb2wgZnJlZUZpbGVEYXRhQSk6CitGb0ZpVHlwZTE6OkZvRmlUeXBlMShj
b25zdCBjaGFyICpmaWxlQSwgaW50IGxlbkEsIEdCb29sIGZyZWVGaWxlRGF0YUEpOgogICBGb0Zp
QmFzZShmaWxlQSwgbGVuQSwgZnJlZUZpbGVEYXRhQSkKIHsKICAgbmFtZSA9IE5VTEw7CkBAIC00
OCw0NiArNDgsNDYgQEAKICAgaW50IGk7CiAKICAgaWYgKG5hbWUpIHsKLSAgICBnZnJlZShuYW1l
KTsKKyAgICBnZnJlZShjb25zdF9jYXN0PGNoYXIqPihuYW1lKSk7CiAgIH0KICAgaWYgKGVuY29k
aW5nICYmIGVuY29kaW5nICE9IGZvZmlUeXBlMVN0YW5kYXJkRW5jb2RpbmcpIHsKICAgICBmb3Ig
KGkgPSAwOyBpIDwgMjU2OyArK2kpIHsKLSAgICAgIGdmcmVlKGVuY29kaW5nW2ldKTsKKyAgICAg
IGdmcmVlKGNvbnN0X2Nhc3Q8Y2hhcio+KGVuY29kaW5nW2ldKSk7CiAgICAgfQogICAgIGdmcmVl
KGVuY29kaW5nKTsKICAgfQogfQogCi1jaGFyICpGb0ZpVHlwZTE6OmdldE5hbWUoKSB7Citjb25z
dCBjaGFyICpGb0ZpVHlwZTE6OmdldE5hbWUoKSB7CiAgIGlmICghcGFyc2VkKSB7CiAgICAgcGFy
c2UoKTsKICAgfQogICByZXR1cm4gbmFtZTsKIH0KIAotY2hhciAqKkZvRmlUeXBlMTo6Z2V0RW5j
b2RpbmcoKSB7Citjb25zdCBjaGFyICoqRm9GaVR5cGUxOjpnZXRFbmNvZGluZygpIHsKICAgaWYg
KCFwYXJzZWQpIHsKICAgICBwYXJzZSgpOwogICB9CiAgIHJldHVybiBlbmNvZGluZzsKIH0KIAot
dm9pZCBGb0ZpVHlwZTE6OndyaXRlRW5jb2RlZChjaGFyICoqbmV3RW5jb2RpbmcsCit2b2lkIEZv
RmlUeXBlMTo6d3JpdGVFbmNvZGVkKGNvbnN0IGNoYXIgKipuZXdFbmNvZGluZywKIAkJCSAgICAg
Rm9GaU91dHB1dEZ1bmMgb3V0cHV0RnVuYywgdm9pZCAqb3V0cHV0U3RyZWFtKSB7CiAgIGNoYXIg
YnVmWzUxMl07Ci0gIGNoYXIgKmxpbmUsICpsaW5lMiwgKnA7CisgIGNvbnN0IGNoYXIgKmxpbmUs
ICpsaW5lMiwgKnA7CiAgIGludCBpOwogCiAgIC8vIGNvcHkgZXZlcnl0aGluZyB1cCB0byB0aGUg
ZW5jb2RpbmcKLSAgZm9yIChsaW5lID0gKGNoYXIgKilmaWxlOworICBmb3IgKGxpbmUgPSAoY29u
c3QgY2hhciAqKWZpbGU7CiAgICAgICAgbGluZSAmJiBzdHJuY21wKGxpbmUsICIvRW5jb2Rpbmci
LCA5KTsKICAgICAgICBsaW5lID0gZ2V0TmV4dExpbmUobGluZSkpIDsKICAgaWYgKCFsaW5lKSB7
CiAgICAgLy8gbm8gZW5jb2RpbmcgLSBqdXN0IGNvcHkgdGhlIHdob2xlIGZvbnQgZmlsZQotICAg
ICgqb3V0cHV0RnVuYykob3V0cHV0U3RyZWFtLCAoY2hhciAqKWZpbGUsIGxlbik7CisgICAgKCpv
dXRwdXRGdW5jKShvdXRwdXRTdHJlYW0sIChjb25zdCBjaGFyICopZmlsZSwgbGVuKTsKICAgICBy
ZXR1cm47CiAgIH0KLSAgKCpvdXRwdXRGdW5jKShvdXRwdXRTdHJlYW0sIChjaGFyICopZmlsZSwg
bGluZSAtIChjaGFyICopZmlsZSk7CisgICgqb3V0cHV0RnVuYykob3V0cHV0U3RyZWFtLCAoY29u
c3QgY2hhciAqKWZpbGUsIGxpbmUgLSAoY29uc3QgY2hhciAqKWZpbGUpOwogCiAgIC8vIHdyaXRl
IHRoZSBuZXcgZW5jb2RpbmcKICAgKCpvdXRwdXRGdW5jKShvdXRwdXRTdHJlYW0sICIvRW5jb2Rp
bmcgMjU2IGFycmF5XG4iLCAyMCk7CkBAIC0xNTAsMTIgKzE1MCwxMiBAQAogCiAgICAgLy8gY29w
eSBldmVyeXRoaW5nIGFmdGVyIHRoZSBlbmNvZGluZwogICAgIGlmIChsaW5lKSB7Ci0gICAgICAo
Km91dHB1dEZ1bmMpKG91dHB1dFN0cmVhbSwgbGluZSwgKChjaGFyICopZmlsZSArIGxlbikgLSBs
aW5lKTsKKyAgICAgICgqb3V0cHV0RnVuYykob3V0cHV0U3RyZWFtLCBsaW5lLCAoKGNvbnN0IGNo
YXIgKilmaWxlICsgbGVuKSAtIGxpbmUpOwogICAgIH0KICAgfQogfQogCi1jaGFyICpGb0ZpVHlw
ZTE6OmdldE5leHRMaW5lKGNoYXIgKmxpbmUpIHsKK2NvbnN0IGNoYXIgKkZvRmlUeXBlMTo6Z2V0
TmV4dExpbmUoY29uc3QgY2hhciAqbGluZSkgewogICB3aGlsZSAobGluZSA8IChjaGFyICopZmls
ZSArIGxlbiAmJiAqbGluZSAhPSAnXHgwYScgJiYgKmxpbmUgIT0gJ1x4MGQnKSB7CiAgICAgKyts
aW5lOwogICB9CkBAIC0xNzIsNyArMTcyLDggQEAKIH0KIAogdm9pZCBGb0ZpVHlwZTE6OnBhcnNl
KCkgewotICBjaGFyICpsaW5lLCAqbGluZTEsICpwLCAqcDI7CisgIGNvbnN0IGNoYXIgKmxpbmUs
ICpsaW5lMTsKKyAgY2hhciAqcCwgKnAyOwogICBjaGFyIGJ1ZlsyNTZdOwogICBjaGFyIGM7CiAg
IGludCBuLCBjb2RlLCBpLCBqOwpAQCAtMTk3LDcgKzE5OCw3IEBACiAgICAgICBlbmNvZGluZyA9
IGZvZmlUeXBlMVN0YW5kYXJkRW5jb2Rpbmc7CiAgICAgfSBlbHNlIGlmICghZW5jb2RpbmcgJiYK
IAkgICAgICAgIXN0cm5jbXAobGluZSwgIi9FbmNvZGluZyAyNTYgYXJyYXkiLCAxOSkpIHsKLSAg
ICAgIGVuY29kaW5nID0gKGNoYXIgKiopZ21hbGxvY24oMjU2LCBzaXplb2YoY2hhciAqKSk7Cisg
ICAgICBlbmNvZGluZyA9IChjb25zdCBjaGFyICoqKWdtYWxsb2NuKDI1Niwgc2l6ZW9mKGNoYXIg
KikpOwogICAgICAgZm9yIChqID0gMDsgaiA8IDI1NjsgKytqKSB7CiAJZW5jb2Rpbmdbal0gPSBO
VUxMOwogICAgICAgfQpkaWZmIC11ciB0ZXhsaXZlLTIwMDgwODE2LXNvdXJjZS9saWJzL3hwZGYu
b3JpZy9mb2ZpL0ZvRmlUeXBlMUMuY2MgdGV4bGl2ZS0yMDA4MDgxNi1zb3VyY2UvbGlicy94cGRm
L2ZvZmkvRm9GaVR5cGUxQy5jYwotLS0gdGV4bGl2ZS0yMDA4MDgxNi1zb3VyY2UvbGlicy94cGRm
Lm9yaWcvZm9maS9Gb0ZpVHlwZTFDLmNjCTIwMDctMDctMTIgMDE6MTM6NTkuMDAwMDAwMDAwICsw
NDAwCisrKyB0ZXhsaXZlLTIwMDgwODE2LXNvdXJjZS9saWJzL3hwZGYvZm9maS9Gb0ZpVHlwZTFD
LmNjCTIwMDgtMTEtMjEgMTg6MTA6MTQuMDAwMDAwMDAwICswMzAwCkBAIC0yOCw3ICsyOCw3IEBA
CiAvLyBGb0ZpVHlwZTFDCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1Gb0ZpVHlwZTFDICpGb0ZpVHlw
ZTFDOjptYWtlKGNoYXIgKmZpbGVBLCBpbnQgbGVuQSkgeworRm9GaVR5cGUxQyAqRm9GaVR5cGUx
Qzo6bWFrZShjb25zdCBjaGFyICpmaWxlQSwgaW50IGxlbkEpIHsKICAgRm9GaVR5cGUxQyAqZmY7
CiAKICAgZmYgPSBuZXcgRm9GaVR5cGUxQyhmaWxlQSwgbGVuQSwgZ0ZhbHNlKTsKQEAgLTM5LDkg
KzM5LDkgQEAKICAgcmV0dXJuIGZmOwogfQogCi1Gb0ZpVHlwZTFDICpGb0ZpVHlwZTFDOjpsb2Fk
KGNoYXIgKmZpbGVOYW1lKSB7CitGb0ZpVHlwZTFDICpGb0ZpVHlwZTFDOjpsb2FkKGNvbnN0IGNo
YXIgKmZpbGVOYW1lKSB7CiAgIEZvRmlUeXBlMUMgKmZmOwotICBjaGFyICpmaWxlQTsKKyAgY29u
c3QgY2hhciAqZmlsZUE7CiAgIGludCBsZW5BOwogCiAgIGlmICghKGZpbGVBID0gRm9GaUJhc2U6
OnJlYWRGaWxlKGZpbGVOYW1lLCAmbGVuQSkpKSB7CkBAIC01NSw3ICs1NSw3IEBACiAgIHJldHVy
biBmZjsKIH0KIAotRm9GaVR5cGUxQzo6Rm9GaVR5cGUxQyhjaGFyICpmaWxlQSwgaW50IGxlbkEs
IEdCb29sIGZyZWVGaWxlRGF0YUEpOgorRm9GaVR5cGUxQzo6Rm9GaVR5cGUxQyhjb25zdCBjaGFy
ICpmaWxlQSwgaW50IGxlbkEsIEdCb29sIGZyZWVGaWxlRGF0YUEpOgogICBGb0ZpQmFzZShmaWxl
QSwgbGVuQSwgZnJlZUZpbGVEYXRhQSkKIHsKICAgbmFtZSA9IE5VTEw7CkBAIC03NSw3ICs3NSw3
IEBACiAgICAgICBlbmNvZGluZyAhPSBmb2ZpVHlwZTFTdGFuZGFyZEVuY29kaW5nICYmCiAgICAg
ICBlbmNvZGluZyAhPSBmb2ZpVHlwZTFFeHBlcnRFbmNvZGluZykgewogICAgIGZvciAoaSA9IDA7
IGkgPCAyNTY7ICsraSkgewotICAgICAgZ2ZyZWUoZW5jb2RpbmdbaV0pOworICAgICAgZ2ZyZWUo
Y29uc3RfY2FzdDxjaGFyKj4oZW5jb2RpbmdbaV0pKTsKICAgICB9CiAgICAgZ2ZyZWUoZW5jb2Rp
bmcpOwogICB9CkBAIC05MywxMSArOTMsMTEgQEAKICAgfQogfQogCi1jaGFyICpGb0ZpVHlwZTFD
OjpnZXROYW1lKCkgewotICByZXR1cm4gbmFtZSA/IG5hbWUtPmdldENTdHJpbmcoKSA6IChjaGFy
ICopTlVMTDsKK2NvbnN0IGNoYXIgKkZvRmlUeXBlMUM6OmdldE5hbWUoKSB7CisgIHJldHVybiBu
YW1lID8gbmFtZS0+Z2V0Q1N0cmluZygpIDogKGNvbnN0IGNoYXIgKilOVUxMOwogfQogCi1jaGFy
ICoqRm9GaVR5cGUxQzo6Z2V0RW5jb2RpbmcoKSB7Citjb25zdCBjaGFyICoqRm9GaVR5cGUxQzo6
Z2V0RW5jb2RpbmcoKSB7CiAgIHJldHVybiBlbmNvZGluZzsKIH0KIApAQCAtMTI5LDcgKzEyOSw3
IEBACiAgIHJldHVybiBtYXA7CiB9CiAKLXZvaWQgRm9GaVR5cGUxQzo6Y29udmVydFRvVHlwZTEo
Y2hhciAqcHNOYW1lLCBjaGFyICoqbmV3RW5jb2RpbmcsIEdCb29sIGFzY2lpLAordm9pZCBGb0Zp
VHlwZTFDOjpjb252ZXJ0VG9UeXBlMShjb25zdCBjaGFyICpwc05hbWUsIGNvbnN0IGNoYXIgKipu
ZXdFbmNvZGluZywgR0Jvb2wgYXNjaWksCiAJCQkJRm9GaU91dHB1dEZ1bmMgb3V0cHV0RnVuYywK
IAkJCQl2b2lkICpvdXRwdXRTdHJlYW0pIHsKICAgaW50IHBzTmFtZUxlbjsKQEAgLTEzOCw3ICsx
MzgsNyBAQAogICBUeXBlMUNJbmRleFZhbCB2YWw7CiAgIEdTdHJpbmcgKmJ1ZjsKICAgY2hhciBi
dWYyWzI1Nl07Ci0gIGNoYXIgKiplbmM7CisgIGNvbnN0IGNoYXIgKiplbmM7CiAgIEdCb29sIG9r
OwogICBpbnQgaTsKIApAQCAtNDI5LDcgKzQyOSw3IEBACiAgICgqb3V0cHV0RnVuYykob3V0cHV0
U3RyZWFtLCAiY2xlYXJ0b21hcmtcbiIsIDEyKTsKIH0KIAotdm9pZCBGb0ZpVHlwZTFDOjpjb252
ZXJ0VG9DSURUeXBlMChjaGFyICpwc05hbWUsCit2b2lkIEZvRmlUeXBlMUM6OmNvbnZlcnRUb0NJ
RFR5cGUwKGNvbnN0IGNoYXIgKnBzTmFtZSwKIAkJCQkgICBGb0ZpT3V0cHV0RnVuYyBvdXRwdXRG
dW5jLAogCQkJCSAgIHZvaWQgKm91dHB1dFN0cmVhbSkgewogICBpbnQgKmNpZE1hcDsKQEAgLTc1
NSw3ICs3NTUsNyBAQAogICBnZnJlZShjaWRNYXApOwogfQogCi12b2lkIEZvRmlUeXBlMUM6OmNv
bnZlcnRUb1R5cGUwKGNoYXIgKnBzTmFtZSwKK3ZvaWQgRm9GaVR5cGUxQzo6Y29udmVydFRvVHlw
ZTAoY29uc3QgY2hhciAqcHNOYW1lLAogCQkJCUZvRmlPdXRwdXRGdW5jIG91dHB1dEZ1bmMsCiAJ
CQkJdm9pZCAqb3V0cHV0U3RyZWFtKSB7CiAgIGludCAqY2lkTWFwOwpAQCAtMTA2Niw3ICsxMDY2
LDcgQEAKICAgZ2ZyZWUoY2lkTWFwKTsKIH0KIAotdm9pZCBGb0ZpVHlwZTFDOjplZXhlY0N2dEds
eXBoKFR5cGUxQ0VleGVjQnVmICplYiwgY2hhciAqZ2x5cGhOYW1lLAordm9pZCBGb0ZpVHlwZTFD
OjplZXhlY0N2dEdseXBoKFR5cGUxQ0VleGVjQnVmICplYiwgY29uc3QgY2hhciAqZ2x5cGhOYW1l
LAogCQkJICAgICAgIGludCBvZmZzZXQsIGludCBuQnl0ZXMsCiAJCQkgICAgICAgVHlwZTFDSW5k
ZXggKnN1YnJJZHgsCiAJCQkgICAgICAgVHlwZTFDUHJpdmF0ZURpY3QgKnBEaWN0KSB7CkBAIC0x
Nzg5LDEwICsxNzg5LDEwIEBACiAgICAgICBuID0gNTsKICAgICB9CiAgIH0KLSAgY2hhckJ1Zi0+
YXBwZW5kKChjaGFyICopYnVmLCBuKTsKKyAgY2hhckJ1Zi0+YXBwZW5kKChjb25zdCBjaGFyICop
YnVmLCBuKTsKIH0KIAotdm9pZCBGb0ZpVHlwZTFDOjplZXhlY1dyaXRlKFR5cGUxQ0VleGVjQnVm
ICplYiwgY2hhciAqcykgewordm9pZCBGb0ZpVHlwZTFDOjplZXhlY1dyaXRlKFR5cGUxQ0VleGVj
QnVmICplYiwgY29uc3QgY2hhciAqcykgewogICBHdWNoYXIgKnA7CiAgIEd1Y2hhciB4OwogCkBA
IC0xODA4LDcgKzE4MDgsNyBAQAogCWViLT5saW5lID0gMDsKICAgICAgIH0KICAgICB9IGVsc2Ug
ewotICAgICAgKCplYi0+b3V0cHV0RnVuYykoZWItPm91dHB1dFN0cmVhbSwgKGNoYXIgKikmeCwg
MSk7CisgICAgICAoKmViLT5vdXRwdXRGdW5jKShlYi0+b3V0cHV0U3RyZWFtLCAoY29uc3QgY2hh
ciAqKSZ4LCAxKTsKICAgICB9CiAgIH0KIH0KQEAgLTE4MzEsNyArMTgzMSw3IEBACiAJZWItPmxp
bmUgPSAwOwogICAgICAgfQogICAgIH0gZWxzZSB7Ci0gICAgICAoKmViLT5vdXRwdXRGdW5jKShl
Yi0+b3V0cHV0U3RyZWFtLCAoY2hhciAqKSZ4LCAxKTsKKyAgICAgICgqZWItPm91dHB1dEZ1bmMp
KGViLT5vdXRwdXRTdHJlYW0sIChjb25zdCBjaGFyICopJngsIDEpOwogICAgIH0KICAgfQogfQpA
QCAtMTg2Niw3ICsxODY2LDcgQEAKICAgaWYgKCFwYXJzZWRPaykgewogICAgIHJldHVybiBnRmFs
c2U7CiAgIH0KLSAgbmFtZSA9IG5ldyBHU3RyaW5nKChjaGFyICopJmZpbGVbdmFsLnBvc10sIHZh
bC5sZW4pOworICBuYW1lID0gbmV3IEdTdHJpbmcoKGNvbnN0IGNoYXIgKikmZmlsZVt2YWwucG9z
XSwgdmFsLmxlbik7CiAKICAgLy8gcmVhZCB0aGUgdG9wIGRpY3QgZm9yIHRoZSBmaXJzdCBmb250
CiAgIHJlYWRUb3BEaWN0KCk7CkBAIC0yMjY3LDcgKzIyNjcsNyBAQAogICAgIGVuY29kaW5nID0g
Zm9maVR5cGUxRXhwZXJ0RW5jb2Rpbmc7CiAKICAgfSBlbHNlIHsKLSAgICBlbmNvZGluZyA9IChj
aGFyICoqKWdtYWxsb2NuKDI1Niwgc2l6ZW9mKGNoYXIgKikpOworICAgIGVuY29kaW5nID0gKGNv
bnN0IGNoYXIgKiopZ21hbGxvY24oMjU2LCBzaXplb2YoY2hhciAqKSk7CiAgICAgZm9yIChpID0g
MDsgaSA8IDI1NjsgKytpKSB7CiAgICAgICBlbmNvZGluZ1tpXSA9IE5VTEw7CiAgICAgfQpAQCAt
MjI5MCw3ICsyMjkwLDcgQEAKIAkgIHJldHVybjsKIAl9CiAJaWYgKGVuY29kaW5nW2NdKSB7Ci0J
ICBnZnJlZShlbmNvZGluZ1tjXSk7CisJICBnZnJlZShjb25zdF9jYXN0PGNoYXIqPihlbmNvZGlu
Z1tjXSkpOwogCX0KIAllbmNvZGluZ1tjXSA9IGNvcHlTdHJpbmcoZ2V0U3RyaW5nKGNoYXJzZXRb
aV0sIGJ1ZiwgJnBhcnNlZE9rKSk7CiAgICAgICB9CkBAIC0yMzA5LDcgKzIzMDksNyBAQAogCWZv
ciAoaiA9IDA7IGogPD0gbkxlZnQgJiYgbkNvZGVzIDwgbkdseXBoczsgKytqKSB7CiAJICBpZiAo
YyA8IDI1NikgewogCSAgICBpZiAoZW5jb2RpbmdbY10pIHsKLQkgICAgICBnZnJlZShlbmNvZGlu
Z1tjXSk7CisJICAgICAgZ2ZyZWUoY29uc3RfY2FzdDxjaGFyKj4oZW5jb2RpbmdbY10pKTsKIAkg
ICAgfQogCSAgICBlbmNvZGluZ1tjXSA9IGNvcHlTdHJpbmcoZ2V0U3RyaW5nKGNoYXJzZXRbbkNv
ZGVzXSwgYnVmLAogCQkJCQkgICAgICAgJnBhcnNlZE9rKSk7CkBAIC0yMzM1LDcgKzIzMzUsNyBA
QAogCSAgcmV0dXJuOwogCX0KIAlpZiAoZW5jb2RpbmdbY10pIHsKLQkgIGdmcmVlKGVuY29kaW5n
W2NdKTsKKwkgIGdmcmVlKGNvbnN0X2Nhc3Q8Y2hhcio+KGVuY29kaW5nW2NdKSk7CiAJfQogCWVu
Y29kaW5nW2NdID0gY29weVN0cmluZyhnZXRTdHJpbmcoc2lkLCBidWYsICZwYXJzZWRPaykpOwog
ICAgICAgfQpAQCAtMjU5Myw3ICsyNTkzLDcgQEAKICAgICAgIGlmICgobiA9IHZhbC5sZW4pID4g
MjU1KSB7CiAJbiA9IDI1NTsKICAgICAgIH0KLSAgICAgIHN0cm5jcHkoYnVmLCAoY2hhciAqKSZm
aWxlW3ZhbC5wb3NdLCBuKTsKKyAgICAgIHN0cm5jcHkoYnVmLCAoY29uc3QgY2hhciAqKSZmaWxl
W3ZhbC5wb3NdLCBuKTsKICAgICAgIGJ1ZltuXSA9ICdcMCc7CiAgICAgfSBlbHNlIHsKICAgICAg
IGJ1ZlswXSA9ICdcMCc7CmRpZmYgLXVyIHRleGxpdmUtMjAwODA4MTYtc291cmNlL2xpYnMveHBk
Zi5vcmlnL2ZvZmkvRm9GaVR5cGUxQy5oIHRleGxpdmUtMjAwODA4MTYtc291cmNlL2xpYnMveHBk
Zi9mb2ZpL0ZvRmlUeXBlMUMuaAotLS0gdGV4bGl2ZS0yMDA4MDgxNi1zb3VyY2UvbGlicy94cGRm
Lm9yaWcvZm9maS9Gb0ZpVHlwZTFDLmgJMjAwNy0wNy0xMiAwMToxMzo1OS4wMDAwMDAwMDAgKzA0
MDAKKysrIHRleGxpdmUtMjAwODA4MTYtc291cmNlL2xpYnMveHBkZi9mb2ZpL0ZvRmlUeXBlMUMu
aAkyMDA4LTExLTIxIDE4OjEwOjQxLjAwMDAwMDAwMCArMDMwMApAQCAtMTM1LDE5ICsxMzUsMTkg
QEAKIHB1YmxpYzoKIAogICAvLyBDcmVhdGUgYSBGb0ZpVHlwZTFDIG9iamVjdCBmcm9tIGEgbWVt
b3J5IGJ1ZmZlci4KLSAgc3RhdGljIEZvRmlUeXBlMUMgKm1ha2UoY2hhciAqZmlsZUEsIGludCBs
ZW5BKTsKKyAgc3RhdGljIEZvRmlUeXBlMUMgKm1ha2UoY29uc3QgY2hhciAqZmlsZUEsIGludCBs
ZW5BKTsKIAogICAvLyBDcmVhdGUgYSBGb0ZpVHlwZTFDIG9iamVjdCBmcm9tIGEgZmlsZSBvbiBk
aXNrLgotICBzdGF0aWMgRm9GaVR5cGUxQyAqbG9hZChjaGFyICpmaWxlTmFtZSk7CisgIHN0YXRp
YyBGb0ZpVHlwZTFDICpsb2FkKGNvbnN0IGNoYXIgKmZpbGVOYW1lKTsKIAogICB2aXJ0dWFsIH5G
b0ZpVHlwZTFDKCk7CiAKICAgLy8gUmV0dXJuIHRoZSBmb250IG5hbWUuCi0gIGNoYXIgKmdldE5h
bWUoKTsKKyAgY29uc3QgY2hhciAqZ2V0TmFtZSgpOwogCiAgIC8vIFJldHVybiB0aGUgZW5jb2Rp
bmcsIGFzIGFuIGFycmF5IG9mIDI1NiBuYW1lcyAoYW55IG9mIHdoaWNoIG1heQogICAvLyBiZSBO
VUxMKS4gIFRoaXMgaXMgb25seSB1c2VmdWwgd2l0aCA4LWJpdCBmb250cy4KLSAgY2hhciAqKmdl
dEVuY29kaW5nKCk7CisgIGNvbnN0IGNoYXIgKipnZXRFbmNvZGluZygpOwogCiAgIC8vIFJldHVy
biB0aGUgbWFwcGluZyBmcm9tIENJRHMgdG8gR0lEcywgYW5kIHJldHVybiB0aGUgbnVtYmVyIG9m
CiAgIC8vIENJRHMgaW4gKjxuQ0lEcz4uICBUaGlzIGlzIG9ubHkgdXNlZnVsIGZvciBDSUQgZm9u
dHMuCkBAIC0xNTksMjUgKzE1OSwyNSBAQAogICAvLyBmb250LiAgSWYgPGFzY2lpPiBpcyB0cnVl
IHRoZSBlZXhlYyBzZWN0aW9uIHdpbGwgYmUgaGV4LWVuY29kZWQsCiAgIC8vIG90aGVyd2lzZSBp
dCB3aWxsIGJlIGxlZnQgYXMgYmluYXJ5IGRhdGEuICBJZiA8cHNOYW1lPiBpcyBub24tTlVMTCwK
ICAgLy8gaXQgd2lsbCBiZSB1c2VkIGFzIHRoZSBQb3N0U2NyaXB0IGZvbnQgbmFtZS4KLSAgdm9p
ZCBjb252ZXJ0VG9UeXBlMShjaGFyICpwc05hbWUsIGNoYXIgKipuZXdFbmNvZGluZywgR0Jvb2wg
YXNjaWksCisgIHZvaWQgY29udmVydFRvVHlwZTEoY29uc3QgY2hhciAqcHNOYW1lLCBjb25zdCBj
aGFyICoqbmV3RW5jb2RpbmcsIEdCb29sIGFzY2lpLAogCQkgICAgICBGb0ZpT3V0cHV0RnVuYyBv
dXRwdXRGdW5jLCB2b2lkICpvdXRwdXRTdHJlYW0pOwogCiAgIC8vIENvbnZlcnQgdG8gYSBUeXBl
IDAgQ0lERm9udCwgc3VpdGFibGUgZm9yIGVtYmVkZGluZyBpbiBhCiAgIC8vIFBvc3RTY3JpcHQg
ZmlsZS4gIDxwc05hbWU+IHdpbGwgYmUgdXNlZCBhcyB0aGUgUG9zdFNjcmlwdCBmb250CiAgIC8v
IG5hbWUuCi0gIHZvaWQgY29udmVydFRvQ0lEVHlwZTAoY2hhciAqcHNOYW1lLAorICB2b2lkIGNv
bnZlcnRUb0NJRFR5cGUwKGNvbnN0IGNoYXIgKnBzTmFtZSwKIAkJCSBGb0ZpT3V0cHV0RnVuYyBv
dXRwdXRGdW5jLCB2b2lkICpvdXRwdXRTdHJlYW0pOwogCiAgIC8vIENvbnZlcnQgdG8gYSBUeXBl
IDAgKGJ1dCBub24tQ0lEKSBjb21wb3NpdGUgZm9udCwgc3VpdGFibGUgZm9yCiAgIC8vIGVtYmVk
ZGluZyBpbiBhIFBvc3RTY3JpcHQgZmlsZS4gIDxwc05hbWU+IHdpbGwgYmUgdXNlZCBhcyB0aGUK
ICAgLy8gUG9zdFNjcmlwdCBmb250IG5hbWUuCi0gIHZvaWQgY29udmVydFRvVHlwZTAoY2hhciAq
cHNOYW1lLAorICB2b2lkIGNvbnZlcnRUb1R5cGUwKGNvbnN0IGNoYXIgKnBzTmFtZSwKIAkJICAg
ICAgRm9GaU91dHB1dEZ1bmMgb3V0cHV0RnVuYywgdm9pZCAqb3V0cHV0U3RyZWFtKTsKIAogcHJp
dmF0ZToKIAotICBGb0ZpVHlwZTFDKGNoYXIgKmZpbGVBLCBpbnQgbGVuQSwgR0Jvb2wgZnJlZUZp
bGVEYXRhQSk7Ci0gIHZvaWQgZWV4ZWNDdnRHbHlwaChUeXBlMUNFZXhlY0J1ZiAqZWIsIGNoYXIg
KmdseXBoTmFtZSwKKyAgRm9GaVR5cGUxQyhjb25zdCBjaGFyICpmaWxlQSwgaW50IGxlbkEsIEdC
b29sIGZyZWVGaWxlRGF0YUEpOworICB2b2lkIGVleGVjQ3Z0R2x5cGgoVHlwZTFDRWV4ZWNCdWYg
KmViLCBjb25zdCBjaGFyICpnbHlwaE5hbWUsCiAJCSAgICAgaW50IG9mZnNldCwgaW50IG5CeXRl
cywKIAkJICAgICBUeXBlMUNJbmRleCAqc3VicklkeCwKIAkJICAgICBUeXBlMUNQcml2YXRlRGlj
dCAqcERpY3QpOwpAQCAtMTg3LDcgKzE4Nyw3IEBACiAgIHZvaWQgY3Z0R2x5cGhXaWR0aChHQm9v
bCB1c2VPcCwgR1N0cmluZyAqY2hhckJ1ZiwKIAkJICAgICBUeXBlMUNQcml2YXRlRGljdCAqcERp
Y3QpOwogICB2b2lkIGN2dE51bShkb3VibGUgeCwgR0Jvb2wgaXNGUCwgR1N0cmluZyAqY2hhckJ1
Zik7Ci0gIHZvaWQgZWV4ZWNXcml0ZShUeXBlMUNFZXhlY0J1ZiAqZWIsIGNoYXIgKnMpOworICB2
b2lkIGVleGVjV3JpdGUoVHlwZTFDRWV4ZWNCdWYgKmViLCBjb25zdCBjaGFyICpzKTsKICAgdm9p
ZCBlZXhlY1dyaXRlQ2hhcnN0cmluZyhUeXBlMUNFZXhlY0J1ZiAqZWIsIEd1Y2hhciAqcywgaW50
IG4pOwogICBHQm9vbCBwYXJzZSgpOwogICB2b2lkIHJlYWRUb3BEaWN0KCk7CkBAIC0yMDQsNyAr
MjA0LDcgQEAKICAgY2hhciAqZ2V0U3RyaW5nKGludCBzaWQsIGNoYXIgKmJ1ZiwgR0Jvb2wgKm9r
KTsKIAogICBHU3RyaW5nICpuYW1lOwotICBjaGFyICoqZW5jb2Rpbmc7CisgIGNvbnN0IGNoYXIg
KiplbmNvZGluZzsKIAogICBUeXBlMUNJbmRleCBuYW1lSWR4OwogICBUeXBlMUNJbmRleCB0b3BE
aWN0SWR4OwpkaWZmIC11ciB0ZXhsaXZlLTIwMDgwODE2LXNvdXJjZS9saWJzL3hwZGYub3JpZy9m
b2ZpL0ZvRmlUeXBlMS5oIHRleGxpdmUtMjAwODA4MTYtc291cmNlL2xpYnMveHBkZi9mb2ZpL0Zv
RmlUeXBlMS5oCi0tLSB0ZXhsaXZlLTIwMDgwODE2LXNvdXJjZS9saWJzL3hwZGYub3JpZy9mb2Zp
L0ZvRmlUeXBlMS5oCTIwMDYtMDEtMTYgMDM6MDk6MjYuMDAwMDAwMDAwICswMzAwCisrKyB0ZXhs
aXZlLTIwMDgwODE2LXNvdXJjZS9saWJzL3hwZGYvZm9maS9Gb0ZpVHlwZTEuaAkyMDA4LTExLTIx
IDE3OjAxOjA3LjAwMDAwMDAwMCArMDMwMApAQCAtMjYsMzMgKzI2LDMzIEBACiBwdWJsaWM6CiAK
ICAgLy8gQ3JlYXRlIGEgRm9GaVR5cGUxIG9iamVjdCBmcm9tIGEgbWVtb3J5IGJ1ZmZlci4KLSAg
c3RhdGljIEZvRmlUeXBlMSAqbWFrZShjaGFyICpmaWxlQSwgaW50IGxlbkEpOworICBzdGF0aWMg
Rm9GaVR5cGUxICptYWtlKGNvbnN0IGNoYXIgKmZpbGVBLCBpbnQgbGVuQSk7CiAKICAgLy8gQ3Jl
YXRlIGEgRm9GaVR5cGUxIG9iamVjdCBmcm9tIGEgZmlsZSBvbiBkaXNrLgotICBzdGF0aWMgRm9G
aVR5cGUxICpsb2FkKGNoYXIgKmZpbGVOYW1lKTsKKyAgc3RhdGljIEZvRmlUeXBlMSAqbG9hZChj
b25zdCBjaGFyICpmaWxlTmFtZSk7CiAKICAgdmlydHVhbCB+Rm9GaVR5cGUxKCk7CiAKICAgLy8g
UmV0dXJuIHRoZSBmb250IG5hbWUuCi0gIGNoYXIgKmdldE5hbWUoKTsKKyAgY29uc3QgY2hhciAq
Z2V0TmFtZSgpOwogCiAgIC8vIFJldHVybiB0aGUgZW5jb2RpbmcsIGFzIGFuIGFycmF5IG9mIDI1
NiBuYW1lcyAoYW55IG9mIHdoaWNoIG1heQogICAvLyBiZSBOVUxMKS4KLSAgY2hhciAqKmdldEVu
Y29kaW5nKCk7CisgIGNvbnN0IGNoYXIgKipnZXRFbmNvZGluZygpOwogCiAgIC8vIFdyaXRlIGEg
dmVyc2lvbiBvZiB0aGUgVHlwZSAxIGZvbnQgZmlsZSB3aXRoIGEgbmV3IGVuY29kaW5nLgotICB2
b2lkIHdyaXRlRW5jb2RlZChjaGFyICoqbmV3RW5jb2RpbmcsCisgIHZvaWQgd3JpdGVFbmNvZGVk
KGNvbnN0IGNoYXIgKipuZXdFbmNvZGluZywKIAkJICAgIEZvRmlPdXRwdXRGdW5jIG91dHB1dEZ1
bmMsIHZvaWQgKm91dHB1dFN0cmVhbSk7CiAKIHByaXZhdGU6CiAKLSAgRm9GaVR5cGUxKGNoYXIg
KmZpbGVBLCBpbnQgbGVuQSwgR0Jvb2wgZnJlZUZpbGVEYXRhQSk7CisgIEZvRmlUeXBlMShjb25z
dCBjaGFyICpmaWxlQSwgaW50IGxlbkEsIEdCb29sIGZyZWVGaWxlRGF0YUEpOwogCi0gIGNoYXIg
KmdldE5leHRMaW5lKGNoYXIgKmxpbmUpOworICBjb25zdCBjaGFyICpnZXROZXh0TGluZShjb25z
dCBjaGFyICpsaW5lKTsKICAgdm9pZCBwYXJzZSgpOwogCi0gIGNoYXIgKm5hbWU7Ci0gIGNoYXIg
KiplbmNvZGluZzsKKyAgY29uc3QgY2hhciAqbmFtZTsKKyAgY29uc3QgY2hhciAqKmVuY29kaW5n
OwogICBHQm9vbCBwYXJzZWQ7CiB9OwogCmRpZmYgLXVyIHRleGxpdmUtMjAwODA4MTYtc291cmNl
L2xpYnMveHBkZi5vcmlnL2dvby9nZmlsZS5jYyB0ZXhsaXZlLTIwMDgwODE2LXNvdXJjZS9saWJz
L3hwZGYvZ29vL2dmaWxlLmNjCi0tLSB0ZXhsaXZlLTIwMDgwODE2LXNvdXJjZS9saWJzL3hwZGYu
b3JpZy9nb28vZ2ZpbGUuY2MJMjAwOC0wNS0wOCAxNzo0MDo0MS4wMDAwMDAwMDAgKzA0MDAKKysr
IHRleGxpdmUtMjAwODA4MTYtc291cmNlL2xpYnMveHBkZi9nb28vZ2ZpbGUuY2MJMjAwOC0xMS0y
MSAxNjo1NToyMy4wMDAwMDAwMDAgKzAzMDAKQEAgLTgzLDcgKzgzLDcgQEAKIAogI2VsaWYgZGVm
aW5lZChfX0VNWF9fKSB8fCBkZWZpbmVkKFdJTjMyKQogICAvLy0tLS0tLS0tLS0gT1MvMitFTVgg
YW5kIFdpbjMyIC0tLS0tLS0tLS0KLSAgY2hhciAqczsKKyAgY29uc3QgY2hhciAqczsKICAgR1N0
cmluZyAqcmV0OwogCiAgIGlmICgocyA9IGdldGVudigiSE9NRSIpKSkKQEAgLTEwMiw3ICsxMDIs
NyBAQAogCiAjZWxzZQogICAvLy0tLS0tLS0tLS0gVW5peCAtLS0tLS0tLS0tCi0gIGNoYXIgKnM7
CisgIGNvbnN0IGNoYXIgKnM7CiAgIHN0cnVjdCBwYXNzd2QgKnB3OwogICBHU3RyaW5nICpyZXQ7
CiAKQEAgLTE0MCw3ICsxNDAsNyBAQAogICByZXR1cm4gbmV3IEdTdHJpbmcoKTsKIH0KIAotR1N0
cmluZyAqYXBwZW5kVG9QYXRoKEdTdHJpbmcgKnBhdGgsIGNoYXIgKmZpbGVOYW1lKSB7CitHU3Ry
aW5nICphcHBlbmRUb1BhdGgoR1N0cmluZyAqcGF0aCwgY29uc3QgY2hhciAqZmlsZU5hbWUpIHsK
ICNpZiBkZWZpbmVkKFZNUykKICAgLy8tLS0tLS0tLS0tIFZNUyAtLS0tLS0tLS0tCiAgIC8vfiB0
aGlzIHNob3VsZCBoYW5kbGUgZXZlcnl0aGluZyBuZWNlc3NhcnkgZm9yIGZpbGUKQEAgLTMwNiw3
ICszMDYsNyBAQAogI2VuZGlmCiB9CiAKLUdTdHJpbmcgKmdyYWJQYXRoKGNoYXIgKmZpbGVOYW1l
KSB7CitHU3RyaW5nICpncmFiUGF0aChjb25zdCBjaGFyICpmaWxlTmFtZSkgewogI2lmZGVmIFZN
UwogICAvLy0tLS0tLS0tLS0gVk1TIC0tLS0tLS0tLS0KICAgY2hhciAqcDsKQEAgLTM1NSw3ICsz
NTUsNyBAQAogI2VuZGlmCiB9CiAKLUdCb29sIGlzQWJzb2x1dGVQYXRoKGNoYXIgKnBhdGgpIHsK
K0dCb29sIGlzQWJzb2x1dGVQYXRoKGNvbnN0IGNoYXIgKnBhdGgpIHsKICNpZmRlZiBWTVMKICAg
Ly8tLS0tLS0tLS0tIFZNUyAtLS0tLS0tLS0tCiAgIHJldHVybiBzdHJjaHIocGF0aCwgJzonKSB8
fApAQCAtNDYxLDcgKzQ2MSw3IEBACiAjZW5kaWYKIH0KIAotdGltZV90IGdldE1vZFRpbWUoY2hh
ciAqZmlsZU5hbWUpIHsKK3RpbWVfdCBnZXRNb2RUaW1lKGNvbnN0IGNoYXIgKmZpbGVOYW1lKSB7
CiAjaWZkZWYgV0lOMzIKICAgLy9+IHNob3VsZCBpbXBsZW1lbnQgdGhpcywgYnV0IGl0J3MgKGN1
cnJlbnRseSkgb25seSB1c2VkIGluIHhwZGYKICAgcmV0dXJuIDA7CkBAIC00NzYsMTAgKzQ3Niwx
MCBAQAogfQogCiAjaWZuZGVmIFBERl9QQVJTRVJfT05MWQotR0Jvb2wgb3BlblRlbXBGaWxlKEdT
dHJpbmcgKipuYW1lLCBGSUxFICoqZiwgY2hhciAqbW9kZSwgY2hhciAqZXh0KSB7CitHQm9vbCBv
cGVuVGVtcEZpbGUoR1N0cmluZyAqKm5hbWUsIEZJTEUgKipmLCBjb25zdCBjaGFyICptb2RlLCBj
b25zdCBjaGFyICpleHQpIHsKICNpZiBkZWZpbmVkKFdJTjMyKQogICAvLy0tLS0tLS0tLS0gV2lu
MzIgLS0tLS0tLS0tLQotICBjaGFyICp0ZW1wRGlyOworICBjb25zdCBjaGFyICp0ZW1wRGlyOwog
ICBHU3RyaW5nICpzLCAqczI7CiAgIGNoYXIgYnVmWzMyXTsKICAgRklMRSAqZjI7CkBAIC01ODYs
NyArNTg2LDcgQEAKIH0KICNlbmRpZgogCi1HQm9vbCBleGVjdXRlQ29tbWFuZChjaGFyICpjbWQp
IHsKK0dCb29sIGV4ZWN1dGVDb21tYW5kKGNvbnN0IGNoYXIgKmNtZCkgewogI2lmZGVmIFZNUwog
ICByZXR1cm4gc3lzdGVtKGNtZCkgPyBnVHJ1ZSA6IGdGYWxzZTsKICNlbHNlCkBAIC02MjcsNyAr
NjI3LDcgQEAKIC8vIEdEaXIgYW5kIEdEaXJFbnRyeQogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotR0Rp
ckVudHJ5OjpHRGlyRW50cnkoY2hhciAqZGlyUGF0aCwgY2hhciAqbmFtZUEsIEdCb29sIGRvU3Rh
dCkgeworR0RpckVudHJ5OjpHRGlyRW50cnkoY29uc3QgY2hhciAqZGlyUGF0aCwgY29uc3QgY2hh
ciAqbmFtZUEsIEdCb29sIGRvU3RhdCkgewogI2lmZGVmIFZNUwogICBjaGFyICpwOwogI2VsaWYg
ZGVmaW5lZChXSU4zMikKQEAgLTY2Niw3ICs2NjYsNyBAQAogICBkZWxldGUgbmFtZTsKIH0KIAot
R0Rpcjo6R0RpcihjaGFyICpuYW1lLCBHQm9vbCBkb1N0YXRBKSB7CitHRGlyOjpHRGlyKGNvbnN0
IGNoYXIgKm5hbWUsIEdCb29sIGRvU3RhdEEpIHsKICAgcGF0aCA9IG5ldyBHU3RyaW5nKG5hbWUp
OwogICBkb1N0YXQgPSBkb1N0YXRBOwogI2lmIGRlZmluZWQoV0lOMzIpCmRpZmYgLXVyIHRleGxp
dmUtMjAwODA4MTYtc291cmNlL2xpYnMveHBkZi5vcmlnL2dvby9nZmlsZS5oIHRleGxpdmUtMjAw
ODA4MTYtc291cmNlL2xpYnMveHBkZi9nb28vZ2ZpbGUuaAotLS0gdGV4bGl2ZS0yMDA4MDgxNi1z
b3VyY2UvbGlicy94cGRmLm9yaWcvZ29vL2dmaWxlLmgJMjAwNy0wNy0xMiAwMToxMzo1OS4wMDAw
MDAwMDAgKzA0MDAKKysrIHRleGxpdmUtMjAwODA4MTYtc291cmNlL2xpYnMveHBkZi9nb28vZ2Zp
bGUuaAkyMDA4LTExLTIxIDE2OjU0OjEzLjAwMDAwMDAwMCArMDMwMApAQCAtNjAsMTQgKzYwLDE0
IEBACiAKIC8vIEFwcGVuZCBhIGZpbGUgbmFtZSB0byBhIHBhdGggc3RyaW5nLiAgPHBhdGg+IG1h
eSBiZSBhbiBlbXB0eQogLy8gc3RyaW5nLCBkZW5vdGluZyB0aGUgY3VycmVudCBkaXJlY3Rvcnkp
LiAgUmV0dXJucyA8cGF0aD4uCi1leHRlcm4gR1N0cmluZyAqYXBwZW5kVG9QYXRoKEdTdHJpbmcg
KnBhdGgsIGNoYXIgKmZpbGVOYW1lKTsKK2V4dGVybiBHU3RyaW5nICphcHBlbmRUb1BhdGgoR1N0
cmluZyAqcGF0aCwgY29uc3QgY2hhciAqZmlsZU5hbWUpOwogCiAvLyBHcmFiIHRoZSBwYXRoIGZy
b20gdGhlIGZyb250IG9mIHRoZSBmaWxlIG5hbWUuICBJZiB0aGVyZSBpcyBubwogLy8gZGlyZWN0
b3J5IGNvbXBvbmVudCBpbiA8ZmlsZU5hbWU+LCByZXR1cm5zIGFuIGVtcHR5IHN0cmluZy4KLWV4
dGVybiBHU3RyaW5nICpncmFiUGF0aChjaGFyICpmaWxlTmFtZSk7CitleHRlcm4gR1N0cmluZyAq
Z3JhYlBhdGgoY29uc3QgY2hhciAqZmlsZU5hbWUpOwogCiAvLyBJcyB0aGlzIGFuIGFic29sdXRl
IHBhdGggb3IgZmlsZSBuYW1lPwotZXh0ZXJuIEdCb29sIGlzQWJzb2x1dGVQYXRoKGNoYXIgKnBh
dGgpOworZXh0ZXJuIEdCb29sIGlzQWJzb2x1dGVQYXRoKGNvbnN0IGNoYXIgKnBhdGgpOwogCiAv
LyBNYWtlIHRoaXMgcGF0aCBhYnNvbHV0ZSBieSBwcmVwZW5kaW5nIGN1cnJlbnQgZGlyZWN0b3J5
IChpZiBwYXRoIGlzCiAvLyByZWxhdGl2ZSkgb3IgcHJlcGVuZGluZyB1c2VyJ3MgZGlyZWN0b3J5
IChpZiBwYXRoIHN0YXJ0cyB3aXRoICd+JykuCkBAIC03NSw3ICs3NSw3IEBACiAKIC8vIEdldCB0
aGUgbW9kaWZpY2F0aW9uIHRpbWUgZm9yIDxmaWxlTmFtZT4uICBSZXR1cm5zIDAgaWYgdGhlcmUg
aXMgYW4KIC8vIGVycm9yLgotZXh0ZXJuIHRpbWVfdCBnZXRNb2RUaW1lKGNoYXIgKmZpbGVOYW1l
KTsKK2V4dGVybiB0aW1lX3QgZ2V0TW9kVGltZShjb25zdCBjaGFyICpmaWxlTmFtZSk7CiAKIC8v
IENyZWF0ZSBhIHRlbXBvcmFyeSBmaWxlIGFuZCBvcGVuIGl0IGZvciB3cml0aW5nLiAgSWYgPGV4
dD4gaXMgbm90CiAvLyBOVUxMLCBpdCB3aWxsIGJlIHVzZWQgYXMgdGhlIGZpbGUgbmFtZSBleHRl
bnNpb24uICBSZXR1cm5zIGJvdGggdGhlCkBAIC04MywxMCArODMsMTAgQEAKIC8vIHNob3VsZCBi
ZSBkb25lIHRvIHRoZSByZXR1cm5lZCBmaWxlIHBvaW50ZXI7IHRoZSBmaWxlIG1heSBiZQogLy8g
cmVvcGVuZWQgbGF0ZXIgZm9yIHJlYWRpbmcsIGJ1dCBub3QgZm9yIHdyaXRpbmcuICBUaGUgPG1v
ZGU+IHN0cmluZwogLy8gc2hvdWxkIGJlICJ3IiBvciAid2IiLiAgUmV0dXJucyB0cnVlIG9uIHN1
Y2Nlc3MuCi1leHRlcm4gR0Jvb2wgb3BlblRlbXBGaWxlKEdTdHJpbmcgKipuYW1lLCBGSUxFICoq
ZiwgY2hhciAqbW9kZSwgY2hhciAqZXh0KTsKK2V4dGVybiBHQm9vbCBvcGVuVGVtcEZpbGUoR1N0
cmluZyAqKm5hbWUsIEZJTEUgKipmLCBjb25zdCBjaGFyICptb2RlLCBjb25zdCBjaGFyICpleHQp
OwogCiAvLyBFeGVjdXRlIDxjb21tYW5kPi4gIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzLgotZXh0
ZXJuIEdCb29sIGV4ZWN1dGVDb21tYW5kKGNoYXIgKmNtZCk7CitleHRlcm4gR0Jvb2wgZXhlY3V0
ZUNvbW1hbmQoY29uc3QgY2hhciAqY21kKTsKIAogLy8gSnVzdCBsaWtlIGZnZXRzLCBidXQgaGFu
ZGxlcyBVbml4LCBNYWMsIGFuZC9vciBET1MgZW5kLW9mLWxpbmUKIC8vIGNvbnZlbnRpb25zLgpA
QCAtOTksNyArOTksNyBAQAogY2xhc3MgR0RpckVudHJ5IHsKIHB1YmxpYzoKIAotICBHRGlyRW50
cnkoY2hhciAqZGlyUGF0aCwgY2hhciAqbmFtZUEsIEdCb29sIGRvU3RhdCk7CisgIEdEaXJFbnRy
eShjb25zdCBjaGFyICpkaXJQYXRoLCBjb25zdCBjaGFyICpuYW1lQSwgR0Jvb2wgZG9TdGF0KTsK
ICAgfkdEaXJFbnRyeSgpOwogICBHU3RyaW5nICpnZXROYW1lKCkgeyByZXR1cm4gbmFtZTsgfQog
ICBHQm9vbCBpc0RpcigpIHsgcmV0dXJuIGRpcjsgfQpAQCAtMTEzLDcgKzExMyw3IEBACiBjbGFz
cyBHRGlyIHsKIHB1YmxpYzoKIAotICBHRGlyKGNoYXIgKm5hbWUsIEdCb29sIGRvU3RhdEEgPSBn
VHJ1ZSk7CisgIEdEaXIoY29uc3QgY2hhciAqbmFtZSwgR0Jvb2wgZG9TdGF0QSA9IGdUcnVlKTsK
ICAgfkdEaXIoKTsKICAgR0RpckVudHJ5ICpnZXROZXh0RW50cnkoKTsKICAgdm9pZCByZXdpbmQo
KTsKZGlmZiAtdXIgdGV4bGl2ZS0yMDA4MDgxNi1zb3VyY2UvbGlicy94cGRmLm9yaWcvZ29vL0dI
YXNoLmNjIHRleGxpdmUtMjAwODA4MTYtc291cmNlL2xpYnMveHBkZi9nb28vR0hhc2guY2MKLS0t
IHRleGxpdmUtMjAwODA4MTYtc291cmNlL2xpYnMveHBkZi5vcmlnL2dvby9HSGFzaC5jYwkyMDA2
LTAxLTE2IDAzOjA5OjI2LjAwMDAwMDAwMCArMDMwMAorKysgdGV4bGl2ZS0yMDA4MDgxNi1zb3Vy
Y2UvbGlicy94cGRmL2dvby9HSGFzaC5jYwkyMDA4LTExLTIxIDE4OjAyOjI0LjAwMDAwMDAwMCAr
MDMwMApAQCAtMTQ1LDcgKzE0NSw3IEBACiAgIHJldHVybiBwLT52YWwuaTsKIH0KIAotdm9pZCAq
R0hhc2g6Omxvb2t1cChjaGFyICprZXkpIHsKK3ZvaWQgKkdIYXNoOjpsb29rdXAoY29uc3QgY2hh
ciAqa2V5KSB7CiAgIEdIYXNoQnVja2V0ICpwOwogICBpbnQgaDsKIApAQCAtMTU1LDcgKzE1NSw3
IEBACiAgIHJldHVybiBwLT52YWwucDsKIH0KIAotaW50IEdIYXNoOjpsb29rdXBJbnQoY2hhciAq
a2V5KSB7CitpbnQgR0hhc2g6Omxvb2t1cEludChjb25zdCBjaGFyICprZXkpIHsKICAgR0hhc2hC
dWNrZXQgKnA7CiAgIGludCBoOwogCkBAIC0yMTEsNyArMjExLDcgQEAKICAgcmV0dXJuIHZhbDsK
IH0KIAotdm9pZCAqR0hhc2g6OnJlbW92ZShjaGFyICprZXkpIHsKK3ZvaWQgKkdIYXNoOjpyZW1v
dmUoY29uc3QgY2hhciAqa2V5KSB7CiAgIEdIYXNoQnVja2V0ICpwOwogICBHSGFzaEJ1Y2tldCAq
KnE7CiAgIHZvaWQgKnZhbDsKQEAgLTIzNCw3ICsyMzQsNyBAQAogICByZXR1cm4gdmFsOwogfQog
Ci1pbnQgR0hhc2g6OnJlbW92ZUludChjaGFyICprZXkpIHsKK2ludCBHSGFzaDo6cmVtb3ZlSW50
KGNvbnN0IGNoYXIgKmtleSkgewogICBHSGFzaEJ1Y2tldCAqcDsKICAgR0hhc2hCdWNrZXQgKipx
OwogICBpbnQgdmFsOwpAQCAtMzQ0LDcgKzM0NCw3IEBACiAgIHJldHVybiBOVUxMOwogfQogCi1H
SGFzaEJ1Y2tldCAqR0hhc2g6OmZpbmQoY2hhciAqa2V5LCBpbnQgKmgpIHsKK0dIYXNoQnVja2V0
ICpHSGFzaDo6ZmluZChjb25zdCBjaGFyICprZXksIGludCAqaCkgewogICBHSGFzaEJ1Y2tldCAq
cDsKIAogICAqaCA9IGhhc2goa2V5KTsKQEAgLTM2OCw4ICszNjgsOCBAQAogICByZXR1cm4gKGlu
dCkoaCAlIHNpemUpOwogfQogCi1pbnQgR0hhc2g6Omhhc2goY2hhciAqa2V5KSB7Ci0gIGNoYXIg
KnA7CitpbnQgR0hhc2g6Omhhc2goY29uc3QgY2hhciAqa2V5KSB7CisgIGNvbnN0IGNoYXIgKnA7
CiAgIHVuc2lnbmVkIGludCBoOwogCiAgIGggPSAwOwpkaWZmIC11ciB0ZXhsaXZlLTIwMDgwODE2
LXNvdXJjZS9saWJzL3hwZGYub3JpZy9nb28vR0hhc2guaCB0ZXhsaXZlLTIwMDgwODE2LXNvdXJj
ZS9saWJzL3hwZGYvZ29vL0dIYXNoLmgKLS0tIHRleGxpdmUtMjAwODA4MTYtc291cmNlL2xpYnMv
eHBkZi5vcmlnL2dvby9HSGFzaC5oCTIwMDYtMDEtMTYgMDM6MDk6MjYuMDAwMDAwMDAwICswMzAw
CisrKyB0ZXhsaXZlLTIwMDgwODE2LXNvdXJjZS9saWJzL3hwZGYvZ29vL0dIYXNoLmgJMjAwOC0x
MS0yMSAxODowMTozMS4wMDAwMDAwMDAgKzAzMDAKQEAgLTM0LDEyICszNCwxMiBAQAogICB2b2lk
IHJlcGxhY2UoR1N0cmluZyAqa2V5LCBpbnQgdmFsKTsKICAgdm9pZCAqbG9va3VwKEdTdHJpbmcg
KmtleSk7CiAgIGludCBsb29rdXBJbnQoR1N0cmluZyAqa2V5KTsKLSAgdm9pZCAqbG9va3VwKGNo
YXIgKmtleSk7Ci0gIGludCBsb29rdXBJbnQoY2hhciAqa2V5KTsKKyAgdm9pZCAqbG9va3VwKGNv
bnN0IGNoYXIgKmtleSk7CisgIGludCBsb29rdXBJbnQoY29uc3QgY2hhciAqa2V5KTsKICAgdm9p
ZCAqcmVtb3ZlKEdTdHJpbmcgKmtleSk7CiAgIGludCByZW1vdmVJbnQoR1N0cmluZyAqa2V5KTsK
LSAgdm9pZCAqcmVtb3ZlKGNoYXIgKmtleSk7Ci0gIGludCByZW1vdmVJbnQoY2hhciAqa2V5KTsK
KyAgdm9pZCAqcmVtb3ZlKGNvbnN0IGNoYXIgKmtleSk7CisgIGludCByZW1vdmVJbnQoY29uc3Qg
Y2hhciAqa2V5KTsKICAgaW50IGdldExlbmd0aCgpIHsgcmV0dXJuIGxlbjsgfQogICB2b2lkIHN0
YXJ0SXRlcihHSGFzaEl0ZXIgKippdGVyKTsKICAgR0Jvb2wgZ2V0TmV4dChHSGFzaEl0ZXIgKipp
dGVyLCBHU3RyaW5nICoqa2V5LCB2b2lkICoqdmFsKTsKQEAgLTUwLDkgKzUwLDkgQEAKIAogICB2
b2lkIGV4cGFuZCgpOwogICBHSGFzaEJ1Y2tldCAqZmluZChHU3RyaW5nICprZXksIGludCAqaCk7
Ci0gIEdIYXNoQnVja2V0ICpmaW5kKGNoYXIgKmtleSwgaW50ICpoKTsKKyAgR0hhc2hCdWNrZXQg
KmZpbmQoY29uc3QgY2hhciAqa2V5LCBpbnQgKmgpOwogICBpbnQgaGFzaChHU3RyaW5nICprZXkp
OwotICBpbnQgaGFzaChjaGFyICprZXkpOworICBpbnQgaGFzaChjb25zdCBjaGFyICprZXkpOwog
CiAgIEdCb29sIGRlbGV0ZUtleXM7CQkvLyBzZXQgaWYga2V5IHN0cmluZ3Mgc2hvdWxkIGJlIGRl
bGV0ZWQKICAgaW50IHNpemU7CQkJLy8gbnVtYmVyIG9mIGJ1Y2tldHMKZGlmZiAtdXIgdGV4bGl2
ZS0yMDA4MDgxNi1zb3VyY2UvbGlicy94cGRmLm9yaWcvZ29vL2dtZW0uY2MgdGV4bGl2ZS0yMDA4
MDgxNi1zb3VyY2UvbGlicy94cGRmL2dvby9nbWVtLmNjCi0tLSB0ZXhsaXZlLTIwMDgwODE2LXNv
dXJjZS9saWJzL3hwZGYub3JpZy9nb28vZ21lbS5jYwkyMDA3LTA3LTEyIDAxOjEzOjU5LjAwMDAw
MDAwMCArMDQwMAorKysgdGV4bGl2ZS0yMDA4MDgxNi1zb3VyY2UvbGlicy94cGRmL2dvby9nbWVt
LmNjCTIwMDgtMTEtMjEgMTY6MzQ6NTQuMDAwMDAwMDAwICswMzAwCkBAIC0yNTUsNyArMjU1LDcg
QEAKIH0KICNlbmRpZgogCi1jaGFyICpjb3B5U3RyaW5nKGNoYXIgKnMpIHsKK2NoYXIgKmNvcHlT
dHJpbmcoY29uc3QgY2hhciAqcykgewogICBjaGFyICpzMTsKIAogICBzMSA9IChjaGFyICopZ21h
bGxvYyhzdHJsZW4ocykgKyAxKTsKZGlmZiAtdXIgdGV4bGl2ZS0yMDA4MDgxNi1zb3VyY2UvbGli
cy94cGRmLm9yaWcvZ29vL2dtZW0uaCB0ZXhsaXZlLTIwMDgwODE2LXNvdXJjZS9saWJzL3hwZGYv
Z29vL2dtZW0uaAotLS0gdGV4bGl2ZS0yMDA4MDgxNi1zb3VyY2UvbGlicy94cGRmLm9yaWcvZ29v
L2dtZW0uaAkyMDA3LTA3LTEyIDAxOjEzOjU5LjAwMDAwMDAwMCArMDQwMAorKysgdGV4bGl2ZS0y
MDA4MDgxNi1zb3VyY2UvbGlicy94cGRmL2dvby9nbWVtLmgJMjAwOC0xMS0yMSAxNjozNDo0OS4w
MDAwMDAwMDAgKzAzMDAKQEAgLTcwLDcgKzcwLDcgQEAKIC8qCiAgKiBBbGxvY2F0ZSBtZW1vcnkg
YW5kIGNvcHkgYSBzdHJpbmcgaW50byBpdC4KICAqLwotZXh0ZXJuIGNoYXIgKmNvcHlTdHJpbmco
Y2hhciAqcyk7CitleHRlcm4gY2hhciAqY29weVN0cmluZyhjb25zdCBjaGFyICpzKTsKIAogI2lm
ZGVmIF9fY3BsdXNwbHVzCiB9CmRpZmYgLXVyIHRleGxpdmUtMjAwODA4MTYtc291cmNlL2xpYnMv
eHBkZi5vcmlnL2dvby9HU3RyaW5nLmNjIHRleGxpdmUtMjAwODA4MTYtc291cmNlL2xpYnMveHBk
Zi9nb28vR1N0cmluZy5jYwotLS0gdGV4bGl2ZS0yMDA4MDgxNi1zb3VyY2UvbGlicy94cGRmLm9y
aWcvZ29vL0dTdHJpbmcuY2MJMjAwOC0wNS0wOCAxNzo0MDo0MS4wMDAwMDAwMDAgKzA0MDAKKysr
IHRleGxpdmUtMjAwODA4MTYtc291cmNlL2xpYnMveHBkZi9nb28vR1N0cmluZy5jYwkyMDA4LTEx
LTIxIDE3OjU2OjE1LjAwMDAwMDAwMCArMDMwMApAQCAtMTAxLDcgKzEwMSw3IEBACiAgIGZtdFNw
YWNlCiB9OwogCi1zdGF0aWMgY2hhciAqZm9ybWF0U3RyaW5nc1tdID0geworc3RhdGljIGNvbnN0
IGNoYXIgKmZvcm1hdFN0cmluZ3NbXSA9IHsKICAgImQiLCAieCIsICJvIiwgImIiLCAidWQiLCAi
dXgiLCAidW8iLCAidWIiLAogICAibGQiLCAibHgiLCAibG8iLCAibGIiLCAidWxkIiwgInVseCIs
ICJ1bG8iLCAidWxiIiwKICAgImYiLCAiZyIsCkBAIC0xOTIsNyArMTkyLDcgQEAKICAgcmV0dXJu
IG5ldyBHU3RyaW5nKHAsIGxlbik7CiB9CiAKLUdTdHJpbmcgKkdTdHJpbmc6OmZvcm1hdChjaGFy
ICpmbXQsIC4uLikgeworR1N0cmluZyAqR1N0cmluZzo6Zm9ybWF0KGNvbnN0IGNoYXIgKmZtdCwg
Li4uKSB7CiAgIHZhX2xpc3QgYXJnTGlzdDsKICAgR1N0cmluZyAqczsKIApAQCAtMjAzLDcgKzIw
Myw3IEBACiAgIHJldHVybiBzOwogfQogCi1HU3RyaW5nICpHU3RyaW5nOjpmb3JtYXR2KGNoYXIg
KmZtdCwgdmFfbGlzdCBhcmdMaXN0KSB7CitHU3RyaW5nICpHU3RyaW5nOjpmb3JtYXR2KGNvbnN0
IGNoYXIgKmZtdCwgdmFfbGlzdCBhcmdMaXN0KSB7CiAgIEdTdHJpbmcgKnM7CiAKICAgcyA9IG5l
dyBHU3RyaW5nKCk7CkBAIC0yNTQsNyArMjU0LDcgQEAKICAgcmV0dXJuIHRoaXM7CiB9CiAKLUdT
dHJpbmcgKkdTdHJpbmc6OmFwcGVuZGYoY2hhciAqZm10LCAuLi4pIHsKK0dTdHJpbmcgKkdTdHJp
bmc6OmFwcGVuZGYoY29uc3QgY2hhciAqZm10LCAuLi4pIHsKICAgdmFfbGlzdCBhcmdMaXN0Owog
CiAgIHZhX3N0YXJ0KGFyZ0xpc3QsIGZtdCk7CkBAIC0yNjMsNyArMjYzLDcgQEAKICAgcmV0dXJu
IHRoaXM7CiB9CiAKLUdTdHJpbmcgKkdTdHJpbmc6OmFwcGVuZGZ2KGNoYXIgKmZtdCwgdmFfbGlz
dCBhcmdMaXN0KSB7CitHU3RyaW5nICpHU3RyaW5nOjphcHBlbmRmdihjb25zdCBjaGFyICpmbXQs
IHZhX2xpc3QgYXJnTGlzdCkgewogICBHU3RyaW5nRm9ybWF0QXJnICphcmdzOwogICBpbnQgYXJn
c0xlbiwgYXJnc1NpemU7CiAgIEdTdHJpbmdGb3JtYXRBcmcgYXJnOwpAQCAtMjcyLDcgKzI3Miw4
IEBACiAgIEdTdHJpbmdGb3JtYXRUeXBlIGZ0OwogICBjaGFyIGJ1Zls2NV07CiAgIGludCBsZW4s
IGk7Ci0gIGNoYXIgKnAwLCAqcDEsICpzdHI7CisgIGNvbnN0IGNoYXIgKnAwLCAqcDE7CisgIGNo
YXIgKnN0cjsKIAogICBhcmdzTGVuID0gMDsKICAgYXJnc1NpemUgPSA4OwpkaWZmIC11ciB0ZXhs
aXZlLTIwMDgwODE2LXNvdXJjZS9saWJzL3hwZGYub3JpZy9nb28vR1N0cmluZy5oIHRleGxpdmUt
MjAwODA4MTYtc291cmNlL2xpYnMveHBkZi9nb28vR1N0cmluZy5oCi0tLSB0ZXhsaXZlLTIwMDgw
ODE2LXNvdXJjZS9saWJzL3hwZGYub3JpZy9nb28vR1N0cmluZy5oCTIwMDctMDctMTIgMDE6MTM6
NTkuMDAwMDAwMDAwICswNDAwCisrKyB0ZXhsaXZlLTIwMDgwODE2LXNvdXJjZS9saWJzL3hwZGYv
Z29vL0dTdHJpbmcuaAkyMDA4LTExLTIxIDE3OjU0OjE3LjAwMDAwMDAwMCArMDMwMApAQCAtNjcs
OCArNjcsOCBAQAogICAvLyAgICAgdCAtLSBHU3RyaW5nICoKICAgLy8gICAgIHcgLS0gYmxhbmsg
c3BhY2U7IGFyZyBkZXRlcm1pbmVzIHdpZHRoCiAgIC8vIFRvIGdldCBsaXRlcmFsIGN1cmx5IGJy
YWNlcywgdXNlIHt7IG9yIH19LgotICBzdGF0aWMgR1N0cmluZyAqZm9ybWF0KGNoYXIgKmZtdCwg
Li4uKTsKLSAgc3RhdGljIEdTdHJpbmcgKmZvcm1hdHYoY2hhciAqZm10LCB2YV9saXN0IGFyZ0xp
c3QpOworICBzdGF0aWMgR1N0cmluZyAqZm9ybWF0KGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKKyAg
c3RhdGljIEdTdHJpbmcgKmZvcm1hdHYoY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFyZ0xpc3Qp
OwogCiAgIC8vIERlc3RydWN0b3IuCiAgIH5HU3RyaW5nKCk7CkBAIC05NSw4ICs5NSw4IEBACiAg
IEdTdHJpbmcgKmFwcGVuZChjb25zdCBjaGFyICpzdHIsIGludCBsZW5ndGhBKTsKIAogICAvLyBB
cHBlbmQgYSBmb3JtYXR0ZWQgc3RyaW5nLgotICBHU3RyaW5nICphcHBlbmRmKGNoYXIgKmZtdCwg
Li4uKTsKLSAgR1N0cmluZyAqYXBwZW5kZnYoY2hhciAqZm10LCB2YV9saXN0IGFyZ0xpc3QpOwor
ICBHU3RyaW5nICphcHBlbmRmKGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKKyAgR1N0cmluZyAqYXBw
ZW5kZnYoY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFyZ0xpc3QpOwogCiAgIC8vIEluc2VydCBh
IGNoYXJhY3RlciBvciBzdHJpbmcuCiAgIEdTdHJpbmcgKmluc2VydChpbnQgaSwgY2hhciBjKTsK
ZGlmZiAtdXIgdGV4bGl2ZS0yMDA4MDgxNi1zb3VyY2UvbGlicy94cGRmLm9yaWcveHBkZi9CdWls
dGluRm9udC5jYyB0ZXhsaXZlLTIwMDgwODE2LXNvdXJjZS9saWJzL3hwZGYveHBkZi9CdWlsdGlu
Rm9udC5jYwotLS0gdGV4bGl2ZS0yMDA4MDgxNi1zb3VyY2UvbGlicy94cGRmLm9yaWcveHBkZi9C
dWlsdGluRm9udC5jYwkyMDA2LTAxLTE2IDAzOjA5OjI2LjAwMDAwMDAwMCArMDMwMAorKysgdGV4
bGl2ZS0yMDA4MDgxNi1zb3VyY2UvbGlicy94cGRmL3hwZGYvQnVpbHRpbkZvbnQuY2MJMjAwOC0x
MS0yMSAxMzo1Njo0OC4wMDAwMDAwMDAgKzAzMDAKQEAgLTM5LDcgKzM5LDcgQEAKICAgZ2ZyZWUo
dGFiKTsKIH0KIAotR0Jvb2wgQnVpbHRpbkZvbnRXaWR0aHM6OmdldFdpZHRoKGNoYXIgKm5hbWUs
IEd1c2hvcnQgKndpZHRoKSB7CitHQm9vbCBCdWlsdGluRm9udFdpZHRoczo6Z2V0V2lkdGgoY29u
c3QgY2hhciAqbmFtZSwgR3VzaG9ydCAqd2lkdGgpIHsKICAgaW50IGg7CiAgIEJ1aWx0aW5Gb250
V2lkdGggKnA7CiAKQEAgLTUzLDggKzUzLDggQEAKICAgcmV0dXJuIGdGYWxzZTsKIH0KIAotaW50
IEJ1aWx0aW5Gb250V2lkdGhzOjpoYXNoKGNoYXIgKm5hbWUpIHsKLSAgY2hhciAqcDsKK2ludCBC
dWlsdGluRm9udFdpZHRoczo6aGFzaChjb25zdCBjaGFyICpuYW1lKSB7CisgIGNvbnN0IGNoYXIg
KnA7CiAgIHVuc2lnbmVkIGludCBoOwogCiAgIGggPSAwOwpkaWZmIC11ciB0ZXhsaXZlLTIwMDgw
ODE2LXNvdXJjZS9saWJzL3hwZGYub3JpZy94cGRmL0J1aWx0aW5Gb250LmggdGV4bGl2ZS0yMDA4
MDgxNi1zb3VyY2UvbGlicy94cGRmL3hwZGYvQnVpbHRpbkZvbnQuaAotLS0gdGV4bGl2ZS0yMDA4
MDgxNi1zb3VyY2UvbGlicy94cGRmLm9yaWcveHBkZi9CdWlsdGluRm9udC5oCTIwMDYtMDEtMTYg
MDM6MDk6MjYuMDAwMDAwMDAwICswMzAwCisrKyB0ZXhsaXZlLTIwMDgwODE2LXNvdXJjZS9saWJz
L3hwZGYveHBkZi9CdWlsdGluRm9udC5oCTIwMDgtMTEtMjEgMTc6MTY6MDAuMDAwMDAwMDAwICsw
MzAwCkBAIC0yMyw4ICsyMyw4IEBACiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBzdHJ1Y3QgQnVpbHRp
bkZvbnQgewotICBjaGFyICpuYW1lOwotICBjaGFyICoqZGVmYXVsdEJhc2VFbmM7CisgIGNvbnN0
IGNoYXIgKm5hbWU7CisgIGNvbnN0IGNoYXIgKipkZWZhdWx0QmFzZUVuYzsKICAgc2hvcnQgYXNj
ZW50OwogICBzaG9ydCBkZXNjZW50OwogICBzaG9ydCBiYm94WzRdOwpAQCAtMzQsNyArMzQsNyBA
QAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogc3RydWN0IEJ1aWx0aW5Gb250V2lkdGggewotICBjaGFy
ICpuYW1lOworICBjb25zdCBjaGFyICpuYW1lOwogICBHdXNob3J0IHdpZHRoOwogICBCdWlsdGlu
Rm9udFdpZHRoICpuZXh0OwogfTsKQEAgLTQ0LDExICs0NCwxMSBAQAogCiAgIEJ1aWx0aW5Gb250
V2lkdGhzKEJ1aWx0aW5Gb250V2lkdGggKndpZHRocywgaW50IHNpemVBKTsKICAgfkJ1aWx0aW5G
b250V2lkdGhzKCk7Ci0gIEdCb29sIGdldFdpZHRoKGNoYXIgKm5hbWUsIEd1c2hvcnQgKndpZHRo
KTsKKyAgR0Jvb2wgZ2V0V2lkdGgoY29uc3QgY2hhciAqbmFtZSwgR3VzaG9ydCAqd2lkdGgpOwog
CiBwcml2YXRlOgogCi0gIGludCBoYXNoKGNoYXIgKm5hbWUpOworICBpbnQgaGFzaChjb25zdCBj
aGFyICpuYW1lKTsKIAogICBCdWlsdGluRm9udFdpZHRoICoqdGFiOwogICBpbnQgc2l6ZTsKZGlm
ZiAtdXIgdGV4bGl2ZS0yMDA4MDgxNi1zb3VyY2UvbGlicy94cGRmLm9yaWcveHBkZi9DaGFyQ29k
ZVRvVW5pY29kZS5jYyB0ZXhsaXZlLTIwMDgwODE2LXNvdXJjZS9saWJzL3hwZGYveHBkZi9DaGFy
Q29kZVRvVW5pY29kZS5jYwotLS0gdGV4bGl2ZS0yMDA4MDgxNi1zb3VyY2UvbGlicy94cGRmLm9y
aWcveHBkZi9DaGFyQ29kZVRvVW5pY29kZS5jYwkyMDA2LTAxLTE2IDAzOjA5OjI2LjAwMDAwMDAw
MCArMDMwMAorKysgdGV4bGl2ZS0yMDA4MDgxNi1zb3VyY2UvbGlicy94cGRmL3hwZGYvQ2hhckNv
ZGVUb1VuaWNvZGUuY2MJMjAwOC0xMS0yMSAxNjo1MToyOS4wMDAwMDAwMDAgKzAzMDAKQEAgLTE4
OSw3ICsxODksNyBAQAogCiBDaGFyQ29kZVRvVW5pY29kZSAqQ2hhckNvZGVUb1VuaWNvZGU6OnBh
cnNlQ01hcChHU3RyaW5nICpidWYsIGludCBuQml0cykgewogICBDaGFyQ29kZVRvVW5pY29kZSAq
Y3R1OwotICBjaGFyICpwOworICBjb25zdCBjaGFyICpwOwogCiAgIGN0dSA9IG5ldyBDaGFyQ29k
ZVRvVW5pY29kZShOVUxMKTsKICAgcCA9IGJ1Zi0+Z2V0Q1N0cmluZygpOwpAQCAtMTk4LDcgKzE5
OCw3IEBACiB9CiAKIHZvaWQgQ2hhckNvZGVUb1VuaWNvZGU6Om1lcmdlQ01hcChHU3RyaW5nICpi
dWYsIGludCBuQml0cykgewotICBjaGFyICpwOworICBjb25zdCBjaGFyICpwOwogCiAgIHAgPSBi
dWYtPmdldENTdHJpbmcoKTsKICAgcGFyc2VDTWFwMSgmZ2V0Q2hhckZyb21TdHJpbmcsICZwLCBu
Qml0cyk7CmRpZmYgLXVyIHRleGxpdmUtMjAwODA4MTYtc291cmNlL2xpYnMveHBkZi5vcmlnL3hw
ZGYvQ01hcC5jYyB0ZXhsaXZlLTIwMDgwODE2LXNvdXJjZS9saWJzL3hwZGYveHBkZi9DTWFwLmNj
Ci0tLSB0ZXhsaXZlLTIwMDgwODE2LXNvdXJjZS9saWJzL3hwZGYub3JpZy94cGRmL0NNYXAuY2MJ
MjAwNi0wMS0xNiAwMzowOToyNi4wMDAwMDAwMDAgKzAzMDAKKysrIHRleGxpdmUtMjAwODA4MTYt
c291cmNlL2xpYnMveHBkZi94cGRmL0NNYXAuY2MJMjAwOC0xMS0yMSAxNzo0MjozNC4wMDAwMDAw
MDAgKzAzMDAKQEAgLTE4NCw3ICsxODQsNyBAQAogI2VuZGlmCiB9CiAKLXZvaWQgQ01hcDo6dXNl
Q01hcChDTWFwQ2FjaGUgKmNhY2hlLCBjaGFyICp1c2VOYW1lKSB7Cit2b2lkIENNYXA6OnVzZUNN
YXAoQ01hcENhY2hlICpjYWNoZSwgY29uc3QgY2hhciAqdXNlTmFtZSkgewogICBHU3RyaW5nICp1
c2VOYW1lU3RyOwogICBDTWFwICpzdWJDTWFwOwogCkBAIC0zMjcsNyArMzI3LDcgQEAKICAgcmV0
dXJuICFjb2xsZWN0aW9uLT5jbXAoY29sbGVjdGlvbkEpICYmICFjTWFwTmFtZS0+Y21wKGNNYXBO
YW1lQSk7CiB9CiAKLUNJRCBDTWFwOjpnZXRDSUQoY2hhciAqcywgaW50IGxlbiwgaW50ICpuVXNl
ZCkgeworQ0lEIENNYXA6OmdldENJRChjb25zdCBjaGFyICpzLCBpbnQgbGVuLCBpbnQgKm5Vc2Vk
KSB7CiAgIENNYXBWZWN0b3JFbnRyeSAqdmVjOwogICBpbnQgbiwgaTsKIApkaWZmIC11ciB0ZXhs
aXZlLTIwMDgwODE2LXNvdXJjZS9saWJzL3hwZGYub3JpZy94cGRmL0NNYXAuaCB0ZXhsaXZlLTIw
MDgwODE2LXNvdXJjZS9saWJzL3hwZGYveHBkZi9DTWFwLmgKLS0tIHRleGxpdmUtMjAwODA4MTYt
c291cmNlL2xpYnMveHBkZi5vcmlnL3hwZGYvQ01hcC5oCTIwMDYtMDEtMTYgMDM6MDk6MjYuMDAw
MDAwMDAwICswMzAwCisrKyB0ZXhsaXZlLTIwMDgwODE2LXNvdXJjZS9saWJzL3hwZGYveHBkZi9D
TWFwLmgJMjAwOC0xMS0yMSAxNzo0Mjo0NC4wMDAwMDAwMDAgKzAzMDAKQEAgLTUxLDcgKzUxLDcg
QEAKICAgLy8gUmV0dXJuIHRoZSBDSUQgY29ycmVzcG9uZGluZyB0byB0aGUgY2hhcmFjdGVyIGNv
ZGUgc3RhcnRpbmcgYXQKICAgLy8gPHM+LCB3aGljaCBjb250YWlucyA8bGVuPiBieXRlcy4gIFNl
dHMgKjxuVXNlZD4gdG8gdGhlIG51bWJlciBvZgogICAvLyBieXRlcyB1c2VkIGJ5IHRoZSBjaGFy
IGNvZGUuCi0gIENJRCBnZXRDSUQoY2hhciAqcywgaW50IGxlbiwgaW50ICpuVXNlZCk7CisgIENJ
RCBnZXRDSUQoY29uc3QgY2hhciAqcywgaW50IGxlbiwgaW50ICpuVXNlZCk7CiAKICAgLy8gUmV0
dXJuIHRoZSB3cml0aW5nIG1vZGUgKDA9aG9yaXpvbnRhbCwgMT12ZXJ0aWNhbCkuCiAgIGludCBn
ZXRXTW9kZSgpIHsgcmV0dXJuIHdNb2RlOyB9CkBAIC02MCw3ICs2MCw3IEBACiAKICAgQ01hcChH
U3RyaW5nICpjb2xsZWN0aW9uQSwgR1N0cmluZyAqY01hcE5hbWVBKTsKICAgQ01hcChHU3RyaW5n
ICpjb2xsZWN0aW9uQSwgR1N0cmluZyAqY01hcE5hbWVBLCBpbnQgd01vZGVBKTsKLSAgdm9pZCB1
c2VDTWFwKENNYXBDYWNoZSAqY2FjaGUsIGNoYXIgKnVzZU5hbWUpOworICB2b2lkIHVzZUNNYXAo
Q01hcENhY2hlICpjYWNoZSwgY29uc3QgY2hhciAqdXNlTmFtZSk7CiAgIHZvaWQgY29weVZlY3Rv
cihDTWFwVmVjdG9yRW50cnkgKmRlc3QsIENNYXBWZWN0b3JFbnRyeSAqc3JjKTsKICAgdm9pZCBh
ZGRDb2RlU3BhY2UoQ01hcFZlY3RvckVudHJ5ICp2ZWMsIEd1aW50IHN0YXJ0LCBHdWludCBlbmQs
CiAJCSAgICBHdWludCBuQnl0ZXMpOwpkaWZmIC11ciB0ZXhsaXZlLTIwMDgwODE2LXNvdXJjZS9s
aWJzL3hwZGYub3JpZy94cGRmL0RpY3QuY2MgdGV4bGl2ZS0yMDA4MDgxNi1zb3VyY2UvbGlicy94
cGRmL3hwZGYvRGljdC5jYwotLS0gdGV4bGl2ZS0yMDA4MDgxNi1zb3VyY2UvbGlicy94cGRmLm9y
aWcveHBkZi9EaWN0LmNjCTIwMDYtMDEtMTYgMDM6MDk6MjYuMDAwMDAwMDAwICswMzAwCisrKyB0
ZXhsaXZlLTIwMDgwODE2LXNvdXJjZS9saWJzL3hwZGYveHBkZi9EaWN0LmNjCTIwMDgtMTEtMjEg
MTY6NTE6MDIuMDAwMDAwMDAwICswMzAwCkBAIC0zNCwxMyArMzQsMTMgQEAKICAgaW50IGk7CiAK
ICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgZ2ZyZWUoZW50cmllc1tpXS5r
ZXkpOworICAgIGdmcmVlKGNvbnN0X2Nhc3Q8Y2hhcio+KGVudHJpZXNbaV0ua2V5KSk7CiAgICAg
ZW50cmllc1tpXS52YWwuZnJlZSgpOwogICB9CiAgIGdmcmVlKGVudHJpZXMpOwogfQogCi12b2lk
IERpY3Q6OmFkZChjaGFyICprZXksIE9iamVjdCAqdmFsKSB7Cit2b2lkIERpY3Q6OmFkZChjb25z
dCBjaGFyICprZXksIE9iamVjdCAqdmFsKSB7CiAgIGlmIChsZW5ndGggPT0gc2l6ZSkgewogICAg
IGlmIChsZW5ndGggPT0gMCkgewogICAgICAgc2l6ZSA9IDg7CkBAIC01NCw3ICs1NCw3IEBACiAg
ICsrbGVuZ3RoOwogfQogCi1pbmxpbmUgRGljdEVudHJ5ICpEaWN0OjpmaW5kKGNoYXIgKmtleSkg
eworaW5saW5lIERpY3RFbnRyeSAqRGljdDo6ZmluZChjb25zdCBjaGFyICprZXkpIHsKICAgaW50
IGk7CiAKICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CkBAIC02NCwyNSArNjQsMjUg
QEAKICAgcmV0dXJuIE5VTEw7CiB9CiAKLUdCb29sIERpY3Q6OmlzKGNoYXIgKnR5cGUpIHsKK0dC
b29sIERpY3Q6OmlzKGNvbnN0IGNoYXIgKnR5cGUpIHsKICAgRGljdEVudHJ5ICplOwogCiAgIHJl
dHVybiAoZSA9IGZpbmQoIlR5cGUiKSkgJiYgZS0+dmFsLmlzTmFtZSh0eXBlKTsKIH0KIAotT2Jq
ZWN0ICpEaWN0Ojpsb29rdXAoY2hhciAqa2V5LCBPYmplY3QgKm9iaikgeworT2JqZWN0ICpEaWN0
Ojpsb29rdXAoY29uc3QgY2hhciAqa2V5LCBPYmplY3QgKm9iaikgewogICBEaWN0RW50cnkgKmU7
CiAKICAgcmV0dXJuIChlID0gZmluZChrZXkpKSA/IGUtPnZhbC5mZXRjaCh4cmVmLCBvYmopIDog
b2JqLT5pbml0TnVsbCgpOwogfQogCi1PYmplY3QgKkRpY3Q6Omxvb2t1cE5GKGNoYXIgKmtleSwg
T2JqZWN0ICpvYmopIHsKK09iamVjdCAqRGljdDo6bG9va3VwTkYoY29uc3QgY2hhciAqa2V5LCBP
YmplY3QgKm9iaikgewogICBEaWN0RW50cnkgKmU7CiAKICAgcmV0dXJuIChlID0gZmluZChrZXkp
KSA/IGUtPnZhbC5jb3B5KG9iaikgOiBvYmotPmluaXROdWxsKCk7CiB9CiAKLWNoYXIgKkRpY3Q6
OmdldEtleShpbnQgaSkgeworY29uc3QgY2hhciAqRGljdDo6Z2V0S2V5KGludCBpKSB7CiAgIHJl
dHVybiBlbnRyaWVzW2ldLmtleTsKIH0KIApkaWZmIC11ciB0ZXhsaXZlLTIwMDgwODE2LXNvdXJj
ZS9saWJzL3hwZGYub3JpZy94cGRmL0RpY3QuaCB0ZXhsaXZlLTIwMDgwODE2LXNvdXJjZS9saWJz
L3hwZGYveHBkZi9EaWN0LmgKLS0tIHRleGxpdmUtMjAwODA4MTYtc291cmNlL2xpYnMveHBkZi5v
cmlnL3hwZGYvRGljdC5oCTIwMDYtMDEtMTYgMDM6MDk6MjYuMDAwMDAwMDAwICswMzAwCisrKyB0
ZXhsaXZlLTIwMDgwODE2LXNvdXJjZS9saWJzL3hwZGYveHBkZi9EaWN0LmgJMjAwOC0xMS0yMSAx
Njo0MDoxOS4wMDAwMDAwMDAgKzAzMDAKQEAgLTIyLDcgKzIyLDcgQEAKIC8vLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCiAKIHN0cnVjdCBEaWN0RW50cnkgewotICBjaGFyICprZXk7CisgIGNvbnN0IGNoYXIgKmtl
eTsKICAgT2JqZWN0IHZhbDsKIH07CiAKQEAgLTQzLDE4ICs0MywxOCBAQAogICBpbnQgZ2V0TGVu
Z3RoKCkgeyByZXR1cm4gbGVuZ3RoOyB9CiAKICAgLy8gQWRkIGFuIGVudHJ5LiAgTkI6IGRvZXMg
bm90IGNvcHkga2V5LgotICB2b2lkIGFkZChjaGFyICprZXksIE9iamVjdCAqdmFsKTsKKyAgdm9p
ZCBhZGQoY29uc3QgY2hhciAqa2V5LCBPYmplY3QgKnZhbCk7CiAKICAgLy8gQ2hlY2sgaWYgZGlj
dGlvbmFyeSBpcyBvZiBzcGVjaWZpZWQgdHlwZS4KLSAgR0Jvb2wgaXMoY2hhciAqdHlwZSk7Cisg
IEdCb29sIGlzKGNvbnN0IGNoYXIgKnR5cGUpOwogCiAgIC8vIExvb2sgdXAgYW4gZW50cnkgYW5k
IHJldHVybiB0aGUgdmFsdWUuICBSZXR1cm5zIGEgbnVsbCBvYmplY3QKICAgLy8gaWYgPGtleT4g
aXMgbm90IGluIHRoZSBkaWN0aW9uYXJ5LgotICBPYmplY3QgKmxvb2t1cChjaGFyICprZXksIE9i
amVjdCAqb2JqKTsKLSAgT2JqZWN0ICpsb29rdXBORihjaGFyICprZXksIE9iamVjdCAqb2JqKTsK
KyAgT2JqZWN0ICpsb29rdXAoY29uc3QgY2hhciAqa2V5LCBPYmplY3QgKm9iaik7CisgIE9iamVj
dCAqbG9va3VwTkYoY29uc3QgY2hhciAqa2V5LCBPYmplY3QgKm9iaik7CiAKICAgLy8gSXRlcmF0
aXZlIGFjY2Vzc29ycy4KLSAgY2hhciAqZ2V0S2V5KGludCBpKTsKKyAgY29uc3QgY2hhciAqZ2V0
S2V5KGludCBpKTsKICAgT2JqZWN0ICpnZXRWYWwoaW50IGksIE9iamVjdCAqb2JqKTsKICAgT2Jq
ZWN0ICpnZXRWYWxORihpbnQgaSwgT2JqZWN0ICpvYmopOwogCkBAIC03MSw3ICs3MSw3IEBACiAg
IGludCBsZW5ndGg7CQkJLy8gbnVtYmVyIG9mIGVudHJpZXMgaW4gZGljdGlvbmFyeQogICBpbnQg
cmVmOwkJCS8vIHJlZmVyZW5jZSBjb3VudAogCi0gIERpY3RFbnRyeSAqZmluZChjaGFyICprZXkp
OworICBEaWN0RW50cnkgKmZpbmQoY29uc3QgY2hhciAqa2V5KTsKIH07CiAKICNlbmRpZgpkaWZm
IC11ciB0ZXhsaXZlLTIwMDgwODE2LXNvdXJjZS9saWJzL3hwZGYub3JpZy94cGRmL0Vycm9yLmNj
IHRleGxpdmUtMjAwODA4MTYtc291cmNlL2xpYnMveHBkZi94cGRmL0Vycm9yLmNjCi0tLSB0ZXhs
aXZlLTIwMDgwODE2LXNvdXJjZS9saWJzL3hwZGYub3JpZy94cGRmL0Vycm9yLmNjCTIwMDYtMDEt
MTYgMDM6MDk6MjYuMDAwMDAwMDAwICswMzAwCisrKyB0ZXhsaXZlLTIwMDgwODE2LXNvdXJjZS9s
aWJzL3hwZGYveHBkZi9FcnJvci5jYwkyMDA4LTExLTIxIDE2OjQ3OjMxLjAwMDAwMDAwMCArMDMw
MApAQCAtMTgsNyArMTgsNyBAQAogI2luY2x1ZGUgIkdsb2JhbFBhcmFtcy5oIgogI2luY2x1ZGUg
IkVycm9yLmgiCiAKLXZvaWQgQ0RFQ0wgZXJyb3IoaW50IHBvcywgY2hhciAqbXNnLCAuLi4pIHsK
K3ZvaWQgQ0RFQ0wgZXJyb3IoaW50IHBvcywgY29uc3QgY2hhciAqbXNnLCAuLi4pIHsKICAgdmFf
bGlzdCBhcmdzOwogCiAgIC8vIE5COiB0aGlzIGNhbiBiZSBjYWxsZWQgYmVmb3JlIHRoZSBnbG9i
YWxQYXJhbXMgb2JqZWN0IGlzIGNyZWF0ZWQKZGlmZiAtdXIgdGV4bGl2ZS0yMDA4MDgxNi1zb3Vy
Y2UvbGlicy94cGRmLm9yaWcveHBkZi9FcnJvci5oIHRleGxpdmUtMjAwODA4MTYtc291cmNlL2xp
YnMveHBkZi94cGRmL0Vycm9yLmgKLS0tIHRleGxpdmUtMjAwODA4MTYtc291cmNlL2xpYnMveHBk
Zi5vcmlnL3hwZGYvRXJyb3IuaAkyMDA2LTAxLTE2IDAzOjA5OjI2LjAwMDAwMDAwMCArMDMwMAor
KysgdGV4bGl2ZS0yMDA4MDgxNi1zb3VyY2UvbGlicy94cGRmL3hwZGYvRXJyb3IuaAkyMDA4LTEx
LTIxIDE2OjQ2OjUxLjAwMDAwMDAwMCArMDMwMApAQCAtMTgsNiArMTgsNiBAQAogI2luY2x1ZGUg
PHN0ZGlvLmg+CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKLWV4dGVybiB2b2lkIENERUNMIGVycm9y
KGludCBwb3MsIGNoYXIgKm1zZywgLi4uKTsKK2V4dGVybiB2b2lkIENERUNMIGVycm9yKGludCBw
b3MsIGNvbnN0IGNoYXIgKm1zZywgLi4uKTsKIAogI2VuZGlmCmRpZmYgLXVyIHRleGxpdmUtMjAw
ODA4MTYtc291cmNlL2xpYnMveHBkZi5vcmlnL3hwZGYvRm9udEVuY29kaW5nVGFibGVzLmNjIHRl
eGxpdmUtMjAwODA4MTYtc291cmNlL2xpYnMveHBkZi94cGRmL0ZvbnRFbmNvZGluZ1RhYmxlcy5j
YwotLS0gdGV4bGl2ZS0yMDA4MDgxNi1zb3VyY2UvbGlicy94cGRmLm9yaWcveHBkZi9Gb250RW5j
b2RpbmdUYWJsZXMuY2MJMjAwNi0wMS0xNiAwMzowOToyNi4wMDAwMDAwMDAgKzAzMDAKKysrIHRl
eGxpdmUtMjAwODA4MTYtc291cmNlL2xpYnMveHBkZi94cGRmL0ZvbnRFbmNvZGluZ1RhYmxlcy5j
YwkyMDA4LTExLTIxIDE3OjE0OjU0LjAwMDAwMDAwMCArMDMwMApAQCAtMTAsNyArMTAsNyBAQAog
I2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgIkZvbnRFbmNvZGluZ1RhYmxlcy5oIgogCi1j
aGFyICptYWNSb21hbkVuY29kaW5nWzI1Nl0gPSB7Citjb25zdCBjaGFyICptYWNSb21hbkVuY29k
aW5nWzI1Nl0gPSB7CiAgIE5VTEwsCiAgIE5VTEwsCiAgIE5VTEwsCkBAIC0yNjksNyArMjY5LDcg
QEAKICAgImNhcm9uIgogfTsKIAotY2hhciAqbWFjRXhwZXJ0RW5jb2RpbmdbMjU2XSA9IHsKK2Nv
bnN0IGNoYXIgKm1hY0V4cGVydEVuY29kaW5nWzI1Nl0gPSB7CiAgIE5VTEwsCiAgIE5VTEwsCiAg
IE5VTEwsCkBAIC01MjgsNyArNTI4LDcgQEAKICAgTlVMTAogfTsKIAotY2hhciAqd2luQW5zaUVu
Y29kaW5nWzI1Nl0gPSB7Citjb25zdCBjaGFyICp3aW5BbnNpRW5jb2RpbmdbMjU2XSA9IHsKICAg
TlVMTCwKICAgTlVMTCwKICAgTlVMTCwKQEAgLTc4Nyw3ICs3ODcsNyBAQAogICAieWRpZXJlc2lz
IgogfTsKIAotY2hhciAqc3RhbmRhcmRFbmNvZGluZ1syNTZdID0geworY29uc3QgY2hhciAqc3Rh
bmRhcmRFbmNvZGluZ1syNTZdID0gewogICBOVUxMLAogICBOVUxMLAogICBOVUxMLApAQCAtMTA0
Niw3ICsxMDQ2LDcgQEAKICAgTlVMTAogfTsKIAotY2hhciAqZXhwZXJ0RW5jb2RpbmdbMjU2XSA9
IHsKK2NvbnN0IGNoYXIgKmV4cGVydEVuY29kaW5nWzI1Nl0gPSB7CiAgIE5VTEwsCiAgIE5VTEws
CiAgIE5VTEwsCkBAIC0xMzA1LDcgKzEzMDUsNyBAQAogICAiWWRpZXJlc2lzc21hbGwiCiB9Owog
Ci1jaGFyICpzeW1ib2xFbmNvZGluZ1syNTZdID0geworY29uc3QgY2hhciAqc3ltYm9sRW5jb2Rp
bmdbMjU2XSA9IHsKICAgTlVMTCwKICAgTlVMTCwKICAgTlVMTCwKQEAgLTE1NjQsNyArMTU2NCw3
IEBACiAgIE5VTEwKIH07CiAKLWNoYXIgKnphcGZEaW5nYmF0c0VuY29kaW5nWzI1Nl0gPSB7Citj
b25zdCBjaGFyICp6YXBmRGluZ2JhdHNFbmNvZGluZ1syNTZdID0gewogICBOVUxMLAogICBOVUxM
LAogICBOVUxMLApkaWZmIC11ciB0ZXhsaXZlLTIwMDgwODE2LXNvdXJjZS9saWJzL3hwZGYub3Jp
Zy94cGRmL0ZvbnRFbmNvZGluZ1RhYmxlcy5oIHRleGxpdmUtMjAwODA4MTYtc291cmNlL2xpYnMv
eHBkZi94cGRmL0ZvbnRFbmNvZGluZ1RhYmxlcy5oCi0tLSB0ZXhsaXZlLTIwMDgwODE2LXNvdXJj
ZS9saWJzL3hwZGYub3JpZy94cGRmL0ZvbnRFbmNvZGluZ1RhYmxlcy5oCTIwMDYtMDEtMTYgMDM6
MDk6MjYuMDAwMDAwMDAwICswMzAwCisrKyB0ZXhsaXZlLTIwMDgwODE2LXNvdXJjZS9saWJzL3hw
ZGYveHBkZi9Gb250RW5jb2RpbmdUYWJsZXMuaAkyMDA4LTExLTIxIDE3OjE0OjI1LjAwMDAwMDAw
MCArMDMwMApAQCAtOSwxMiArOSwxMiBAQAogI2lmbmRlZiBGT05URU5DT0RJTkdUQUJMRVNfSAog
I2RlZmluZSBGT05URU5DT0RJTkdUQUJMRVNfSAogCi1leHRlcm4gY2hhciAqbWFjUm9tYW5FbmNv
ZGluZ1tdOwotZXh0ZXJuIGNoYXIgKm1hY0V4cGVydEVuY29kaW5nW107Ci1leHRlcm4gY2hhciAq
d2luQW5zaUVuY29kaW5nW107Ci1leHRlcm4gY2hhciAqc3RhbmRhcmRFbmNvZGluZ1tdOwotZXh0
ZXJuIGNoYXIgKmV4cGVydEVuY29kaW5nW107Ci1leHRlcm4gY2hhciAqc3ltYm9sRW5jb2Rpbmdb
XTsKLWV4dGVybiBjaGFyICp6YXBmRGluZ2JhdHNFbmNvZGluZ1tdOworZXh0ZXJuIGNvbnN0IGNo
YXIgKm1hY1JvbWFuRW5jb2RpbmdbXTsKK2V4dGVybiBjb25zdCBjaGFyICptYWNFeHBlcnRFbmNv
ZGluZ1tdOworZXh0ZXJuIGNvbnN0IGNoYXIgKndpbkFuc2lFbmNvZGluZ1tdOworZXh0ZXJuIGNv
bnN0IGNoYXIgKnN0YW5kYXJkRW5jb2RpbmdbXTsKK2V4dGVybiBjb25zdCBjaGFyICpleHBlcnRF
bmNvZGluZ1tdOworZXh0ZXJuIGNvbnN0IGNoYXIgKnN5bWJvbEVuY29kaW5nW107CitleHRlcm4g
Y29uc3QgY2hhciAqemFwZkRpbmdiYXRzRW5jb2RpbmdbXTsKIAogI2VuZGlmCmRpZmYgLXVyIHRl
eGxpdmUtMjAwODA4MTYtc291cmNlL2xpYnMveHBkZi5vcmlnL3hwZGYvRnVuY3Rpb24uY2MgdGV4
bGl2ZS0yMDA4MDgxNi1zb3VyY2UvbGlicy94cGRmL3hwZGYvRnVuY3Rpb24uY2MKLS0tIHRleGxp
dmUtMjAwODA4MTYtc291cmNlL2xpYnMveHBkZi5vcmlnL3hwZGYvRnVuY3Rpb24uY2MJMjAwNy0w
Ny0xMiAwMToxMzo1OS4wMDAwMDAwMDAgKzA0MDAKKysrIHRleGxpdmUtMjAwODA4MTYtc291cmNl
L2xpYnMveHBkZi94cGRmL0Z1bmN0aW9uLmNjCTIwMDgtMTEtMjEgMTc6MDM6MzUuMDAwMDAwMDAw
ICswMzAwCkBAIC03NDksNyArNzQ5LDcgQEAKIC8vIE5vdGU6ICdpZicgYW5kICdpZmVsc2UnIGFy
ZSBwYXJzZWQgc2VwYXJhdGVseS4KIC8vIFRoZSByZXN0IGFyZSBsaXN0ZWQgaGVyZSBpbiBhbHBo
YWJldGljYWwgb3JkZXIuCiAvLyBUaGUgaW5kZXggaW4gdGhpcyB0YWJsZSBpcyBlcXVpdmFsZW50
IHRvIHRoZSBlbnRyeSBpbiBQU09wLgotY2hhciAqcHNPcE5hbWVzW10gPSB7Citjb25zdCBjaGFy
ICpwc09wTmFtZXNbXSA9IHsKICAgImFicyIsCiAgICJhZGQiLAogICAiYW5kIiwKQEAgLTEwODYs
NyArMTA4Niw3IEBACiAKIEdCb29sIFBvc3RTY3JpcHRGdW5jdGlvbjo6cGFyc2VDb2RlKFN0cmVh
bSAqc3RyLCBpbnQgKmNvZGVQdHIpIHsKICAgR1N0cmluZyAqdG9rOwotICBjaGFyICpwOworICBj
b25zdCBjaGFyICpwOwogICBHQm9vbCBpc1JlYWw7CiAgIGludCBvcFB0ciwgZWxzZVB0cjsKICAg
aW50IGEsIGIsIG1pZCwgY21wOwpkaWZmIC11ciB0ZXhsaXZlLTIwMDgwODE2LXNvdXJjZS9saWJz
L3hwZGYub3JpZy94cGRmL0dmeEZvbnQuY2MgdGV4bGl2ZS0yMDA4MDgxNi1zb3VyY2UvbGlicy94
cGRmL3hwZGYvR2Z4Rm9udC5jYwotLS0gdGV4bGl2ZS0yMDA4MDgxNi1zb3VyY2UvbGlicy94cGRm
Lm9yaWcveHBkZi9HZnhGb250LmNjCTIwMDctMDctMTIgMDE6MTM6NTkuMDAwMDAwMDAwICswNDAw
CisrKyB0ZXhsaXZlLTIwMDgwODE2LXNvdXJjZS9saWJzL3hwZGYveHBkZi9HZnhGb250LmNjCTIw
MDgtMTEtMjEgMTc6NDE6MTQuMDAwMDAwMDAwICswMzAwCkBAIC0zMyw4ICszMyw4IEBACiAvLy0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQogCiBzdHJ1Y3QgU3RkRm9udE1hcEVudHJ5IHsKLSAgY2hhciAqYWx0TmFt
ZTsKLSAgY2hhciAqcHJvcGVyTmFtZTsKKyAgY29uc3QgY2hhciAqYWx0TmFtZTsKKyAgY29uc3Qg
Y2hhciAqcHJvcGVyTmFtZTsKIH07CiAKIC8vIEFjcm9iYXQgNC4wIGFuZCBlYXJsaWVyIHN1YnN0
aXR1dGVkIEJhc2UxNC1jb21wYXRpYmxlIGZvbnRzIHdpdGhvdXQKQEAgLTEwMCw3ICsxMDAsNyBA
QAogLy8gR2Z4Rm9udAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotR2Z4Rm9udCAqR2Z4Rm9udDo6bWFr
ZUZvbnQoWFJlZiAqeHJlZiwgY2hhciAqdGFnQSwgUmVmIGlkQSwgRGljdCAqZm9udERpY3QpIHsK
K0dmeEZvbnQgKkdmeEZvbnQ6Om1ha2VGb250KFhSZWYgKnhyZWYsIGNvbnN0IGNoYXIgKnRhZ0Es
IFJlZiBpZEEsIERpY3QgKmZvbnREaWN0KSB7CiAgIEdTdHJpbmcgKm5hbWVBOwogICBHZnhGb250
ICpmb250OwogICBPYmplY3Qgb2JqMTsKQEAgLTEzNiw3ICsxMzYsNyBAQAogICByZXR1cm4gZm9u
dDsKIH0KIAotR2Z4Rm9udDo6R2Z4Rm9udChjaGFyICp0YWdBLCBSZWYgaWRBLCBHU3RyaW5nICpu
YW1lQSkgeworR2Z4Rm9udDo6R2Z4Rm9udChjb25zdCBjaGFyICp0YWdBLCBSZWYgaWRBLCBHU3Ry
aW5nICpuYW1lQSkgewogICBvayA9IGdGYWxzZTsKICAgdGFnID0gbmV3IEdTdHJpbmcodGFnQSk7
CiAgIGlkID0gaWRBOwpAQCAtMzMxLDggKzMzMSw4IEBACiB9CiAKIHZvaWQgR2Z4Rm9udDo6Zmlu
ZEV4dEZvbnRGaWxlKCkgewotICBzdGF0aWMgY2hhciAqdHlwZTFFeHRzW10gPSB7ICIucGZhIiwg
Ii5wZmIiLCAiLnBzIiwgIiIsIE5VTEwgfTsKLSAgc3RhdGljIGNoYXIgKnR0RXh0c1tdID0geyAi
LnR0ZiIsIE5VTEwgfTsKKyAgc3RhdGljIGNvbnN0IGNoYXIgKnR5cGUxRXh0c1tdID0geyAiLnBm
YSIsICIucGZiIiwgIi5wcyIsICIiLCBOVUxMIH07CisgIHN0YXRpYyBjb25zdCBjaGFyICp0dEV4
dHNbXSA9IHsgIi50dGYiLCBOVUxMIH07CiAKICAgaWYgKG5hbWUpIHsKICAgICBpZiAodHlwZSA9
PSBmb250VHlwZTEpIHsKQEAgLTM0Myw3ICszNDMsNyBAQAogICB9CiB9CiAKLWNoYXIgKkdmeEZv
bnQ6OnJlYWRFeHRGb250RmlsZShpbnQgKmxlbikgeworY29uc3QgY2hhciAqR2Z4Rm9udDo6cmVh
ZEV4dEZvbnRGaWxlKGludCAqbGVuKSB7CiAgIEZJTEUgKmY7CiAgIGNoYXIgKmJ1ZjsKIApAQCAt
MzYzLDcgKzM2Myw3IEBACiAgIHJldHVybiBidWY7CiB9CiAKLWNoYXIgKkdmeEZvbnQ6OnJlYWRF
bWJGb250RmlsZShYUmVmICp4cmVmLCBpbnQgKmxlbikgeworY29uc3QgY2hhciAqR2Z4Rm9udDo6
cmVhZEVtYkZvbnRGaWxlKFhSZWYgKnhyZWYsIGludCAqbGVuKSB7CiAgIGNoYXIgKmJ1ZjsKICAg
T2JqZWN0IG9iajEsIG9iajI7CiAgIFN0cmVhbSAqc3RyOwpAQCAtNDA0LDIwICs0MDQsMjAgQEAK
IC8vIEdmeDhCaXRGb250CiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1HZng4Qml0Rm9udDo6R2Z4OEJp
dEZvbnQoWFJlZiAqeHJlZiwgY2hhciAqdGFnQSwgUmVmIGlkQSwgR1N0cmluZyAqbmFtZUEsCitH
Zng4Qml0Rm9udDo6R2Z4OEJpdEZvbnQoWFJlZiAqeHJlZiwgY29uc3QgY2hhciAqdGFnQSwgUmVm
IGlkQSwgR1N0cmluZyAqbmFtZUEsCiAJCQkgR2Z4Rm9udFR5cGUgdHlwZUEsIERpY3QgKmZvbnRE
aWN0KToKICAgR2Z4Rm9udCh0YWdBLCBpZEEsIG5hbWVBKQogewogICBHU3RyaW5nICpuYW1lMjsK
ICAgQnVpbHRpbkZvbnQgKmJ1aWx0aW5Gb250OwotICBjaGFyICoqYmFzZUVuYzsKKyAgY29uc3Qg
Y2hhciAqKmJhc2VFbmM7CiAgIEdCb29sIGJhc2VFbmNGcm9tRm9udEZpbGU7Ci0gIGNoYXIgKmJ1
ZjsKKyAgY29uc3QgY2hhciAqYnVmOwogICBpbnQgbGVuOwogICBGb0ZpVHlwZTEgKmZmVDE7CiAg
IEZvRmlUeXBlMUMgKmZmVDFDOwogICBpbnQgY29kZSwgY29kZTI7Ci0gIGNoYXIgKmNoYXJOYW1l
OworICBjb25zdCBjaGFyICpjaGFyTmFtZTsKICAgR0Jvb2wgbWlzc2luZywgaGV4OwogICBVbmlj
b2RlIHRvVW5pY29kZVsyNTZdOwogICBDaGFyQ29kZVRvVW5pY29kZSAqdXR1LCAqY3R1MjsKQEAg
LTYyNyw3ICs2MjcsNyBAQAogICAgIH0KICAgfQogICBpZiAoYnVmKSB7Ci0gICAgZ2ZyZWUoYnVm
KTsKKyAgICBnZnJlZShjb25zdF9jYXN0PGNoYXIqPihidWYpKTsKICAgfQogCiAgIC8vIGdldCBk
ZWZhdWx0IGJhc2UgZW5jb2RpbmcKQEAgLTY3Nyw3ICs2NzcsNyBAQAogCX0gZWxzZSBpZiAob2Jq
My5pc05hbWUoKSkgewogCSAgaWYgKGNvZGUgPj0gMCAmJiBjb2RlIDwgMjU2KSB7CiAJICAgIGlm
IChlbmNGcmVlW2NvZGVdKSB7Ci0JICAgICAgZ2ZyZWUoZW5jW2NvZGVdKTsKKwkgICAgICBnZnJl
ZShjb25zdF9jYXN0PGNoYXIqPihlbmNbY29kZV0pKTsKIAkgICAgfQogCSAgICBlbmNbY29kZV0g
PSBjb3B5U3RyaW5nKG9iajMuZ2V0TmFtZSgpKTsKIAkgICAgZW5jRnJlZVtjb2RlXSA9IGdUcnVl
OwpAQCAtODk1LDcgKzg5NSw3IEBACiAKICAgZm9yIChpID0gMDsgaSA8IDI1NjsgKytpKSB7CiAg
ICAgaWYgKGVuY0ZyZWVbaV0gJiYgZW5jW2ldKSB7Ci0gICAgICBnZnJlZShlbmNbaV0pOworICAg
ICAgZ2ZyZWUoY29uc3RfY2FzdDxjaGFyKj4oZW5jW2ldKSk7CiAgICAgfQogICB9CiAgIGN0dS0+
ZGVjUmVmQ250KCk7CkBAIC05MDcsNyArOTA3LDcgQEAKICAgfQogfQogCi1pbnQgR2Z4OEJpdEZv
bnQ6OmdldE5leHRDaGFyKGNoYXIgKnMsIGludCBsZW4sIENoYXJDb2RlICpjb2RlLAoraW50IEdm
eDhCaXRGb250OjpnZXROZXh0Q2hhcihjb25zdCBjaGFyICpzLCBpbnQgbGVuLCBDaGFyQ29kZSAq
Y29kZSwKIAkJCSAgICAgVW5pY29kZSAqdSwgaW50IHVTaXplLCBpbnQgKnVMZW4sCiAJCQkgICAg
IGRvdWJsZSAqZHgsIGRvdWJsZSAqZHksIGRvdWJsZSAqb3gsIGRvdWJsZSAqb3kpIHsKICAgQ2hh
ckNvZGUgYzsKQEAgLTkyOSw3ICs5MjksNyBAQAogICBpbnQgY21hcFBsYXRmb3JtLCBjbWFwRW5j
b2Rpbmc7CiAgIGludCB1bmljb2RlQ21hcCwgbWFjUm9tYW5DbWFwLCBtc1N5bWJvbENtYXAsIGNt
YXA7CiAgIEdCb29sIHVzZU1hY1JvbWFuLCB1c2VVbmljb2RlOwotICBjaGFyICpjaGFyTmFtZTsK
KyAgY29uc3QgY2hhciAqY2hhck5hbWU7CiAgIFVuaWNvZGUgdTsKICAgaW50IGNvZGUsIGksIG47
CiAKQEAgLTEwNzQsNyArMTA3NCw3IEBACiAgICAgICAgICAoKEdmeEZvbnRDSURXaWR0aEV4Y2Vw
ViAqKXcyKS0+Zmlyc3Q7CiB9CiAKLUdmeENJREZvbnQ6OkdmeENJREZvbnQoWFJlZiAqeHJlZiwg
Y2hhciAqdGFnQSwgUmVmIGlkQSwgR1N0cmluZyAqbmFtZUEsCitHZnhDSURGb250OjpHZnhDSURG
b250KFhSZWYgKnhyZWYsIGNvbnN0IGNoYXIgKnRhZ0EsIFJlZiBpZEEsIEdTdHJpbmcgKm5hbWVB
LAogCQkgICAgICAgRGljdCAqZm9udERpY3QpOgogICBHZnhGb250KHRhZ0EsIGlkQSwgbmFtZUEp
CiB7CkBAIC0xNDExLDcgKzE0MTEsNyBAQAogICB9CiB9CiAKLWludCBHZnhDSURGb250OjpnZXRO
ZXh0Q2hhcihjaGFyICpzLCBpbnQgbGVuLCBDaGFyQ29kZSAqY29kZSwKK2ludCBHZnhDSURGb250
OjpnZXROZXh0Q2hhcihjb25zdCBjaGFyICpzLCBpbnQgbGVuLCBDaGFyQ29kZSAqY29kZSwKIAkJ
CSAgICBVbmljb2RlICp1LCBpbnQgdVNpemUsIGludCAqdUxlbiwKIAkJCSAgICBkb3VibGUgKmR4
LCBkb3VibGUgKmR5LCBkb3VibGUgKm94LCBkb3VibGUgKm95KSB7CiAgIENJRCBjaWQ7CkBAIC0x
NTU2LDcgKzE1NTYsNyBAQAogICBnZnJlZShmb250cyk7CiB9CiAKLUdmeEZvbnQgKkdmeEZvbnRE
aWN0Ojpsb29rdXAoY2hhciAqdGFnKSB7CitHZnhGb250ICpHZnhGb250RGljdDo6bG9va3VwKGNv
bnN0IGNoYXIgKnRhZykgewogICBpbnQgaTsKIAogICBmb3IgKGkgPSAwOyBpIDwgbnVtRm9udHM7
ICsraSkgewpkaWZmIC11ciB0ZXhsaXZlLTIwMDgwODE2LXNvdXJjZS9saWJzL3hwZGYub3JpZy94
cGRmL0dmeEZvbnQuaCB0ZXhsaXZlLTIwMDgwODE2LXNvdXJjZS9saWJzL3hwZGYveHBkZi9HZnhG
b250LmgKLS0tIHRleGxpdmUtMjAwODA4MTYtc291cmNlL2xpYnMveHBkZi5vcmlnL3hwZGYvR2Z4
Rm9udC5oCTIwMDctMDctMTIgMDE6MTM6NTkuMDAwMDAwMDAwICswNDAwCisrKyB0ZXhsaXZlLTIw
MDgwODE2LXNvdXJjZS9saWJzL3hwZGYveHBkZi9HZnhGb250LmgJMjAwOC0xMS0yMSAxNzozODoz
Mi4wMDAwMDAwMDAgKzAzMDAKQEAgLTg5LDkgKzg5LDkgQEAKIHB1YmxpYzoKIAogICAvLyBCdWls
ZCBhIEdmeEZvbnQgb2JqZWN0LgotICBzdGF0aWMgR2Z4Rm9udCAqbWFrZUZvbnQoWFJlZiAqeHJl
ZiwgY2hhciAqdGFnQSwgUmVmIGlkQSwgRGljdCAqZm9udERpY3QpOworICBzdGF0aWMgR2Z4Rm9u
dCAqbWFrZUZvbnQoWFJlZiAqeHJlZiwgY29uc3QgY2hhciAqdGFnQSwgUmVmIGlkQSwgRGljdCAq
Zm9udERpY3QpOwogCi0gIEdmeEZvbnQoY2hhciAqdGFnQSwgUmVmIGlkQSwgR1N0cmluZyAqbmFt
ZUEpOworICBHZnhGb250KGNvbnN0IGNoYXIgKnRhZ0EsIFJlZiBpZEEsIEdTdHJpbmcgKm5hbWVB
KTsKIAogICB2aXJ0dWFsIH5HZnhGb250KCk7CiAKQEAgLTEwNCw3ICsxMDQsNyBAQAogICBSZWYg
KmdldElEKCkgeyByZXR1cm4gJmlkOyB9CiAKICAgLy8gRG9lcyB0aGlzIGZvbnQgbWF0Y2ggdGhl
IHRhZz8KLSAgR0Jvb2wgbWF0Y2hlcyhjaGFyICp0YWdBKSB7IHJldHVybiAhdGFnLT5jbXAodGFn
QSk7IH0KKyAgR0Jvb2wgbWF0Y2hlcyhjb25zdCBjaGFyICp0YWdBKSB7IHJldHVybiAhdGFnLT5j
bXAodGFnQSk7IH0KIAogICAvLyBHZXQgYmFzZSBmb250IG5hbWUuCiAgIEdTdHJpbmcgKmdldE5h
bWUoKSB7IHJldHVybiBuYW1lOyB9CkBAIC0xNTIsOCArMTUyLDggQEAKICAgdmlydHVhbCBpbnQg
Z2V0V01vZGUoKSB7IHJldHVybiAwOyB9CiAKICAgLy8gUmVhZCBhbiBleHRlcm5hbCBvciBlbWJl
ZGRlZCBmb250IGZpbGUgaW50byBhIGJ1ZmZlci4KLSAgY2hhciAqcmVhZEV4dEZvbnRGaWxlKGlu
dCAqbGVuKTsKLSAgY2hhciAqcmVhZEVtYkZvbnRGaWxlKFhSZWYgKnhyZWYsIGludCAqbGVuKTsK
KyAgY29uc3QgY2hhciAqcmVhZEV4dEZvbnRGaWxlKGludCAqbGVuKTsKKyAgY29uc3QgY2hhciAq
cmVhZEVtYkZvbnRGaWxlKFhSZWYgKnhyZWYsIGludCAqbGVuKTsKIAogICAvLyBHZXQgdGhlIG5l
eHQgY2hhciBmcm9tIGEgc3RyaW5nIDxzPiBvZiA8bGVuPiBieXRlcywgcmV0dXJuaW5nIHRoZQog
ICAvLyBjaGFyIDxjb2RlPiwgaXRzIFVuaWNvZGUgbWFwcGluZyA8dT4sIGl0cyBkaXNwbGFjZW1l
bnQgdmVjdG9yCkBAIC0xNjEsNyArMTYxLDcgQEAKICAgLy8gaXMgdGhlIG51bWJlciBvZiBlbnRy
aWVzIGF2YWlsYWJsZSBpbiA8dT4sIGFuZCA8dUxlbj4gaXMgc2V0IHRvCiAgIC8vIHRoZSBudW1i
ZXIgYWN0dWFsbHkgdXNlZC4gIFJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyB1c2VkIGJ5CiAg
IC8vIHRoZSBjaGFyIGNvZGUuCi0gIHZpcnR1YWwgaW50IGdldE5leHRDaGFyKGNoYXIgKnMsIGlu
dCBsZW4sIENoYXJDb2RlICpjb2RlLAorICB2aXJ0dWFsIGludCBnZXROZXh0Q2hhcihjb25zdCBj
aGFyICpzLCBpbnQgbGVuLCBDaGFyQ29kZSAqY29kZSwKIAkJCSAgVW5pY29kZSAqdSwgaW50IHVT
aXplLCBpbnQgKnVMZW4sCiAJCQkgIGRvdWJsZSAqZHgsIGRvdWJsZSAqZHksIGRvdWJsZSAqb3gs
IGRvdWJsZSAqb3kpID0gMDsKIApAQCAtMTk2LDIzICsxOTYsMjMgQEAKIGNsYXNzIEdmeDhCaXRG
b250OiBwdWJsaWMgR2Z4Rm9udCB7CiBwdWJsaWM6CiAKLSAgR2Z4OEJpdEZvbnQoWFJlZiAqeHJl
ZiwgY2hhciAqdGFnQSwgUmVmIGlkQSwgR1N0cmluZyAqbmFtZUEsCisgIEdmeDhCaXRGb250KFhS
ZWYgKnhyZWYsIGNvbnN0IGNoYXIgKnRhZ0EsIFJlZiBpZEEsIEdTdHJpbmcgKm5hbWVBLAogCSAg
ICAgIEdmeEZvbnRUeXBlIHR5cGVBLCBEaWN0ICpmb250RGljdCk7CiAKICAgdmlydHVhbCB+R2Z4
OEJpdEZvbnQoKTsKIAotICB2aXJ0dWFsIGludCBnZXROZXh0Q2hhcihjaGFyICpzLCBpbnQgbGVu
LCBDaGFyQ29kZSAqY29kZSwKKyAgdmlydHVhbCBpbnQgZ2V0TmV4dENoYXIoY29uc3QgY2hhciAq
cywgaW50IGxlbiwgQ2hhckNvZGUgKmNvZGUsCiAJCQkgIFVuaWNvZGUgKnUsIGludCB1U2l6ZSwg
aW50ICp1TGVuLAogCQkJICBkb3VibGUgKmR4LCBkb3VibGUgKmR5LCBkb3VibGUgKm94LCBkb3Vi
bGUgKm95KTsKIAogICAvLyBSZXR1cm4gdGhlIGVuY29kaW5nLgotICBjaGFyICoqZ2V0RW5jb2Rp
bmcoKSB7IHJldHVybiBlbmM7IH0KKyAgY29uc3QgY2hhciAqKmdldEVuY29kaW5nKCkgeyByZXR1
cm4gZW5jOyB9CiAKICAgLy8gUmV0dXJuIHRoZSBVbmljb2RlIG1hcC4KICAgQ2hhckNvZGVUb1Vu
aWNvZGUgKmdldFRvVW5pY29kZSgpOwogCiAgIC8vIFJldHVybiB0aGUgY2hhcmFjdGVyIG5hbWUg
YXNzb2NpYXRlZCB3aXRoIDxjb2RlPi4KLSAgY2hhciAqZ2V0Q2hhck5hbWUoaW50IGNvZGUpIHsg
cmV0dXJuIGVuY1tjb2RlXTsgfQorICBjb25zdCBjaGFyICpnZXRDaGFyTmFtZShpbnQgY29kZSkg
eyByZXR1cm4gZW5jW2NvZGVdOyB9CiAKICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBQREYgZm9u
dCBzcGVjaWZpZWQgYW4gZW5jb2RpbmcuCiAgIEdCb29sIGdldEhhc0VuY29kaW5nKCkgeyByZXR1
cm4gaGFzRW5jb2Rpbmc7IH0KQEAgLTIzOCw3ICsyMzgsNyBAQAogCiBwcml2YXRlOgogCi0gIGNo
YXIgKmVuY1syNTZdOwkJLy8gY2hhciBjb2RlIC0tPiBjaGFyIG5hbWUKKyAgY29uc3QgY2hhciAq
ZW5jWzI1Nl07CQkvLyBjaGFyIGNvZGUgLS0+IGNoYXIgbmFtZQogICBjaGFyIGVuY0ZyZWVbMjU2
XTsJCS8vIGJvb2xlYW4gZm9yIGVhY2ggY2hhciBuYW1lOiBpZiBzZXQsCiAJCQkJLy8gICB0aGUg
c3RyaW5nIGlzIG1hbGxvYydlZAogICBDaGFyQ29kZVRvVW5pY29kZSAqY3R1OwkvLyBjaGFyIGNv
ZGUgLS0+IFVuaWNvZGUKQEAgLTI1NiwxNCArMjU2LDE0IEBACiBjbGFzcyBHZnhDSURGb250OiBw
dWJsaWMgR2Z4Rm9udCB7CiBwdWJsaWM6CiAKLSAgR2Z4Q0lERm9udChYUmVmICp4cmVmLCBjaGFy
ICp0YWdBLCBSZWYgaWRBLCBHU3RyaW5nICpuYW1lQSwKKyAgR2Z4Q0lERm9udChYUmVmICp4cmVm
LCBjb25zdCBjaGFyICp0YWdBLCBSZWYgaWRBLCBHU3RyaW5nICpuYW1lQSwKIAkgICAgIERpY3Qg
KmZvbnREaWN0KTsKIAogICB2aXJ0dWFsIH5HZnhDSURGb250KCk7CiAKICAgdmlydHVhbCBHQm9v
bCBpc0NJREZvbnQoKSB7IHJldHVybiBnVHJ1ZTsgfQogCi0gIHZpcnR1YWwgaW50IGdldE5leHRD
aGFyKGNoYXIgKnMsIGludCBsZW4sIENoYXJDb2RlICpjb2RlLAorICB2aXJ0dWFsIGludCBnZXRO
ZXh0Q2hhcihjb25zdCBjaGFyICpzLCBpbnQgbGVuLCBDaGFyQ29kZSAqY29kZSwKIAkJCSAgVW5p
Y29kZSAqdSwgaW50IHVTaXplLCBpbnQgKnVMZW4sCiAJCQkgIGRvdWJsZSAqZHgsIGRvdWJsZSAq
ZHksIGRvdWJsZSAqb3gsIGRvdWJsZSAqb3kpOwogCkBAIC0zMDUsNyArMzA1LDcgQEAKICAgfkdm
eEZvbnREaWN0KCk7CiAKICAgLy8gR2V0IHRoZSBzcGVjaWZpZWQgZm9udC4KLSAgR2Z4Rm9udCAq
bG9va3VwKGNoYXIgKnRhZyk7CisgIEdmeEZvbnQgKmxvb2t1cChjb25zdCBjaGFyICp0YWcpOwog
CiAgIC8vIEl0ZXJhdGl2ZSBhY2Nlc3MuCiAgIGludCBnZXROdW1Gb250cygpIHsgcmV0dXJuIG51
bUZvbnRzOyB9CmRpZmYgLXVyIHRleGxpdmUtMjAwODA4MTYtc291cmNlL2xpYnMveHBkZi5vcmln
L3hwZGYvR2Z4U3RhdGUuY2MgdGV4bGl2ZS0yMDA4MDgxNi1zb3VyY2UvbGlicy94cGRmL3hwZGYv
R2Z4U3RhdGUuY2MKLS0tIHRleGxpdmUtMjAwODA4MTYtc291cmNlL2xpYnMveHBkZi5vcmlnL3hw
ZGYvR2Z4U3RhdGUuY2MJMjAwNy0wNy0xMiAwMToxMzo1OS4wMDAwMDAwMDAgKzA0MDAKKysrIHRl
eGxpdmUtMjAwODA4MTYtc291cmNlL2xpYnMveHBkZi94cGRmL0dmeFN0YXRlLmNjCTIwMDgtMTEt
MjEgMTc6MTI6NTQuMDAwMDAwMDAwICswMzAwCkBAIC0zNSw3ICszNSw3IEBACiAvLy0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQogCiBzdHJ1Y3QgR2Z4QmxlbmRNb2RlSW5mbyB7Ci0gIGNoYXIgKm5hbWU7CisgIGNv
bnN0IGNoYXIgKm5hbWU7CiAgIEdmeEJsZW5kTW9kZSBtb2RlOwogfTsKIApAQCAtNjYsNyArNjYs
NyBAQAogCiAvLyBOQjogVGhpcyBtdXN0IG1hdGNoIHRoZSBHZnhDb2xvclNwYWNlTW9kZSBlbnVt
IGRlZmluZWQgaW4KIC8vIEdmeFN0YXRlLmgKLXN0YXRpYyBjaGFyICpnZnhDb2xvclNwYWNlTW9k
ZU5hbWVzW10gPSB7CitzdGF0aWMgY29uc3QgY2hhciAqZ2Z4Q29sb3JTcGFjZU1vZGVOYW1lc1td
ID0gewogICAiRGV2aWNlR3JheSIsCiAgICJDYWxHcmF5IiwKICAgIkRldmljZVJHQiIsCkBAIC0x
NTcsNyArMTU3LDcgQEAKICAgcmV0dXJuIG5HZnhDb2xvclNwYWNlTW9kZXM7CiB9CiAKLWNoYXIg
KkdmeENvbG9yU3BhY2U6OmdldENvbG9yU3BhY2VNb2RlTmFtZShpbnQgaWR4KSB7Citjb25zdCBj
aGFyICpHZnhDb2xvclNwYWNlOjpnZXRDb2xvclNwYWNlTW9kZU5hbWUoaW50IGlkeCkgewogICBy
ZXR1cm4gZ2Z4Q29sb3JTcGFjZU1vZGVOYW1lc1tpZHhdOwogfQogCkBAIC05NDksNyArOTQ5LDcg
QEAKICAgaW50IGluZGV4SGlnaEE7CiAgIE9iamVjdCBvYmoxOwogICBpbnQgeDsKLSAgY2hhciAq
czsKKyAgY29uc3QgY2hhciAqczsKICAgaW50IG4sIGksIGo7CiAKICAgaWYgKGFyci0+Z2V0TGVu
Z3RoKCkgIT0gNCkgewpkaWZmIC11ciB0ZXhsaXZlLTIwMDgwODE2LXNvdXJjZS9saWJzL3hwZGYu
b3JpZy94cGRmL0dmeFN0YXRlLmggdGV4bGl2ZS0yMDA4MDgxNi1zb3VyY2UvbGlicy94cGRmL3hw
ZGYvR2Z4U3RhdGUuaAotLS0gdGV4bGl2ZS0yMDA4MDgxNi1zb3VyY2UvbGlicy94cGRmLm9yaWcv
eHBkZi9HZnhTdGF0ZS5oCTIwMDctMDctMTIgMDE6MTM6NTkuMDAwMDAwMDAwICswNDAwCisrKyB0
ZXhsaXZlLTIwMDgwODE2LXNvdXJjZS9saWJzL3hwZGYveHBkZi9HZnhTdGF0ZS5oCTIwMDgtMTEt
MjEgMTc6MDg6NDguMDAwMDAwMDAwICswMzAwCkBAIC0xNjQsNyArMTY0LDcgQEAKICAgc3RhdGlj
IGludCBnZXROdW1Db2xvclNwYWNlTW9kZXMoKTsKIAogICAvLyBSZXR1cm4gdGhlIG5hbWUgb2Yg
dGhlIDxpZHg+dGggY29sb3Igc3BhY2UgbW9kZS4KLSAgc3RhdGljIGNoYXIgKmdldENvbG9yU3Bh
Y2VNb2RlTmFtZShpbnQgaWR4KTsKKyAgc3RhdGljIGNvbnN0IGNoYXIgKmdldENvbG9yU3BhY2VN
b2RlTmFtZShpbnQgaWR4KTsKIAogcHJpdmF0ZToKIH07CmRpZmYgLXVyIHRleGxpdmUtMjAwODA4
MTYtc291cmNlL2xpYnMveHBkZi5vcmlnL3hwZGYvR2xvYmFsUGFyYW1zLmNjIHRleGxpdmUtMjAw
ODA4MTYtc291cmNlL2xpYnMveHBkZi94cGRmL0dsb2JhbFBhcmFtcy5jYwotLS0gdGV4bGl2ZS0y
MDA4MDgxNi1zb3VyY2UvbGlicy94cGRmLm9yaWcveHBkZi9HbG9iYWxQYXJhbXMuY2MJMjAwOC0w
NS0wOCAxNzo0MDo0MS4wMDAwMDAwMDAgKzA0MDAKKysrIHRleGxpdmUtMjAwODA4MTYtc291cmNl
L2xpYnMveHBkZi94cGRmL0dsb2JhbFBhcmFtcy5jYwkyMDA4LTExLTIxIDE3OjI5OjE5LjAwMDAw
MDAwMCArMDMwMApAQCAtMTE3LDkgKzExNyw5IEBACiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBzdGF0
aWMgc3RydWN0IHsKLSAgY2hhciAqbmFtZTsKLSAgY2hhciAqdDFGaWxlTmFtZTsKLSAgY2hhciAq
dHRGaWxlTmFtZTsKKyAgY29uc3QgY2hhciAqbmFtZTsKKyAgY29uc3QgY2hhciAqdDFGaWxlTmFt
ZTsKKyAgY29uc3QgY2hhciAqdHRGaWxlTmFtZTsKIH0gZGlzcGxheUZvbnRUYWJbXSA9IHsKICAg
eyJDb3VyaWVyIiwgICAgICAgICAgICAgICAibjAyMjAwM2wucGZiIiwgImNvdXIudHRmIn0sCiAg
IHsiQ291cmllci1Cb2xkIiwgICAgICAgICAgIm4wMjIwMDRsLnBmYiIsICJjb3VyYmQudHRmIn0s
CkBAIC0xMzksMTMgKzEzOSwxMyBAQAogfTsKIAogI2lmZGVmIFdJTjMyCi1zdGF0aWMgY2hhciAq
ZGlzcGxheUZvbnREaXJzW10gPSB7CitzdGF0aWMgY29uc3QgY2hhciAqZGlzcGxheUZvbnREaXJz
W10gPSB7CiAgICJjOi93aW5kb3dzL2ZvbnRzIiwKICAgImM6L3dpbm50L2ZvbnRzIiwKICAgTlVM
TAogfTsKICNlbHNlCi1zdGF0aWMgY2hhciAqZGlzcGxheUZvbnREaXJzW10gPSB7CitzdGF0aWMg
Y29uc3QgY2hhciAqZGlzcGxheUZvbnREaXJzW10gPSB7CiAgICIvdXNyL3NoYXJlL2dob3N0c2Ny
aXB0L2ZvbnRzIiwKICAgIi91c3IvbG9jYWwvc2hhcmUvZ2hvc3RzY3JpcHQvZm9udHMiLAogICAi
L3Vzci9zaGFyZS9mb250cy9kZWZhdWx0L1R5cGUxIiwKQEAgLTIwNSw3ICsyMDUsNyBAQAogICBH
Qm9vbCBib2xkLCBpdGFsaWM7CiAKICAgc3RhdGljIFdpbkZvbnRJbmZvICptYWtlKEdTdHJpbmcg
Km5hbWVBLCBHQm9vbCBib2xkQSwgR0Jvb2wgaXRhbGljQSwKLQkJCSAgIEhLRVkgcmVnS2V5LCBj
aGFyICp3aW5Gb250RGlyKTsKKwkJCSAgIEhLRVkgcmVnS2V5LCBjb25zdCBjaGFyICp3aW5Gb250
RGlyKTsKICAgV2luRm9udEluZm8oR1N0cmluZyAqbmFtZUEsIEdCb29sIGJvbGRBLCBHQm9vbCBp
dGFsaWNBLAogCSAgICAgIEdTdHJpbmcgKmZpbGVOYW1lQSk7CiAgIHZpcnR1YWwgfldpbkZvbnRJ
bmZvKCk7CkBAIC0yMTMsNyArMjEzLDcgQEAKIH07CiAKIFdpbkZvbnRJbmZvICpXaW5Gb250SW5m
bzo6bWFrZShHU3RyaW5nICpuYW1lQSwgR0Jvb2wgYm9sZEEsIEdCb29sIGl0YWxpY0EsCi0JCQkg
ICAgICAgSEtFWSByZWdLZXksIGNoYXIgKndpbkZvbnREaXIpIHsKKwkJCSAgICAgICBIS0VZIHJl
Z0tleSwgY29uc3QgY2hhciAqd2luRm9udERpcikgewogICBHU3RyaW5nICpyZWdOYW1lOwogICBH
U3RyaW5nICpmaWxlTmFtZUE7CiAgIGNoYXIgYnVmW01BWF9QQVRIXTsKQEAgLTI4MCw3ICsyODAs
NyBAQAogY2xhc3MgV2luRm9udExpc3QgewogcHVibGljOgogCi0gIFdpbkZvbnRMaXN0KGNoYXIg
KndpbkZvbnREaXJBKTsKKyAgV2luRm9udExpc3QoY29uc3QgY2hhciAqd2luRm9udERpckEpOwog
ICB+V2luRm9udExpc3QoKTsKICAgV2luRm9udEluZm8gKmZpbmQoR1N0cmluZyAqZm9udCk7CiAK
QEAgLTI5NywxMiArMjk3LDEyIEBACiAgIEdMaXN0ICpmb250czsJCQkvLyBbV2luRm9udEluZm9d
CiAgIEhEQyBkYzsJCQkvLyAob25seSB1c2VkIGR1cmluZyBlbnVtZXJhdGlvbikKICAgSEtFWSBy
ZWdLZXk7CQkJLy8gKG9ubHkgdXNlZCBkdXJpbmcgZW51bWVyYXRpb24pCi0gIGNoYXIgKndpbkZv
bnREaXI7CQkvLyAob25seSB1c2VkIGR1cmluZyBlbnVtZXJhdGlvbikKKyAgY29uc3QgY2hhciAq
d2luRm9udERpcjsJLy8gKG9ubHkgdXNlZCBkdXJpbmcgZW51bWVyYXRpb24pCiB9OwogCi1XaW5G
b250TGlzdDo6V2luRm9udExpc3QoY2hhciAqd2luRm9udERpckEpIHsKK1dpbkZvbnRMaXN0OjpX
aW5Gb250TGlzdChjb25zdCBjaGFyICp3aW5Gb250RGlyQSkgewogICBPU1ZFUlNJT05JTkZPIHZl
cnNpb247Ci0gIGNoYXIgKnBhdGg7CisgIGNvbnN0IGNoYXIgKnBhdGg7CiAKICAgZm9udHMgPSBu
ZXcgR0xpc3QoKTsKICAgZGMgPSBHZXREQyhOVUxMKTsKQEAgLTQ2Myw3ICs0NjMsNyBAQAogLy8g
S2V5QmluZGluZwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotS2V5QmluZGluZzo6S2V5QmluZGluZyhp
bnQgY29kZUEsIGludCBtb2RzQSwgaW50IGNvbnRleHRBLCBjaGFyICpjbWQwKSB7CitLZXlCaW5k
aW5nOjpLZXlCaW5kaW5nKGludCBjb2RlQSwgaW50IG1vZHNBLCBpbnQgY29udGV4dEEsIGNvbnN0
IGNoYXIgKmNtZDApIHsKICAgY29kZSA9IGNvZGVBOwogICBtb2RzID0gbW9kc0E7CiAgIGNvbnRl
eHQgPSBjb250ZXh0QTsKQEAgLTQ3Miw3ICs0NzIsNyBAQAogfQogCiBLZXlCaW5kaW5nOjpLZXlC
aW5kaW5nKGludCBjb2RlQSwgaW50IG1vZHNBLCBpbnQgY29udGV4dEEsCi0JCSAgICAgICBjaGFy
ICpjbWQwLCBjaGFyICpjbWQxKSB7CisJCSAgICAgICBjb25zdCBjaGFyICpjbWQwLCBjb25zdCBj
aGFyICpjbWQxKSB7CiAgIGNvZGUgPSBjb2RlQTsKICAgbW9kcyA9IG1vZHNBOwogICBjb250ZXh0
ID0gY29udGV4dEE7CkBAIC01MDEsNyArNTAxLDcgQEAKIGNsYXNzIFBsdWdpbiB7CiBwdWJsaWM6
CiAKLSAgc3RhdGljIFBsdWdpbiAqbG9hZChjaGFyICp0eXBlLCBjaGFyICpuYW1lKTsKKyAgc3Rh
dGljIFBsdWdpbiAqbG9hZChjb25zdCBjaGFyICp0eXBlLCBjb25zdCBjaGFyICpuYW1lKTsKICAg
flBsdWdpbigpOwogCiBwcml2YXRlOgpAQCAtNTE1LDcgKzUxNSw3IEBACiAjZW5kaWYKIH07CiAK
LVBsdWdpbiAqUGx1Z2luOjpsb2FkKGNoYXIgKnR5cGUsIGNoYXIgKm5hbWUpIHsKK1BsdWdpbiAq
UGx1Z2luOjpsb2FkKGNvbnN0IGNoYXIgKnR5cGUsIGNvbnN0IGNoYXIgKm5hbWUpIHsKICAgR1N0
cmluZyAqcGF0aDsKICAgUGx1Z2luICpwbHVnaW47CiAgIFhwZGZQbHVnaW5WZWNUYWJsZSAqdnQ7
CkBAIC02NzcsNyArNjc3LDcgQEAKICAgZGlzcGxheUNJREZvbnRzID0gbmV3IEdIYXNoKCk7CiAg
IGRpc3BsYXlOYW1lZENJREZvbnRzID0gbmV3IEdIYXNoKCk7CiAjaWYgSEFWRV9QQVBFUl9ICi0g
IGNoYXIgKnBhcGVyTmFtZTsKKyAgY29uc3QgY2hhciAqcGFwZXJOYW1lOwogICBjb25zdCBzdHJ1
Y3QgcGFwZXIgKnBhcGVyVHlwZTsKICAgcGFwZXJpbml0KCk7CiAgIGlmICgocGFwZXJOYW1lID0g
c3lzdGVtcGFwZXJuYW1lKCkpKSB7CkBAIC03NzEsNyArNzcxLDcgQEAKIAogfQogCi1HbG9iYWxQ
YXJhbXM6Okdsb2JhbFBhcmFtcyhjaGFyICpjZmdGaWxlTmFtZSkgeworR2xvYmFsUGFyYW1zOjpH
bG9iYWxQYXJhbXMoY29uc3QgY2hhciAqY2ZnRmlsZU5hbWUpIHsKICAgVW5pY29kZU1hcCAqbWFw
OwogICBHU3RyaW5nICpmaWxlTmFtZTsKICAgRklMRSAqZjsKQEAgLTgxMSw3ICs4MTEsNyBAQAog
ICBkaXNwbGF5Q0lERm9udHMgPSBuZXcgR0hhc2goKTsKICAgZGlzcGxheU5hbWVkQ0lERm9udHMg
PSBuZXcgR0hhc2goKTsKICNpZiBIQVZFX1BBUEVSX0gKLSAgY2hhciAqcGFwZXJOYW1lOworICBj
b25zdCBjaGFyICpwYXBlck5hbWU7CiAgIGNvbnN0IHN0cnVjdCBwYXBlciAqcGFwZXJUeXBlOwog
ICBwYXBlcmluaXQoKTsKICAgaWYgKChwYXBlck5hbWUgPSBzeXN0ZW1wYXBlcm5hbWUoKSkpIHsK
QEAgLTEwOTYsNyArMTA5Niw3IEBACiAgIH0KIH0KIAotdm9pZCBHbG9iYWxQYXJhbXM6OnBhcnNl
TGluZShjaGFyICpidWYsIEdTdHJpbmcgKmZpbGVOYW1lLCBpbnQgbGluZSkgewordm9pZCBHbG9i
YWxQYXJhbXM6OnBhcnNlTGluZShjb25zdCBjaGFyICpidWYsIEdTdHJpbmcgKmZpbGVOYW1lLCBp
bnQgbGluZSkgewogICBHTGlzdCAqdG9rZW5zOwogICBHU3RyaW5nICpjbWQsICppbmNGaWxlOwog
ICBjaGFyICpwMSwgKnAyOwpAQCAtMTUzMSw3ICsxNTMxLDcgQEAKICAgcHNGb250cy0+YWRkKHBh
cmFtLT5wZGZGb250TmFtZSwgcGFyYW0pOwogfQogCi12b2lkIEdsb2JhbFBhcmFtczo6cGFyc2VQ
U0ZvbnQxNihjaGFyICpjbWROYW1lLCBHTGlzdCAqZm9udExpc3QsCit2b2lkIEdsb2JhbFBhcmFt
czo6cGFyc2VQU0ZvbnQxNihjb25zdCBjaGFyICpjbWROYW1lLCBHTGlzdCAqZm9udExpc3QsCiAJ
CQkJIEdMaXN0ICp0b2tlbnMsIEdTdHJpbmcgKmZpbGVOYW1lLCBpbnQgbGluZSkgewogICBQU0Zv
bnRQYXJhbSAqcGFyYW07CiAgIGludCB3TW9kZTsKQEAgLTE2OTIsOSArMTY5Miw5IEBACiAKIEdC
b29sIEdsb2JhbFBhcmFtczo6cGFyc2VLZXkoR1N0cmluZyAqbW9kS2V5U3RyLCBHU3RyaW5nICpj
b250ZXh0U3RyLAogCQkJICAgICBpbnQgKmNvZGUsIGludCAqbW9kcywgaW50ICpjb250ZXh0LAot
CQkJICAgICBjaGFyICpjbWROYW1lLAorCQkJICAgICBjb25zdCBjaGFyICpjbWROYW1lLAogCQkJ
ICAgICBHTGlzdCAqdG9rZW5zLCBHU3RyaW5nICpmaWxlTmFtZSwgaW50IGxpbmUpIHsKLSAgY2hh
ciAqcDA7CisgIGNvbnN0IGNoYXIgKnAwOwogCiAgICptb2RzID0geHBkZktleU1vZE5vbmU7CiAg
IHAwID0gbW9kS2V5U3RyLT5nZXRDU3RyaW5nKCk7CkBAIC0xODIxLDcgKzE4MjEsNyBAQAogfQog
I2VuZGlmCiAKLXZvaWQgR2xvYmFsUGFyYW1zOjpwYXJzZUNvbW1hbmQoY2hhciAqY21kTmFtZSwg
R1N0cmluZyAqKnZhbCwKK3ZvaWQgR2xvYmFsUGFyYW1zOjpwYXJzZUNvbW1hbmQoY29uc3QgY2hh
ciAqY21kTmFtZSwgR1N0cmluZyAqKnZhbCwKIAkJCQlHTGlzdCAqdG9rZW5zLCBHU3RyaW5nICpm
aWxlTmFtZSwgaW50IGxpbmUpIHsKICAgaWYgKHRva2Vucy0+Z2V0TGVuZ3RoKCkgIT0gMikgewog
ICAgIGVycm9yKC0xLCAiQmFkICclcycgY29uZmlnIGZpbGUgY29tbWFuZCAoJXM6JWQpIiwKQEAg
LTE4MzQsNyArMTgzNCw3IEBACiAgICp2YWwgPSAoKEdTdHJpbmcgKil0b2tlbnMtPmdldCgxKSkt
PmNvcHkoKTsKIH0KIAotdm9pZCBHbG9iYWxQYXJhbXM6OnBhcnNlWWVzTm8oY2hhciAqY21kTmFt
ZSwgR0Jvb2wgKmZsYWcsCit2b2lkIEdsb2JhbFBhcmFtczo6cGFyc2VZZXNObyhjb25zdCBjaGFy
ICpjbWROYW1lLCBHQm9vbCAqZmxhZywKIAkJCSAgICAgIEdMaXN0ICp0b2tlbnMsIEdTdHJpbmcg
KmZpbGVOYW1lLCBpbnQgbGluZSkgewogICBHU3RyaW5nICp0b2s7CiAKQEAgLTE4NTAsNyArMTg1
MCw3IEBACiAgIH0KIH0KIAotR0Jvb2wgR2xvYmFsUGFyYW1zOjpwYXJzZVllc05vMihjaGFyICp0
b2tlbiwgR0Jvb2wgKmZsYWcpIHsKK0dCb29sIEdsb2JhbFBhcmFtczo6cGFyc2VZZXNObzIoY29u
c3QgY2hhciAqdG9rZW4sIEdCb29sICpmbGFnKSB7CiAgIGlmICghc3RyY21wKHRva2VuLCAieWVz
IikpIHsKICAgICAqZmxhZyA9IGdUcnVlOwogICB9IGVsc2UgaWYgKCFzdHJjbXAodG9rZW4sICJu
byIpKSB7CkBAIC0xODYxLDcgKzE4NjEsNyBAQAogICByZXR1cm4gZ1RydWU7CiB9CiAKLXZvaWQg
R2xvYmFsUGFyYW1zOjpwYXJzZUludGVnZXIoY2hhciAqY21kTmFtZSwgaW50ICp2YWwsCit2b2lk
IEdsb2JhbFBhcmFtczo6cGFyc2VJbnRlZ2VyKGNvbnN0IGNoYXIgKmNtZE5hbWUsIGludCAqdmFs
LAogCQkJCUdMaXN0ICp0b2tlbnMsIEdTdHJpbmcgKmZpbGVOYW1lLCBpbnQgbGluZSkgewogICBH
U3RyaW5nICp0b2s7CiAgIGludCBpOwpAQCAtMTg5Miw3ICsxODkyLDcgQEAKICAgKnZhbCA9IGF0
b2kodG9rLT5nZXRDU3RyaW5nKCkpOwogfQogCi12b2lkIEdsb2JhbFBhcmFtczo6cGFyc2VGbG9h
dChjaGFyICpjbWROYW1lLCBkb3VibGUgKnZhbCwKK3ZvaWQgR2xvYmFsUGFyYW1zOjpwYXJzZUZs
b2F0KGNvbnN0IGNoYXIgKmNtZE5hbWUsIGRvdWJsZSAqdmFsLAogCQkJICAgICAgR0xpc3QgKnRv
a2VucywgR1N0cmluZyAqZmlsZU5hbWUsIGludCBsaW5lKSB7CiAgIEdTdHJpbmcgKnRvazsKICAg
aW50IGk7CkBAIC0xOTkyLDEyICsxOTkyLDEyIEBACiAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXZv
aWQgR2xvYmFsUGFyYW1zOjpzZXRCYXNlRGlyKGNoYXIgKmRpcikgewordm9pZCBHbG9iYWxQYXJh
bXM6OnNldEJhc2VEaXIoY29uc3QgY2hhciAqZGlyKSB7CiAgIGRlbGV0ZSBiYXNlRGlyOwogICBi
YXNlRGlyID0gbmV3IEdTdHJpbmcoZGlyKTsKIH0KIAotdm9pZCBHbG9iYWxQYXJhbXM6OnNldHVw
QmFzZUZvbnRzKGNoYXIgKmRpcikgewordm9pZCBHbG9iYWxQYXJhbXM6OnNldHVwQmFzZUZvbnRz
KGNvbnN0IGNoYXIgKmRpcikgewogICBHU3RyaW5nICpmb250TmFtZTsKICAgR1N0cmluZyAqZmls
ZU5hbWU7CiAjaWZkZWYgV0lOMzIKQEAgLTIxMDksNyArMjEwOSw3IEBACiAvLyBhY2Nlc3NvcnMK
IC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCiAKLUNoYXJDb2RlIEdsb2JhbFBhcmFtczo6Z2V0TWFjUm9tYW5D
aGFyQ29kZShjaGFyICpjaGFyTmFtZSkgeworQ2hhckNvZGUgR2xvYmFsUGFyYW1zOjpnZXRNYWNS
b21hbkNoYXJDb2RlKGNvbnN0IGNoYXIgKmNoYXJOYW1lKSB7CiAgIC8vIG5vIG5lZWQgdG8gbG9j
ayAtIG1hY1JvbWFuUmV2ZXJzZU1hcCBpcyBjb25zdGFudAogICByZXR1cm4gbWFjUm9tYW5SZXZl
cnNlTWFwLT5sb29rdXAoY2hhck5hbWUpOwogfQpAQCAtMjEyMyw3ICsyMTIzLDcgQEAKICAgcmV0
dXJuIHM7CiB9CiAKLVVuaWNvZGUgR2xvYmFsUGFyYW1zOjptYXBOYW1lVG9Vbmljb2RlKGNoYXIg
KmNoYXJOYW1lKSB7CitVbmljb2RlIEdsb2JhbFBhcmFtczo6bWFwTmFtZVRvVW5pY29kZShjb25z
dCBjaGFyICpjaGFyTmFtZSkgewogICAvLyBubyBuZWVkIHRvIGxvY2sgLSBuYW1lVG9Vbmljb2Rl
IGlzIGNvbnN0YW50CiAgIHJldHVybiBuYW1lVG9Vbmljb2RlLT5sb29rdXAoY2hhck5hbWUpOwog
fQpAQCAtMjQ1Niw5ICsyNDU2LDkgQEAKICAgcmV0dXJuIHRpbnk7CiB9CiAKLUdTdHJpbmcgKkds
b2JhbFBhcmFtczo6ZmluZEZvbnRGaWxlKEdTdHJpbmcgKmZvbnROYW1lLCBjaGFyICoqZXh0cykg
eworR1N0cmluZyAqR2xvYmFsUGFyYW1zOjpmaW5kRm9udEZpbGUoR1N0cmluZyAqZm9udE5hbWUs
IGNvbnN0IGNoYXIgKipleHRzKSB7CiAgIEdTdHJpbmcgKmRpciwgKmZpbGVOYW1lOwotICBjaGFy
ICoqZXh0OworICBjb25zdCBjaGFyICoqZXh0OwogICBGSUxFICpmOwogICBpbnQgaTsKIApAQCAt
Mjc0NSw3ICsyNzQ1LDcgQEAKICAgdW5sb2NrR2xvYmFsUGFyYW1zOwogfQogCi12b2lkIEdsb2Jh
bFBhcmFtczo6c2V0UFNGaWxlKGNoYXIgKmZpbGUpIHsKK3ZvaWQgR2xvYmFsUGFyYW1zOjpzZXRQ
U0ZpbGUoY29uc3QgY2hhciAqZmlsZSkgewogICBsb2NrR2xvYmFsUGFyYW1zOwogICBpZiAocHNG
aWxlKSB7CiAgICAgZGVsZXRlIHBzRmlsZTsKQEAgLTI3NTQsNyArMjc1NCw3IEBACiAgIHVubG9j
a0dsb2JhbFBhcmFtczsKIH0KIAotR0Jvb2wgR2xvYmFsUGFyYW1zOjpzZXRQU1BhcGVyU2l6ZShj
aGFyICpzaXplKSB7CitHQm9vbCBHbG9iYWxQYXJhbXM6OnNldFBTUGFwZXJTaXplKGNvbnN0IGNo
YXIgKnNpemUpIHsKICAgbG9ja0dsb2JhbFBhcmFtczsKICAgaWYgKCFzdHJjbXAoc2l6ZSwgIm1h
dGNoIikpIHsKICAgICBwc1BhcGVyV2lkdGggPSBwc1BhcGVySGVpZ2h0ID0gLTE7CkBAIC0yODg0
LDE0ICsyODg0LDE0IEBACiAgIHVubG9ja0dsb2JhbFBhcmFtczsKIH0KIAotdm9pZCBHbG9iYWxQ
YXJhbXM6OnNldFRleHRFbmNvZGluZyhjaGFyICplbmNvZGluZ05hbWUpIHsKK3ZvaWQgR2xvYmFs
UGFyYW1zOjpzZXRUZXh0RW5jb2RpbmcoY29uc3QgY2hhciAqZW5jb2RpbmdOYW1lKSB7CiAgIGxv
Y2tHbG9iYWxQYXJhbXM7CiAgIGRlbGV0ZSB0ZXh0RW5jb2Rpbmc7CiAgIHRleHRFbmNvZGluZyA9
IG5ldyBHU3RyaW5nKGVuY29kaW5nTmFtZSk7CiAgIHVubG9ja0dsb2JhbFBhcmFtczsKIH0KIAot
R0Jvb2wgR2xvYmFsUGFyYW1zOjpzZXRUZXh0RU9MKGNoYXIgKnMpIHsKK0dCb29sIEdsb2JhbFBh
cmFtczo6c2V0VGV4dEVPTChjb25zdCBjaGFyICpzKSB7CiAgIGxvY2tHbG9iYWxQYXJhbXM7CiAg
IGlmICghc3RyY21wKHMsICJ1bml4IikpIHsKICAgICB0ZXh0RU9MID0gZW9sVW5peDsKQEAgLTI5
MTksNyArMjkxOSw3IEBACiAgIHVubG9ja0dsb2JhbFBhcmFtczsKIH0KIAotdm9pZCBHbG9iYWxQ
YXJhbXM6OnNldEluaXRpYWxab29tKGNoYXIgKnMpIHsKK3ZvaWQgR2xvYmFsUGFyYW1zOjpzZXRJ
bml0aWFsWm9vbShjb25zdCBjaGFyICpzKSB7CiAgIGxvY2tHbG9iYWxQYXJhbXM7CiAgIGRlbGV0
ZSBpbml0aWFsWm9vbTsKICAgaW5pdGlhbFpvb20gPSBuZXcgR1N0cmluZyhzKTsKQEAgLTI5MzIs
NyArMjkzMiw3IEBACiAgIHVubG9ja0dsb2JhbFBhcmFtczsKIH0KIAotR0Jvb2wgR2xvYmFsUGFy
YW1zOjpzZXRFbmFibGVUMWxpYihjaGFyICpzKSB7CitHQm9vbCBHbG9iYWxQYXJhbXM6OnNldEVu
YWJsZVQxbGliKGNvbnN0IGNoYXIgKnMpIHsKICAgR0Jvb2wgb2s7CiAKICAgbG9ja0dsb2JhbFBh
cmFtczsKQEAgLTI5NDEsNyArMjk0MSw3IEBACiAgIHJldHVybiBvazsKIH0KIAotR0Jvb2wgR2xv
YmFsUGFyYW1zOjpzZXRFbmFibGVGcmVlVHlwZShjaGFyICpzKSB7CitHQm9vbCBHbG9iYWxQYXJh
bXM6OnNldEVuYWJsZUZyZWVUeXBlKGNvbnN0IGNoYXIgKnMpIHsKICAgR0Jvb2wgb2s7CiAKICAg
bG9ja0dsb2JhbFBhcmFtczsKQEAgLTI5NTEsNyArMjk1MSw3IEBACiB9CiAKIAotR0Jvb2wgR2xv
YmFsUGFyYW1zOjpzZXRBbnRpYWxpYXMoY2hhciAqcykgeworR0Jvb2wgR2xvYmFsUGFyYW1zOjpz
ZXRBbnRpYWxpYXMoY29uc3QgY2hhciAqcykgewogICBHQm9vbCBvazsKIAogICBsb2NrR2xvYmFs
UGFyYW1zOwpAQCAtMjk2MCw3ICsyOTYwLDcgQEAKICAgcmV0dXJuIG9rOwogfQogCi1HQm9vbCBH
bG9iYWxQYXJhbXM6OnNldFZlY3RvckFudGlhbGlhcyhjaGFyICpzKSB7CitHQm9vbCBHbG9iYWxQ
YXJhbXM6OnNldFZlY3RvckFudGlhbGlhcyhjb25zdCBjaGFyICpzKSB7CiAgIEdCb29sIG9rOwog
CiAgIGxvY2tHbG9iYWxQYXJhbXM7CkBAIC0zMDM3LDcgKzMwMzcsNyBAQAogI2VuZGlmCiB9CiAK
LVhwZGZTZWN1cml0eUhhbmRsZXIgKkdsb2JhbFBhcmFtczo6Z2V0U2VjdXJpdHlIYW5kbGVyKGNo
YXIgKm5hbWUpIHsKK1hwZGZTZWN1cml0eUhhbmRsZXIgKkdsb2JhbFBhcmFtczo6Z2V0U2VjdXJp
dHlIYW5kbGVyKGNvbnN0IGNoYXIgKm5hbWUpIHsKICNpZmRlZiBFTkFCTEVfUExVR0lOUwogICBY
cGRmU2VjdXJpdHlIYW5kbGVyICpoZGxyOwogICBpbnQgaTsKQEAgLTMwNzUsNyArMzA3NSw3IEBA
CiAvLyBwbHVnaW5zCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1HQm9vbCBHbG9iYWxQYXJhbXM6Omxv
YWRQbHVnaW4oY2hhciAqdHlwZSwgY2hhciAqbmFtZSkgeworR0Jvb2wgR2xvYmFsUGFyYW1zOjps
b2FkUGx1Z2luKGNvbnN0IGNoYXIgKnR5cGUsIGNvbnN0IGNoYXIgKm5hbWUpIHsKICAgUGx1Z2lu
ICpwbHVnaW47CiAKICAgaWYgKCEocGx1Z2luID0gUGx1Z2luOjpsb2FkKHR5cGUsIG5hbWUpKSkg
ewpkaWZmIC11ciB0ZXhsaXZlLTIwMDgwODE2LXNvdXJjZS9saWJzL3hwZGYub3JpZy94cGRmL0ds
b2JhbFBhcmFtcy5oIHRleGxpdmUtMjAwODA4MTYtc291cmNlL2xpYnMveHBkZi94cGRmL0dsb2Jh
bFBhcmFtcy5oCi0tLSB0ZXhsaXZlLTIwMDgwODE2LXNvdXJjZS9saWJzL3hwZGYub3JpZy94cGRm
L0dsb2JhbFBhcmFtcy5oCTIwMDgtMDUtMDggMTc6NDA6NDEuMDAwMDAwMDAwICswNDAwCisrKyB0
ZXhsaXZlLTIwMDgwODE2LXNvdXJjZS9saWJzL3hwZGYveHBkZi9HbG9iYWxQYXJhbXMuaAkyMDA4
LTExLTIxIDE3OjI3OjAwLjAwMDAwMDAwMCArMDMwMApAQCAtMTcyLDggKzE3Miw4IEBACiAJCQkJ
Ly8gICB0b2dldGhlcikKICAgR0xpc3QgKmNtZHM7CQkJLy8gbGlzdCBvZiBjb21tYW5kcyBbR1N0
cmluZ10KIAotICBLZXlCaW5kaW5nKGludCBjb2RlQSwgaW50IG1vZHNBLCBpbnQgY29udGV4dEEs
IGNoYXIgKmNtZDApOwotICBLZXlCaW5kaW5nKGludCBjb2RlQSwgaW50IG1vZHNBLCBpbnQgY29u
dGV4dEEsIGNoYXIgKmNtZDAsIGNoYXIgKmNtZDEpOworICBLZXlCaW5kaW5nKGludCBjb2RlQSwg
aW50IG1vZHNBLCBpbnQgY29udGV4dEEsIGNvbnN0IGNoYXIgKmNtZDApOworICBLZXlCaW5kaW5n
KGludCBjb2RlQSwgaW50IG1vZHNBLCBpbnQgY29udGV4dEEsIGNvbnN0IGNoYXIgKmNtZDAsIGNv
bnN0IGNoYXIgKmNtZDEpOwogICBLZXlCaW5kaW5nKGludCBjb2RlQSwgaW50IG1vZHNBLCBpbnQg
Y29udGV4dEEsIEdMaXN0ICpjbWRzQSk7CiAgIH5LZXlCaW5kaW5nKCk7CiB9OwpAQCAtMjMyLDI2
ICsyMzIsMjYgQEAKIAogICAvLyBJbml0aWFsaXplIHRoZSBnbG9iYWwgcGFyYW1ldGVycyBieSBh
dHRlbXB0aW5nIHRvIHJlYWQgYSBjb25maWcKICAgLy8gZmlsZS4KLSAgR2xvYmFsUGFyYW1zKGNo
YXIgKmNmZ0ZpbGVOYW1lKTsKKyAgR2xvYmFsUGFyYW1zKGNvbnN0IGNoYXIgKmNmZ0ZpbGVOYW1l
KTsKIAogICAvLyBJbml0aWFsaXplIGl0IHdpdGhvdXQgcmVhZGluZyB0aGUgY29uZmlnCiAgIEds
b2JhbFBhcmFtcygpOwogCiAgIH5HbG9iYWxQYXJhbXMoKTsKIAotICB2b2lkIHNldEJhc2VEaXIo
Y2hhciAqZGlyKTsKLSAgdm9pZCBzZXR1cEJhc2VGb250cyhjaGFyICpkaXIpOworICB2b2lkIHNl
dEJhc2VEaXIoY29uc3QgY2hhciAqZGlyKTsKKyAgdm9pZCBzZXR1cEJhc2VGb250cyhjb25zdCBj
aGFyICpkaXIpOwogCiAjaWZuZGVmIFBERl9QQVJTRVJfT05MWQotICB2b2lkIHBhcnNlTGluZShj
aGFyICpidWYsIEdTdHJpbmcgKmZpbGVOYW1lLCBpbnQgbGluZSk7CisgIHZvaWQgcGFyc2VMaW5l
KGNvbnN0IGNoYXIgKmJ1ZiwgR1N0cmluZyAqZmlsZU5hbWUsIGludCBsaW5lKTsKICNlbmRpZgog
CiAgIC8vLS0tLS0gYWNjZXNzb3JzCiAKLSAgQ2hhckNvZGUgZ2V0TWFjUm9tYW5DaGFyQ29kZShj
aGFyICpjaGFyTmFtZSk7CisgIENoYXJDb2RlIGdldE1hY1JvbWFuQ2hhckNvZGUoY29uc3QgY2hh
ciAqY2hhck5hbWUpOwogCiAgIEdTdHJpbmcgKmdldEJhc2VEaXIoKTsKLSAgVW5pY29kZSBtYXBO
YW1lVG9Vbmljb2RlKGNoYXIgKmNoYXJOYW1lKTsKKyAgVW5pY29kZSBtYXBOYW1lVG9Vbmljb2Rl
KGNvbnN0IGNoYXIgKmNoYXJOYW1lKTsKICAgVW5pY29kZU1hcCAqZ2V0UmVzaWRlbnRVbmljb2Rl
TWFwKEdTdHJpbmcgKmVuY29kaW5nTmFtZSk7CiAgIEZJTEUgKmdldFVuaWNvZGVNYXBGaWxlKEdT
dHJpbmcgKmVuY29kaW5nTmFtZSk7CiAgIEZJTEUgKmZpbmRDTWFwRmlsZShHU3RyaW5nICpjb2xs
ZWN0aW9uLCBHU3RyaW5nICpjTWFwTmFtZSk7CkBAIC0yODEsNyArMjgxLDcgQEAKICAgRW5kT2ZM
aW5lS2luZCBnZXRUZXh0RU9MKCk7CiAgIEdCb29sIGdldFRleHRQYWdlQnJlYWtzKCk7CiAgIEdC
b29sIGdldFRleHRLZWVwVGlueUNoYXJzKCk7Ci0gIEdTdHJpbmcgKmZpbmRGb250RmlsZShHU3Ry
aW5nICpmb250TmFtZSwgY2hhciAqKmV4dHMpOworICBHU3RyaW5nICpmaW5kRm9udEZpbGUoR1N0
cmluZyAqZm9udE5hbWUsIGNvbnN0IGNoYXIgKipleHRzKTsKICAgR1N0cmluZyAqZ2V0SW5pdGlh
bFpvb20oKTsKICAgR0Jvb2wgZ2V0Q29udGludW91c1ZpZXcoKTsKICAgR0Jvb2wgZ2V0RW5hYmxl
VDFsaWIoKTsKQEAgLTMxNCw4ICszMTQsOCBAQAogICAvLy0tLS0tIGZ1bmN0aW9ucyB0byBzZXQg
cGFyYW1ldGVycwogCiAgIHZvaWQgYWRkRGlzcGxheUZvbnQoRGlzcGxheUZvbnRQYXJhbSAqcGFy
YW0pOwotICB2b2lkIHNldFBTRmlsZShjaGFyICpmaWxlKTsKLSAgR0Jvb2wgc2V0UFNQYXBlclNp
emUoY2hhciAqc2l6ZSk7CisgIHZvaWQgc2V0UFNGaWxlKGNvbnN0IGNoYXIgKmZpbGUpOworICBH
Qm9vbCBzZXRQU1BhcGVyU2l6ZShjb25zdCBjaGFyICpzaXplKTsKICAgdm9pZCBzZXRQU1BhcGVy
V2lkdGgoaW50IHdpZHRoKTsKICAgdm9pZCBzZXRQU1BhcGVySGVpZ2h0KGludCBoZWlnaHQpOwog
ICB2b2lkIHNldFBTSW1hZ2VhYmxlQXJlYShpbnQgbGx4LCBpbnQgbGx5LCBpbnQgdXJ4LCBpbnQg
dXJ5KTsKQEAgLTMzMiwxNiArMzMyLDE2IEBACiAgIHZvaWQgc2V0UFNQcmVsb2FkKEdCb29sIHBy
ZWxvYWQpOwogICB2b2lkIHNldFBTT1BJKEdCb29sIG9waSk7CiAgIHZvaWQgc2V0UFNBU0NJSUhl
eChHQm9vbCBoZXgpOwotICB2b2lkIHNldFRleHRFbmNvZGluZyhjaGFyICplbmNvZGluZ05hbWUp
OwotICBHQm9vbCBzZXRUZXh0RU9MKGNoYXIgKnMpOworICB2b2lkIHNldFRleHRFbmNvZGluZyhj
b25zdCBjaGFyICplbmNvZGluZ05hbWUpOworICBHQm9vbCBzZXRUZXh0RU9MKGNvbnN0IGNoYXIg
KnMpOwogICB2b2lkIHNldFRleHRQYWdlQnJlYWtzKEdCb29sIHBhZ2VCcmVha3MpOwogICB2b2lk
IHNldFRleHRLZWVwVGlueUNoYXJzKEdCb29sIGtlZXApOwotICB2b2lkIHNldEluaXRpYWxab29t
KGNoYXIgKnMpOworICB2b2lkIHNldEluaXRpYWxab29tKGNvbnN0IGNoYXIgKnMpOwogICB2b2lk
IHNldENvbnRpbnVvdXNWaWV3KEdCb29sIGNvbnQpOwotICBHQm9vbCBzZXRFbmFibGVUMWxpYihj
aGFyICpzKTsKLSAgR0Jvb2wgc2V0RW5hYmxlRnJlZVR5cGUoY2hhciAqcyk7Ci0gIEdCb29sIHNl
dEFudGlhbGlhcyhjaGFyICpzKTsKLSAgR0Jvb2wgc2V0VmVjdG9yQW50aWFsaWFzKGNoYXIgKnMp
OworICBHQm9vbCBzZXRFbmFibGVUMWxpYihjb25zdCBjaGFyICpzKTsKKyAgR0Jvb2wgc2V0RW5h
YmxlRnJlZVR5cGUoY29uc3QgY2hhciAqcyk7CisgIEdCb29sIHNldEFudGlhbGlhcyhjb25zdCBj
aGFyICpzKTsKKyAgR0Jvb2wgc2V0VmVjdG9yQW50aWFsaWFzKGNvbnN0IGNoYXIgKnMpOwogICB2
b2lkIHNldFNjcmVlblR5cGUoU2NyZWVuVHlwZSB0KTsKICAgdm9pZCBzZXRTY3JlZW5TaXplKGlu
dCBzaXplKTsKICAgdm9pZCBzZXRTY3JlZW5Eb3RSYWRpdXMoaW50IHIpOwpAQCAtMzU2LDcgKzM1
Niw3IEBACiAgIC8vLS0tLS0gc2VjdXJpdHkgaGFuZGxlcnMKIAogICB2b2lkIGFkZFNlY3VyaXR5
SGFuZGxlcihYcGRmU2VjdXJpdHlIYW5kbGVyICpoYW5kbGVyKTsKLSAgWHBkZlNlY3VyaXR5SGFu
ZGxlciAqZ2V0U2VjdXJpdHlIYW5kbGVyKGNoYXIgKm5hbWUpOworICBYcGRmU2VjdXJpdHlIYW5k
bGVyICpnZXRTZWN1cml0eUhhbmRsZXIoY29uc3QgY2hhciAqbmFtZSk7CiAKIHByaXZhdGU6CiAK
QEAgLTM3OCw3ICszNzgsNyBAQAogICB2b2lkIHBhcnNlUFNJbWFnZWFibGVBcmVhKEdMaXN0ICp0
b2tlbnMsIEdTdHJpbmcgKmZpbGVOYW1lLCBpbnQgbGluZSk7CiAgIHZvaWQgcGFyc2VQU0xldmVs
KEdMaXN0ICp0b2tlbnMsIEdTdHJpbmcgKmZpbGVOYW1lLCBpbnQgbGluZSk7CiAgIHZvaWQgcGFy
c2VQU0ZvbnQoR0xpc3QgKnRva2VucywgR1N0cmluZyAqZmlsZU5hbWUsIGludCBsaW5lKTsKLSAg
dm9pZCBwYXJzZVBTRm9udDE2KGNoYXIgKmNtZE5hbWUsIEdMaXN0ICpmb250TGlzdCwKKyAgdm9p
ZCBwYXJzZVBTRm9udDE2KGNvbnN0IGNoYXIgKmNtZE5hbWUsIEdMaXN0ICpmb250TGlzdCwKIAkJ
ICAgICBHTGlzdCAqdG9rZW5zLCBHU3RyaW5nICpmaWxlTmFtZSwgaW50IGxpbmUpOwogICB2b2lk
IHBhcnNlVGV4dEVuY29kaW5nKEdMaXN0ICp0b2tlbnMsIEdTdHJpbmcgKmZpbGVOYW1lLCBpbnQg
bGluZSk7CiAgIHZvaWQgcGFyc2VUZXh0RU9MKEdMaXN0ICp0b2tlbnMsIEdTdHJpbmcgKmZpbGVO
YW1lLCBpbnQgbGluZSk7CkBAIC0zOTAsMjEgKzM5MCwyMSBAQAogICB2b2lkIHBhcnNlVW5iaW5k
KEdMaXN0ICp0b2tlbnMsIEdTdHJpbmcgKmZpbGVOYW1lLCBpbnQgbGluZSk7CiAgIEdCb29sIHBh
cnNlS2V5KEdTdHJpbmcgKm1vZEtleVN0ciwgR1N0cmluZyAqY29udGV4dFN0ciwKIAkJIGludCAq
Y29kZSwgaW50ICptb2RzLCBpbnQgKmNvbnRleHQsCi0JCSBjaGFyICpjbWROYW1lLAorCQkgY29u
c3QgY2hhciAqY21kTmFtZSwKIAkJIEdMaXN0ICp0b2tlbnMsIEdTdHJpbmcgKmZpbGVOYW1lLCBp
bnQgbGluZSk7CiAjZW5kaWYKLSAgdm9pZCBwYXJzZUNvbW1hbmQoY2hhciAqY21kTmFtZSwgR1N0
cmluZyAqKnZhbCwKKyAgdm9pZCBwYXJzZUNvbW1hbmQoY29uc3QgY2hhciAqY21kTmFtZSwgR1N0
cmluZyAqKnZhbCwKIAkJICAgIEdMaXN0ICp0b2tlbnMsIEdTdHJpbmcgKmZpbGVOYW1lLCBpbnQg
bGluZSk7Ci0gIHZvaWQgcGFyc2VZZXNObyhjaGFyICpjbWROYW1lLCBHQm9vbCAqZmxhZywKKyAg
dm9pZCBwYXJzZVllc05vKGNvbnN0IGNoYXIgKmNtZE5hbWUsIEdCb29sICpmbGFnLAogCQkgIEdM
aXN0ICp0b2tlbnMsIEdTdHJpbmcgKmZpbGVOYW1lLCBpbnQgbGluZSk7Ci0gIEdCb29sIHBhcnNl
WWVzTm8yKGNoYXIgKnRva2VuLCBHQm9vbCAqZmxhZyk7Ci0gIHZvaWQgcGFyc2VJbnRlZ2VyKGNo
YXIgKmNtZE5hbWUsIGludCAqdmFsLAorICBHQm9vbCBwYXJzZVllc05vMihjb25zdCBjaGFyICp0
b2tlbiwgR0Jvb2wgKmZsYWcpOworICB2b2lkIHBhcnNlSW50ZWdlcihjb25zdCBjaGFyICpjbWRO
YW1lLCBpbnQgKnZhbCwKIAkJICAgIEdMaXN0ICp0b2tlbnMsIEdTdHJpbmcgKmZpbGVOYW1lLCBp
bnQgbGluZSk7Ci0gIHZvaWQgcGFyc2VGbG9hdChjaGFyICpjbWROYW1lLCBkb3VibGUgKnZhbCwK
KyAgdm9pZCBwYXJzZUZsb2F0KGNvbnN0IGNoYXIgKmNtZE5hbWUsIGRvdWJsZSAqdmFsLAogCQkg
IEdMaXN0ICp0b2tlbnMsIEdTdHJpbmcgKmZpbGVOYW1lLCBpbnQgbGluZSk7CiAgIFVuaWNvZGVN
YXAgKmdldFVuaWNvZGVNYXAyKEdTdHJpbmcgKmVuY29kaW5nTmFtZSk7CiAjaWZkZWYgRU5BQkxF
X1BMVUdJTlMKLSAgR0Jvb2wgbG9hZFBsdWdpbihjaGFyICp0eXBlLCBjaGFyICpuYW1lKTsKKyAg
R0Jvb2wgbG9hZFBsdWdpbihjb25zdCBjaGFyICp0eXBlLCBjb25zdCBjaGFyICpuYW1lKTsKICNl
bmRpZgogCiAgIC8vLS0tLS0gc3RhdGljIHRhYmxlcwpkaWZmIC11ciB0ZXhsaXZlLTIwMDgwODE2
LXNvdXJjZS9saWJzL3hwZGYub3JpZy94cGRmL0xpbmsuY2MgdGV4bGl2ZS0yMDA4MDgxNi1zb3Vy
Y2UvbGlicy94cGRmL3hwZGYvTGluay5jYwotLS0gdGV4bGl2ZS0yMDA4MDgxNi1zb3VyY2UvbGli
cy94cGRmLm9yaWcveHBkZi9MaW5rLmNjCTIwMDctMDctMTIgMDE6MTM6NTkuMDAwMDAwMDAwICsw
NDAwCisrKyB0ZXhsaXZlLTIwMDgwODE2LXNvdXJjZS9saWJzL3hwZGYveHBkZi9MaW5rLmNjCTIw
MDgtMTEtMjEgMTc6MTk6MTEuMDAwMDAwMDAwICswMzAwCkBAIC02MjYsNyArNjI2LDcgQEAKIC8v
IExpbmtVbmtub3duCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1MaW5rVW5rbm93bjo6TGlua1Vua25v
d24oY2hhciAqYWN0aW9uQSkgeworTGlua1Vua25vd246OkxpbmtVbmtub3duKGNvbnN0IGNoYXIg
KmFjdGlvbkEpIHsKICAgYWN0aW9uID0gbmV3IEdTdHJpbmcoYWN0aW9uQSk7CiB9CiAKZGlmZiAt
dXIgdGV4bGl2ZS0yMDA4MDgxNi1zb3VyY2UvbGlicy94cGRmLm9yaWcveHBkZi9MaW5rLmggdGV4
bGl2ZS0yMDA4MDgxNi1zb3VyY2UvbGlicy94cGRmL3hwZGYvTGluay5oCi0tLSB0ZXhsaXZlLTIw
MDgwODE2LXNvdXJjZS9saWJzL3hwZGYub3JpZy94cGRmL0xpbmsuaAkyMDA3LTA3LTEyIDAxOjEz
OjU5LjAwMDAwMDAwMCArMDQwMAorKysgdGV4bGl2ZS0yMDA4MDgxNi1zb3VyY2UvbGlicy94cGRm
L3hwZGYvTGluay5oCTIwMDgtMTEtMjEgMTc6MTg6NDguMDAwMDAwMDAwICswMzAwCkBAIC0yODQs
NyArMjg0LDcgQEAKIHB1YmxpYzoKIAogICAvLyBCdWlsZCBhIExpbmtVbmtub3duIHdpdGggdGhl
IHNwZWNpZmllZCBhY3Rpb24gdHlwZS4KLSAgTGlua1Vua25vd24oY2hhciAqYWN0aW9uQSk7Cisg
IExpbmtVbmtub3duKGNvbnN0IGNoYXIgKmFjdGlvbkEpOwogCiAgIC8vIERlc3RydWN0b3IuCiAg
IHZpcnR1YWwgfkxpbmtVbmtub3duKCk7CmRpZmYgLXVyIHRleGxpdmUtMjAwODA4MTYtc291cmNl
L2xpYnMveHBkZi5vcmlnL3hwZGYvTmFtZVRvQ2hhckNvZGUuY2MgdGV4bGl2ZS0yMDA4MDgxNi1z
b3VyY2UvbGlicy94cGRmL3hwZGYvTmFtZVRvQ2hhckNvZGUuY2MKLS0tIHRleGxpdmUtMjAwODA4
MTYtc291cmNlL2xpYnMveHBkZi5vcmlnL3hwZGYvTmFtZVRvQ2hhckNvZGUuY2MJMjAwNi0wMS0x
NiAwMzowOToyNi4wMDAwMDAwMDAgKzAzMDAKKysrIHRleGxpdmUtMjAwODA4MTYtc291cmNlL2xp
YnMveHBkZi94cGRmL05hbWVUb0NoYXJDb2RlLmNjCTIwMDgtMTEtMjEgMTc6MTk6NDYuMDAwMDAw
MDAwICswMzAwCkBAIC0xOSw3ICsxOSw3IEBACiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBzdHJ1Y3Qg
TmFtZVRvQ2hhckNvZGVFbnRyeSB7Ci0gIGNoYXIgKm5hbWU7CisgIGNvbnN0IGNoYXIgKm5hbWU7
CiAgIENoYXJDb2RlIGM7CiB9OwogCkBAIC00MSwxMyArNDEsMTMgQEAKIAogICBmb3IgKGkgPSAw
OyBpIDwgc2l6ZTsgKytpKSB7CiAgICAgaWYgKHRhYltpXS5uYW1lKSB7Ci0gICAgICBnZnJlZSh0
YWJbaV0ubmFtZSk7CisgICAgICBnZnJlZShjb25zdF9jYXN0PGNoYXIqPih0YWJbaV0ubmFtZSkp
OwogICAgIH0KICAgfQogICBnZnJlZSh0YWIpOwogfQogCi12b2lkIE5hbWVUb0NoYXJDb2RlOjph
ZGQoY2hhciAqbmFtZSwgQ2hhckNvZGUgYykgewordm9pZCBOYW1lVG9DaGFyQ29kZTo6YWRkKGNv
bnN0IGNoYXIgKm5hbWUsIENoYXJDb2RlIGMpIHsKICAgTmFtZVRvQ2hhckNvZGVFbnRyeSAqb2xk
VGFiOwogICBpbnQgaCwgaSwgb2xkU2l6ZTsKIApAQCAtODksNyArODksNyBAQAogICArK2xlbjsK
IH0KIAotQ2hhckNvZGUgTmFtZVRvQ2hhckNvZGU6Omxvb2t1cChjaGFyICpuYW1lKSB7CitDaGFy
Q29kZSBOYW1lVG9DaGFyQ29kZTo6bG9va3VwKGNvbnN0IGNoYXIgKm5hbWUpIHsKICAgaW50IGg7
CiAKICAgaCA9IGhhc2gobmFtZSk7CkBAIC0xMDQsOCArMTA0LDggQEAKICAgcmV0dXJuIDA7CiB9
CiAKLWludCBOYW1lVG9DaGFyQ29kZTo6aGFzaChjaGFyICpuYW1lKSB7Ci0gIGNoYXIgKnA7Citp
bnQgTmFtZVRvQ2hhckNvZGU6Omhhc2goY29uc3QgY2hhciAqbmFtZSkgeworICBjb25zdCBjaGFy
ICpwOwogICB1bnNpZ25lZCBpbnQgaDsKIAogICBoID0gMDsKZGlmZiAtdXIgdGV4bGl2ZS0yMDA4
MDgxNi1zb3VyY2UvbGlicy94cGRmLm9yaWcveHBkZi9OYW1lVG9DaGFyQ29kZS5oIHRleGxpdmUt
MjAwODA4MTYtc291cmNlL2xpYnMveHBkZi94cGRmL05hbWVUb0NoYXJDb2RlLmgKLS0tIHRleGxp
dmUtMjAwODA4MTYtc291cmNlL2xpYnMveHBkZi5vcmlnL3hwZGYvTmFtZVRvQ2hhckNvZGUuaAky
MDA2LTAxLTE2IDAzOjA5OjI2LjAwMDAwMDAwMCArMDMwMAorKysgdGV4bGl2ZS0yMDA4MDgxNi1z
b3VyY2UvbGlicy94cGRmL3hwZGYvTmFtZVRvQ2hhckNvZGUuaAkyMDA4LTExLTIxIDE3OjA1OjI1
LjAwMDAwMDAwMCArMDMwMApAQCAtMjcsMTIgKzI3LDEyIEBACiAgIE5hbWVUb0NoYXJDb2RlKCk7
CiAgIH5OYW1lVG9DaGFyQ29kZSgpOwogCi0gIHZvaWQgYWRkKGNoYXIgKm5hbWUsIENoYXJDb2Rl
IGMpOwotICBDaGFyQ29kZSBsb29rdXAoY2hhciAqbmFtZSk7CisgIHZvaWQgYWRkKGNvbnN0IGNo
YXIgKm5hbWUsIENoYXJDb2RlIGMpOworICBDaGFyQ29kZSBsb29rdXAoY29uc3QgY2hhciAqbmFt
ZSk7CiAKIHByaXZhdGU6CiAKLSAgaW50IGhhc2goY2hhciAqbmFtZSk7CisgIGludCBoYXNoKGNv
bnN0IGNoYXIgKm5hbWUpOwogCiAgIE5hbWVUb0NoYXJDb2RlRW50cnkgKnRhYjsKICAgaW50IHNp
emU7CmRpZmYgLXVyIHRleGxpdmUtMjAwODA4MTYtc291cmNlL2xpYnMveHBkZi5vcmlnL3hwZGYv
TmFtZVRvVW5pY29kZVRhYmxlLmggdGV4bGl2ZS0yMDA4MDgxNi1zb3VyY2UvbGlicy94cGRmL3hw
ZGYvTmFtZVRvVW5pY29kZVRhYmxlLmgKLS0tIHRleGxpdmUtMjAwODA4MTYtc291cmNlL2xpYnMv
eHBkZi5vcmlnL3hwZGYvTmFtZVRvVW5pY29kZVRhYmxlLmgJMjAwNi0wMS0xNiAwMzowOToyNi4w
MDAwMDAwMDAgKzAzMDAKKysrIHRleGxpdmUtMjAwODA4MTYtc291cmNlL2xpYnMveHBkZi94cGRm
L05hbWVUb1VuaWNvZGVUYWJsZS5oCTIwMDgtMTEtMjEgMTY6MTg6MTkuMDAwMDAwMDAwICswMzAw
CkBAIC04LDcgKzgsNyBAQAogCiBzdGF0aWMgc3RydWN0IHsKICAgVW5pY29kZSB1OwotICBjaGFy
ICpuYW1lOworICBjb25zdCBjaGFyICpuYW1lOwogfSBuYW1lVG9Vbmljb2RlVGFiW10gPSB7CiAg
IHsweDAwMjEsICIhIn0sCiAgIHsweDAwMjMsICIjIn0sCmRpZmYgLXVyIHRleGxpdmUtMjAwODA4
MTYtc291cmNlL2xpYnMveHBkZi5vcmlnL3hwZGYvT2JqZWN0LmNjIHRleGxpdmUtMjAwODA4MTYt
c291cmNlL2xpYnMveHBkZi94cGRmL09iamVjdC5jYwotLS0gdGV4bGl2ZS0yMDA4MDgxNi1zb3Vy
Y2UvbGlicy94cGRmLm9yaWcveHBkZi9PYmplY3QuY2MJMjAwNi0wMS0xNiAwMzowOToyNi4wMDAw
MDAwMDAgKzAzMDAKKysrIHRleGxpdmUtMjAwODA4MTYtc291cmNlL2xpYnMveHBkZi94cGRmL09i
amVjdC5jYwkyMDA4LTExLTIxIDE3OjIzOjI2LjAwMDAwMDAwMCArMDMwMApAQCAtMjQsNyArMjQs
NyBAQAogLy8gT2JqZWN0CiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1jaGFyICpvYmpUeXBlTmFtZXNb
bnVtT2JqVHlwZXNdID0geworY29uc3QgY2hhciAqb2JqVHlwZU5hbWVzW251bU9ialR5cGVzXSA9
IHsKICAgImJvb2xlYW4iLAogICAiaW50ZWdlciIsCiAgICJyZWFsIiwKQEAgLTExMiw3ICsxMTIs
NyBAQAogICAgIGRlbGV0ZSBzdHJpbmc7CiAgICAgYnJlYWs7CiAgIGNhc2Ugb2JqTmFtZToKLSAg
ICBnZnJlZShuYW1lKTsKKyAgICBnZnJlZShjb25zdF9jYXN0PGNoYXIqPihuYW1lKSk7CiAgICAg
YnJlYWs7CiAgIGNhc2Ugb2JqQXJyYXk6CiAgICAgaWYgKCFhcnJheS0+ZGVjUmVmKCkpIHsKQEAg
LTEzMCw3ICsxMzAsNyBAQAogICAgIH0KICAgICBicmVhazsKICAgY2FzZSBvYmpDbWQ6Ci0gICAg
Z2ZyZWUoY21kKTsKKyAgICBnZnJlZShjb25zdF9jYXN0PGNoYXIqPihjbWQpKTsKICAgICBicmVh
azsKICAgZGVmYXVsdDoKICAgICBicmVhazsKQEAgLTE0MSw3ICsxNDEsNyBAQAogICB0eXBlID0g
b2JqTm9uZTsKIH0KIAotY2hhciAqT2JqZWN0OjpnZXRUeXBlTmFtZSgpIHsKK2NvbnN0IGNoYXIg
Kk9iamVjdDo6Z2V0VHlwZU5hbWUoKSB7CiAgIHJldHVybiBvYmpUeXBlTmFtZXNbdHlwZV07CiB9
CiAKZGlmZiAtdXIgdGV4bGl2ZS0yMDA4MDgxNi1zb3VyY2UvbGlicy94cGRmLm9yaWcveHBkZi9P
YmplY3QuaCB0ZXhsaXZlLTIwMDgwODE2LXNvdXJjZS9saWJzL3hwZGYveHBkZi9PYmplY3QuaAot
LS0gdGV4bGl2ZS0yMDA4MDgxNi1zb3VyY2UvbGlicy94cGRmLm9yaWcveHBkZi9PYmplY3QuaAky
MDA2LTAxLTE2IDAzOjA5OjI2LjAwMDAwMDAwMCArMDMwMAorKysgdGV4bGl2ZS0yMDA4MDgxNi1z
b3VyY2UvbGlicy94cGRmL3hwZGYvT2JqZWN0LmgJMjAwOC0xMS0yMSAxNzo0OTozMC4wMDAwMDAw
MDAgKzAzMDAKQEAgLTg5LDcgKzg5LDcgQEAKICAgICB7IGluaXRPYmoob2JqUmVhbCk7IHJlYWwg
PSByZWFsQTsgcmV0dXJuIHRoaXM7IH0KICAgT2JqZWN0ICppbml0U3RyaW5nKEdTdHJpbmcgKnN0
cmluZ0EpCiAgICAgeyBpbml0T2JqKG9ialN0cmluZyk7IHN0cmluZyA9IHN0cmluZ0E7IHJldHVy
biB0aGlzOyB9Ci0gIE9iamVjdCAqaW5pdE5hbWUoY2hhciAqbmFtZUEpCisgIE9iamVjdCAqaW5p
dE5hbWUoY29uc3QgY2hhciAqbmFtZUEpCiAgICAgeyBpbml0T2JqKG9iak5hbWUpOyBuYW1lID0g
Y29weVN0cmluZyhuYW1lQSk7IHJldHVybiB0aGlzOyB9CiAgIE9iamVjdCAqaW5pdE51bGwoKQog
ICAgIHsgaW5pdE9iaihvYmpOdWxsKTsgcmV0dXJuIHRoaXM7IH0KQEAgLTk5LDcgKzk5LDcgQEAK
ICAgT2JqZWN0ICppbml0U3RyZWFtKFN0cmVhbSAqc3RyZWFtQSk7CiAgIE9iamVjdCAqaW5pdFJl
ZihpbnQgbnVtQSwgaW50IGdlbkEpCiAgICAgeyBpbml0T2JqKG9ialJlZik7IHJlZi5udW0gPSBu
dW1BOyByZWYuZ2VuID0gZ2VuQTsgcmV0dXJuIHRoaXM7IH0KLSAgT2JqZWN0ICppbml0Q21kKGNo
YXIgKmNtZEEpCisgIE9iamVjdCAqaW5pdENtZChjb25zdCBjaGFyICpjbWRBKQogICAgIHsgaW5p
dE9iaihvYmpDbWQpOyBjbWQgPSBjb3B5U3RyaW5nKGNtZEEpOyByZXR1cm4gdGhpczsgfQogICBP
YmplY3QgKmluaXRFcnJvcigpCiAgICAgeyBpbml0T2JqKG9iakVycm9yKTsgcmV0dXJuIHRoaXM7
IH0KQEAgLTEzNSwxMSArMTM1LDExIEBACiAgIEdCb29sIGlzTm9uZSgpIHsgcmV0dXJuIHR5cGUg
PT0gb2JqTm9uZTsgfQogCiAgIC8vIFNwZWNpYWwgdHlwZSBjaGVja2luZy4KLSAgR0Jvb2wgaXNO
YW1lKGNoYXIgKm5hbWVBKQorICBHQm9vbCBpc05hbWUoY29uc3QgY2hhciAqbmFtZUEpCiAgICAg
eyByZXR1cm4gdHlwZSA9PSBvYmpOYW1lICYmICFzdHJjbXAobmFtZSwgbmFtZUEpOyB9Ci0gIEdC
b29sIGlzRGljdChjaGFyICpkaWN0VHlwZSk7Ci0gIEdCb29sIGlzU3RyZWFtKGNoYXIgKmRpY3RU
eXBlKTsKLSAgR0Jvb2wgaXNDbWQoY2hhciAqY21kQSkKKyAgR0Jvb2wgaXNEaWN0KGNvbnN0IGNo
YXIgKmRpY3RUeXBlKTsKKyAgR0Jvb2wgaXNTdHJlYW0oY29uc3QgY2hhciAqZGljdFR5cGUpOwor
ICBHQm9vbCBpc0NtZChjb25zdCBjaGFyICpjbWRBKQogICAgIHsgcmV0dXJuIHR5cGUgPT0gb2Jq
Q21kICYmICFzdHJjbXAoY21kLCBjbWRBKTsgfQogCiAgIC8vIEFjY2Vzc29ycy4gIE5COiB0aGVz
ZSBhc3N1bWUgb2JqZWN0IGlzIG9mIGNvcnJlY3QgdHlwZS4KQEAgLTE0OCwxNCArMTQ4LDE0IEBA
CiAgIGRvdWJsZSBnZXRSZWFsKCkgeyByZXR1cm4gcmVhbDsgfQogICBkb3VibGUgZ2V0TnVtKCkg
eyByZXR1cm4gdHlwZSA9PSBvYmpJbnQgPyAoZG91YmxlKWludGcgOiByZWFsOyB9CiAgIEdTdHJp
bmcgKmdldFN0cmluZygpIHsgcmV0dXJuIHN0cmluZzsgfQotICBjaGFyICpnZXROYW1lKCkgeyBy
ZXR1cm4gbmFtZTsgfQorICBjb25zdCBjaGFyICpnZXROYW1lKCkgeyByZXR1cm4gbmFtZTsgfQog
ICBBcnJheSAqZ2V0QXJyYXkoKSB7IHJldHVybiBhcnJheTsgfQogICBEaWN0ICpnZXREaWN0KCkg
eyByZXR1cm4gZGljdDsgfQogICBTdHJlYW0gKmdldFN0cmVhbSgpIHsgcmV0dXJuIHN0cmVhbTsg
fQogICBSZWYgZ2V0UmVmKCkgeyByZXR1cm4gcmVmOyB9CiAgIGludCBnZXRSZWZOdW0oKSB7IHJl
dHVybiByZWYubnVtOyB9CiAgIGludCBnZXRSZWZHZW4oKSB7IHJldHVybiByZWYuZ2VuOyB9Ci0g
IGNoYXIgKmdldENtZCgpIHsgcmV0dXJuIGNtZDsgfQorICBjb25zdCBjaGFyICpnZXRDbWQoKSB7
IHJldHVybiBjbWQ7IH0KIAogICAvLyBBcnJheSBhY2Nlc3NvcnMuCiAgIGludCBhcnJheUdldExl
bmd0aCgpOwpAQCAtMTY1LDE2ICsxNjUsMTYgQEAKIAogICAvLyBEaWN0IGFjY2Vzc29ycy4KICAg
aW50IGRpY3RHZXRMZW5ndGgoKTsKLSAgdm9pZCBkaWN0QWRkKGNoYXIgKmtleSwgT2JqZWN0ICp2
YWwpOwotICBHQm9vbCBkaWN0SXMoY2hhciAqZGljdFR5cGUpOwotICBPYmplY3QgKmRpY3RMb29r
dXAoY2hhciAqa2V5LCBPYmplY3QgKm9iaik7Ci0gIE9iamVjdCAqZGljdExvb2t1cE5GKGNoYXIg
KmtleSwgT2JqZWN0ICpvYmopOwotICBjaGFyICpkaWN0R2V0S2V5KGludCBpKTsKKyAgdm9pZCBk
aWN0QWRkKGNvbnN0IGNoYXIgKmtleSwgT2JqZWN0ICp2YWwpOworICBHQm9vbCBkaWN0SXMoY29u
c3QgY2hhciAqZGljdFR5cGUpOworICBPYmplY3QgKmRpY3RMb29rdXAoY29uc3QgY2hhciAqa2V5
LCBPYmplY3QgKm9iaik7CisgIE9iamVjdCAqZGljdExvb2t1cE5GKGNvbnN0IGNoYXIgKmtleSwg
T2JqZWN0ICpvYmopOworICBjb25zdCBjaGFyICpkaWN0R2V0S2V5KGludCBpKTsKICAgT2JqZWN0
ICpkaWN0R2V0VmFsKGludCBpLCBPYmplY3QgKm9iaik7CiAgIE9iamVjdCAqZGljdEdldFZhbE5G
KGludCBpLCBPYmplY3QgKm9iaik7CiAKICAgLy8gU3RyZWFtIGFjY2Vzc29ycy4KLSAgR0Jvb2wg
c3RyZWFtSXMoY2hhciAqZGljdFR5cGUpOworICBHQm9vbCBzdHJlYW1Jcyhjb25zdCBjaGFyICpk
aWN0VHlwZSk7CiAgIHZvaWQgc3RyZWFtUmVzZXQoKTsKICAgdm9pZCBzdHJlYW1DbG9zZSgpOwog
ICBpbnQgc3RyZWFtR2V0Q2hhcigpOwpAQCAtMTg1LDcgKzE4NSw3IEBACiAgIERpY3QgKnN0cmVh
bUdldERpY3QoKTsKIAogICAvLyBPdXRwdXQuCi0gIGNoYXIgKmdldFR5cGVOYW1lKCk7CisgIGNv
bnN0IGNoYXIgKmdldFR5cGVOYW1lKCk7CiAgIHZvaWQgcHJpbnQoRklMRSAqZiA9IHN0ZG91dCk7
CiAKICAgLy8gTWVtb3J5IHRlc3RpbmcuCkBAIC0xOTksMTIgKzE5OSwxMiBAQAogICAgIGludCBp
bnRnOwkJCS8vICAgaW50ZWdlcgogICAgIGRvdWJsZSByZWFsOwkJLy8gICByZWFsCiAgICAgR1N0
cmluZyAqc3RyaW5nOwkJLy8gICBzdHJpbmcKLSAgICBjaGFyICpuYW1lOwkJCS8vICAgbmFtZQor
ICAgIGNvbnN0IGNoYXIgKm5hbWU7CQkvLyAgIG5hbWUKICAgICBBcnJheSAqYXJyYXk7CQkvLyAg
IGFycmF5CiAgICAgRGljdCAqZGljdDsJCQkvLyAgIGRpY3Rpb25hcnkKICAgICBTdHJlYW0gKnN0
cmVhbTsJCS8vICAgc3RyZWFtCiAgICAgUmVmIHJlZjsJCQkvLyAgIGluZGlyZWN0IHJlZmVyZW5j
ZQotICAgIGNoYXIgKmNtZDsJCQkvLyAgIGNvbW1hbmQKKyAgICBjb25zdCBjaGFyICpjbWQ7CQkv
LyAgIGNvbW1hbmQKICAgfTsKIAogI2lmZGVmIERFQlVHX01FTQpAQCAtMjQwLDIyICsyNDAsMjIg
QEAKIGlubGluZSBpbnQgT2JqZWN0OjpkaWN0R2V0TGVuZ3RoKCkKICAgeyByZXR1cm4gZGljdC0+
Z2V0TGVuZ3RoKCk7IH0KIAotaW5saW5lIHZvaWQgT2JqZWN0OjpkaWN0QWRkKGNoYXIgKmtleSwg
T2JqZWN0ICp2YWwpCitpbmxpbmUgdm9pZCBPYmplY3Q6OmRpY3RBZGQoY29uc3QgY2hhciAqa2V5
LCBPYmplY3QgKnZhbCkKICAgeyBkaWN0LT5hZGQoa2V5LCB2YWwpOyB9CiAKLWlubGluZSBHQm9v
bCBPYmplY3Q6OmRpY3RJcyhjaGFyICpkaWN0VHlwZSkKK2lubGluZSBHQm9vbCBPYmplY3Q6OmRp
Y3RJcyhjb25zdCBjaGFyICpkaWN0VHlwZSkKICAgeyByZXR1cm4gZGljdC0+aXMoZGljdFR5cGUp
OyB9CiAKLWlubGluZSBHQm9vbCBPYmplY3Q6OmlzRGljdChjaGFyICpkaWN0VHlwZSkKK2lubGlu
ZSBHQm9vbCBPYmplY3Q6OmlzRGljdChjb25zdCBjaGFyICpkaWN0VHlwZSkKICAgeyByZXR1cm4g
dHlwZSA9PSBvYmpEaWN0ICYmIGRpY3RJcyhkaWN0VHlwZSk7IH0KIAotaW5saW5lIE9iamVjdCAq
T2JqZWN0OjpkaWN0TG9va3VwKGNoYXIgKmtleSwgT2JqZWN0ICpvYmopCitpbmxpbmUgT2JqZWN0
ICpPYmplY3Q6OmRpY3RMb29rdXAoY29uc3QgY2hhciAqa2V5LCBPYmplY3QgKm9iaikKICAgeyBy
ZXR1cm4gZGljdC0+bG9va3VwKGtleSwgb2JqKTsgfQogCi1pbmxpbmUgT2JqZWN0ICpPYmplY3Q6
OmRpY3RMb29rdXBORihjaGFyICprZXksIE9iamVjdCAqb2JqKQoraW5saW5lIE9iamVjdCAqT2Jq
ZWN0OjpkaWN0TG9va3VwTkYoY29uc3QgY2hhciAqa2V5LCBPYmplY3QgKm9iaikKICAgeyByZXR1
cm4gZGljdC0+bG9va3VwTkYoa2V5LCBvYmopOyB9CiAKLWlubGluZSBjaGFyICpPYmplY3Q6OmRp
Y3RHZXRLZXkoaW50IGkpCitpbmxpbmUgY29uc3QgY2hhciAqT2JqZWN0OjpkaWN0R2V0S2V5KGlu
dCBpKQogICB7IHJldHVybiBkaWN0LT5nZXRLZXkoaSk7IH0KIAogaW5saW5lIE9iamVjdCAqT2Jq
ZWN0OjpkaWN0R2V0VmFsKGludCBpLCBPYmplY3QgKm9iaikKQEAgLTI3MCwxMCArMjcwLDEwIEBA
CiAKICNpbmNsdWRlICJTdHJlYW0uaCIKIAotaW5saW5lIEdCb29sIE9iamVjdDo6c3RyZWFtSXMo
Y2hhciAqZGljdFR5cGUpCitpbmxpbmUgR0Jvb2wgT2JqZWN0OjpzdHJlYW1Jcyhjb25zdCBjaGFy
ICpkaWN0VHlwZSkKICAgeyByZXR1cm4gc3RyZWFtLT5nZXREaWN0KCktPmlzKGRpY3RUeXBlKTsg
fQogCi1pbmxpbmUgR0Jvb2wgT2JqZWN0Ojppc1N0cmVhbShjaGFyICpkaWN0VHlwZSkKK2lubGlu
ZSBHQm9vbCBPYmplY3Q6OmlzU3RyZWFtKGNvbnN0IGNoYXIgKmRpY3RUeXBlKQogICB7IHJldHVy
biB0eXBlID09IG9ialN0cmVhbSAmJiBzdHJlYW1JcyhkaWN0VHlwZSk7IH0KIAogaW5saW5lIHZv
aWQgT2JqZWN0OjpzdHJlYW1SZXNldCgpCmRpZmYgLXVyIHRleGxpdmUtMjAwODA4MTYtc291cmNl
L2xpYnMveHBkZi5vcmlnL3hwZGYvUGFnZS5jYyB0ZXhsaXZlLTIwMDgwODE2LXNvdXJjZS9saWJz
L3hwZGYveHBkZi9QYWdlLmNjCi0tLSB0ZXhsaXZlLTIwMDgwODE2LXNvdXJjZS9saWJzL3hwZGYu
b3JpZy94cGRmL1BhZ2UuY2MJMjAwOC0wNS0wOCAxNzo0MDo0MS4wMDAwMDAwMDAgKzA0MDAKKysr
IHRleGxpdmUtMjAwODA4MTYtc291cmNlL2xpYnMveHBkZi94cGRmL1BhZ2UuY2MJMjAwOC0xMS0y
MSAxNzo0MzoyNS4wMDAwMDAwMDAgKzAzMDAKQEAgLTE4NCw3ICsxODQsNyBAQAogICByZXNvdXJj
ZXMuZnJlZSgpOwogfQogCi1HQm9vbCBQYWdlQXR0cnM6OnJlYWRCb3goRGljdCAqZGljdCwgY2hh
ciAqa2V5LCBQREZSZWN0YW5nbGUgKmJveCkgeworR0Jvb2wgUGFnZUF0dHJzOjpyZWFkQm94KERp
Y3QgKmRpY3QsIGNvbnN0IGNoYXIgKmtleSwgUERGUmVjdGFuZ2xlICpib3gpIHsKICAgUERGUmVj
dGFuZ2xlIHRtcDsKICAgZG91YmxlIHQ7CiAgIE9iamVjdCBvYmoxLCBvYmoyOwpkaWZmIC11ciB0
ZXhsaXZlLTIwMDgwODE2LXNvdXJjZS9saWJzL3hwZGYub3JpZy94cGRmL1BhZ2UuaCB0ZXhsaXZl
LTIwMDgwODE2LXNvdXJjZS9saWJzL3hwZGYveHBkZi9QYWdlLmgKLS0tIHRleGxpdmUtMjAwODA4
MTYtc291cmNlL2xpYnMveHBkZi5vcmlnL3hwZGYvUGFnZS5oCTIwMDgtMDUtMDggMTc6NDA6NDEu
MDAwMDAwMDAwICswNDAwCisrKyB0ZXhsaXZlLTIwMDgwODE2LXNvdXJjZS9saWJzL3hwZGYveHBk
Zi9QYWdlLmgJMjAwOC0xMS0yMSAxNzo0MzozNi4wMDAwMDAwMDAgKzAzMDAKQEAgLTExNCw3ICsx
MTQsNyBAQAogCiBwcml2YXRlOgogCi0gIEdCb29sIHJlYWRCb3goRGljdCAqZGljdCwgY2hhciAq
a2V5LCBQREZSZWN0YW5nbGUgKmJveCk7CisgIEdCb29sIHJlYWRCb3goRGljdCAqZGljdCwgY29u
c3QgY2hhciAqa2V5LCBQREZSZWN0YW5nbGUgKmJveCk7CiAKICAgUERGUmVjdGFuZ2xlIG1lZGlh
Qm94OwogICBQREZSZWN0YW5nbGUgY3JvcEJveDsKZGlmZiAtdXIgdGV4bGl2ZS0yMDA4MDgxNi1z
b3VyY2UvbGlicy94cGRmLm9yaWcveHBkZi9TdHJlYW0uY2MgdGV4bGl2ZS0yMDA4MDgxNi1zb3Vy
Y2UvbGlicy94cGRmL3hwZGYvU3RyZWFtLmNjCi0tLSB0ZXhsaXZlLTIwMDgwODE2LXNvdXJjZS9s
aWJzL3hwZGYub3JpZy94cGRmL1N0cmVhbS5jYwkyMDA4LTAzLTIzIDE5OjM4OjMzLjAwMDAwMDAw
MCArMDMwMAorKysgdGV4bGl2ZS0yMDA4MDgxNi1zb3VyY2UvbGlicy94cGRmL3hwZGYvU3RyZWFt
LmNjCTIwMDgtMTEtMjEgMTc6NTA6MDguMDAwMDAwMDAwICswMzAwCkBAIC04NSw3ICs4NSw3IEBA
CiAgIHJldHVybiBidWY7CiB9CiAKLUdTdHJpbmcgKlN0cmVhbTo6Z2V0UFNGaWx0ZXIoaW50IHBz
TGV2ZWwsIGNoYXIgKmluZGVudCkgeworR1N0cmluZyAqU3RyZWFtOjpnZXRQU0ZpbHRlcihpbnQg
cHNMZXZlbCwgY29uc3QgY2hhciAqaW5kZW50KSB7CiAgIHJldHVybiBuZXcgR1N0cmluZygpOwog
fQogCkBAIC0xMzMsNyArMTMzLDcgQEAKICAgcmV0dXJuIHN0cjsKIH0KIAotU3RyZWFtICpTdHJl
YW06Om1ha2VGaWx0ZXIoY2hhciAqbmFtZSwgU3RyZWFtICpzdHIsIE9iamVjdCAqcGFyYW1zKSB7
CitTdHJlYW0gKlN0cmVhbTo6bWFrZUZpbHRlcihjb25zdCBjaGFyICpuYW1lLCBTdHJlYW0gKnN0
ciwgT2JqZWN0ICpwYXJhbXMpIHsKICAgaW50IHByZWQ7CQkJLy8gcGFyYW1ldGVycwogICBpbnQg
Y29sb3JzOwogICBpbnQgYml0czsKQEAgLTg3OCw3ICs4NzgsNyBAQAogICByZXR1cm4gYnVmOwog
fQogCi1HU3RyaW5nICpBU0NJSUhleFN0cmVhbTo6Z2V0UFNGaWx0ZXIoaW50IHBzTGV2ZWwsIGNo
YXIgKmluZGVudCkgeworR1N0cmluZyAqQVNDSUlIZXhTdHJlYW06OmdldFBTRmlsdGVyKGludCBw
c0xldmVsLCBjb25zdCBjaGFyICppbmRlbnQpIHsKICAgR1N0cmluZyAqczsKIAogICBpZiAocHNM
ZXZlbCA8IDIpIHsKQEAgLTk1OSw3ICs5NTksNyBAQAogICByZXR1cm4gYltpbmRleF07CiB9CiAK
LUdTdHJpbmcgKkFTQ0lJODVTdHJlYW06OmdldFBTRmlsdGVyKGludCBwc0xldmVsLCBjaGFyICpp
bmRlbnQpIHsKK0dTdHJpbmcgKkFTQ0lJODVTdHJlYW06OmdldFBTRmlsdGVyKGludCBwc0xldmVs
LCBjb25zdCBjaGFyICppbmRlbnQpIHsKICAgR1N0cmluZyAqczsKIAogICBpZiAocHNMZXZlbCA8
IDIpIHsKQEAgLTExNDUsNyArMTE0NSw3IEBACiAgIHJldHVybiBjb2RlOwogfQogCi1HU3RyaW5n
ICpMWldTdHJlYW06OmdldFBTRmlsdGVyKGludCBwc0xldmVsLCBjaGFyICppbmRlbnQpIHsKK0dT
dHJpbmcgKkxaV1N0cmVhbTo6Z2V0UFNGaWx0ZXIoaW50IHBzTGV2ZWwsIGNvbnN0IGNoYXIgKmlu
ZGVudCkgewogICBHU3RyaW5nICpzOwogCiAgIGlmIChwc0xldmVsIDwgMiB8fCBwcmVkKSB7CkBA
IC0xMTg2LDcgKzExODYsNyBAQAogICBlb2YgPSBnRmFsc2U7CiB9CiAKLUdTdHJpbmcgKlJ1bkxl
bmd0aFN0cmVhbTo6Z2V0UFNGaWx0ZXIoaW50IHBzTGV2ZWwsIGNoYXIgKmluZGVudCkgeworR1N0
cmluZyAqUnVuTGVuZ3RoU3RyZWFtOjpnZXRQU0ZpbHRlcihpbnQgcHNMZXZlbCwgY29uc3QgY2hh
ciAqaW5kZW50KSB7CiAgIEdTdHJpbmcgKnM7CiAKICAgaWYgKHBzTGV2ZWwgPCAyKSB7CkBAIC0x
ODM0LDcgKzE4MzQsNyBAQAogICByZXR1cm4gKGlucHV0QnVmID4+IChpbnB1dEJpdHMgLSBuKSkg
JiAoMHhmZmZmID4+ICgxNiAtIG4pKTsKIH0KIAotR1N0cmluZyAqQ0NJVFRGYXhTdHJlYW06Omdl
dFBTRmlsdGVyKGludCBwc0xldmVsLCBjaGFyICppbmRlbnQpIHsKK0dTdHJpbmcgKkNDSVRURmF4
U3RyZWFtOjpnZXRQU0ZpbHRlcihpbnQgcHNMZXZlbCwgY29uc3QgY2hhciAqaW5kZW50KSB7CiAg
IEdTdHJpbmcgKnM7CiAgIGNoYXIgczFbNTBdOwogCkBAIC0zMjg5LDcgKzMyODksNyBAQAogICBy
ZXR1cm4gKGMxIDw8IDgpICsgYzI7CiB9CiAKLUdTdHJpbmcgKkRDVFN0cmVhbTo6Z2V0UFNGaWx0
ZXIoaW50IHBzTGV2ZWwsIGNoYXIgKmluZGVudCkgeworR1N0cmluZyAqRENUU3RyZWFtOjpnZXRQ
U0ZpbHRlcihpbnQgcHNMZXZlbCwgY29uc3QgY2hhciAqaW5kZW50KSB7CiAgIEdTdHJpbmcgKnM7
CiAKICAgaWYgKHBzTGV2ZWwgPCAyKSB7CkBAIC00MDUxLDcgKzQwNTEsNyBAQAogICByZXR1cm4g
YzsKIH0KIAotR1N0cmluZyAqRmxhdGVTdHJlYW06OmdldFBTRmlsdGVyKGludCBwc0xldmVsLCBj
aGFyICppbmRlbnQpIHsKK0dTdHJpbmcgKkZsYXRlU3RyZWFtOjpnZXRQU0ZpbHRlcihpbnQgcHNM
ZXZlbCwgY29uc3QgY2hhciAqaW5kZW50KSB7CiAgIEdTdHJpbmcgKnM7CiAKICAgaWYgKHBzTGV2
ZWwgPCAzIHx8IHByZWQpIHsKQEAgLTQ0NjYsNyArNDQ2Niw3IEBACiB9CiAKIEdCb29sIEFTQ0lJ
SGV4RW5jb2Rlcjo6ZmlsbEJ1ZigpIHsKLSAgc3RhdGljIGNoYXIgKmhleCA9ICIwMTIzNDU2Nzg5
YWJjZGVmIjsKKyAgc3RhdGljIGNvbnN0IGNoYXIgKmhleCA9ICIwMTIzNDU2Nzg5YWJjZGVmIjsK
ICAgaW50IGM7CiAKICAgaWYgKGVvZikgewpkaWZmIC11ciB0ZXhsaXZlLTIwMDgwODE2LXNvdXJj
ZS9saWJzL3hwZGYub3JpZy94cGRmL1N0cmVhbS5oIHRleGxpdmUtMjAwODA4MTYtc291cmNlL2xp
YnMveHBkZi94cGRmL1N0cmVhbS5oCi0tLSB0ZXhsaXZlLTIwMDgwODE2LXNvdXJjZS9saWJzL3hw
ZGYub3JpZy94cGRmL1N0cmVhbS5oCTIwMDgtMDUtMDggMTc6NDA6NDEuMDAwMDAwMDAwICswNDAw
CisrKyB0ZXhsaXZlLTIwMDgwODE2LXNvdXJjZS9saWJzL3hwZGYveHBkZi9TdHJlYW0uaAkyMDA4
LTExLTIxIDE3OjUwOjIzLjAwMDAwMDAwMCArMDMwMApAQCAtMTU0LDcgKzE1NCw3IEBACiAgIHZp
cnR1YWwgdm9pZCBzZXRQb3MoR3VpbnQgcG9zLCBpbnQgZGlyID0gMCkgPSAwOwogCiAgIC8vIEdl
dCBQb3N0U2NyaXB0IGNvbW1hbmQgZm9yIHRoZSBmaWx0ZXIocykuCi0gIHZpcnR1YWwgR1N0cmlu
ZyAqZ2V0UFNGaWx0ZXIoaW50IHBzTGV2ZWwsIGNoYXIgKmluZGVudCk7CisgIHZpcnR1YWwgR1N0
cmluZyAqZ2V0UFNGaWx0ZXIoaW50IHBzTGV2ZWwsIGNvbnN0IGNoYXIgKmluZGVudCk7CiAKICAg
Ly8gRG9lcyB0aGlzIHN0cmVhbSB0eXBlIHBvdGVudGlhbGx5IGNvbnRhaW4gbm9uLXByaW50YWJs
ZSBjaGFycz8KICAgdmlydHVhbCBHQm9vbCBpc0JpbmFyeShHQm9vbCBsYXN0ID0gZ1RydWUpID0g
MDsKQEAgLTE4NSw3ICsxODUsNyBAQAogCiBwcml2YXRlOgogCi0gIFN0cmVhbSAqbWFrZUZpbHRl
cihjaGFyICpuYW1lLCBTdHJlYW0gKnN0ciwgT2JqZWN0ICpwYXJhbXMpOworICBTdHJlYW0gKm1h
a2VGaWx0ZXIoY29uc3QgY2hhciAqbmFtZSwgU3RyZWFtICpzdHIsIE9iamVjdCAqcGFyYW1zKTsK
IAogICBpbnQgcmVmOwkJCS8vIHJlZmVyZW5jZSBjb3VudAogfTsKQEAgLTQ0MCw3ICs0NDAsNyBA
QAogICB2aXJ0dWFsIGludCBnZXRDaGFyKCkKICAgICB7IGludCBjID0gbG9va0NoYXIoKTsgYnVm
ID0gRU9GOyByZXR1cm4gYzsgfQogICB2aXJ0dWFsIGludCBsb29rQ2hhcigpOwotICB2aXJ0dWFs
IEdTdHJpbmcgKmdldFBTRmlsdGVyKGludCBwc0xldmVsLCBjaGFyICppbmRlbnQpOworICB2aXJ0
dWFsIEdTdHJpbmcgKmdldFBTRmlsdGVyKGludCBwc0xldmVsLCBjb25zdCBjaGFyICppbmRlbnQp
OwogICB2aXJ0dWFsIEdCb29sIGlzQmluYXJ5KEdCb29sIGxhc3QgPSBnVHJ1ZSk7CiAKIHByaXZh
dGU6CkBAIC00NjMsNyArNDYzLDcgQEAKICAgdmlydHVhbCBpbnQgZ2V0Q2hhcigpCiAgICAgeyBp
bnQgY2ggPSBsb29rQ2hhcigpOyArK2luZGV4OyByZXR1cm4gY2g7IH0KICAgdmlydHVhbCBpbnQg
bG9va0NoYXIoKTsKLSAgdmlydHVhbCBHU3RyaW5nICpnZXRQU0ZpbHRlcihpbnQgcHNMZXZlbCwg
Y2hhciAqaW5kZW50KTsKKyAgdmlydHVhbCBHU3RyaW5nICpnZXRQU0ZpbHRlcihpbnQgcHNMZXZl
bCwgY29uc3QgY2hhciAqaW5kZW50KTsKICAgdmlydHVhbCBHQm9vbCBpc0JpbmFyeShHQm9vbCBs
YXN0ID0gZ1RydWUpOwogCiBwcml2YXRlOgpAQCAtNDg5LDcgKzQ4OSw3IEBACiAgIHZpcnR1YWwg
aW50IGdldENoYXIoKTsKICAgdmlydHVhbCBpbnQgbG9va0NoYXIoKTsKICAgdmlydHVhbCBpbnQg
Z2V0UmF3Q2hhcigpOwotICB2aXJ0dWFsIEdTdHJpbmcgKmdldFBTRmlsdGVyKGludCBwc0xldmVs
LCBjaGFyICppbmRlbnQpOworICB2aXJ0dWFsIEdTdHJpbmcgKmdldFBTRmlsdGVyKGludCBwc0xl
dmVsLCBjb25zdCBjaGFyICppbmRlbnQpOwogICB2aXJ0dWFsIEdCb29sIGlzQmluYXJ5KEdCb29s
IGxhc3QgPSBnVHJ1ZSk7CiAKIHByaXZhdGU6CkBAIC01MzMsNyArNTMzLDcgQEAKICAgICB7IHJl
dHVybiAoYnVmUHRyID49IGJ1ZkVuZCAmJiAhZmlsbEJ1ZigpKSA/IEVPRiA6ICgqYnVmUHRyKysg
JiAweGZmKTsgfQogICB2aXJ0dWFsIGludCBsb29rQ2hhcigpCiAgICAgeyByZXR1cm4gKGJ1ZlB0
ciA+PSBidWZFbmQgJiYgIWZpbGxCdWYoKSkgPyBFT0YgOiAoKmJ1ZlB0ciAmIDB4ZmYpOyB9Ci0g
IHZpcnR1YWwgR1N0cmluZyAqZ2V0UFNGaWx0ZXIoaW50IHBzTGV2ZWwsIGNoYXIgKmluZGVudCk7
CisgIHZpcnR1YWwgR1N0cmluZyAqZ2V0UFNGaWx0ZXIoaW50IHBzTGV2ZWwsIGNvbnN0IGNoYXIg
KmluZGVudCk7CiAgIHZpcnR1YWwgR0Jvb2wgaXNCaW5hcnkoR0Jvb2wgbGFzdCA9IGdUcnVlKTsK
IAogcHJpdmF0ZToKQEAgLTU2NCw3ICs1NjQsNyBAQAogICB2aXJ0dWFsIGludCBnZXRDaGFyKCkK
ICAgICB7IGludCBjID0gbG9va0NoYXIoKTsgYnVmID0gRU9GOyByZXR1cm4gYzsgfQogICB2aXJ0
dWFsIGludCBsb29rQ2hhcigpOwotICB2aXJ0dWFsIEdTdHJpbmcgKmdldFBTRmlsdGVyKGludCBw
c0xldmVsLCBjaGFyICppbmRlbnQpOworICB2aXJ0dWFsIEdTdHJpbmcgKmdldFBTRmlsdGVyKGlu
dCBwc0xldmVsLCBjb25zdCBjaGFyICppbmRlbnQpOwogICB2aXJ0dWFsIEdCb29sIGlzQmluYXJ5
KEdCb29sIGxhc3QgPSBnVHJ1ZSk7CiAKIHByaXZhdGU6CkBAIC02MzcsNyArNjM3LDcgQEAKICAg
dmlydHVhbCB2b2lkIGNsb3NlKCk7CiAgIHZpcnR1YWwgaW50IGdldENoYXIoKTsKICAgdmlydHVh
bCBpbnQgbG9va0NoYXIoKTsKLSAgdmlydHVhbCBHU3RyaW5nICpnZXRQU0ZpbHRlcihpbnQgcHNM
ZXZlbCwgY2hhciAqaW5kZW50KTsKKyAgdmlydHVhbCBHU3RyaW5nICpnZXRQU0ZpbHRlcihpbnQg
cHNMZXZlbCwgY29uc3QgY2hhciAqaW5kZW50KTsKICAgdmlydHVhbCBHQm9vbCBpc0JpbmFyeShH
Qm9vbCBsYXN0ID0gZ1RydWUpOwogICBTdHJlYW0gKmdldFJhd1N0cmVhbSgpIHsgcmV0dXJuIHN0
cjsgfQogCkBAIC03NDAsNyArNzQwLDcgQEAKICAgdmlydHVhbCBpbnQgZ2V0Q2hhcigpOwogICB2
aXJ0dWFsIGludCBsb29rQ2hhcigpOwogICB2aXJ0dWFsIGludCBnZXRSYXdDaGFyKCk7Ci0gIHZp
cnR1YWwgR1N0cmluZyAqZ2V0UFNGaWx0ZXIoaW50IHBzTGV2ZWwsIGNoYXIgKmluZGVudCk7Cisg
IHZpcnR1YWwgR1N0cmluZyAqZ2V0UFNGaWx0ZXIoaW50IHBzTGV2ZWwsIGNvbnN0IGNoYXIgKmlu
ZGVudCk7CiAgIHZpcnR1YWwgR0Jvb2wgaXNCaW5hcnkoR0Jvb2wgbGFzdCA9IGdUcnVlKTsKIAog
cHJpdmF0ZToKQEAgLTc5Myw3ICs3OTMsNyBAQAogICB2aXJ0dWFsIHZvaWQgcmVzZXQoKSB7fQog
ICB2aXJ0dWFsIGludCBnZXRDaGFyKCkgeyByZXR1cm4gRU9GOyB9CiAgIHZpcnR1YWwgaW50IGxv
b2tDaGFyKCkgeyByZXR1cm4gRU9GOyB9Ci0gIHZpcnR1YWwgR1N0cmluZyAqZ2V0UFNGaWx0ZXIo
aW50IHBzTGV2ZWwsIGNoYXIgKmluZGVudCkgIHsgcmV0dXJuIE5VTEw7IH0KKyAgdmlydHVhbCBH
U3RyaW5nICpnZXRQU0ZpbHRlcihpbnQgcHNMZXZlbCwgY29uc3QgY2hhciAqaW5kZW50KSAgeyBy
ZXR1cm4gTlVMTDsgfQogICB2aXJ0dWFsIEdCb29sIGlzQmluYXJ5KEdCb29sIGxhc3QgPSBnVHJ1
ZSkgeyByZXR1cm4gZ0ZhbHNlOyB9CiB9OwogCkBAIC04MTAsNyArODEwLDcgQEAKICAgdmlydHVh
bCB2b2lkIHJlc2V0KCk7CiAgIHZpcnR1YWwgaW50IGdldENoYXIoKTsKICAgdmlydHVhbCBpbnQg
bG9va0NoYXIoKTsKLSAgdmlydHVhbCBHU3RyaW5nICpnZXRQU0ZpbHRlcihpbnQgcHNMZXZlbCwg
Y2hhciAqaW5kZW50KSB7IHJldHVybiBOVUxMOyB9CisgIHZpcnR1YWwgR1N0cmluZyAqZ2V0UFNG
aWx0ZXIoaW50IHBzTGV2ZWwsIGNvbnN0IGNoYXIgKmluZGVudCkgeyByZXR1cm4gTlVMTDsgfQog
ICB2aXJ0dWFsIEdCb29sIGlzQmluYXJ5KEdCb29sIGxhc3QgPSBnVHJ1ZSk7CiAgIHZpcnR1YWwg
R0Jvb2wgaXNFbmNvZGVyKCkgeyByZXR1cm4gZ1RydWU7IH0KIApAQCAtODM1LDcgKzgzNSw3IEBA
CiAgICAgeyByZXR1cm4gKGJ1ZlB0ciA+PSBidWZFbmQgJiYgIWZpbGxCdWYoKSkgPyBFT0YgOiAo
KmJ1ZlB0cisrICYgMHhmZik7IH0KICAgdmlydHVhbCBpbnQgbG9va0NoYXIoKQogICAgIHsgcmV0
dXJuIChidWZQdHIgPj0gYnVmRW5kICYmICFmaWxsQnVmKCkpID8gRU9GIDogKCpidWZQdHIgJiAw
eGZmKTsgfQotICB2aXJ0dWFsIEdTdHJpbmcgKmdldFBTRmlsdGVyKGludCBwc0xldmVsLCBjaGFy
ICppbmRlbnQpIHsgcmV0dXJuIE5VTEw7IH0KKyAgdmlydHVhbCBHU3RyaW5nICpnZXRQU0ZpbHRl
cihpbnQgcHNMZXZlbCwgY29uc3QgY2hhciAqaW5kZW50KSB7IHJldHVybiBOVUxMOyB9CiAgIHZp
cnR1YWwgR0Jvb2wgaXNCaW5hcnkoR0Jvb2wgbGFzdCA9IGdUcnVlKSB7IHJldHVybiBnRmFsc2U7
IH0KICAgdmlydHVhbCBHQm9vbCBpc0VuY29kZXIoKSB7IHJldHVybiBnVHJ1ZTsgfQogCkBAIC04
NjUsNyArODY1LDcgQEAKICAgICB7IHJldHVybiAoYnVmUHRyID49IGJ1ZkVuZCAmJiAhZmlsbEJ1
ZigpKSA/IEVPRiA6ICgqYnVmUHRyKysgJiAweGZmKTsgfQogICB2aXJ0dWFsIGludCBsb29rQ2hh
cigpCiAgICAgeyByZXR1cm4gKGJ1ZlB0ciA+PSBidWZFbmQgJiYgIWZpbGxCdWYoKSkgPyBFT0Yg
OiAoKmJ1ZlB0ciAmIDB4ZmYpOyB9Ci0gIHZpcnR1YWwgR1N0cmluZyAqZ2V0UFNGaWx0ZXIoaW50
IHBzTGV2ZWwsIGNoYXIgKmluZGVudCkgeyByZXR1cm4gTlVMTDsgfQorICB2aXJ0dWFsIEdTdHJp
bmcgKmdldFBTRmlsdGVyKGludCBwc0xldmVsLCBjb25zdCBjaGFyICppbmRlbnQpIHsgcmV0dXJu
IE5VTEw7IH0KICAgdmlydHVhbCBHQm9vbCBpc0JpbmFyeShHQm9vbCBsYXN0ID0gZ1RydWUpIHsg
cmV0dXJuIGdGYWxzZTsgfQogICB2aXJ0dWFsIEdCb29sIGlzRW5jb2RlcigpIHsgcmV0dXJuIGdU
cnVlOyB9CiAKQEAgLTg5NSw3ICs4OTUsNyBAQAogICAgIHsgcmV0dXJuIChidWZQdHIgPj0gYnVm
RW5kICYmICFmaWxsQnVmKCkpID8gRU9GIDogKCpidWZQdHIrKyAmIDB4ZmYpOyB9CiAgIHZpcnR1
YWwgaW50IGxvb2tDaGFyKCkKICAgICB7IHJldHVybiAoYnVmUHRyID49IGJ1ZkVuZCAmJiAhZmls
bEJ1ZigpKSA/IEVPRiA6ICgqYnVmUHRyICYgMHhmZik7IH0KLSAgdmlydHVhbCBHU3RyaW5nICpn
ZXRQU0ZpbHRlcihpbnQgcHNMZXZlbCwgY2hhciAqaW5kZW50KSB7IHJldHVybiBOVUxMOyB9Cisg
IHZpcnR1YWwgR1N0cmluZyAqZ2V0UFNGaWx0ZXIoaW50IHBzTGV2ZWwsIGNvbnN0IGNoYXIgKmlu
ZGVudCkgeyByZXR1cm4gTlVMTDsgfQogICB2aXJ0dWFsIEdCb29sIGlzQmluYXJ5KEdCb29sIGxh
c3QgPSBnVHJ1ZSkgeyByZXR1cm4gZ1RydWU7IH0KICAgdmlydHVhbCBHQm9vbCBpc0VuY29kZXIo
KSB7IHJldHVybiBnVHJ1ZTsgfQogCmRpZmYgLXVyIHRleGxpdmUtMjAwODA4MTYtc291cmNlL2xp
YnMveHBkZi5vcmlnL3hwZGYvVW5pY29kZU1hcC5jYyB0ZXhsaXZlLTIwMDgwODE2LXNvdXJjZS9s
aWJzL3hwZGYveHBkZi9Vbmljb2RlTWFwLmNjCi0tLSB0ZXhsaXZlLTIwMDgwODE2LXNvdXJjZS9s
aWJzL3hwZGYub3JpZy94cGRmL1VuaWNvZGVNYXAuY2MJMjAwNi0wMS0xNiAwMzowOToyNi4wMDAw
MDAwMDAgKzAzMDAKKysrIHRleGxpdmUtMjAwODA4MTYtc291cmNlL2xpYnMveHBkZi94cGRmL1Vu
aWNvZGVNYXAuY2MJMjAwOC0xMS0yMSAxNzoyMDo1MC4wMDAwMDAwMDAgKzAzMDAKQEAgLTEyMSw3
ICsxMjEsNyBAQAogI2VuZGlmCiB9CiAKLVVuaWNvZGVNYXA6OlVuaWNvZGVNYXAoY2hhciAqZW5j
b2RpbmdOYW1lQSwgR0Jvb2wgdW5pY29kZU91dEEsCitVbmljb2RlTWFwOjpVbmljb2RlTWFwKGNv
bnN0IGNoYXIgKmVuY29kaW5nTmFtZUEsIEdCb29sIHVuaWNvZGVPdXRBLAogCQkgICAgICAgVW5p
Y29kZU1hcFJhbmdlICpyYW5nZXNBLCBpbnQgbGVuQSkgewogICBlbmNvZGluZ05hbWUgPSBuZXcg
R1N0cmluZyhlbmNvZGluZ05hbWVBKTsKICAgdW5pY29kZU91dCA9IHVuaWNvZGVPdXRBOwpAQCAt
MTM2LDcgKzEzNiw3IEBACiAjZW5kaWYKIH0KIAotVW5pY29kZU1hcDo6VW5pY29kZU1hcChjaGFy
ICplbmNvZGluZ05hbWVBLCBHQm9vbCB1bmljb2RlT3V0QSwKK1VuaWNvZGVNYXA6OlVuaWNvZGVN
YXAoY29uc3QgY2hhciAqZW5jb2RpbmdOYW1lQSwgR0Jvb2wgdW5pY29kZU91dEEsCiAJCSAgICAg
ICBVbmljb2RlTWFwRnVuYyBmdW5jQSkgewogICBlbmNvZGluZ05hbWUgPSBuZXcgR1N0cmluZyhl
bmNvZGluZ05hbWVBKTsKICAgdW5pY29kZU91dCA9IHVuaWNvZGVPdXRBOwpkaWZmIC11ciB0ZXhs
aXZlLTIwMDgwODE2LXNvdXJjZS9saWJzL3hwZGYub3JpZy94cGRmL1VuaWNvZGVNYXAuaCB0ZXhs
aXZlLTIwMDgwODE2LXNvdXJjZS9saWJzL3hwZGYveHBkZi9Vbmljb2RlTWFwLmgKLS0tIHRleGxp
dmUtMjAwODA4MTYtc291cmNlL2xpYnMveHBkZi5vcmlnL3hwZGYvVW5pY29kZU1hcC5oCTIwMDYt
MDEtMTYgMDM6MDk6MjYuMDAwMDAwMDAwICswMzAwCisrKyB0ZXhsaXZlLTIwMDgwODE2LXNvdXJj
ZS9saWJzL3hwZGYveHBkZi9Vbmljb2RlTWFwLmgJMjAwOC0xMS0yMSAxNzoyMDozNC4wMDAwMDAw
MDAgKzAzMDAKQEAgLTUzLDEyICs1MywxMiBAQAogICBzdGF0aWMgVW5pY29kZU1hcCAqcGFyc2Uo
R1N0cmluZyAqZW5jb2RpbmdOYW1lQSk7CiAKICAgLy8gQ3JlYXRlIGEgcmVzaWRlbnQgVW5pY29k
ZU1hcC4KLSAgVW5pY29kZU1hcChjaGFyICplbmNvZGluZ05hbWVBLCBHQm9vbCB1bmljb2RlT3V0
QSwKKyAgVW5pY29kZU1hcChjb25zdCBjaGFyICplbmNvZGluZ05hbWVBLCBHQm9vbCB1bmljb2Rl
T3V0QSwKIAkgICAgIFVuaWNvZGVNYXBSYW5nZSAqcmFuZ2VzQSwgaW50IGxlbkEpOwogCiAgIC8v
IENyZWF0ZSBhIHJlc2lkZW50IFVuaWNvZGVNYXAgdGhhdCB1c2VzIGEgZnVuY3Rpb24gaW5zdGVh
ZCBvZiBhCiAgIC8vIGxpc3Qgb2YgcmFuZ2VzLgotICBVbmljb2RlTWFwKGNoYXIgKmVuY29kaW5n
TmFtZUEsIEdCb29sIHVuaWNvZGVPdXRBLAorICBVbmljb2RlTWFwKGNvbnN0IGNoYXIgKmVuY29k
aW5nTmFtZUEsIEdCb29sIHVuaWNvZGVPdXRBLAogCSAgICAgVW5pY29kZU1hcEZ1bmMgZnVuY0Ep
OwogCiAgIH5Vbmljb2RlTWFwKCk7Cg==
</data>        

          </attachment>
    </bug>

</bugzilla>