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

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>6705</bug_id>
          
          <creation_ts>2006-01-21 19:46:52 -0800</creation_ts>
          <short_desc>use PassRefPtr in more of the basic DOM operations</short_desc>
          <delta_ts>2019-02-06 09:02:30 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</component>
          <version>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>andersca</cc>
    
    <cc>cdumez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>29294</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-01-21 19:46:52 -0800</bug_when>
    <thetext>I was looking at some bug (can&apos;t remember which) and came to the conclusion that to fix it I would want to change cloneNode to return PassRefPtr as we&apos;ve long planned.

When I started on that, the patch got too big, so I decided to start a bit smaller by changing the other basic DOM operations to use PassRefPtr instead of raw pointers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>29295</commentid>
    <comment_count>1</comment_count>
      <attachid>5824</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-01-21 19:47:30 -0800</bug_when>
    <thetext>Created attachment 5824
less raw pointer, more PassRefPtr</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>29388</commentid>
    <comment_count>2</comment_count>
      <attachid>5824</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2006-01-22 04:54:35 -0800</bug_when>
    <thetext>Comment on attachment 5824
less raw pointer, more PassRefPtr

Looks good, just a few stylistic comments:

* In ContainerNodeImpl::insertBefore:

-            newParent-&gt;removeChild( child, exceptioncode );
-        if (exceptioncode)
+            newParent-&gt;removeChild( child, ec );
+        if (ec)

the spacing should be fixed in the call to removeChild

ContainerNodeImpl::removeChild:

+    if (next) next-&gt;setPreviousSibling(prev);
+    if (prev) prev-&gt;setNextSibling(next);
+    if (m_firstChild == child) m_firstChild = next;
+    if (m_lastChild == child) m_lastChild = prev;

the statements should be on a separate line from the expressions, like in ContainerNodeImpl::replaceChild

* HTMLOptGroupElementImpl::insertBefore: 

the spacing in the function call declaration should be fixed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1502782</commentid>
    <comment_count>3</comment_count>
    <who name="Lucas Forschler">lforschler</who>
    <bug_when>2019-02-06 09:02:30 -0800</bug_when>
    <thetext>Mass moving XML DOM bugs to the &quot;DOM&quot; Component.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>5824</attachid>
            <date>2006-01-21 19:47:30 -0800</date>
            <delta_ts>2006-01-22 04:54:35 -0800</delta_ts>
            <desc>less raw pointer, more PassRefPtr</desc>
            <filename>PassRefPtrPatch.txt</filename>
            <type>text/plain</type>
            <size>89577</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IGtodG1sL3htbC9Ob2RlSW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtodG1sL3htbC9Ob2Rl
SW1wbC5oCShyZXZpc2lvbiAxMjI3OCkKKysrIGtodG1sL3htbC9Ob2RlSW1wbC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiU2hhcmVkLmgiCiAjaW5jbHVkZSAi
ZG9tX3N0cmluZy5oIgogI2luY2x1ZGUgPGt4bWxjb3JlL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDxr
eG1sY29yZS9QYXNzUmVmUHRyLmg+CiAKIGNsYXNzIFFLZXlFdmVudDsKIGNsYXNzIFFNb3VzZUV2
ZW50OwpAQCAtMzgsMTEgKzM5LDEyIEBACiBjbGFzcyBRV2hlZWxFdmVudDsKIGNsYXNzIFJlbmRl
ckFyZW5hOwogCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gY2xhc3MgUVB0ckxpc3Q7Cit0ZW1wbGF0ZSA8
dHlwZW5hbWUgVD4gY2xhc3MgUVB0ckxpc3Q7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xh
c3MgQXRvbWljU3RyaW5nOworY2xhc3MgQ29udGFpbmVyTm9kZUltcGw7CiBjbGFzcyBEb2N1bWVu
dEltcGw7CiBjbGFzcyBFbGVtZW50SW1wbDsKIGNsYXNzIEV2ZW50SW1wbDsKQEAgLTU1LDU1ICs1
Nyw2MSBAQAogY2xhc3MgUmVuZGVyT2JqZWN0OwogY2xhc3MgUmVuZGVyU3R5bGU7CiAKK3R5cGVk
ZWYgaW50IEV4Y2VwdGlvbkNvZGU7CisKIC8vIHRoaXMgY2xhc3MgaW1wbGVtZW50cyBub2Rlcywg
d2hpY2ggY2FuIGhhdmUgYSBwYXJlbnQgYnV0IG5vIGNoaWxkcmVuOgogY2xhc3MgTm9kZUltcGwg
OiBwdWJsaWMgVHJlZVNoYXJlZDxOb2RlSW1wbD4KIHsKICAgICBmcmllbmQgY2xhc3MgRG9jdW1l
bnRJbXBsOwogcHVibGljOgotICAgIE5vZGVJbXBsKERvY3VtZW50SW1wbCAqZG9jKTsKKyAgICBO
b2RlSW1wbChEb2N1bWVudEltcGwqKTsKICAgICB2aXJ0dWFsIH5Ob2RlSW1wbCgpOwogCiAgICAg
Ly8gRE9NIG1ldGhvZHMgJiBhdHRyaWJ1dGVzIGZvciBOb2RlCi0gICAgdmlydHVhbCBib29sIGhh
c1RhZ05hbWUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KKworICAgIHZpcnR1YWwgYm9vbCBoYXNUYWdOYW1lKGNvbnN0IFF1YWxpZmllZE5hbWUm
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgRE9NU3RyaW5nIG5vZGVOYW1l
KCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgRE9NU3RyaW5nIG5vZGVWYWx1ZSgpIGNvbnN0Owot
ICAgIHZpcnR1YWwgdm9pZCBzZXROb2RlVmFsdWUoIGNvbnN0IERPTVN0cmluZyAmX25vZGVWYWx1
ZSwgaW50ICZleGNlcHRpb25jb2RlICk7CisgICAgdmlydHVhbCB2b2lkIHNldE5vZGVWYWx1ZShj
b25zdCBET01TdHJpbmcmLCBFeGNlcHRpb25Db2RlJik7CiAgICAgdmlydHVhbCB1bnNpZ25lZCBz
aG9ydCBub2RlVHlwZSgpIGNvbnN0ID0gMDsKLSAgICBOb2RlSW1wbCAqcGFyZW50Tm9kZSgpIGNv
bnN0IHsgcmV0dXJuIHBhcmVudCgpOyB9Ci0gICAgTm9kZUltcGwgKnByZXZpb3VzU2libGluZygp
IGNvbnN0IHsgcmV0dXJuIG1fcHJldmlvdXM7IH0KLSAgICBOb2RlSW1wbCAqbmV4dFNpYmxpbmco
KSBjb25zdCB7IHJldHVybiBtX25leHQ7IH0KLSAgICB2aXJ0dWFsIFJlZlB0cjxOb2RlTGlzdElt
cGw+IGNoaWxkTm9kZXMoKTsKLSAgICB2aXJ0dWFsIE5vZGVJbXBsICpmaXJzdENoaWxkKCkgY29u
c3Q7Ci0gICAgdmlydHVhbCBOb2RlSW1wbCAqbGFzdENoaWxkKCkgY29uc3Q7CisgICAgTm9kZUlt
cGwqIHBhcmVudE5vZGUoKSBjb25zdCB7IHJldHVybiBwYXJlbnQoKTsgfQorICAgIE5vZGVJbXBs
KiBwcmV2aW91c1NpYmxpbmcoKSBjb25zdCB7IHJldHVybiBtX3ByZXZpb3VzOyB9CisgICAgTm9k
ZUltcGwqIG5leHRTaWJsaW5nKCkgY29uc3QgeyByZXR1cm4gbV9uZXh0OyB9CisgICAgdmlydHVh
bCBQYXNzUmVmUHRyPE5vZGVMaXN0SW1wbD4gY2hpbGROb2RlcygpOworICAgIHZpcnR1YWwgTm9k
ZUltcGwqIGZpcnN0Q2hpbGQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIE5vZGVJbXBsKiBsYXN0Q2hp
bGQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaGFzQXR0cmlidXRlcygpIGNvbnN0OwotICAg
IHZpcnR1YWwgTmFtZWRBdHRyTWFwSW1wbCAqYXR0cmlidXRlcygpIGNvbnN0OwotICAgIHZpcnR1
YWwgRG9jdW1lbnRJbXBsICpvd25lckRvY3VtZW50KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBOb2Rl
SW1wbCAqaW5zZXJ0QmVmb3JlICggTm9kZUltcGwgKm5ld0NoaWxkLCBOb2RlSW1wbCAqcmVmQ2hp
bGQsIGludCAmZXhjZXB0aW9uY29kZSApOwotICAgIHZpcnR1YWwgTm9kZUltcGwgKnJlcGxhY2VD
aGlsZCAoIE5vZGVJbXBsICpuZXdDaGlsZCwgTm9kZUltcGwgKm9sZENoaWxkLCBpbnQgJmV4Y2Vw
dGlvbmNvZGUgKTsKLSAgICB2aXJ0dWFsIE5vZGVJbXBsICpyZW1vdmVDaGlsZCAoIE5vZGVJbXBs
ICpvbGRDaGlsZCwgaW50ICZleGNlcHRpb25jb2RlICk7Ci0gICAgdmlydHVhbCBOb2RlSW1wbCAq
YXBwZW5kQ2hpbGQgKCBOb2RlSW1wbCAqbmV3Q2hpbGQsIGludCAmZXhjZXB0aW9uY29kZSApOwot
ICAgIHZpcnR1YWwgdm9pZCByZW1vdmUoaW50ICZleGNlcHRpb25jb2RlKTsKLSAgICB2aXJ0dWFs
IGJvb2wgaGFzQ2hpbGROb2RlcyAoICApIGNvbnN0OwotICAgIHZpcnR1YWwgTm9kZUltcGwgKmNs
b25lTm9kZSAoIGJvb2wgZGVlcCApID0gMDsKKyAgICB2aXJ0dWFsIE5hbWVkQXR0ck1hcEltcGwq
IGF0dHJpYnV0ZXMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIERvY3VtZW50SW1wbCogb3duZXJEb2N1
bWVudCgpIGNvbnN0OworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxOb2RlSW1wbD4gaW5zZXJ0QmVm
b3JlKFBhc3NSZWZQdHI8Tm9kZUltcGw+IG5ld0NoaWxkLCBOb2RlSW1wbCogcmVmQ2hpbGQsIEV4
Y2VwdGlvbkNvZGUmKTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Tm9kZUltcGw+IHJlcGxhY2VD
aGlsZChQYXNzUmVmUHRyPE5vZGVJbXBsPiBuZXdDaGlsZCwgTm9kZUltcGwqIG9sZENoaWxkLCBF
eGNlcHRpb25Db2RlJik7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPE5vZGVJbXBsPiByZW1vdmVD
aGlsZChOb2RlSW1wbCogY2hpbGQsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2aXJ0dWFsIFBhc3NS
ZWZQdHI8Tm9kZUltcGw+IGFwcGVuZENoaWxkKFBhc3NSZWZQdHI8Tm9kZUltcGw+IG5ld0NoaWxk
LCBFeGNlcHRpb25Db2RlJik7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZShFeGNlcHRpb25Db2Rl
Jik7CisgICAgdmlydHVhbCBib29sIGhhc0NoaWxkTm9kZXMoKSBjb25zdDsKKyAgICAvLyBGSVhN
RTogQ2hhbmdlIHRvIHJldHVybiBQYXNzUmVmUHRyLgorICAgIHZpcnR1YWwgTm9kZUltcGwqIGNs
b25lTm9kZShib29sIGRlZXApID0gMDsKICAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYg
bG9jYWxOYW1lKCkgY29uc3Q7CiAgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVz
cGFjZVVSSSgpIGNvbnN0OwogICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBwcmVmaXgo
KSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0UHJlZml4KGNvbnN0IEF0b21pY1N0cmluZyAm
X3ByZWZpeCwgaW50ICZleGNlcHRpb25jb2RlKTsKLSAgICB2b2lkIG5vcm1hbGl6ZSAoKTsKLSAg
ICBzdGF0aWMgYm9vbCBpc1N1cHBvcnRlZChjb25zdCBET01TdHJpbmcgJmZlYXR1cmUsIGNvbnN0
IERPTVN0cmluZyAmdmVyc2lvbik7CisgICAgdmlydHVhbCB2b2lkIHNldFByZWZpeChjb25zdCBB
dG9taWNTdHJpbmcmLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCBub3JtYWxpemUoKTsKKyAg
ICBzdGF0aWMgYm9vbCBpc1N1cHBvcnRlZChjb25zdCBET01TdHJpbmcmIGZlYXR1cmUsIGNvbnN0
IERPTVN0cmluZyYgdmVyc2lvbik7CiAKLSAgICBib29sIGlzU2FtZU5vZGUoTm9kZUltcGwgKm90
aGVyKSBjb25zdCB7IHJldHVybiB0aGlzID09IG90aGVyOyB9Ci0gICAgYm9vbCBpc0VxdWFsTm9k
ZShOb2RlSW1wbCAqb3RoZXIpIGNvbnN0OwotICAgIGJvb2wgaXNEZWZhdWx0TmFtZXNwYWNlKGNv
bnN0IERPTVN0cmluZyAmbmFtZXNwYWNlVVJJKSBjb25zdDsKLSAgICBET01TdHJpbmcgbG9va3Vw
UHJlZml4KGNvbnN0IERPTVN0cmluZyAmbmFtZXNwYWNlVVJJKSBjb25zdDsKLSAgICBET01TdHJp
bmcgbG9va3VwTmFtZXNwYWNlVVJJKGNvbnN0IERPTVN0cmluZyAmcHJlZml4KSBjb25zdDsKKyAg
ICBib29sIGlzU2FtZU5vZGUoTm9kZUltcGwqIG90aGVyKSBjb25zdCB7IHJldHVybiB0aGlzID09
IG90aGVyOyB9CisgICAgYm9vbCBpc0VxdWFsTm9kZShOb2RlSW1wbCopIGNvbnN0OworICAgIGJv
b2wgaXNEZWZhdWx0TmFtZXNwYWNlKGNvbnN0IERPTVN0cmluZyYgbmFtZXNwYWNlVVJJKSBjb25z
dDsKKyAgICBET01TdHJpbmcgbG9va3VwUHJlZml4KGNvbnN0IERPTVN0cmluZyYgbmFtZXNwYWNl
VVJJKSBjb25zdDsKKyAgICBET01TdHJpbmcgbG9va3VwTmFtZXNwYWNlVVJJKGNvbnN0IERPTVN0
cmluZyYgcHJlZml4KSBjb25zdDsKKyAgICBET01TdHJpbmcgbG9va3VwTmFtZXNwYWNlUHJlZml4
KGNvbnN0IERPTVN0cmluZyYgbmFtZXNwYWNlVVJJLCBjb25zdCBFbGVtZW50SW1wbCogb3JpZ2lu
YWxFbGVtZW50KSBjb25zdDsKICAgICAKICAgICBET01TdHJpbmcgdGV4dENvbnRlbnQoKSBjb25z
dDsKLSAgICB2b2lkIHNldFRleHRDb250ZW50KGNvbnN0IERPTVN0cmluZyAmdGV4dCwgaW50ICZl
eGNlcHRpb24pOworICAgIHZvaWQgc2V0VGV4dENvbnRlbnQoY29uc3QgRE9NU3RyaW5nJiwgaW50
ICZleGNlcHRpb24pOwogICAgIAotICAgIE5vZGVJbXBsICpsYXN0RGVzY2VuZGFudCgpIGNvbnN0
OworICAgIE5vZGVJbXBsKiBsYXN0RGVzY2VuZGFudCgpIGNvbnN0OwogCiAgICAgLy8gT3RoZXIg
bWV0aG9kcyAobm90IHBhcnQgb2YgRE9NKQorCiAgICAgdmlydHVhbCBib29sIGlzRWxlbWVudE5v
ZGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc0hUTUxFbGVt
ZW50KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICNpZiBTVkdfU1VQUE9SVApAQCAtMTIwLDU5
ICsxMjgsNTYgQEAKICAgICAvLyBVc2VkIGJ5IDxmb3JtPiBlbGVtZW50cyB0byBpbmRpY2F0ZSBh
IG1hbGZvcm1lZCBzdGF0ZSBvZiBzb21lIGtpbmQsIHR5cGljYWxseQogICAgIC8vIHVzZWQgdG8g
a2VlcCBmcm9tIGFwcGx5aW5nIHRoZSBib3R0b20gbWFyZ2luIG9mIHRoZSBmb3JtLgogICAgIHZp
cnR1YWwgYm9vbCBpc01hbGZvcm1lZCgpIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCB2
b2lkIHNldE1hbGZvcm1lZChib29sIG1hbGZvcm1lZCkge307CisgICAgdmlydHVhbCB2b2lkIHNl
dE1hbGZvcm1lZChib29sIG1hbGZvcm1lZCkgeyB9CiAgICAgCi0gICAgLy8gaGVscGVyIGZ1bmN0
aW9ucyBub3QgYmVpbmcgcGFydCBvZiB0aGUgRE9NCi0gICAgLy8gQXR0ZW50aW9uOiB0aGV5IGFz
c3VtZSB0aGF0IHRoZSBjYWxsZXIgZGlkIHRoZSBjb25zaXN0ZW5jeSBjaGVja2luZyEKLSAgICB2
b2lkIHNldFByZXZpb3VzU2libGluZyhOb2RlSW1wbCAqcHJldmlvdXMpIHsgbV9wcmV2aW91cyA9
IHByZXZpb3VzOyB9Ci0gICAgdm9pZCBzZXROZXh0U2libGluZyhOb2RlSW1wbCAqbmV4dCkgeyBt
X25leHQgPSBuZXh0OyB9CisgICAgLy8gVGhlc2UgbG93LWxldmVsIGNhbGxzIGdpdmUgdGhlIGNh
bGxlciByZXNwb25zaWJpbGl0eSBmb3IgbWFpbnRhaW5pbmcgdGhlIGludGVncml0eSBvZiB0aGUg
dHJlZS4KKyAgICB2b2lkIHNldFByZXZpb3VzU2libGluZyhOb2RlSW1wbCogcHJldmlvdXMpIHsg
bV9wcmV2aW91cyA9IHByZXZpb3VzOyB9CisgICAgdm9pZCBzZXROZXh0U2libGluZyhOb2RlSW1w
bCogbmV4dCkgeyBtX25leHQgPSBuZXh0OyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Rmlyc3RD
aGlsZChOb2RlSW1wbCAqY2hpbGQpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRMYXN0Q2hpbGQoTm9k
ZUltcGwgKmNoaWxkKTsKLQotICAgIE5vZGVJbXBsICpwcmV2aW91c05vZGVDb25zaWRlcmluZ0F0
b21pY05vZGVzKCkgY29uc3Q7Ci0gICAgTm9kZUltcGwgKm5leHROb2RlQ29uc2lkZXJpbmdBdG9t
aWNOb2RlcygpIGNvbnN0OworICAgIC8vIEZJWE1FOiBUaGVzZSB0d28gZnVuY3Rpb25zIGJlbG9u
ZyBpbiBlZGl0aW5nIC0tICJhdG9taWMgbm9kZSIgaXMgYW4gZWRpdGluZyBjb25jZXB0LgorICAg
IE5vZGVJbXBsKiBwcmV2aW91c05vZGVDb25zaWRlcmluZ0F0b21pY05vZGVzKCkgY29uc3Q7Cisg
ICAgTm9kZUltcGwqIG5leHROb2RlQ29uc2lkZXJpbmdBdG9taWNOb2RlcygpIGNvbnN0OwogICAg
IAotICAgIEVsZW1lbnRJbXBsICpnZXRBbmNlc3RvckVsZW1lbnQoKSBjb25zdDsKLSAgICBET01T
dHJpbmcgbG9va3VwTmFtZXNwYWNlUHJlZml4KGNvbnN0IERPTVN0cmluZyAmX25hbWVzcGFjZVVS
SSwgY29uc3QgRWxlbWVudEltcGwgKm9yaWdpbmFsRWxlbWVudCkgY29uc3Q7Ci0gICAgCiAgICAg
LyoqIChOb3QgcGFydCBvZiB0aGUgb2ZmaWNpYWwgRE9NKQogICAgICAqIFJldHVybnMgdGhlIG5l
eHQgbGVhZiBub2RlLgogICAgICAqCi0gICAgICogVXNpbmcgdGhpcyBmdW5jdGlvbiBkZWxpdmVy
cyBsZWFmIG5vZGVzIGFzIGlmIHRoZSB3aG9sZSBET00gdHJlZQotICAgICAqIHdlcmUgYSBsaW5l
YXIgY2hhaW4gb2YgaXRzIGxlYWYgbm9kZXMuCisgICAgICogVXNpbmcgdGhpcyBmdW5jdGlvbiBk
ZWxpdmVycyBsZWFmIG5vZGVzIGFzIGlmIHRoZSB3aG9sZSBET00gdHJlZSB3ZXJlIGEgbGluZWFy
IGNoYWluIG9mIGl0cyBsZWFmIG5vZGVzLgogICAgICAqIEByZXR1cm4gbmV4dCBsZWFmIG5vZGUg
b3IgMCBpZiB0aGVyZSBhcmUgbm8gbW9yZS4KICAgICAgKi8KLSAgICBOb2RlSW1wbCAqbmV4dExl
YWZOb2RlKCkgY29uc3Q7CisgICAgTm9kZUltcGwqIG5leHRMZWFmTm9kZSgpIGNvbnN0OwogCiAg
ICAgLyoqIChOb3QgcGFydCBvZiB0aGUgb2ZmaWNpYWwgRE9NKQogICAgICAqIFJldHVybnMgdGhl
IHByZXZpb3VzIGxlYWYgbm9kZS4KICAgICAgKgotICAgICAqIFVzaW5nIHRoaXMgZnVuY3Rpb24g
ZGVsaXZlcnMgbGVhZiBub2RlcyBhcyBpZiB0aGUgd2hvbGUgRE9NIHRyZWUKLSAgICAgKiB3ZXJl
IGEgbGluZWFyIGNoYWluIG9mIGl0cyBsZWFmIG5vZGVzLgorICAgICAqIFVzaW5nIHRoaXMgZnVu
Y3Rpb24gZGVsaXZlcnMgbGVhZiBub2RlcyBhcyBpZiB0aGUgd2hvbGUgRE9NIHRyZWUgd2VyZSBh
IGxpbmVhciBjaGFpbiBvZiBpdHMgbGVhZiBub2Rlcy4KICAgICAgKiBAcmV0dXJuIHByZXZpb3Vz
IGxlYWYgbm9kZSBvciAwIGlmIHRoZXJlIGFyZSBubyBtb3JlLgogICAgICAqLwotICAgIE5vZGVJ
bXBsICpwcmV2aW91c0xlYWZOb2RlKCkgY29uc3Q7CisgICAgTm9kZUltcGwqIHByZXZpb3VzTGVh
Zk5vZGUoKSBjb25zdDsKIAogICAgIGJvb2wgaXNFZGl0YWJsZUJsb2NrKCkgY29uc3Q7Ci0gICAg
RWxlbWVudEltcGwgKmVuY2xvc2luZ0Jsb2NrRmxvd0VsZW1lbnQoKSBjb25zdDsKLSAgICBFbGVt
ZW50SW1wbCAqZW5jbG9zaW5nQmxvY2tGbG93T3JUYWJsZUVsZW1lbnQoKSBjb25zdDsKLSAgICBF
bGVtZW50SW1wbCAqZW5jbG9zaW5nSW5saW5lRWxlbWVudCgpIGNvbnN0OwotICAgIEVsZW1lbnRJ
bXBsICpyb290RWRpdGFibGVFbGVtZW50KCkgY29uc3Q7CisgICAgRWxlbWVudEltcGwqIGVuY2xv
c2luZ0Jsb2NrRmxvd0VsZW1lbnQoKSBjb25zdDsKKyAgICBFbGVtZW50SW1wbCogZW5jbG9zaW5n
QmxvY2tGbG93T3JUYWJsZUVsZW1lbnQoKSBjb25zdDsKKyAgICBFbGVtZW50SW1wbCogZW5jbG9z
aW5nSW5saW5lRWxlbWVudCgpIGNvbnN0OworICAgIEVsZW1lbnRJbXBsKiByb290RWRpdGFibGVF
bGVtZW50KCkgY29uc3Q7CiAgICAgCi0gICAgYm9vbCBpblNhbWVSb290RWRpdGFibGVFbGVtZW50
KE5vZGVJbXBsICopOwotICAgIGJvb2wgaW5TYW1lQ29udGFpbmluZ0Jsb2NrRmxvd0VsZW1lbnQo
Tm9kZUltcGwgKik7CisgICAgYm9vbCBpblNhbWVSb290RWRpdGFibGVFbGVtZW50KE5vZGVJbXBs
Kik7CisgICAgYm9vbCBpblNhbWVDb250YWluaW5nQmxvY2tGbG93RWxlbWVudChOb2RlSW1wbCop
OwogICAgIAotICAgIC8vIHVzZWQgYnkgdGhlIHBhcnNlci4gQ2hlY2tzIGFnYWluc3QgdGhlIERU
RCwgdW5saWtlIERPTSBvcGVyYXRpb25zIGxpa2UKLSAgICAvLyBhcHBlbmRDaGlsZCgpLCBhbmQg
cmV0dXJucyB0aGUgbmV3IGNvbnRhaW5lciBub2RlIGZvciBmdXR1cmUgaW5zZXJ0aW9ucyBhcyB5
b3UgcGFyc2UuCi0gICAgdmlydHVhbCBOb2RlSW1wbCAqYWRkQ2hpbGQoTm9kZUltcGwgKm5ld0No
aWxkKTsKLSAgICAKLSAgICAvLyBjYWxsZWQgYnkgdGhlIHBhcnNlciB3aGVuIHRoaXMgZWxlbWVu
dCdzIGNsb3NlIHRhZyBpcyByZWFjaGVkLAorICAgIC8vIFVzZWQgYnkgdGhlIHBhcnNlci4gQ2hl
Y2tzIGFnYWluc3QgdGhlIERURCwgdW5saWtlIERPTSBvcGVyYXRpb25zIGxpa2UgYXBwZW5kQ2hp
bGQoKS4KKyAgICAvLyBBbHNvIGRvZXMgbm90IGRpc3BhdGNoIERPTSBtdXRhdGlvbiBldmVudHMu
CisgICAgLy8gUmV0dXJucyB0aGUgYXBwcm9wcmlhdGUgY29udGFpbmVyIG5vZGUgZm9yIGZ1dHVy
ZSBpbnNlcnRpb25zIGFzIHlvdSBwYXJzZSwgb3IgMCBmb3IgZmFpbHVyZS4KKyAgICB2aXJ0dWFs
IENvbnRhaW5lck5vZGVJbXBsKiBhZGRDaGlsZChQYXNzUmVmUHRyPE5vZGVJbXBsPik7CisKKyAg
ICAvLyBDYWxsZWQgYnkgdGhlIHBhcnNlciB3aGVuIHRoaXMgZWxlbWVudCdzIGNsb3NlIHRhZyBp
cyByZWFjaGVkLAogICAgIC8vIHNpZ25hbGxpbmcgdGhhdCBhbGwgY2hpbGQgdGFncyBoYXZlIGJl
ZW4gcGFyc2VkIGFuZCBhZGRlZC4KLSAgICAvLyBUaGlzIGlzIG9ubHkgbmVlZGVkIGZvciA8YXBw
bGV0PiBhbmQgPG9iamVjdD4gZWxlbWVudHMsIHdoaWNoIGNhbid0IGxheSB0aGVtc2VsdmVzIG91
dAotICAgIC8vIHVudGlsIHRoZXkga25vdyBhbGwgb2YgdGhlaXIgbmVzdGVkIDxwYXJhbT5zLiBb
MzYwMzE5MSwgNDA0MDg0OF0KLSAgICB2aXJ0dWFsIHZvaWQgY2xvc2VSZW5kZXJlcigpIHt9Cisg
ICAgLy8gVGhpcyBpcyBuZWVkZWQgZm9yIDxhcHBsZXQ+IGFuZCA8b2JqZWN0PiBlbGVtZW50cywg
d2hpY2ggY2FuJ3QgbGF5IHRoZW1zZWx2ZXMgb3V0CisgICAgLy8gdW50aWwgdGhleSBrbm93IGFs
bCBvZiB0aGVpciBuZXN0ZWQgPHBhcmFtPnMuIFtSYWRhciAzNjAzMTkxLCA0MDQwODQ4XS4KKyAg
ICAvLyBBbHNvIHVzZWQgZm9yIHNjcmlwdCBlbGVtZW50cyBhbmQgc29tZSBTVkcgZWxlbWVudHMg
Zm9yIHNpbWlsYXIgcHVycG9zZXMsCisgICAgLy8gYnV0IG1ha2luZyBwYXJzaW5nIGEgc3BlY2lh
bCBjYXNlIGluIHRoaXMgcmVzcGVjdCBzaG91bGQgYmUgYXZvaWRlZCBpZiBwb3NzaWJsZS4KKyAg
ICB2aXJ0dWFsIHZvaWQgY2xvc2VSZW5kZXJlcigpIHsgfQogCisgICAgLy8gRklYTUU6IE1vdmUg
dGhpcyBNb3VzZUV2ZW50IHN0dWZmIHNvbWV3aGVyZSBlbHNlIGFuZCByZWNvbmNpbGUgd2l0aCBX
ZWJDb3JlOjpNb3VzZUV2ZW50LgorICAgIC8vIE1vdXNlRXZlbnQgaXMgbm90IHVzZWQgaW4gTm9k
ZUltcGwgYXQgYWxsLgogICAgIGVudW0gTW91c2VFdmVudFR5cGUgewogICAgICAgICBNb3VzZVBy
ZXNzLAogICAgICAgICBNb3VzZVJlbGVhc2UsCkBAIC0xODAsMTcgKzE4NSwxMiBAQAogICAgICAg
ICBNb3VzZURibENsaWNrLAogICAgICAgICBNb3VzZU1vdmUKICAgICB9OwotCiAgICAgc3RydWN0
IE1vdXNlRXZlbnQKICAgICB7Ci0gICAgICAgIE1vdXNlRXZlbnQoIGludCBfYnV0dG9uLCBNb3Vz
ZUV2ZW50VHlwZSBfdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgRE9NU3RyaW5nICZf
dXJsID0gRE9NU3RyaW5nKCksIGNvbnN0IERPTVN0cmluZyYgX3RhcmdldCA9IERPTVN0cmluZygp
LAotICAgICAgICAgICAgICAgICAgICBOb2RlSW1wbCAqX2lubmVyTm9kZSA9IDApCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgYnV0dG9uID0gX2J1dHRvbjsgdHlwZSA9IF90eXBlOwot
ICAgICAgICAgICAgICAgIHVybCA9IF91cmw7IHRhcmdldCA9IF90YXJnZXQ7Ci0gICAgICAgICAg
ICAgICAgaW5uZXJOb2RlID0gX2lubmVyTm9kZTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgTW91
c2VFdmVudChpbnQgYiwgTW91c2VFdmVudFR5cGUgdCwgY29uc3QgRE9NU3RyaW5nJiB1ID0gRE9N
U3RyaW5nKCksCisgICAgICAgICAgICBjb25zdCBET01TdHJpbmcmIHRhID0gRE9NU3RyaW5nKCks
IFBhc3NSZWZQdHI8Tm9kZUltcGw+IG4gPSAwKQorICAgICAgICAgICAgOiBidXR0b24oYiksIHR5
cGUodCksIHVybCh1KSwgdGFyZ2V0KHRhKSwgaW5uZXJOb2RlKG4pCisgICAgICAgIHsgfQogCiAg
ICAgICAgIGludCBidXR0b247CiAgICAgICAgIE1vdXNlRXZlbnRUeXBlIHR5cGU7CkBAIC0xOTks
MzggKzE5OSw0MCBAQAogICAgICAgICBSZWZQdHI8Tm9kZUltcGw+IGlubmVyTm9kZTsKICAgICB9
OwogCi0gICAgLy8gZm9yIExJTksgYW5kIFNUWUxFCi0gICAgdmlydHVhbCB2b2lkIHNoZWV0TG9h
ZGVkKCkge30KKyAgICAvLyBGb3IgPGxpbms+IGFuZCA8c3R5bGU+IGVsZW1lbnRzLgorICAgIHZp
cnR1YWwgdm9pZCBzaGVldExvYWRlZCgpIHsgfQogCi0gICAgYm9vbCBoYXNJRCgpIGNvbnN0ICAg
ICAgeyByZXR1cm4gbV9oYXNJZDsgfQotICAgIGJvb2wgaGFzQ2xhc3MoKSBjb25zdCAgIHsgcmV0
dXJuIG1faGFzQ2xhc3M7IH0KLSAgICBib29sIGhhc1N0eWxlKCkgY29uc3QgICB7IHJldHVybiBt
X2hhc1N0eWxlOyB9Ci0gICAgYm9vbCBhY3RpdmUoKSBjb25zdCAgICAgeyByZXR1cm4gbV9hY3Rp
dmU7IH0KKyAgICBib29sIGhhc0lEKCkgY29uc3QgeyByZXR1cm4gbV9oYXNJZDsgfQorICAgIGJv
b2wgaGFzQ2xhc3MoKSBjb25zdCB7IHJldHVybiBtX2hhc0NsYXNzOyB9CisgICAgYm9vbCBoYXNT
dHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1faGFzU3R5bGU7IH0KKyAgICBib29sIGFjdGl2ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fYWN0aXZlOyB9CiAgICAgYm9vbCBpbkFjdGl2ZUNoYWluKCkgY29uc3Qg
eyByZXR1cm4gbV9pbkFjdGl2ZUNoYWluOyB9CiAgICAgYm9vbCBob3ZlcmVkKCkgY29uc3QgeyBy
ZXR1cm4gbV9ob3ZlcmVkOyB9CiAgICAgYm9vbCBmb2N1c2VkKCkgY29uc3QgeyByZXR1cm4gbV9m
b2N1c2VkOyB9Ci0gICAgYm9vbCBhdHRhY2hlZCgpIGNvbnN0ICAgeyByZXR1cm4gbV9hdHRhY2hl
ZDsgfQorICAgIGJvb2wgYXR0YWNoZWQoKSBjb25zdCB7IHJldHVybiBtX2F0dGFjaGVkOyB9CiAg
ICAgdm9pZCBzZXRBdHRhY2hlZChib29sIGIgPSB0cnVlKSB7IG1fYXR0YWNoZWQgPSBiOyB9Ci0g
ICAgYm9vbCBjaGFuZ2VkKCkgY29uc3QgICAgeyByZXR1cm4gbV9jaGFuZ2VkOyB9CisgICAgYm9v
bCBjaGFuZ2VkKCkgY29uc3QgeyByZXR1cm4gbV9jaGFuZ2VkOyB9CiAgICAgYm9vbCBoYXNDaGFu
Z2VkQ2hpbGQoKSBjb25zdCB7IHJldHVybiBtX2hhc0NoYW5nZWRDaGlsZDsgfQogICAgIGJvb2wg
aXNMaW5rKCkgY29uc3QgeyByZXR1cm4gbV9pc0xpbms7IH0KLSAgICAvLyBpbkRvY3VtZW50IHNo
b3VsZCBhbHNvIG1ha2Ugc3VyZSBhIGRvY3VtZW50IGV4aXN0cyBpbiBjYXNlIHRoZSBkb2N1bWVu
dCBoYXMgYmVlbiBkZXN0cm95ZWQgYmVmb3JlIHRoZSBub2RlIGlzIHJlbW92ZWQgZnJvbSB0aGUg
ZG9jdW1lbnQuCisgICAgLy8gRklYTUU6IFNob3VsZCBpbkRvY3VtZW50IGFsc28gbWFrZSBzdXJl
IGEgZG9jdW1lbnQgZXhpc3RzIGluIGNhc2UgdGhlIGRvY3VtZW50CisgICAgLy8gaGFzIGJlZW4g
ZGVzdHJveWVkIGJlZm9yZSB0aGUgbm9kZSBpcyByZW1vdmVkIGZyb20gdGhlIGRvY3VtZW50Pwog
ICAgIGJvb2wgaW5Eb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIGRvY3VtZW50LmdldCgpICYmIG1f
aW5Eb2N1bWVudDsgfQogICAgIGJvb2wgc3R5bGVFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9z
dHlsZUVsZW1lbnQ7IH0KICAgICBib29sIGltcGxpY2l0Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1f
aW1wbGljaXQ7IH0KLSAgICB2b2lkIHNldEhhc0lEKGJvb2wgYj10cnVlKSB7IG1faGFzSWQgPSBi
OyB9Ci0gICAgdm9pZCBzZXRIYXNDbGFzcyhib29sIGI9dHJ1ZSkgeyBtX2hhc0NsYXNzID0gYjsg
fQotICAgIHZvaWQgc2V0SGFzU3R5bGUoYm9vbCBiPXRydWUpIHsgbV9oYXNTdHlsZSA9IGI7IH0K
KyAgICB2b2lkIHNldEhhc0lEKGJvb2wgYiA9IHRydWUpIHsgbV9oYXNJZCA9IGI7IH0KKyAgICB2
b2lkIHNldEhhc0NsYXNzKGJvb2wgYiA9IHRydWUpIHsgbV9oYXNDbGFzcyA9IGI7IH0KKyAgICB2
b2lkIHNldEhhc1N0eWxlKGJvb2wgYiA9IHRydWUpIHsgbV9oYXNTdHlsZSA9IGI7IH0KICAgICB2
b2lkIHNldEhhc0NoYW5nZWRDaGlsZCggYm9vbCBiID0gdHJ1ZSApIHsgbV9oYXNDaGFuZ2VkQ2hp
bGQgPSBiOyB9Ci0gICAgdm9pZCBzZXRJbkRvY3VtZW50KGJvb2wgYj10cnVlKSB7IG1faW5Eb2N1
bWVudCA9IGI7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0Rm9jdXMoYm9vbCBiPXRydWUpIHsgbV9m
b2N1c2VkID0gYjsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRBY3RpdmUoYm9vbCBiPXRydWUsIGJv
b2wgcGF1c2U9ZmFsc2UpIHsgbV9hY3RpdmUgPSBiOyB9Ci0gICAgdm9pZCBzZXRJbkFjdGl2ZUNo
YWluKGJvb2wgYj10cnVlKSB7IG1faW5BY3RpdmVDaGFpbiA9IGI7IH0KLSAgICB2aXJ0dWFsIHZv
aWQgc2V0SG92ZXJlZChib29sIGI9dHJ1ZSkgeyBtX2hvdmVyZWQgPSBiOyB9Ci0gICAgdm9pZCBz
ZXRDaGFuZ2VkKGJvb2wgYj10cnVlKTsKKyAgICB2b2lkIHNldEluRG9jdW1lbnQoYm9vbCBiID0g
dHJ1ZSkgeyBtX2luRG9jdW1lbnQgPSBiOyB9CisgICAgdm9pZCBzZXRJbkFjdGl2ZUNoYWluKGJv
b2wgYiA9IHRydWUpIHsgbV9pbkFjdGl2ZUNoYWluID0gYjsgfQorICAgIHZvaWQgc2V0Q2hhbmdl
ZChib29sIGIgPSB0cnVlKTsKIAorICAgIHZpcnR1YWwgdm9pZCBzZXRGb2N1cyhib29sIGIgPSB0
cnVlKSB7IG1fZm9jdXNlZCA9IGI7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0QWN0aXZlKGJvb2wg
YiA9IHRydWUsIGJvb2wgcGF1c2U9ZmFsc2UpIHsgbV9hY3RpdmUgPSBiOyB9CisgICAgdmlydHVh
bCB2b2lkIHNldEhvdmVyZWQoYm9vbCBiID0gdHJ1ZSkgeyBtX2hvdmVyZWQgPSBiOyB9CisKICAg
ICB1bnNpZ25lZCBzaG9ydCB0YWJJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fdGFiSW5kZXg7IH0K
LSAgICB2b2lkIHNldFRhYkluZGV4KHVuc2lnbmVkIHNob3J0IF90YWJJbmRleCkgeyBtX3RhYklu
ZGV4ID0gX3RhYkluZGV4OyB9CisgICAgdm9pZCBzZXRUYWJJbmRleCh1bnNpZ25lZCBzaG9ydCBp
KSB7IG1fdGFiSW5kZXggPSBpOyB9CiAKICAgICAvKioKICAgICAgKiBXaGV0aGVyIHRoaXMgbm9k
ZSBjYW4gcmVjZWl2ZSB0aGUga2V5Ym9hcmQgZm9jdXMuCkBAIC0yNDQsNTIgKzI0Niw1MyBAQAog
ICAgIHZpcnR1YWwgYm9vbCBpc0luZGV0ZXJtaW5hdGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsg
fQogCiAgICAgdmlydHVhbCBib29sIGlzQ29udGVudEVkaXRhYmxlKCkgY29uc3Q7Ci0gICAgdmly
dHVhbCBXZWJDb3JlOjpJbnRSZWN0IGdldFJlY3QoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEludFJl
Y3QgZ2V0UmVjdCgpIGNvbnN0OwogCiAgICAgZW51bSBTdHlsZUNoYW5nZSB7IE5vQ2hhbmdlLCBO
b0luaGVyaXQsIEluaGVyaXQsIERldGFjaCwgRm9yY2UgfTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVj
YWxjU3R5bGUoIFN0eWxlQ2hhbmdlID0gTm9DaGFuZ2UgKSB7fQotICAgIFN0eWxlQ2hhbmdlIGRp
ZmYoIGtodG1sOjpSZW5kZXJTdHlsZSAqczEsIGtodG1sOjpSZW5kZXJTdHlsZSAqczIgKSBjb25z
dDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVjYWxjU3R5bGUoU3R5bGVDaGFuZ2UgPSBOb0NoYW5nZSkg
eyB9CisgICAgU3R5bGVDaGFuZ2UgZGlmZihSZW5kZXJTdHlsZSosIFJlbmRlclN0eWxlKikgY29u
c3Q7CiAKICAgICB1bnNpZ25lZCBub2RlSW5kZXgoKSBjb25zdDsKKwogICAgIC8vIFJldHVybnMg
dGhlIGRvY3VtZW50IHRoYXQgdGhpcyBub2RlIGlzIGFzc29jaWF0ZWQgd2l0aC4gVGhpcyBpcyBn
dWFyYW50ZWVkIHRvIGFsd2F5cyBiZSBub24tbnVsbCwgYXMgb3Bwb3NlZCB0bwogICAgIC8vIERP
TSdzIG93bmVyRG9jdW1lbnQoKSB3aGljaCBpcyBudWxsIGZvciBEb2N1bWVudCBub2RlcyAoYW5k
IHNvbWV0aW1lcyBEb2N1bWVudFR5cGUgbm9kZXMpLgogICAgIERvY3VtZW50SW1wbCogZ2V0RG9j
dW1lbnQoKSBjb25zdCB7IHJldHVybiBkb2N1bWVudC5nZXQoKTsgfQogCi0gICAgdm9pZCBzZXRE
b2N1bWVudChEb2N1bWVudEltcGwgKmRvYyk7CisgICAgdm9pZCBzZXREb2N1bWVudChEb2N1bWVu
dEltcGwqKTsKIAotICAgIHZvaWQgYWRkRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcg
JmV2ZW50VHlwZSwgRXZlbnRMaXN0ZW5lciAqbGlzdGVuZXIsIGJvb2wgdXNlQ2FwdHVyZSk7Ci0g
ICAgdm9pZCByZW1vdmVFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyAmZXZlbnRUeXBl
LCBFdmVudExpc3RlbmVyICpsaXN0ZW5lciwgYm9vbCB1c2VDYXB0dXJlKTsKLSAgICB2b2lkIHJl
bW92ZUhUTUxFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyAmZXZlbnRUeXBlKTsKLSAg
ICB2b2lkIHNldEhUTUxFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyAmZXZlbnRUeXBl
LCBFdmVudExpc3RlbmVyICpsaXN0ZW5lcik7Ci0gICAgRXZlbnRMaXN0ZW5lciAqZ2V0SFRNTEV2
ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nICZldmVudFR5cGUpOworICAgIHZvaWQgYWRk
RXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUGFzc1JlZlB0cjxF
dmVudExpc3RlbmVyPiwgYm9vbCB1c2VDYXB0dXJlKTsKKyAgICB2b2lkIHJlbW92ZUV2ZW50TGlz
dGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIEV2ZW50TGlzdGVuZXIqLCBib29s
IHVzZUNhcHR1cmUpOworICAgIHZvaWQgcmVtb3ZlSFRNTEV2ZW50TGlzdGVuZXIoY29uc3QgQXRv
bWljU3RyaW5nJiBldmVudFR5cGUpOworICAgIHZvaWQgc2V0SFRNTEV2ZW50TGlzdGVuZXIoY29u
c3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4pOwor
ICAgIEV2ZW50TGlzdGVuZXIgKmdldEhUTUxFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmlu
ZyYgZXZlbnRUeXBlKTsKICAgICB2b2lkIHJlbW92ZUFsbEV2ZW50TGlzdGVuZXJzKCk7CiAKLSAg
ICBib29sIGRpc3BhdGNoRXZlbnQoRXZlbnRJbXBsICpldnQsIGludCAmZXhjZXB0aW9uY29kZSwg
Ym9vbCB0ZW1wRXZlbnQgPSBmYWxzZSk7Ci0gICAgYm9vbCBkaXNwYXRjaEdlbmVyaWNFdmVudCgg
RXZlbnRJbXBsICpldnQsIGludCAmZXhjZXB0aW9uY29kZSk7Ci0gICAgYm9vbCBkaXNwYXRjaEhU
TUxFdmVudChjb25zdCBBdG9taWNTdHJpbmcgJmV2ZW50VHlwZSwgYm9vbCBjYW5CdWJibGVBcmcs
IGJvb2wgY2FuY2VsYWJsZUFyZyk7Ci0gICAgYm9vbCBkaXNwYXRjaFdpbmRvd0V2ZW50KGNvbnN0
IEF0b21pY1N0cmluZyAmZXZlbnRUeXBlLCBib29sIGNhbkJ1YmJsZUFyZywgYm9vbCBjYW5jZWxh
YmxlQXJnKTsKLSAgICBib29sIGRpc3BhdGNoTW91c2VFdmVudChRTW91c2VFdmVudCAqZSwgY29u
c3QgQXRvbWljU3RyaW5nICZvdmVycmlkZVR5cGUsIGludCBvdmVycmlkZURldGFpbCA9IDApOwot
ICAgIGJvb2wgZGlzcGF0Y2hTaW11bGF0ZWRNb3VzZUV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyAm
ZXZlbnRUeXBlKTsKLSAgICBib29sIGRpc3BhdGNoTW91c2VFdmVudChjb25zdCBBdG9taWNTdHJp
bmcgJmV2ZW50VHlwZSwgaW50IGJ1dHRvbiwgaW50IGRldGFpbCwKKyAgICBib29sIGRpc3BhdGNo
RXZlbnQoRXZlbnRJbXBsKiwgRXhjZXB0aW9uQ29kZSYsIGJvb2wgdGVtcEV2ZW50ID0gZmFsc2Up
OworICAgIGJvb2wgZGlzcGF0Y2hHZW5lcmljRXZlbnQoRXZlbnRJbXBsKiwgRXhjZXB0aW9uQ29k
ZSYpOworICAgIGJvb2wgZGlzcGF0Y2hIVE1MRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiBldmVu
dFR5cGUsIGJvb2wgY2FuQnViYmxlLCBib29sIGNhbmNlbGFibGUpOworICAgIGJvb2wgZGlzcGF0
Y2hXaW5kb3dFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgYm9vbCBjYW5CdWJi
bGUsIGJvb2wgY2FuY2VsYWJsZSk7CisgICAgYm9vbCBkaXNwYXRjaE1vdXNlRXZlbnQoUU1vdXNl
RXZlbnQqLCBjb25zdCBBdG9taWNTdHJpbmcmIG92ZXJyaWRlVHlwZSwgaW50IG92ZXJyaWRlRGV0
YWlsID0gMCk7CisgICAgYm9vbCBkaXNwYXRjaFNpbXVsYXRlZE1vdXNlRXZlbnQoY29uc3QgQXRv
bWljU3RyaW5nJiBldmVudFR5cGUpOworICAgIGJvb2wgZGlzcGF0Y2hNb3VzZUV2ZW50KGNvbnN0
IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBpbnQgYnV0dG9uLCBpbnQgZGV0YWlsLAogICAgICAg
ICBpbnQgY2xpZW50WCwgaW50IGNsaWVudFksIGludCBzY3JlZW5YLCBpbnQgc2NyZWVuWSwKICAg
ICAgICAgYm9vbCBjdHJsS2V5LCBib29sIGFsdEtleSwgYm9vbCBzaGlmdEtleSwgYm9vbCBtZXRh
S2V5LAogICAgICAgICBib29sIGlzU2ltdWxhdGVkID0gZmFsc2UpOwotICAgIGJvb2wgZGlzcGF0
Y2hVSUV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyAmZXZlbnRUeXBlLCBpbnQgZGV0YWlsID0gMCk7
CisgICAgYm9vbCBkaXNwYXRjaFVJRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUs
IGludCBkZXRhaWwgPSAwKTsKICAgICBib29sIGRpc3BhdGNoU3VidHJlZU1vZGlmaWVkRXZlbnQo
Ym9vbCBjaGlsZHJlbkNoYW5nZWQgPSB0cnVlKTsKLSAgICBib29sIGRpc3BhdGNoS2V5RXZlbnQo
UUtleUV2ZW50ICprZXkpOwotICAgIHZvaWQgZGlzcGF0Y2hXaGVlbEV2ZW50KFFXaGVlbEV2ZW50
ICopOworICAgIGJvb2wgZGlzcGF0Y2hLZXlFdmVudChRS2V5RXZlbnQqKTsKKyAgICB2b2lkIGRp
c3BhdGNoV2hlZWxFdmVudChRV2hlZWxFdmVudCopOwogCi0gICAgdm9pZCBoYW5kbGVMb2NhbEV2
ZW50cyhFdmVudEltcGwgKmV2dCwgYm9vbCB1c2VDYXB0dXJlKTsKKyAgICB2b2lkIGhhbmRsZUxv
Y2FsRXZlbnRzKEV2ZW50SW1wbCosIGJvb2wgdXNlQ2FwdHVyZSk7CiAKICAgICAvLyBIYW5kbGVy
cyB0byBkby91bmRvIGFjdGlvbnMgb24gdGhlIHRhcmdldCBub2RlIGJlZm9yZSBhbiBldmVudCBp
cyBkaXNwYXRjaGVkIHRvIGl0IGFuZCBhZnRlciB0aGUgZXZlbnQKICAgICAvLyBoYXMgYmVlbiBk
aXNwYXRjaGVkLiAgVGhlIGRhdGEgcG9pbnRlciBpcyBoYW5kZWQgYmFjayBieSB0aGUgcHJlRGlz
cGF0Y2ggYW5kIHBhc3NlZCB0byBwb3N0RGlzcGF0Y2guCi0gICAgdmlydHVhbCB2b2lkKiBwcmVE
aXNwYXRjaEV2ZW50SGFuZGxlcihFdmVudEltcGwgKmV2dCkgeyByZXR1cm4gMDsgfQotICAgIHZp
cnR1YWwgdm9pZCBwb3N0RGlzcGF0Y2hFdmVudEhhbmRsZXIoRXZlbnRJbXBsICpldnQsIHZvaWQq
IGRhdGEpIHt9CisgICAgdmlydHVhbCB2b2lkKiBwcmVEaXNwYXRjaEV2ZW50SGFuZGxlcihFdmVu
dEltcGwqKSB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCB2b2lkIHBvc3REaXNwYXRjaEV2ZW50
SGFuZGxlcihFdmVudEltcGwqLCB2b2lkKiBkYXRhKSB7IH0KIAogICAgIC8qKgogICAgICAqIFBl
cmZvcm0gdGhlIGRlZmF1bHQgYWN0aW9uIGZvciBhbiBldmVudCBlLmcuIHN1Ym1pdHRpbmcgYSBm
b3JtCiAgICAgICovCi0gICAgdmlydHVhbCB2b2lkIGRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnRJ
bXBsICpldnQpOworICAgIHZpcnR1YWwgdm9pZCBkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50SW1w
bCopOwogCiAgICAgLyoqCiAgICAgICogVXNlZCBmb3IgZGlzYWJsZWQgZm9ybSBlbGVtZW50czsg
aWYgdHJ1ZSwgcHJldmVudHMgbW91c2UgZXZlbnRzIGZyb20gYmVpbmcgZGlzcGF0Y2hlZApAQCAt
Mjk4LDcgKzMwMSw3IEBACiAgICAgdmlydHVhbCBib29sIGRpc2FibGVkKCkgY29uc3Q7CiAKICAg
ICB2aXJ0dWFsIGJvb2wgaXNSZWFkT25seSgpOwotICAgIHZpcnR1YWwgYm9vbCBjaGlsZFR5cGVB
bGxvd2VkKCB1bnNpZ25lZCBzaG9ydCAvKnR5cGUqLyApIHsgcmV0dXJuIGZhbHNlOyB9CisgICAg
dmlydHVhbCBib29sIGNoaWxkVHlwZUFsbG93ZWQodW5zaWduZWQgc2hvcnQgLyp0eXBlKi8pIHsg
cmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCB1bnNpZ25lZCBjaGlsZE5vZGVDb3VudCgpIGNv
bnN0OwogICAgIHZpcnR1YWwgTm9kZUltcGwgKmNoaWxkTm9kZSh1bnNpZ25lZCBpbmRleCk7CiAK
QEAgLTMxMyw0OSArMzE2LDQ4IEBACiAgICAgICoKICAgICAgKiBzZWUgQHJlZiB0cmF2ZXJzZVBy
ZXZpb3VzTm9kZSgpCiAgICAgICovCi0gICAgTm9kZUltcGwgKnRyYXZlcnNlTmV4dE5vZGUoY29u
c3QgTm9kZUltcGwgKnN0YXlXaXRoaW4gPSAwKSBjb25zdDsKKyAgICBOb2RlSW1wbCogdHJhdmVy
c2VOZXh0Tm9kZShjb25zdCBOb2RlSW1wbCogc3RheVdpdGhpbiA9IDApIGNvbnN0OwogICAgIAog
ICAgIC8qIExpa2UgdHJhdmVyc2VOZXh0Tm9kZSwgYnV0IHNraXBzIGNoaWxkcmVuIGFuZCBzdGFy
dHMgd2l0aCB0aGUgbmV4dCBzaWJsaW5nLiAqLwotICAgIE5vZGVJbXBsICp0cmF2ZXJzZU5leHRT
aWJsaW5nKGNvbnN0IE5vZGVJbXBsICpzdGF5V2l0aGluID0gMCkgY29uc3Q7CisgICAgTm9kZUlt
cGwqIHRyYXZlcnNlTmV4dFNpYmxpbmcoY29uc3QgTm9kZUltcGwqIHN0YXlXaXRoaW4gPSAwKSBj
b25zdDsKIAogICAgIC8qKgogICAgICAqIERvZXMgYSByZXZlcnNlIHByZS1vcmRlciB0cmF2ZXJz
YWwgdG8gZmluZCB0aGUgbm9kZSB0aGF0IGNvbWVzIGJlZm9yZSB0aGUgY3VycmVudCBvbmUgaW4g
ZG9jdW1lbnQgb3JkZXIKICAgICAgKgogICAgICAqIHNlZSBAcmVmIHRyYXZlcnNlTmV4dE5vZGUo
KQogICAgICAqLwotICAgIE5vZGVJbXBsICp0cmF2ZXJzZVByZXZpb3VzTm9kZSgpIGNvbnN0Owor
ICAgIE5vZGVJbXBsKiB0cmF2ZXJzZVByZXZpb3VzTm9kZSgpIGNvbnN0OwogCiAgICAgLyogTGlr
ZSB0cmF2ZXJzZVByZXZpb3VzTm9kZSwgYnV0IHZpc2l0cyBub2RlcyBiZWZvcmUgdGhlaXIgY2hp
bGRyZW4uICovCi0gICAgTm9kZUltcGwgKnRyYXZlcnNlUHJldmlvdXNOb2RlUG9zdE9yZGVyKGNv
bnN0IE5vZGVJbXBsICpzdGF5V2l0aGluID0gMCkgY29uc3Q7CisgICAgTm9kZUltcGwqIHRyYXZl
cnNlUHJldmlvdXNOb2RlUG9zdE9yZGVyKGNvbnN0IE5vZGVJbXBsICpzdGF5V2l0aGluID0gMCkg
Y29uc3Q7CiAKLSAgICBOb2RlSW1wbCAqcHJldmlvdXNFZGl0YWJsZSgpIGNvbnN0OwotICAgIE5v
ZGVJbXBsICpuZXh0RWRpdGFibGUoKSBjb25zdDsKLSAgICAvL2Jvb2wgaXNFZGl0YWJsZSgpIGNv
bnN0OworICAgIE5vZGVJbXBsKiBwcmV2aW91c0VkaXRhYmxlKCkgY29uc3Q7CisgICAgTm9kZUlt
cGwqIG5leHRFZGl0YWJsZSgpIGNvbnN0OwogCi0gICAga2h0bWw6OlJlbmRlck9iamVjdCAqcmVu
ZGVyZXIoKSBjb25zdCB7IHJldHVybiBtX3JlbmRlcjsgfQotICAgIGtodG1sOjpSZW5kZXJPYmpl
Y3QgKm5leHRSZW5kZXJlcigpOwotICAgIGtodG1sOjpSZW5kZXJPYmplY3QgKnByZXZpb3VzUmVu
ZGVyZXIoKTsKLSAgICB2b2lkIHNldFJlbmRlcmVyKGtodG1sOjpSZW5kZXJPYmplY3QqIHJlbmRl
cmVyKSB7IG1fcmVuZGVyID0gcmVuZGVyZXI7IH0KKyAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVy
KCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXI7IH0KKyAgICBSZW5kZXJPYmplY3QqIG5leHRSZW5k
ZXJlcigpOworICAgIFJlbmRlck9iamVjdCogcHJldmlvdXNSZW5kZXJlcigpOworICAgIHZvaWQg
c2V0UmVuZGVyZXIoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikgeyBtX3JlbmRlciA9IHJlbmRlcmVy
OyB9CiAgICAgCi0gICAgdm9pZCBjaGVja1NldFByZWZpeChjb25zdCBBdG9taWNTdHJpbmcgJl9w
cmVmaXgsIGludCAmZXhjZXB0aW9uY29kZSk7Ci0gICAgYm9vbCBpc0FuY2VzdG9yKGNvbnN0IE5v
ZGVJbXBsICopIGNvbnN0OworICAgIHZvaWQgY2hlY2tTZXRQcmVmaXgoY29uc3QgQXRvbWljU3Ry
aW5nICZfcHJlZml4LCBFeGNlcHRpb25Db2RlJik7CisgICAgYm9vbCBpc0FuY2VzdG9yKGNvbnN0
IE5vZGVJbXBsKikgY29uc3Q7CiAKICAgICAvLyBUaGVzZSB0d28gbWV0aG9kcyBhcmUgbXV0dWFs
bHkgZXhjbHVzaXZlLiAgVGhlIGZvcm1lciBpcyB1c2VkIHRvIGRvIHN0cmljdCBlcnJvci1jaGVj
a2luZwogICAgIC8vIHdoZW4gYWRkaW5nIGNoaWxkcmVuIHZpYSB0aGUgcHVibGljIERPTSBBUEkg
KGUuZy4sIGFwcGVuZENoaWxkKCkpLiAgVGhlIGxhdHRlciBpcyBjYWxsZWQgb25seSB3aGVuIHBh
cnNpbmcsIAogICAgIC8vIHRvIHNhbml0eS1jaGVjayBhZ2FpbnN0IHRoZSBEVEQgZm9yIGVycm9y
IHJlY292ZXJ5LgotICAgIHZvaWQgY2hlY2tBZGRDaGlsZChOb2RlSW1wbCAqbmV3Q2hpbGQsIGlu
dCAmZXhjZXB0aW9uY29kZSk7ICAgIC8vIEVycm9yLWNoZWNraW5nIHdoZW4gYWRkaW5nIHZpYSB0
aGUgRE9NIEFQSQotICAgIHZpcnR1YWwgYm9vbCBjaGlsZEFsbG93ZWQoTm9kZUltcGwgKm5ld0No
aWxkKTsgICAgICAgICAgICAgIC8vIEVycm9yLWNoZWNraW5nIGR1cmluZyBwYXJzaW5nIHRoYXQg
Y2hlY2tzIHRoZSBEVEQKLSAgICAgICAgCisgICAgdm9pZCBjaGVja0FkZENoaWxkKE5vZGVJbXBs
KiBuZXdDaGlsZCwgRXhjZXB0aW9uQ29kZSYpOyAvLyBFcnJvci1jaGVja2luZyB3aGVuIGFkZGlu
ZyB2aWEgdGhlIERPTSBBUEkKKyAgICB2aXJ0dWFsIGJvb2wgY2hpbGRBbGxvd2VkKE5vZGVJbXBs
KiBuZXdDaGlsZCk7ICAgICAgICAgIC8vIEVycm9yLWNoZWNraW5nIGR1cmluZyBwYXJzaW5nIHRo
YXQgY2hlY2tzIHRoZSBEVEQKKworICAgIC8vIEZJWE1FOiBUaGVzZSBuZXh0IDcgZnVuY3Rpb25z
IGFyZSBtb3N0bHkgZWRpdGluZy1zcGVjaWZpYyBhbmQgc2hvdWxkIGJlIG1vdmVkIG91dC4KICAg
ICB2aXJ0dWFsIGludCBtYXhPZmZzZXQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGludCBjYXJldE1p
bk9mZnNldCgpIGNvbnN0OwogICAgIHZpcnR1YWwgaW50IGNhcmV0TWF4T2Zmc2V0KCkgY29uc3Q7
CiAgICAgdmlydHVhbCB1bnNpZ25lZCBjYXJldE1heFJlbmRlcmVkT2Zmc2V0KCkgY29uc3Q7Ci0K
LSAgICB2aXJ0dWFsIGludCBwcmV2aW91c09mZnNldCAoaW50IGN1cnJlbnQpIGNvbnN0OwotICAg
IHZpcnR1YWwgaW50IG5leHRPZmZzZXQgKGludCBjdXJyZW50KSBjb25zdDsKKyAgICB2aXJ0dWFs
IGludCBwcmV2aW91c09mZnNldChpbnQgY3VycmVudCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQg
bmV4dE9mZnNldChpbnQgY3VycmVudCkgY29uc3Q7CiAgICAgCiAjaWZuZGVmIE5ERUJVRwotICAg
IHZpcnR1YWwgdm9pZCBkdW1wKFFUZXh0U3RyZWFtICpzdHJlYW0sIFFTdHJpbmcgaW5kID0gIiIp
IGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBkdW1wKFFUZXh0U3RyZWFtKiwgUVN0cmluZyBpbmRl
bnQgPSAiIikgY29uc3Q7CiAjZW5kaWYKIAogICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBA
IC0zNzYsMTIgKzM3OCwxMiBAQAogCiAgICAgdmlydHVhbCB2b2lkIHdpbGxSZW1vdmUoKTsKICAg
ICB2b2lkIGNyZWF0ZVJlbmRlcmVySWZOZWVkZWQoKTsKLSAgICB2aXJ0dWFsIGtodG1sOjpSZW5k
ZXJTdHlsZSAqc3R5bGVGb3JSZW5kZXJlcihraHRtbDo6UmVuZGVyT2JqZWN0ICpwYXJlbnQpOwot
ICAgIHZpcnR1YWwgYm9vbCByZW5kZXJlcklzTmVlZGVkKGtodG1sOjpSZW5kZXJTdHlsZSAqKTsK
KyAgICB2aXJ0dWFsIFJlbmRlclN0eWxlKiBzdHlsZUZvclJlbmRlcmVyKFJlbmRlck9iamVjdCog
cGFyZW50KTsKKyAgICB2aXJ0dWFsIGJvb2wgcmVuZGVyZXJJc05lZWRlZChSZW5kZXJTdHlsZSop
OwogI2lmIFNWR19TVVBQT1JUCi0gICAgdmlydHVhbCBib29sIGNoaWxkU2hvdWxkQ3JlYXRlUmVu
ZGVyZXIoRE9NOjpOb2RlSW1wbCAqKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVh
bCBib29sIGNoaWxkU2hvdWxkQ3JlYXRlUmVuZGVyZXIoTm9kZUltcGwqKSBjb25zdCB7IHJldHVy
biB0cnVlOyB9CiAjZW5kaWYKLSAgICB2aXJ0dWFsIGtodG1sOjpSZW5kZXJPYmplY3QgKmNyZWF0
ZVJlbmRlcmVyKFJlbmRlckFyZW5hICosIGtodG1sOjpSZW5kZXJTdHlsZSAqKTsKKyAgICB2aXJ0
dWFsIFJlbmRlck9iamVjdCogY3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqLCBSZW5kZXJTdHls
ZSopOwogCiAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAvLyBNZXRob2RzIGZvciBt
YWludGFpbmluZyB0aGUgc3RhdGUgb2YgdGhlIGVsZW1lbnQgYmV0d2VlbiBoaXN0b3J5IG5hdmln
YXRpb24KQEAgLTQzNyw4ICs0MzksOCBAQAogICAgIC8vIFRoZXNlIGZ1bmN0aW9ucyBhcmUgY2Fs
bGVkIHdoZW5ldmVyIHlvdSBhcmUgY29ubmVjdGVkIG9yIGRpc2Nvbm5lY3RlZCBmcm9tIGEgdHJl
ZS4gIFRoYXQgdHJlZSBtYXkgYmUgdGhlIG1haW4KICAgICAvLyBkb2N1bWVudCB0cmVlLCBvciBp
dCBjb3VsZCBiZSBhbm90aGVyIGRpc2Nvbm5lY3RlZCB0cmVlLiAgT3ZlcnJpZGUgdGhlc2UgZnVu
Y3Rpb25zIHRvIGRvIGFueSB3b3JrIHRoYXQgZGVwZW5kcwogICAgIC8vIG9uIGNvbm5lY3RlZG5l
c3MgdG8gc29tZSBhbmNlc3RvciAoZS5nLiwgYW4gYW5jZXN0b3IgPGZvcm0+IGZvciBleGFtcGxl
KS4KLSAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0ZWRJbnRvVHJlZShib29sIGRlZXApIHt9OwotICAg
IHZpcnR1YWwgdm9pZCByZW1vdmVkRnJvbVRyZWUoYm9vbCBkZWVwKSB7fTsKKyAgICB2aXJ0dWFs
IHZvaWQgaW5zZXJ0ZWRJbnRvVHJlZShib29sIGRlZXApIHsgfQorICAgIHZpcnR1YWwgdm9pZCBy
ZW1vdmVkRnJvbVRyZWUoYm9vbCBkZWVwKSB7IH0KIAogICAgIC8qKgogICAgICAqIE5vdGlmaWVz
IHRoZSBub2RlIHRoYXQgaXQncyBsaXN0IG9mIGNoaWxkcmVuIGhhdmUgY2hhbmdlZCAoZWl0aGVy
IGJ5IGFkZGluZyBvciByZW1vdmluZyBjaGlsZCBub2RlcyksIG9yIGEgY2hpbGQKQEAgLTQ0Nywz
MiArNDQ5LDMyIEBACiAgICAgdmlydHVhbCB2b2lkIGNoaWxkcmVuQ2hhbmdlZCgpOwogCiAgICAg
dmlydHVhbCBET01TdHJpbmcgdG9TdHJpbmcoKSBjb25zdCA9IDA7Ci0gICAgCisKICNpZm5kZWYg
TkRFQlVHCiAgICAgdmlydHVhbCB2b2lkIGZvcm1hdEZvckRlYnVnZ2VyKGNoYXIgKmJ1ZmZlciwg
dW5zaWduZWQgbGVuZ3RoKSBjb25zdDsKIAogICAgIHZvaWQgc2hvd05vZGUoY29uc3QgY2hhciAq
cHJlZml4PSIiKSBjb25zdDsKICAgICB2b2lkIHNob3dUcmVlKCkgY29uc3Q7Ci0gICAgdm9pZCBz
aG93VHJlZUFuZE1hcmsoTm9kZUltcGwgKiBtYXJrZWROb2RlMSwgY29uc3QgY2hhciAqIG1hcmtl
ZExhYmVsMSwgTm9kZUltcGwgKiBtYXJrZWROb2RlMiwgY29uc3QgY2hhciAqIG1hcmtlZExhYmVs
MikgY29uc3Q7CisgICAgdm9pZCBzaG93VHJlZUFuZE1hcmsoTm9kZUltcGwqIG1hcmtlZE5vZGUx
LCBjb25zdCBjaGFyKiBtYXJrZWRMYWJlbDEsIE5vZGVJbXBsKiBtYXJrZWROb2RlMiwgY29uc3Qg
Y2hhciogbWFya2VkTGFiZWwyKSBjb25zdDsKICNlbmRpZgogCi0gICAgdm9pZCByZWdpc3Rlck5v
ZGVMaXN0KE5vZGVMaXN0SW1wbCAqbGlzdCk7Ci0gICAgdm9pZCB1bnJlZ2lzdGVyTm9kZUxpc3Qo
Tm9kZUxpc3RJbXBsICpsaXN0KTsKKyAgICB2b2lkIHJlZ2lzdGVyTm9kZUxpc3QoTm9kZUxpc3RJ
bXBsKik7CisgICAgdm9pZCB1bnJlZ2lzdGVyTm9kZUxpc3QoTm9kZUxpc3RJbXBsKik7CiAgICAg
dm9pZCBub3RpZnlOb2RlTGlzdHNDaGlsZHJlbkNoYW5nZWQoKTsKICAgICB2b2lkIG5vdGlmeUxv
Y2FsTm9kZUxpc3RzQ2hpbGRyZW5DaGFuZ2VkKCk7CiAgICAgdm9pZCBub3RpZnlOb2RlTGlzdHNB
dHRyaWJ1dGVDaGFuZ2VkKCk7CiAgICAgdm9pZCBub3RpZnlMb2NhbE5vZGVMaXN0c0F0dHJpYnV0
ZUNoYW5nZWQoKTsKICAgICAKICAgICBSZWZQdHI8Tm9kZUxpc3RJbXBsPiBnZXRFbGVtZW50c0J5
VGFnTmFtZShjb25zdCBET01TdHJpbmcmKTsKLSAgICBSZWZQdHI8Tm9kZUxpc3RJbXBsPiBnZXRF
bGVtZW50c0J5VGFnTmFtZU5TKGNvbnN0IERPTVN0cmluZyAmbmFtZXNwYWNlVVJJLCBjb25zdCBE
T01TdHJpbmcgJmxvY2FsTmFtZSk7CisgICAgUmVmUHRyPE5vZGVMaXN0SW1wbD4gZ2V0RWxlbWVu
dHNCeVRhZ05hbWVOUyhjb25zdCBET01TdHJpbmcmIG5hbWVzcGFjZVVSSSwgY29uc3QgRE9NU3Ry
aW5nJiBsb2NhbE5hbWUpOwogCiBwcml2YXRlOiAvLyBtZW1iZXJzCiAgICAgRG9jUHRyPERvY3Vt
ZW50SW1wbD4gZG9jdW1lbnQ7Ci0gICAgTm9kZUltcGwgKm1fcHJldmlvdXM7Ci0gICAgTm9kZUlt
cGwgKm1fbmV4dDsKKyAgICBOb2RlSW1wbCogbV9wcmV2aW91czsKKyAgICBOb2RlSW1wbCogbV9u
ZXh0OwogcHJvdGVjdGVkOgotICAgIGtodG1sOjpSZW5kZXJPYmplY3QgKm1fcmVuZGVyOwotICAg
IFFQdHJMaXN0PFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyPiAqbV9yZWdkTGlzdGVuZXJzOworICAg
IFJlbmRlck9iamVjdCogbV9yZW5kZXI7CisgICAgUVB0ckxpc3Q8UmVnaXN0ZXJlZEV2ZW50TGlz
dGVuZXI+KiBtX3JlZ2RMaXN0ZW5lcnM7CiAgICAgdHlwZWRlZiBIYXNoU2V0PE5vZGVMaXN0SW1w
bCosIFBvaW50ZXJIYXNoPE5vZGVMaXN0SW1wbCo+ID4gTm9kZUxpc3RTZXQ7CiAgICAgTm9kZUxp
c3RTZXQqIG1fbm9kZUxpc3RzOwogCkBAIC00OTcsNiArNDk5LDkgQEAKICAgICBib29sIG1faW1w
bGljaXQgOiAxOyAvLyBpbXBsaWNpdGx5IGdlbmVyYXRlZCBieSB0aGUgcGFyc2VyCiAKICAgICBi
b29sIG1faW5EZXRhY2ggOiAxOworCitwcml2YXRlOgorICAgIEVsZW1lbnRJbXBsKiBhbmNlc3Rv
ckVsZW1lbnQoKSBjb25zdDsKIH07CiAKICNpZm5kZWYgTkRFQlVHCkluZGV4OiBraHRtbC94bWwv
Q29udGFpbmVyTm9kZUltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBraHRtbC94bWwvQ29udGFpbmVyTm9k
ZUltcGwuaAkocmV2aXNpb24gMTIyNzgpCisrKyBraHRtbC94bWwvQ29udGFpbmVyTm9kZUltcGwu
aAkod29ya2luZyBjb3B5KQpAQCAtNCw3ICs0LDcgQEAKICAqIENvcHlyaWdodCAoQykgMTk5OSBM
YXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtv
aXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDAxIERpcmsgTXVl
bGxlciAobXVlbGxlckBrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0IEFwcGxlIENvbXB1
dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIElu
Yy4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjIsNiArMjIsNyBAQAogICogQm9zdG9uLCBNQSAw
MjExMS0xMzA3LCBVU0EuCiAgKgogICovCisKICNpZm5kZWYgRE9NX0NvbnRhaW5lck5vZGVJbXBs
X2gKICNkZWZpbmUgRE9NX0NvbnRhaW5lck5vZGVJbXBsX2gKIApAQCAtMzUsNTkgKzM2LDQ4IEBA
CiAgICAgQ29udGFpbmVyTm9kZUltcGwoRG9jdW1lbnRJbXBsICpkb2MpOwogICAgIHZpcnR1YWwg
fkNvbnRhaW5lck5vZGVJbXBsKCk7CiAKLSAgICAvLyBET00gbWV0aG9kcyBvdmVycmlkZGVuIGZy
b20gIHBhcmVudCBjbGFzc2VzCi0gICAgdmlydHVhbCBOb2RlSW1wbCAqZmlyc3RDaGlsZCgpIGNv
bnN0OwotICAgIHZpcnR1YWwgTm9kZUltcGwgKmxhc3RDaGlsZCgpIGNvbnN0OwotICAgIHZpcnR1
YWwgTm9kZUltcGwgKmluc2VydEJlZm9yZSAoIE5vZGVJbXBsICpuZXdDaGlsZCwgTm9kZUltcGwg
KnJlZkNoaWxkLCBpbnQgJmV4Y2VwdGlvbmNvZGUgKTsKLSAgICB2aXJ0dWFsIE5vZGVJbXBsICpy
ZXBsYWNlQ2hpbGQgKCBOb2RlSW1wbCAqbmV3Q2hpbGQsIE5vZGVJbXBsICpvbGRDaGlsZCwgaW50
ICZleGNlcHRpb25jb2RlICk7Ci0gICAgdmlydHVhbCBOb2RlSW1wbCAqcmVtb3ZlQ2hpbGQgKCBO
b2RlSW1wbCAqb2xkQ2hpbGQsIGludCAmZXhjZXB0aW9uY29kZSApOwotICAgIHZpcnR1YWwgTm9k
ZUltcGwgKmFwcGVuZENoaWxkICggTm9kZUltcGwgKm5ld0NoaWxkLCBpbnQgJmV4Y2VwdGlvbmNv
ZGUgKTsKLSAgICB2aXJ0dWFsIGJvb2wgaGFzQ2hpbGROb2RlcyAoICApIGNvbnN0OwotCi0gICAg
Ly8gT3RoZXIgbWV0aG9kcyAobm90IHBhcnQgb2YgRE9NKQotICAgIHZvaWQgd2lsbFJlbW92ZSgp
OwotICAgIGludCB3aWxsUmVtb3ZlQ2hpbGQoTm9kZUltcGwgKmNoaWxkKTsKLSAgICB2b2lkIHJl
bW92ZUFsbENoaWxkcmVuKCk7Ci0gICAgdm9pZCByZW1vdmVDaGlsZHJlbigpOwotICAgIHZvaWQg
Y2xvbmVDaGlsZE5vZGVzKE5vZGVJbXBsICpjbG9uZSk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0
Rmlyc3RDaGlsZChOb2RlSW1wbCAqY2hpbGQpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRMYXN0Q2hp
bGQoTm9kZUltcGwgKmNoaWxkKTsKLSAgICB2aXJ0dWFsIE5vZGVJbXBsICphZGRDaGlsZChOb2Rl
SW1wbCAqbmV3Q2hpbGQpOworICAgIHZpcnR1YWwgTm9kZUltcGwqIGZpcnN0Q2hpbGQoKSBjb25z
dDsKKyAgICB2aXJ0dWFsIE5vZGVJbXBsKiBsYXN0Q2hpbGQoKSBjb25zdDsKKyAgICB2aXJ0dWFs
IFBhc3NSZWZQdHI8Tm9kZUltcGw+IGluc2VydEJlZm9yZShQYXNzUmVmUHRyPE5vZGVJbXBsPiBu
ZXdDaGlsZCwgTm9kZUltcGwqIHJlZkNoaWxkLCBFeGNlcHRpb25Db2RlJik7CisgICAgdmlydHVh
bCBQYXNzUmVmUHRyPE5vZGVJbXBsPiByZXBsYWNlQ2hpbGQoUGFzc1JlZlB0cjxOb2RlSW1wbD4g
bmV3Q2hpbGQsIE5vZGVJbXBsKiBvbGRDaGlsZCwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZpcnR1
YWwgUGFzc1JlZlB0cjxOb2RlSW1wbD4gcmVtb3ZlQ2hpbGQoTm9kZUltcGwqIGNoaWxkLCBFeGNl
cHRpb25Db2RlJik7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPE5vZGVJbXBsPiBhcHBlbmRDaGls
ZChQYXNzUmVmUHRyPE5vZGVJbXBsPiBuZXdDaGlsZCwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZp
cnR1YWwgQ29udGFpbmVyTm9kZUltcGwqIGFkZENoaWxkKFBhc3NSZWZQdHI8Tm9kZUltcGw+KTsK
KyAgICB2aXJ0dWFsIGJvb2wgaGFzQ2hpbGROb2RlcygpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9p
ZCBhdHRhY2goKTsKICAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoKCk7Ci0KLSAgICB2aXJ0dWFsIFdl
YkNvcmU6OkludFJlY3QgZ2V0UmVjdCgpIGNvbnN0OwotICAgIGJvb2wgZ2V0VXBwZXJMZWZ0Q29y
bmVyKGludCAmeFBvcywgaW50ICZ5UG9zKSBjb25zdDsKLSAgICBib29sIGdldExvd2VyUmlnaHRD
b3JuZXIoaW50ICZ4UG9zLCBpbnQgJnlQb3MpIGNvbnN0OwotCi0gICAgdmlydHVhbCB2b2lkIHNl
dEZvY3VzKGJvb2w9dHJ1ZSk7CisgICAgdmlydHVhbCB2b2lkIHdpbGxSZW1vdmUoKTsKKyAgICB2
aXJ0dWFsIEludFJlY3QgZ2V0UmVjdCgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzZXRGb2N1
cyhib29sID0gdHJ1ZSk7CiAgICAgdmlydHVhbCB2b2lkIHNldEFjdGl2ZShib29sIGFjdGl2ZSA9
IHRydWUsIGJvb2wgcGF1c2UgPSBmYWxzZSk7Ci0gICAgdmlydHVhbCB2b2lkIHNldEhvdmVyZWQo
Ym9vbD10cnVlKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0SG92ZXJlZChib29sID0gdHJ1ZSk7CiAg
ICAgdmlydHVhbCB1bnNpZ25lZCBjaGlsZE5vZGVDb3VudCgpIGNvbnN0OwotICAgIHZpcnR1YWwg
Tm9kZUltcGwgKmNoaWxkTm9kZSh1bnNpZ25lZCBpbmRleCk7Ci0KKyAgICB2aXJ0dWFsIE5vZGVJ
bXBsKiBjaGlsZE5vZGUodW5zaWduZWQgaW5kZXgpOwogICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRl
ZEludG9Eb2N1bWVudCgpOwogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVkRnJvbURvY3VtZW50KCk7
CiAgICAgdmlydHVhbCB2b2lkIGluc2VydGVkSW50b1RyZWUoYm9vbCBkZWVwKTsKICAgICB2aXJ0
dWFsIHZvaWQgcmVtb3ZlZEZyb21UcmVlKGJvb2wgZGVlcCk7CiAKLSAgICBOb2RlSW1wbCAqX2Zp
cnN0OwotICAgIE5vZGVJbXBsICpfbGFzdDsKKyAgICBOb2RlSW1wbCogZmFzdEZpcnN0Q2hpbGQo
KSBjb25zdCB7IHJldHVybiBtX2ZpcnN0Q2hpbGQ7IH0KKyAgICBOb2RlSW1wbCogZmFzdExhc3RD
aGlsZCgpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdENoaWxkOyB9CisgICAgCisgICAgdm9pZCByZW1v
dmVBbGxDaGlsZHJlbigpOworICAgIHZvaWQgcmVtb3ZlQ2hpbGRyZW4oKTsKKyAgICB2b2lkIGNs
b25lQ2hpbGROb2RlcyhOb2RlSW1wbCogY2xvbmUpOwogCi0gICAgLy8gaGVscGVyIGZ1bmN0aW9u
cyBmb3IgaW5zZXJ0aW5nIGNoaWxkcmVuOgorcHJpdmF0ZToKKyAgICBOb2RlSW1wbCogbV9maXJz
dENoaWxkOworICAgIE5vZGVJbXBsKiBtX2xhc3RDaGlsZDsKIAotICAgIC8vICMjIyB0aGlzIHNo
b3VsZCB2YW5pc2guIGRvIGl0IGluIGRvbS8gIQotICAgIC8vIGNoZWNrIGZvciBzYW1lIHNvdXJj
ZSBkb2N1bWVudDoKLSAgICBib29sIGNoZWNrU2FtZURvY3VtZW50KCBOb2RlSW1wbCAqbmV3Y2hp
bGQsIGludCAmZXhjZXB0aW9uY29kZSApOwotICAgIC8vIGNoZWNrIGZvciBiZWluZyBjaGlsZDoK
LSAgICBib29sIGNoZWNrSXNDaGlsZCggTm9kZUltcGwgKm9sZGNoaWxkLCBpbnQgJmV4Y2VwdGlv
bmNvZGUgKTsKLSAgICAvLyAjIyMKKyAgICBFeGNlcHRpb25Db2RlIHdpbGxSZW1vdmVDaGlsZChO
b2RlSW1wbCogY2hpbGQpOwogCi0gICAgLy8gZmluZCBvdXQgaWYgYSBub2RlIGlzIGFsbG93ZWQg
dG8gYmUgb3VyIGNoaWxkCi0gICAgdm9pZCBkaXNwYXRjaENoaWxkSW5zZXJ0ZWRFdmVudHMoIE5v
ZGVJbXBsICpjaGlsZCwgaW50ICZleGNlcHRpb25jb2RlICk7Ci0gICAgdm9pZCBkaXNwYXRjaENo
aWxkUmVtb3ZhbEV2ZW50cyggTm9kZUltcGwgKmNoaWxkLCBpbnQgJmV4Y2VwdGlvbmNvZGUgKTsK
KyAgICB2b2lkIGRpc3BhdGNoQ2hpbGRJbnNlcnRlZEV2ZW50cyhOb2RlSW1wbCogY2hpbGQsIEV4
Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIGRpc3BhdGNoQ2hpbGRSZW1vdmFsRXZlbnRzKE5vZGVJ
bXBsKiBjaGlsZCwgRXhjZXB0aW9uQ29kZSYpOworCisgICAgYm9vbCBnZXRVcHBlckxlZnRDb3Ju
ZXIoaW50JiB4LCBpbnQmIHkpIGNvbnN0OworICAgIGJvb2wgZ2V0TG93ZXJSaWdodENvcm5lcihp
bnQmIHgsIGludCYgeSkgY29uc3Q7CiB9OwogCi19OyAvL25hbWVzcGFjZQorfSAvL25hbWVzcGFj
ZQorCiAjZW5kaWYKSW5kZXg6IGtodG1sL3htbC9Eb2N1bWVudEltcGwuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIGtodG1sL3htbC9Eb2N1bWVudEltcGwuY3BwCShyZXZpc2lvbiAxMjI3OCkKKysrIGtodG1s
L3htbC9Eb2N1bWVudEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NTQsMTAgKzg1NCw5IEBA
CiAgICAgICAgICAgICBvbGRTdHlsZS0+ZGVyZWYobV9yZW5kZXJBcmVuYSk7CiAgICAgfQogCi0g
ICAgTm9kZUltcGwgKm47Ci0gICAgZm9yIChuID0gX2ZpcnN0OyBuOyBuID0gbi0+bmV4dFNpYmxp
bmcoKSkKLSAgICAgICAgaWYgKCBjaGFuZ2U+PSBJbmhlcml0IHx8IG4tPmhhc0NoYW5nZWRDaGls
ZCgpIHx8IG4tPmNoYW5nZWQoKSApCi0gICAgICAgICAgICBuLT5yZWNhbGNTdHlsZSggY2hhbmdl
ICk7CisgICAgZm9yIChOb2RlSW1wbCogbiA9IGZhc3RGaXJzdENoaWxkKCk7IG47IG4gPSBuLT5u
ZXh0U2libGluZygpKQorICAgICAgICBpZiAoY2hhbmdlID49IEluaGVyaXQgfHwgbi0+aGFzQ2hh
bmdlZENoaWxkKCkgfHwgbi0+Y2hhbmdlZCgpKQorICAgICAgICAgICAgbi0+cmVjYWxjU3R5bGUo
Y2hhbmdlKTsKIAogICAgIGlmIChjaGFuZ2VkKCkgJiYgbV92aWV3KQogICAgICAgICBtX3ZpZXct
PmxheW91dCgpOwpJbmRleDoga2h0bWwveG1sL05vZGVJbXBsLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBr
aHRtbC94bWwvTm9kZUltcGwuY3BwCShyZXZpc2lvbiAxMjI3OCkKKysrIGtodG1sL3htbC9Ob2Rl
SW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4Myw5ICsxODMsOSBAQAogICAgIC8vIGJlIGRl
ZmF1bHQgbm9kZVZhbHVlIGlzIG51bGwsIHNvIHNldHRpbmcgaXQgaGFzIG5vIGVmZmVjdAogfQog
Ci1SZWZQdHI8Tm9kZUxpc3RJbXBsPiBOb2RlSW1wbDo6Y2hpbGROb2RlcygpCitQYXNzUmVmUHRy
PE5vZGVMaXN0SW1wbD4gTm9kZUltcGw6OmNoaWxkTm9kZXMoKQogewotICAgIHJldHVybiBSZWZQ
dHI8Tm9kZUxpc3RJbXBsPihuZXcgQ2hpbGROb2RlTGlzdEltcGwodGhpcykpOworICAgIHJldHVy
biBuZXcgQ2hpbGROb2RlTGlzdEltcGwodGhpcyk7CiB9CiAKIE5vZGVJbXBsICpOb2RlSW1wbDo6
Zmlyc3RDaGlsZCgpIGNvbnN0CkBAIC0yMDYsMzMgKzIwNiwyNyBAQAogICAgIHJldHVybiBuOwog
fQogCi1Ob2RlSW1wbCAqTm9kZUltcGw6Omluc2VydEJlZm9yZSggTm9kZUltcGwgKm5ld0NoaWxk
LCBOb2RlSW1wbCAqLCBpbnQgJmV4Y2VwdGlvbmNvZGUgKQorUGFzc1JlZlB0cjxOb2RlSW1wbD4g
Tm9kZUltcGw6Omluc2VydEJlZm9yZShQYXNzUmVmUHRyPE5vZGVJbXBsPiwgTm9kZUltcGwqLCBF
eGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBuZXdDaGlsZC0+cmVmKCk7Ci0gICAgbmV3Q2hpbGQt
PmRlcmVmKCk7Ci0gICAgZXhjZXB0aW9uY29kZSA9IERPTUV4Y2VwdGlvbjo6SElFUkFSQ0hZX1JF
UVVFU1RfRVJSOworICAgIGVjID0gRE9NRXhjZXB0aW9uOjpISUVSQVJDSFlfUkVRVUVTVF9FUlI7
CiAgICAgcmV0dXJuIDA7CiB9CiAKLU5vZGVJbXBsICpOb2RlSW1wbDo6cmVwbGFjZUNoaWxkKCBO
b2RlSW1wbCAqbmV3Q2hpbGQsIE5vZGVJbXBsICosIGludCAmZXhjZXB0aW9uY29kZSApCitQYXNz
UmVmUHRyPE5vZGVJbXBsPiBOb2RlSW1wbDo6cmVwbGFjZUNoaWxkKFBhc3NSZWZQdHI8Tm9kZUlt
cGw+LCBOb2RlSW1wbCosIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICBuZXdDaGlsZC0+cmVmKCk7
Ci0gIG5ld0NoaWxkLT5kZXJlZigpOwotICBleGNlcHRpb25jb2RlID0gRE9NRXhjZXB0aW9uOjpI
SUVSQVJDSFlfUkVRVUVTVF9FUlI7Ci0gIHJldHVybiAwOworICAgIGVjID0gRE9NRXhjZXB0aW9u
OjpISUVSQVJDSFlfUkVRVUVTVF9FUlI7CisgICAgcmV0dXJuIDA7CiB9CiAKLU5vZGVJbXBsICpO
b2RlSW1wbDo6cmVtb3ZlQ2hpbGQoIE5vZGVJbXBsICosIGludCAmZXhjZXB0aW9uY29kZSApCitQ
YXNzUmVmUHRyPE5vZGVJbXBsPiBOb2RlSW1wbDo6cmVtb3ZlQ2hpbGQoTm9kZUltcGwqLCBFeGNl
cHRpb25Db2RlJiBlYykKIHsKLSAgZXhjZXB0aW9uY29kZSA9IERPTUV4Y2VwdGlvbjo6Tk9UX0ZP
VU5EX0VSUjsKLSAgcmV0dXJuIDA7CisgICAgZWMgPSBET01FeGNlcHRpb246Ok5PVF9GT1VORF9F
UlI7CisgICAgcmV0dXJuIDA7CiB9CiAKLU5vZGVJbXBsICpOb2RlSW1wbDo6YXBwZW5kQ2hpbGQo
IE5vZGVJbXBsICpuZXdDaGlsZCwgaW50ICZleGNlcHRpb25jb2RlICkKK1Bhc3NSZWZQdHI8Tm9k
ZUltcGw+IE5vZGVJbXBsOjphcHBlbmRDaGlsZChQYXNzUmVmUHRyPE5vZGVJbXBsPiwgRXhjZXB0
aW9uQ29kZSYgZWMpCiB7Ci0gICAgbmV3Q2hpbGQtPnJlZigpOwotICAgIG5ld0NoaWxkLT5kZXJl
ZigpOwotICAgIGV4Y2VwdGlvbmNvZGUgPSBET01FeGNlcHRpb246OkhJRVJBUkNIWV9SRVFVRVNU
X0VSUjsKKyAgICBlYyA9IERPTUV4Y2VwdGlvbjo6SElFUkFSQ0hZX1JFUVVFU1RfRVJSOwogICAg
IHJldHVybiAwOwogfQogCkBAIC0zMzEsMTcgKzMyNSw4IEBACiAgICAgcmV0dXJuIG51bGxBdG9t
OwogfQogCi12b2lkIE5vZGVJbXBsOjpzZXRGaXJzdENoaWxkKE5vZGVJbXBsICopCitDb250YWlu
ZXJOb2RlSW1wbCogTm9kZUltcGw6OmFkZENoaWxkKFBhc3NSZWZQdHI8Tm9kZUltcGw+KQogewot
fQotCi12b2lkIE5vZGVJbXBsOjpzZXRMYXN0Q2hpbGQoTm9kZUltcGwgKikKLXsKLX0KLQotTm9k
ZUltcGwgKk5vZGVJbXBsOjphZGRDaGlsZChOb2RlSW1wbCAqbmV3Q2hpbGQpCi17Ci0gICAgUmVm
UHRyPE5vZGVJbXBsPiBwcm90ZWN0TmV3Q2hpbGQobmV3Q2hpbGQpOyAvLyBtYWtlIHN1cmUgdGhl
IG5ldyBjaGlsZCBpcyByZWYnZCBhbmQgZGVyZWYnZCBzbyB3ZSBkb24ndCBsZWFrIGl0CiAgICAg
cmV0dXJuIDA7CiB9CiAKQEAgLTM5OSw3ICszODQsNyBAQAogICAgIHJldHVybiBjb3VudDsKIH0K
IAotdm9pZCBOb2RlSW1wbDo6YWRkRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcgJmV2
ZW50VHlwZSwgRXZlbnRMaXN0ZW5lciAqbGlzdGVuZXIsIGNvbnN0IGJvb2wgdXNlQ2FwdHVyZSkK
K3ZvaWQgTm9kZUltcGw6OmFkZEV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nICZldmVu
dFR5cGUsIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIsIGNvbnN0IGJvb2wgdXNl
Q2FwdHVyZSkKIHsKICAgICBpZiAoZ2V0RG9jdW1lbnQoKSAmJiAhZ2V0RG9jdW1lbnQoKS0+YXR0
YWNoZWQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNDI3LDE5ICs0MTIsMTUgQEAKICAgICAgICAg
bV9yZWdkTGlzdGVuZXJzLT5zZXRBdXRvRGVsZXRlKHRydWUpOwogICAgIH0KIAotICAgIGxpc3Rl
bmVyLT5yZWYoKTsKLQogICAgIC8vIFJlbW92ZSBleGlzdGluZyBpZGVudGljYWwgbGlzdGVuZXIg
c2V0IHdpdGggaWRlbnRpY2FsIGFyZ3VtZW50cy4KICAgICAvLyBUaGUgRE9NMiBzcGVjIHNheXMg
dGhhdCAiZHVwbGljYXRlIGluc3RhbmNlcyBhcmUgZGlzY2FyZGVkIiBpbiB0aGlzIGNhc2UuCi0g
ICAgcmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGxpc3RlbmVyLCB1c2VDYXB0dXJlKTsK
KyAgICByZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgbGlzdGVuZXIuZ2V0KCksIHVzZUNh
cHR1cmUpOwogCiAgICAgLy8gYWRkaW5nIHRoZSBmaXJzdCBvbmUKICAgICBpZiAobV9yZWdkTGlz
dGVuZXJzLT5pc0VtcHR5KCkgJiYgZ2V0RG9jdW1lbnQoKSAmJiAhaW5Eb2N1bWVudCgpKQogICAg
ICAgICBnZXREb2N1bWVudCgpLT5yZWdpc3RlckRpc2Nvbm5lY3RlZE5vZGVXaXRoRXZlbnRMaXN0
ZW5lcnModGhpcyk7CiAgICAgICAgIAotICAgIG1fcmVnZExpc3RlbmVycy0+YXBwZW5kKG5ldyBS
ZWdpc3RlcmVkRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGxpc3RlbmVyLCB1c2VDYXB0dXJlKSk7
Ci0KLSAgICBsaXN0ZW5lci0+ZGVyZWYoKTsKKyAgICBtX3JlZ2RMaXN0ZW5lcnMtPmFwcGVuZChu
ZXcgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBsaXN0ZW5lci5nZXQoKSwgdXNl
Q2FwdHVyZSkpOwogfQogCiB2b2lkIE5vZGVJbXBsOjpyZW1vdmVFdmVudExpc3RlbmVyKGNvbnN0
IEF0b21pY1N0cmluZyAmZXZlbnRUeXBlLCBFdmVudExpc3RlbmVyICpsaXN0ZW5lciwgYm9vbCB1
c2VDYXB0dXJlKQpAQCAtNDgyLDE2ICs0NjMsMTIgQEAKICAgICAgICAgfQogfQogCi12b2lkIE5v
ZGVJbXBsOjpzZXRIVE1MRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcgJmV2ZW50VHlw
ZSwgRXZlbnRMaXN0ZW5lciAqbGlzdGVuZXIpCit2b2lkIE5vZGVJbXBsOjpzZXRIVE1MRXZlbnRM
aXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcgJmV2ZW50VHlwZSwgUGFzc1JlZlB0cjxFdmVudExp
c3RlbmVyPiBsaXN0ZW5lcikKIHsKICAgICAvLyBJbiBjYXNlIHdlIGFyZSB0aGUgb25seSBvbmUg
aG9sZGluZyBhIHJlZmVyZW5jZSB0byBpdCwgd2UgZG9uJ3Qgd2FudCByZW1vdmVIVE1MRXZlbnRM
aXN0ZW5lciB0byBkZXN0cm95IGl0LgotICAgIGlmIChsaXN0ZW5lcikKLSAgICAgICAgbGlzdGVu
ZXItPnJlZigpOwogICAgIHJlbW92ZUhUTUxFdmVudExpc3RlbmVyKGV2ZW50VHlwZSk7Ci0gICAg
aWYgKGxpc3RlbmVyKSB7Ci0gICAgICAgIGFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBsaXN0
ZW5lciwgZmFsc2UpOwotICAgICAgICBsaXN0ZW5lci0+ZGVyZWYoKTsKLSAgICB9CisgICAgaWYg
KGxpc3RlbmVyKQorICAgICAgICBhZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgbGlzdGVuZXIu
Z2V0KCksIGZhbHNlKTsKIH0KIAogRXZlbnRMaXN0ZW5lciAqTm9kZUltcGw6OmdldEhUTUxFdmVu
dExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyAmZXZlbnRUeXBlKQpAQCAtMTcxNyw4ICsxNjk0
LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhdHRyLT52YWx1ZSgpID09IG5h
bWVzcGFjZVVSSTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIGlmIChFbGVtZW50SW1wbCAqYW5jZXN0b3IgPSBnZXRBbmNlc3RvckVs
ZW1lbnQoKSkKKworICAgICAgICAgICAgaWYgKEVsZW1lbnRJbXBsKiBhbmNlc3RvciA9IGFuY2Vz
dG9yRWxlbWVudCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBhbmNlc3Rvci0+aXNEZWZhdWx0
TmFtZXNwYWNlKG5hbWVzcGFjZVVSSSk7CiAKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAg
LTE3MzIsMTYgKzE3MDksMTMgQEAKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
Y2FzZSBOb2RlOjpBVFRSSUJVVEVfTk9ERTogewogICAgICAgICAgICAgY29uc3QgQXR0ckltcGwg
KmF0dHIgPSBzdGF0aWNfY2FzdDxjb25zdCBBdHRySW1wbCAqPih0aGlzKTsKLSAgICAgICAgICAg
IAogICAgICAgICAgICAgaWYgKGF0dHItPm93bmVyRWxlbWVudCgpKQogICAgICAgICAgICAgICAg
IHJldHVybiBhdHRyLT5vd25lckVsZW1lbnQoKS0+aXNEZWZhdWx0TmFtZXNwYWNlKG5hbWVzcGFj
ZVVSSSk7Ci0gICAgICAgICAgICAKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
fQogICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgaWYgKEVsZW1lbnRJbXBsICphbmNlc3Rv
ciA9IGdldEFuY2VzdG9yRWxlbWVudCgpKQorICAgICAgICAgICAgaWYgKEVsZW1lbnRJbXBsKiBh
bmNlc3RvciA9IGFuY2VzdG9yRWxlbWVudCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBhbmNl
c3Rvci0+aXNEZWZhdWx0TmFtZXNwYWNlKG5hbWVzcGFjZVVSSSk7Ci0gICAgICAgICAgICAKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiB9CkBAIC0xNzY2LDE2ICsxNzQwLDEzIEBA
CiAgICAgICAgICAgICByZXR1cm4gRE9NU3RyaW5nKCk7CiAgICAgICAgIGNhc2UgTm9kZTo6QVRU
UklCVVRFX05PREU6IHsKICAgICAgICAgICAgIGNvbnN0IEF0dHJJbXBsICphdHRyID0gc3RhdGlj
X2Nhc3Q8Y29uc3QgQXR0ckltcGwgKj4odGhpcyk7Ci0gICAgICAgICAgICAKICAgICAgICAgICAg
IGlmIChhdHRyLT5vd25lckVsZW1lbnQoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gYXR0ci0+
b3duZXJFbGVtZW50KCktPmxvb2t1cFByZWZpeChuYW1lc3BhY2VVUkkpOwotICAgICAgICAgICAg
CiAgICAgICAgICAgICByZXR1cm4gRE9NU3RyaW5nKCk7CiAgICAgICAgIH0KICAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgIGlmIChFbGVtZW50SW1wbCAqYW5jZXN0b3IgPSBnZXRBbmNlc3Rv
ckVsZW1lbnQoKSkKKyAgICAgICAgICAgIGlmIChFbGVtZW50SW1wbCogYW5jZXN0b3IgPSBhbmNl
c3RvckVsZW1lbnQoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gYW5jZXN0b3ItPmxvb2t1cFBy
ZWZpeChuYW1lc3BhY2VVUkkpOwotICAgICAgICAgICAgCiAgICAgICAgICAgICByZXR1cm4gRE9N
U3RyaW5nKCk7CiAgICAgfQogfQpAQCAtMTgxNCwxMCArMTc4NSw4IEBACiAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIGlmIChFbGVtZW50SW1wbCAqYW5jZXN0b3IgPSBnZXRBbmNlc3RvckVsZW1l
bnQoKSkKKyAgICAgICAgICAgIGlmIChFbGVtZW50SW1wbCogYW5jZXN0b3IgPSBhbmNlc3RvckVs
ZW1lbnQoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gYW5jZXN0b3ItPmxvb2t1cE5hbWVzcGFj
ZVVSSShwcmVmaXgpOwotICAgICAgICAgICAgCiAgICAgICAgICAgICByZXR1cm4gRE9NU3RyaW5n
KCk7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBOb2RlOjpET0NVTUVOVF9OT0RFOgpAQCAtMTgz
Niw5ICsxODA1LDggQEAKICAgICAgICAgICAgICAgICByZXR1cm4gRE9NU3RyaW5nKCk7CiAgICAg
ICAgIH0KICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGlmIChFbGVtZW50SW1wbCAqYW5j
ZXN0b3IgPSBnZXRBbmNlc3RvckVsZW1lbnQoKSkKKyAgICAgICAgICAgIGlmIChFbGVtZW50SW1w
bCogYW5jZXN0b3IgPSBhbmNlc3RvckVsZW1lbnQoKSkKICAgICAgICAgICAgICAgICByZXR1cm4g
YW5jZXN0b3ItPmxvb2t1cE5hbWVzcGFjZVVSSShwcmVmaXgpOwotICAgICAgICAgICAgCiAgICAg
ICAgICAgICByZXR1cm4gRE9NU3RyaW5nKCk7CiAgICAgfQogfQpAQCAtMTg2NCw5ICsxODMyLDgg
QEAKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBpZiAoRWxlbWVudEltcGwgKmFuY2VzdG9y
ID0gZ2V0QW5jZXN0b3JFbGVtZW50KCkpCisgICAgaWYgKEVsZW1lbnRJbXBsKiBhbmNlc3RvciA9
IGFuY2VzdG9yRWxlbWVudCgpKQogICAgICAgICByZXR1cm4gYW5jZXN0b3ItPmxvb2t1cE5hbWVz
cGFjZVByZWZpeChfbmFtZXNwYWNlVVJJLCBvcmlnaW5hbEVsZW1lbnQpOwotICAgIAogICAgIHJl
dHVybiBET01TdHJpbmcoKTsKIH0KIApAQCAtMTkzNiwxNSArMTkwMywxMyBAQAogICAgIH0KIH0K
IAotRWxlbWVudEltcGwgKk5vZGVJbXBsOjpnZXRBbmNlc3RvckVsZW1lbnQoKSBjb25zdAorRWxl
bWVudEltcGwqIE5vZGVJbXBsOjphbmNlc3RvckVsZW1lbnQoKSBjb25zdAogewotICAgIC8vIElu
IHRoZW9yeSwgdGhlcmUgY2FuIGJlIEVudGl0eVJlZmVyZW5jZSBub2RlcyBiZXR3ZWVuIGVsZW1l
bnRzCi0gICAgLy8gYnV0IHRoaXMgaXMgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQuCi0gICAgZm9y
IChOb2RlSW1wbCAqbiA9IHBhcmVudE5vZGUoKTsgbjsgbiA9IG4tPnBhcmVudE5vZGUoKSkgewor
ICAgIC8vIEluIHRoZW9yeSwgdGhlcmUgY2FuIGJlIEVudGl0eVJlZmVyZW5jZSBub2RlcyBiZXR3
ZWVuIGVsZW1lbnRzLCBidXQgdGhpcyBpcyBjdXJyZW50bHkgbm90IHN1cHBvcnRlZC4KKyAgICBm
b3IgKE5vZGVJbXBsKiBuID0gcGFyZW50Tm9kZSgpOyBuOyBuID0gbi0+cGFyZW50Tm9kZSgpKSB7
CiAgICAgICAgIGlmIChuLT5pc0VsZW1lbnROb2RlKCkpCi0gICAgICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8RWxlbWVudEltcGwgKj4obik7CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8RWxlbWVudEltcGwqPihuKTsKICAgICB9Ci0gICAgCiAgICAgcmV0dXJuIDA7CiB9CiAKSW5k
ZXg6IGtodG1sL3htbC9kb21fZWxlbWVudGltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtodG1sL3ht
bC9kb21fZWxlbWVudGltcGwuY3BwCShyZXZpc2lvbiAxMjI3OCkKKysrIGtodG1sL3htbC9kb21f
ZWxlbWVudGltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OTcsNyArNTk3LDcgQEAKICAgICAg
ICAgfQogICAgIH0KIAotICAgIGZvciAoTm9kZUltcGwgKm4gPSBfZmlyc3Q7IG47IG4gPSBuLT5u
ZXh0U2libGluZygpKSB7CisgICAgZm9yIChOb2RlSW1wbCAqbiA9IGZhc3RGaXJzdENoaWxkKCk7
IG47IG4gPSBuLT5uZXh0U2libGluZygpKSB7CiAgICAgICAgIGlmIChjaGFuZ2UgPj0gSW5oZXJp
dCB8fCBuLT5pc1RleHROb2RlKCkgfHwgbi0+aGFzQ2hhbmdlZENoaWxkKCkgfHwgbi0+Y2hhbmdl
ZCgpKQogICAgICAgICAgICAgbi0+cmVjYWxjU3R5bGUoY2hhbmdlKTsKICAgICB9CkluZGV4OiBr
aHRtbC94bWwvQ29udGFpbmVyTm9kZUltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtodG1sL3htbC9D
b250YWluZXJOb2RlSW1wbC5jcHAJKHJldmlzaW9uIDEyMjc4KQorKysga2h0bWwveG1sL0NvbnRh
aW5lck5vZGVJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsMzAgKzI0LDI2IEBACiAKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJDb250YWluZXJOb2RlSW1wbC5oIgotI2luY2x1
ZGUgImRvbV9ub2RlLmgiCi0jaW5jbHVkZSAiZG9tX2V4Y2VwdGlvbi5oIgotI2luY2x1ZGUgImRv
bTJfZXZlbnRzaW1wbC5oIgotI2luY2x1ZGUgIlJlbmRlclRleHQuaCIKLSNpbmNsdWRlICJyZW5k
ZXJfdGhlbWUuaCIKLSNpbmNsdWRlICJJbmxpbmVUZXh0Qm94LmgiCi0jaW5jbHVkZSAiRG9jdW1l
bnRJbXBsLmgiCi0jaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAKKyNpbmNsdWRlICJEb2N1bWVudElt
cGwuaCIKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCi0KKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIK
KyNpbmNsdWRlICJJbmxpbmVUZXh0Qm94LmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1
ZGUgInFkYXRldGltZS5oIgorI2luY2x1ZGUgIlJlbmRlclRleHQuaCIKKyNpbmNsdWRlICJkb20y
X2V2ZW50c2ltcGwuaCIKKyNpbmNsdWRlICJkb21fZXhjZXB0aW9uLmgiCisjaW5jbHVkZSAiZG9t
X25vZGUuaCIKKyNpbmNsdWRlICJyZW5kZXJfdGhlbWUuaCIKKyNpbmNsdWRlIDxxZGF0ZXRpbWUu
aD4KIAotdXNpbmcgbmFtZXNwYWNlIGtodG1sOworbmFtZXNwYWNlIFdlYkNvcmUgewogCi1uYW1l
c3BhY2UgRE9NIHsKLQogdXNpbmcgbmFtZXNwYWNlIEV2ZW50TmFtZXM7CiAKLUNvbnRhaW5lck5v
ZGVJbXBsOjpDb250YWluZXJOb2RlSW1wbChEb2N1bWVudEltcGwgKmRvYykKLSAgICA6IE5vZGVJ
bXBsKGRvYykKK0NvbnRhaW5lck5vZGVJbXBsOjpDb250YWluZXJOb2RlSW1wbChEb2N1bWVudElt
cGwqIGRvYykKKyAgICA6IE5vZGVJbXBsKGRvYyksIG1fZmlyc3RDaGlsZCgwKSwgbV9sYXN0Q2hp
bGQoMCkKIHsKLSAgICBfZmlyc3QgPSBfbGFzdCA9IDA7CiB9CiAKIHZvaWQgQ29udGFpbmVyTm9k
ZUltcGw6OnJlbW92ZUFsbENoaWxkcmVuKCkKQEAgLTY2LDcgKzYyLDcgQEAKICAgICBOb2RlSW1w
bCAqbjsKICAgICBOb2RlSW1wbCAqbmV4dDsKIAotICAgIGZvciggbiA9IF9maXJzdDsgbiAhPSAw
OyBuID0gbmV4dCApIHsKKyAgICBmb3IgKG4gPSBtX2ZpcnN0Q2hpbGQ7IG4gIT0gMDsgbiA9IG5l
eHQgKSB7CiAgICAgICAgIG5leHQgPSBuLT5uZXh0U2libGluZygpOwogICAgICAgICBuLT5zZXRQ
cmV2aW91c1NpYmxpbmcoMCk7CiAgICAgICAgIG4tPnNldE5leHRTaWJsaW5nKDApOwpAQCAtOTgs
OCArOTQsOCBAQAogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBhbHJlYWR5SW5zaWRlRGVz
dHJ1Y3RvciA9IGZhbHNlOwotICAgICAgICBfZmlyc3QgPSAwOwotICAgICAgICBfbGFzdCA9IDA7
CisgICAgICAgIG1fZmlyc3RDaGlsZCA9IDA7CisgICAgICAgIG1fbGFzdENoaWxkID0gMDsKICAg
ICB9CiB9CiAKQEAgLTEwOSw1MCArMTA1LDQ4IEBACiB9CiAKIAotTm9kZUltcGwgKkNvbnRhaW5l
ck5vZGVJbXBsOjpmaXJzdENoaWxkKCkgY29uc3QKK05vZGVJbXBsKiBDb250YWluZXJOb2RlSW1w
bDo6Zmlyc3RDaGlsZCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIF9maXJzdDsKKyAgICByZXR1cm4g
bV9maXJzdENoaWxkOwogfQogCi1Ob2RlSW1wbCAqQ29udGFpbmVyTm9kZUltcGw6Omxhc3RDaGls
ZCgpIGNvbnN0CitOb2RlSW1wbCogQ29udGFpbmVyTm9kZUltcGw6Omxhc3RDaGlsZCgpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIF9sYXN0OworICAgIHJldHVybiBtX2xhc3RDaGlsZDsKIH0KIAotTm9k
ZUltcGwgKkNvbnRhaW5lck5vZGVJbXBsOjppbnNlcnRCZWZvcmUgKCBOb2RlSW1wbCAqbmV3Q2hp
bGQsIE5vZGVJbXBsICpyZWZDaGlsZCwgaW50ICZleGNlcHRpb25jb2RlICkKK1Bhc3NSZWZQdHI8
Tm9kZUltcGw+IENvbnRhaW5lck5vZGVJbXBsOjppbnNlcnRCZWZvcmUoUGFzc1JlZlB0cjxOb2Rl
SW1wbD4gbmV3Q2hpbGQsIE5vZGVJbXBsKiByZWZDaGlsZCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7
Ci0gICAgZXhjZXB0aW9uY29kZSA9IDA7CisgICAgZWMgPSAwOwogCi0gICAgLy8gaW5zZXJ0QmVm
b3JlKC4uLixudWxsKSBpcyBlcXVpdmFsZW50IHRvIGFwcGVuZENoaWxkKCkKLSAgICBpZighcmVm
Q2hpbGQpCi0gICAgICAgIHJldHVybiBhcHBlbmRDaGlsZChuZXdDaGlsZCwgZXhjZXB0aW9uY29k
ZSk7CisgICAgLy8gaW5zZXJ0QmVmb3JlKG5vZGUsIDApIGlzIGVxdWl2YWxlbnQgdG8gYXBwZW5k
Q2hpbGQobm9kZSkKKyAgICBpZiAoIXJlZkNoaWxkKQorICAgICAgICByZXR1cm4gYXBwZW5kQ2hp
bGQobmV3Q2hpbGQsIGVjKTsKIAotICAgIFJlZlB0cjxOb2RlSW1wbD4gcHJvdGVjdE5ld0NoaWxk
KG5ld0NoaWxkKTsgLy8gbWFrZSBzdXJlIHRoZSBuZXcgY2hpbGQgaXMgcmVmJ2QgYW5kIGRlcmVm
J2Qgc28gd2UgZG9uJ3QgbGVhayBpdAotCi0gICAgLy8gTWFrZSBzdXJlIGFkZGluZyB0aGUgbmV3
IGNoaWxkIGlzIG9rCi0gICAgY2hlY2tBZGRDaGlsZChuZXdDaGlsZCwgZXhjZXB0aW9uY29kZSk7
Ci0gICAgaWYgKGV4Y2VwdGlvbmNvZGUpCisgICAgLy8gTWFrZSBzdXJlIGFkZGluZyB0aGUgbmV3
IGNoaWxkIGlzIE9LLgorICAgIGNoZWNrQWRkQ2hpbGQobmV3Q2hpbGQuZ2V0KCksIGVjKTsKKyAg
ICBpZiAoZWMpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgLy8gTk9UX0ZPVU5EX0VSUjogUmFp
c2VkIGlmIHJlZkNoaWxkIGlzIG5vdCBhIGNoaWxkIG9mIHRoaXMgbm9kZQogICAgIGlmIChyZWZD
aGlsZC0+cGFyZW50Tm9kZSgpICE9IHRoaXMpIHsKLSAgICAgICAgZXhjZXB0aW9uY29kZSA9IERP
TUV4Y2VwdGlvbjo6Tk9UX0ZPVU5EX0VSUjsKKyAgICAgICAgZWMgPSBET01FeGNlcHRpb246Ok5P
VF9GT1VORF9FUlI7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAogICAgIGJvb2wgaXNGcmFn
bWVudCA9IG5ld0NoaWxkLT5ub2RlVHlwZSgpID09IE5vZGU6OkRPQ1VNRU5UX0ZSQUdNRU5UX05P
REU7CiAKLSAgICAvLyBJZiBuZXdDaGlsZCBpcyBhIERvY3VtZW50RnJhZ21lbnQgd2l0aCBubyBj
aGlsZHJlbi4uLi4gdGhlcmUncyBub3RoaW5nIHRvIGRvLgotICAgIC8vIEp1c3QgcmV0dXJuIHRo
ZSBkb2N1bWVudCBmcmFnbWVudAorICAgIC8vIElmIG5ld0NoaWxkIGlzIGEgRG9jdW1lbnRGcmFn
bWVudCB3aXRoIG5vIGNoaWxkcmVuOyB0aGVyZSdzIG5vdGhpbmcgdG8gZG8uCisgICAgLy8gSnVz
dCByZXR1cm4gdGhlIGRvY3VtZW50IGZyYWdtZW50LgogICAgIGlmIChpc0ZyYWdtZW50ICYmICFu
ZXdDaGlsZC0+Zmlyc3RDaGlsZCgpKQotICAgICAgICByZXR1cm4gKG5ld0NoaWxkLT5oYXNPbmVS
ZWYoKSAmJiAhbmV3Q2hpbGQtPnBhcmVudCgpKSA/IDAgOiBuZXdDaGlsZDsKKyAgICAgICAgcmV0
dXJuIG5ld0NoaWxkOwogCiAgICAgLy8gTm93IGFjdHVhbGx5IGFkZCB0aGUgY2hpbGQocmVuKQot
ICAgIE5vZGVJbXBsICpuZXh0Q2hpbGQ7Ci0gICAgTm9kZUltcGwgKmNoaWxkID0gaXNGcmFnbWVu
dCA/IG5ld0NoaWxkLT5maXJzdENoaWxkKCkgOiBuZXdDaGlsZDsKKyAgICBOb2RlSW1wbCogbmV4
dENoaWxkOworICAgIE5vZGVJbXBsKiBjaGlsZCA9IGlzRnJhZ21lbnQgPyBuZXdDaGlsZC0+Zmly
c3RDaGlsZCgpIDogbmV3Q2hpbGQuZ2V0KCk7CiAKLSAgICBOb2RlSW1wbCAqcHJldiA9IHJlZkNo
aWxkLT5wcmV2aW91c1NpYmxpbmcoKTsKLSAgICBpZiAoIHByZXYgPT0gbmV3Q2hpbGQgfHwgcmVm
Q2hpbGQgPT0gbmV3Q2hpbGQgKSAvLyBub3RoaW5nIHRvIGRvCisgICAgTm9kZUltcGwqIHByZXYg
PSByZWZDaGlsZC0+cHJldmlvdXNTaWJsaW5nKCk7CisgICAgaWYgKHByZXYgPT0gbmV3Q2hpbGQg
fHwgcmVmQ2hpbGQgPT0gbmV3Q2hpbGQpIC8vIG5vdGhpbmcgdG8gZG8KICAgICAgICAgcmV0dXJu
IG5ld0NoaWxkOwogICAgIAogICAgIHdoaWxlIChjaGlsZCkgewpAQCAtMTYxLDggKzE1NSw4IEBA
CiAgICAgICAgIC8vIElmIGNoaWxkIGlzIGFscmVhZHkgcHJlc2VudCBpbiB0aGUgdHJlZSwgZmly
c3QgcmVtb3ZlIGl0CiAgICAgICAgIE5vZGVJbXBsICpuZXdQYXJlbnQgPSBjaGlsZC0+cGFyZW50
Tm9kZSgpOwogICAgICAgICBpZiAobmV3UGFyZW50KQotICAgICAgICAgICAgbmV3UGFyZW50LT5y
ZW1vdmVDaGlsZCggY2hpbGQsIGV4Y2VwdGlvbmNvZGUgKTsKLSAgICAgICAgaWYgKGV4Y2VwdGlv
bmNvZGUpCisgICAgICAgICAgICBuZXdQYXJlbnQtPnJlbW92ZUNoaWxkKCBjaGlsZCwgZWMgKTsK
KyAgICAgICAgaWYgKGVjKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAKICAgICAgICAgLy8gQWRk
IGNoaWxkIGluIHRoZSBjb3JyZWN0IHBvc2l0aW9uCkBAIC0xNzAsNyArMTY0LDcgQEAKICAgICAg
ICAgaWYgKHByZXYpCiAgICAgICAgICAgICBwcmV2LT5zZXROZXh0U2libGluZyhjaGlsZCk7CiAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIF9maXJzdCA9IGNoaWxkOworICAgICAgICAgICAgbV9m
aXJzdENoaWxkID0gY2hpbGQ7CiAgICAgICAgIHJlZkNoaWxkLT5zZXRQcmV2aW91c1NpYmxpbmco
Y2hpbGQpOwogICAgICAgICBjaGlsZC0+c2V0UGFyZW50KHRoaXMpOwogICAgICAgICBjaGlsZC0+
c2V0UHJldmlvdXNTaWJsaW5nKHByZXYpOwpAQCAtMTgzLDcgKzE3Nyw3IEBACiAgICAgICAgICAg
ICBjaGlsZC0+YXR0YWNoKCk7CiAgICAgICAgIAogICAgICAgICAvLyBEaXNwYXRjaCB0aGUgbXV0
YXRpb24gZXZlbnRzCi0gICAgICAgIGRpc3BhdGNoQ2hpbGRJbnNlcnRlZEV2ZW50cyhjaGlsZCxl
eGNlcHRpb25jb2RlKTsKKyAgICAgICAgZGlzcGF0Y2hDaGlsZEluc2VydGVkRXZlbnRzKGNoaWxk
LCBlYyk7CiAKICAgICAgICAgcHJldiA9IGNoaWxkOwogICAgICAgICBjaGlsZCA9IG5leHRDaGls
ZDsKQEAgLTE5NCwzNiArMTg4LDMzIEBACiAgICAgcmV0dXJuIG5ld0NoaWxkOwogfQogCi1Ob2Rl
SW1wbCAqQ29udGFpbmVyTm9kZUltcGw6OnJlcGxhY2VDaGlsZCAoIE5vZGVJbXBsICpuZXdDaGls
ZCwgTm9kZUltcGwgKm9sZENoaWxkLCBpbnQgJmV4Y2VwdGlvbmNvZGUgKQorUGFzc1JlZlB0cjxO
b2RlSW1wbD4gQ29udGFpbmVyTm9kZUltcGw6OnJlcGxhY2VDaGlsZChQYXNzUmVmUHRyPE5vZGVJ
bXBsPiBuZXdDaGlsZCwgTm9kZUltcGwqIG9sZENoaWxkLCBFeGNlcHRpb25Db2RlJiBlYykKIHsK
LSAgICBleGNlcHRpb25jb2RlID0gMDsKKyAgICBlYyA9IDA7CiAKLSAgICBSZWZQdHI8Tm9kZUlt
cGw+IHByb3RlY3ROZXdDaGlsZChuZXdDaGlsZCk7IC8vIG1ha2Ugc3VyZSB0aGUgbmV3IGNoaWxk
IGlzIHJlZidkIGFuZCBkZXJlZidkIHNvIHdlIGRvbid0IGxlYWsgaXQKLQotICAgIGlmICggb2xk
Q2hpbGQgPT0gbmV3Q2hpbGQgKSAvLyBub3RoaW5nIHRvIGRvCi0gICAgICAgIHJldHVybiBvbGRD
aGlsZDsKKyAgICBpZiAob2xkQ2hpbGQgPT0gbmV3Q2hpbGQpIC8vIG5vdGhpbmcgdG8gZG8KKyAg
ICAgICAgcmV0dXJuIG5ld0NoaWxkOwogICAgIAogICAgIC8vIE1ha2Ugc3VyZSBhZGRpbmcgdGhl
IG5ldyBjaGlsZCBpcyBvawotICAgIGNoZWNrQWRkQ2hpbGQobmV3Q2hpbGQsIGV4Y2VwdGlvbmNv
ZGUpOwotICAgIGlmIChleGNlcHRpb25jb2RlKQorICAgIGNoZWNrQWRkQ2hpbGQobmV3Q2hpbGQu
Z2V0KCksIGVjKTsKKyAgICBpZiAoZWMpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgLy8gTk9U
X0ZPVU5EX0VSUjogUmFpc2VkIGlmIG9sZENoaWxkIGlzIG5vdCBhIGNoaWxkIG9mIHRoaXMgbm9k
ZS4KICAgICBpZiAoIW9sZENoaWxkIHx8IG9sZENoaWxkLT5wYXJlbnROb2RlKCkgIT0gdGhpcykg
ewotICAgICAgICBleGNlcHRpb25jb2RlID0gRE9NRXhjZXB0aW9uOjpOT1RfRk9VTkRfRVJSOwor
ICAgICAgICBlYyA9IERPTUV4Y2VwdGlvbjo6Tk9UX0ZPVU5EX0VSUjsKICAgICAgICAgcmV0dXJu
IDA7CiAgICAgfQogCiAgICAgYm9vbCBpc0ZyYWdtZW50ID0gbmV3Q2hpbGQtPm5vZGVUeXBlKCkg
PT0gTm9kZTo6RE9DVU1FTlRfRlJBR01FTlRfTk9ERTsKLSAgICBOb2RlSW1wbCAqbmV4dENoaWxk
OwotICAgIE5vZGVJbXBsICpjaGlsZCA9IGlzRnJhZ21lbnQgPyBuZXdDaGlsZC0+Zmlyc3RDaGls
ZCgpIDogbmV3Q2hpbGQ7CisgICAgUmVmUHRyPE5vZGVJbXBsPiBjaGlsZCA9IGlzRnJhZ21lbnQg
PyBuZXdDaGlsZC0+Zmlyc3RDaGlsZCgpIDogbmV3Q2hpbGQuZ2V0KCk7CiAKICAgICAvLyBSZW1v
dmUgdGhlIG9sZCBjaGlsZAotICAgIE5vZGVJbXBsICpwcmV2ID0gb2xkQ2hpbGQtPnByZXZpb3Vz
U2libGluZygpOwotICAgIE5vZGVJbXBsICpuZXh0ID0gb2xkQ2hpbGQtPm5leHRTaWJsaW5nKCk7
CisgICAgUmVmUHRyPE5vZGVJbXBsPiBwcmV2ID0gb2xkQ2hpbGQtPnByZXZpb3VzU2libGluZygp
OworICAgIFJlZlB0cjxOb2RlSW1wbD4gbmV4dCA9IG9sZENoaWxkLT5uZXh0U2libGluZygpOwog
Ci0gICAgcmVtb3ZlQ2hpbGQob2xkQ2hpbGQsIGV4Y2VwdGlvbmNvZGUpOwotICAgIGlmIChleGNl
cHRpb25jb2RlKQorICAgIFBhc3NSZWZQdHI8Tm9kZUltcGw+IHJlbW92ZWRDaGlsZCA9IHJlbW92
ZUNoaWxkKG9sZENoaWxkLCBlYyk7CisgICAgaWYgKGVjKQogICAgICAgICByZXR1cm4gMDsKIAog
ICAgIC8vIElmIHRoZSBuZXcgY2hpbGQgd2FzIHJpZ2h0IGJlZm9yZSBvciByaWdodCBhZnRlciB0
aGUgb2xkIGNoaWxkLCBub3RoaW5nIGVsc2UgbmVlZHMgdG8gY2hhbmdlCkBAIC0yMzEsMjQgKzIy
MiwyOCBAQAogICAgICAgICBjaGlsZCA9IDA7CiAgICAgLy8gQWRkIHRoZSBuZXcgY2hpbGQocmVu
KQogICAgIHdoaWxlIChjaGlsZCkgewotICAgICAgICBuZXh0Q2hpbGQgPSBpc0ZyYWdtZW50ID8g
Y2hpbGQtPm5leHRTaWJsaW5nKCkgOiAwOworICAgICAgICBSZWZQdHI8Tm9kZUltcGw+IG5leHRD
aGlsZCA9IGlzRnJhZ21lbnQgPyBjaGlsZC0+bmV4dFNpYmxpbmcoKSA6IDA7CiAKICAgICAgICAg
Ly8gSWYgY2hpbGQgaXMgYWxyZWFkeSBwcmVzZW50IGluIHRoZSB0cmVlLCBmaXJzdCByZW1vdmUg
aXQKLSAgICAgICAgTm9kZUltcGwgKm5ld1BhcmVudCA9IGNoaWxkLT5wYXJlbnROb2RlKCk7Cisg
ICAgICAgIE5vZGVJbXBsKiBuZXdQYXJlbnQgPSBjaGlsZC0+cGFyZW50Tm9kZSgpOwogICAgICAg
ICBpZiAobmV3UGFyZW50KQotICAgICAgICAgICAgbmV3UGFyZW50LT5yZW1vdmVDaGlsZCggY2hp
bGQsIGV4Y2VwdGlvbmNvZGUgKTsKLSAgICAgICAgaWYgKGV4Y2VwdGlvbmNvZGUpCisgICAgICAg
ICAgICBuZXdQYXJlbnQtPnJlbW92ZUNoaWxkKGNoaWxkLmdldCgpLCBlYyk7CisgICAgICAgIGlm
IChlYykKICAgICAgICAgICAgIHJldHVybiAwOwogCiAgICAgICAgIC8vIEFkZCBjaGlsZCBpbiB0
aGUgY29ycmVjdCBwb3NpdGlvbgogICAgICAgICBmb3JiaWRFdmVudERpc3BhdGNoKCk7Ci0gICAg
ICAgIGlmIChwcmV2KSBwcmV2LT5zZXROZXh0U2libGluZyhjaGlsZCk7Ci0gICAgICAgIGlmIChu
ZXh0KSBuZXh0LT5zZXRQcmV2aW91c1NpYmxpbmcoY2hpbGQpOwotICAgICAgICBpZighcHJldikg
X2ZpcnN0ID0gY2hpbGQ7Ci0gICAgICAgIGlmKCFuZXh0KSBfbGFzdCA9IGNoaWxkOworICAgICAg
ICBpZiAocHJldikKKyAgICAgICAgICAgIHByZXYtPnNldE5leHRTaWJsaW5nKGNoaWxkLmdldCgp
KTsKKyAgICAgICAgaWYgKG5leHQpCisgICAgICAgICAgICBuZXh0LT5zZXRQcmV2aW91c1NpYmxp
bmcoY2hpbGQuZ2V0KCkpOworICAgICAgICBpZiAoIXByZXYpCisgICAgICAgICAgICBtX2ZpcnN0
Q2hpbGQgPSBjaGlsZC5nZXQoKTsKKyAgICAgICAgaWYgKCFuZXh0KQorICAgICAgICAgICAgbV9s
YXN0Q2hpbGQgPSBjaGlsZC5nZXQoKTsKICAgICAgICAgY2hpbGQtPnNldFBhcmVudCh0aGlzKTsK
LSAgICAgICAgY2hpbGQtPnNldFByZXZpb3VzU2libGluZyhwcmV2KTsKLSAgICAgICAgY2hpbGQt
PnNldE5leHRTaWJsaW5nKG5leHQpOworICAgICAgICBjaGlsZC0+c2V0UHJldmlvdXNTaWJsaW5n
KHByZXYuZ2V0KCkpOworICAgICAgICBjaGlsZC0+c2V0TmV4dFNpYmxpbmcobmV4dC5nZXQoKSk7
CiAgICAgICAgIGFsbG93RXZlbnREaXNwYXRjaCgpOwogCiAgICAgICAgIC8vIEFkZCBjaGlsZCB0
byB0aGUgcmVuZGVyaW5nIHRyZWUKQEAgLTI1Nyw3ICsyNTIsNyBAQAogICAgICAgICAgICAgY2hp
bGQtPmF0dGFjaCgpOwogCiAgICAgICAgIC8vIERpc3BhdGNoIHRoZSBtdXRhdGlvbiBldmVudHMK
LSAgICAgICAgZGlzcGF0Y2hDaGlsZEluc2VydGVkRXZlbnRzKGNoaWxkLGV4Y2VwdGlvbmNvZGUp
OworICAgICAgICBkaXNwYXRjaENoaWxkSW5zZXJ0ZWRFdmVudHMoY2hpbGQuZ2V0KCksIGVjKTsK
IAogICAgICAgICBwcmV2ID0gY2hpbGQ7CiAgICAgICAgIGNoaWxkID0gbmV4dENoaWxkOwpAQCAt
MjY2LDE0ICsyNjEsMTMgQEAKICAgICAvLyAjIyMgc2V0IHN0eWxlIGluIGNhc2UgaXQncyBhdHRh
Y2hlZAogICAgIGdldERvY3VtZW50KCktPnNldERvY3VtZW50Q2hhbmdlZCh0cnVlKTsKICAgICBk
aXNwYXRjaFN1YnRyZWVNb2RpZmllZEV2ZW50KCk7Ci0gICAgcmV0dXJuIG9sZENoaWxkOworICAg
IHJldHVybiByZW1vdmVkQ2hpbGQ7CiB9CiAKIHZvaWQgQ29udGFpbmVyTm9kZUltcGw6OndpbGxS
ZW1vdmUoKQogewotICAgIGZvciAoTm9kZUltcGwgKm4gPSBfZmlyc3Q7IG4gIT0gMDsgbiA9IG4t
Pm5leHRTaWJsaW5nKCkpIHsKKyAgICBmb3IgKE5vZGVJbXBsICpuID0gbV9maXJzdENoaWxkOyBu
ICE9IDA7IG4gPSBuLT5uZXh0U2libGluZygpKQogICAgICAgICBuLT53aWxsUmVtb3ZlKCk7Ci0g
ICAgfQogfQogCiBpbnQgQ29udGFpbmVyTm9kZUltcGw6OndpbGxSZW1vdmVDaGlsZChOb2RlSW1w
bCAqY2hpbGQpCkBAIC0yOTEsNTcgKzI4NSw1NSBAQAogICAgIHJldHVybiAwOwogfQogCi1Ob2Rl
SW1wbCAqQ29udGFpbmVyTm9kZUltcGw6OnJlbW92ZUNoaWxkICggTm9kZUltcGwgKm9sZENoaWxk
LCBpbnQgJmV4Y2VwdGlvbmNvZGUgKQorUGFzc1JlZlB0cjxOb2RlSW1wbD4gQ29udGFpbmVyTm9k
ZUltcGw6OnJlbW92ZUNoaWxkKE5vZGVJbXBsKiBvbGRDaGlsZCwgRXhjZXB0aW9uQ29kZSYgZWMp
CiB7Ci0gICAgZXhjZXB0aW9uY29kZSA9IDA7CisgICAgZWMgPSAwOwogCiAgICAgLy8gTk9fTU9E
SUZJQ0FUSU9OX0FMTE9XRURfRVJSOiBSYWlzZWQgaWYgdGhpcyBub2RlIGlzIHJlYWRvbmx5Lgog
ICAgIGlmIChpc1JlYWRPbmx5KCkpIHsKLSAgICAgICAgZXhjZXB0aW9uY29kZSA9IERPTUV4Y2Vw
dGlvbjo6Tk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSOworICAgICAgICBlYyA9IERPTUV4Y2Vw
dGlvbjo6Tk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSOwogICAgICAgICByZXR1cm4gMDsKICAg
ICB9CiAKICAgICAvLyBOT1RfRk9VTkRfRVJSOiBSYWlzZWQgaWYgb2xkQ2hpbGQgaXMgbm90IGEg
Y2hpbGQgb2YgdGhpcyBub2RlLgogICAgIGlmICghb2xkQ2hpbGQgfHwgb2xkQ2hpbGQtPnBhcmVu
dE5vZGUoKSAhPSB0aGlzKSB7Ci0gICAgICAgIGV4Y2VwdGlvbmNvZGUgPSBET01FeGNlcHRpb246
Ok5PVF9GT1VORF9FUlI7CisgICAgICAgIGVjID0gRE9NRXhjZXB0aW9uOjpOT1RfRk9VTkRfRVJS
OwogICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0gICAgCi0gICAgLy8gdXBkYXRlIGF1eGlsaWFy
eSBkb2MgaW5mbyAoZS5nLiBpdGVyYXRvcnMpIHRvIG5vdGUgdGhhdCBub2RlIGlzIGJlaW5nIHJl
bW92ZWQKLSAgICAvLyBGSVg6IFRoaXMgbG9va3MgcmVkdW5kYW50IHdpdGggc2FtZSBjYWxsIGZy
b20gZGlzcGF0Y2hDaGlsZFJlbW92YWxFdmVudHMgaW4gd2lsbFJlbW92ZUNoaWxkCi0vLyAgZ2V0
RG9jdW1lbnQoKS0+bm90aWZ5QmVmb3JlTm9kZVJlbW92YWwob2xkQ2hpbGQpOyAvLyAjIyMgdXNl
IGV2ZW50cyBpbnN0ZWFkCiAKKyAgICBQYXNzUmVmUHRyPE5vZGVJbXBsPiBjaGlsZCA9IG9sZENo
aWxkOworICAgIAogICAgIC8vIGRpc3BhdGNoIHByZS1yZW1vdmFsIG11dGF0aW9uIGV2ZW50cwog
ICAgIGlmIChnZXREb2N1bWVudCgpLT5oYXNMaXN0ZW5lclR5cGUoRG9jdW1lbnRJbXBsOjpET01O
T0RFUkVNT1ZFRF9MSVNURU5FUikpIHsKLSAgICAgICAgb2xkQ2hpbGQtPmRpc3BhdGNoRXZlbnQo
bmV3IE11dGF0aW9uRXZlbnRJbXBsKERPTU5vZGVSZW1vdmVkRXZlbnQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRydWUsZmFsc2UsdGhpcyxET01TdHJpbmcoKSxET01TdHJpbmcoKSxE
T01TdHJpbmcoKSwwKSxleGNlcHRpb25jb2RlLHRydWUpOwotICAgICAgICBpZiAoZXhjZXB0aW9u
Y29kZSkKKyAgICAgICAgY2hpbGQtPmRpc3BhdGNoRXZlbnQobmV3IE11dGF0aW9uRXZlbnRJbXBs
KERPTU5vZGVSZW1vdmVkRXZlbnQsIHRydWUsIGZhbHNlLAorICAgICAgICAgICAgdGhpcywgRE9N
U3RyaW5nKCksIERPTVN0cmluZygpLCBET01TdHJpbmcoKSwgMCksIGVjLCB0cnVlKTsKKyAgICAg
ICAgaWYgKGVjKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgZXhjZXB0aW9u
Y29kZSA9IHdpbGxSZW1vdmVDaGlsZChvbGRDaGlsZCk7Ci0gICAgaWYgKGV4Y2VwdGlvbmNvZGUp
CisgICAgZWMgPSB3aWxsUmVtb3ZlQ2hpbGQoY2hpbGQuZ2V0KCkpOworICAgIGlmIChlYykKICAg
ICAgICAgcmV0dXJuIDA7CiAKICAgICBmb3JiaWRFdmVudERpc3BhdGNoKCk7CiAKICAgICAvLyBS
ZW1vdmUgZnJvbSByZW5kZXJpbmcgdHJlZQotICAgIGlmIChvbGRDaGlsZC0+YXR0YWNoZWQoKSkK
LSAgICAgICAgb2xkQ2hpbGQtPmRldGFjaCgpOworICAgIGlmIChjaGlsZC0+YXR0YWNoZWQoKSkK
KyAgICAgICAgY2hpbGQtPmRldGFjaCgpOwogCiAgICAgLy8gUmVtb3ZlIHRoZSBjaGlsZAogICAg
IE5vZGVJbXBsICpwcmV2LCAqbmV4dDsKLSAgICBwcmV2ID0gb2xkQ2hpbGQtPnByZXZpb3VzU2li
bGluZygpOwotICAgIG5leHQgPSBvbGRDaGlsZC0+bmV4dFNpYmxpbmcoKTsKKyAgICBwcmV2ID0g
Y2hpbGQtPnByZXZpb3VzU2libGluZygpOworICAgIG5leHQgPSBjaGlsZC0+bmV4dFNpYmxpbmco
KTsKIAotICAgIGlmKG5leHQpIG5leHQtPnNldFByZXZpb3VzU2libGluZyhwcmV2KTsKLSAgICBp
ZihwcmV2KSBwcmV2LT5zZXROZXh0U2libGluZyhuZXh0KTsKLSAgICBpZihfZmlyc3QgPT0gb2xk
Q2hpbGQpIF9maXJzdCA9IG5leHQ7Ci0gICAgaWYoX2xhc3QgPT0gb2xkQ2hpbGQpIF9sYXN0ID0g
cHJldjsKKyAgICBpZiAobmV4dCkgbmV4dC0+c2V0UHJldmlvdXNTaWJsaW5nKHByZXYpOworICAg
IGlmIChwcmV2KSBwcmV2LT5zZXROZXh0U2libGluZyhuZXh0KTsKKyAgICBpZiAobV9maXJzdENo
aWxkID09IGNoaWxkKSBtX2ZpcnN0Q2hpbGQgPSBuZXh0OworICAgIGlmIChtX2xhc3RDaGlsZCA9
PSBjaGlsZCkgbV9sYXN0Q2hpbGQgPSBwcmV2OwogCi0gICAgb2xkQ2hpbGQtPnNldFByZXZpb3Vz
U2libGluZygwKTsKLSAgICBvbGRDaGlsZC0+c2V0TmV4dFNpYmxpbmcoMCk7Ci0gICAgb2xkQ2hp
bGQtPnNldFBhcmVudCgwKTsKKyAgICBjaGlsZC0+c2V0UHJldmlvdXNTaWJsaW5nKDApOworICAg
IGNoaWxkLT5zZXROZXh0U2libGluZygwKTsKKyAgICBjaGlsZC0+c2V0UGFyZW50KDApOwogCiAg
ICAgYWxsb3dFdmVudERpc3BhdGNoKCk7CiAKQEAgLTM1MCwxMiArMzQyLDEyIEBACiAgICAgLy8g
RGlzcGF0Y2ggcG9zdC1yZW1vdmFsIG11dGF0aW9uIGV2ZW50cwogICAgIGRpc3BhdGNoU3VidHJl
ZU1vZGlmaWVkRXZlbnQoKTsKIAotICAgIGlmIChvbGRDaGlsZC0+aW5Eb2N1bWVudCgpKQotICAg
ICAgICBvbGRDaGlsZC0+cmVtb3ZlZEZyb21Eb2N1bWVudCgpOworICAgIGlmIChjaGlsZC0+aW5E
b2N1bWVudCgpKQorICAgICAgICBjaGlsZC0+cmVtb3ZlZEZyb21Eb2N1bWVudCgpOwogICAgIGVs
c2UKLSAgICAgICAgb2xkQ2hpbGQtPnJlbW92ZWRGcm9tVHJlZSh0cnVlKTsKKyAgICAgICAgY2hp
bGQtPnJlbW92ZWRGcm9tVHJlZSh0cnVlKTsKIAotICAgIHJldHVybiBvbGRDaGlsZDsKKyAgICBy
ZXR1cm4gY2hpbGQ7CiB9CiAKIC8vIHRoaXMgZGlmZmVycyBmcm9tIG90aGVyIHJlbW92ZSBmdW5j
dGlvbnMgYmVjYXVzZSBpdCBmb3JjaWJseSByZW1vdmVzIGFsbCB0aGUgY2hpbGRyZW4sCkBAIC0z
NjQsMTYgKzM1NiwxNiBAQAogewogICAgIE5vZGVJbXBsICpuOwogICAgIAotICAgIGlmICghX2Zp
cnN0KQorICAgIGlmICghbV9maXJzdENoaWxkKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBk
byBhbnkgcHJlcCB3b3JrIG5lZWRlZCBiZWZvcmUgYWN0dWFsbHkgc3RhcnRpbmcgdG8gZGV0YWNo
CiAgICAgLy8gYW5kIHJlbW92ZS4uLiBlLmcuIHN0b3AgbG9hZGluZyBmcmFtZXMsIGZpcmUgdW5s
b2FkIGV2ZW50cwotICAgIGZvciAobiA9IF9maXJzdDsgbiAhPSAwOyBuID0gbi0+bmV4dFNpYmxp
bmcoKSkKKyAgICBmb3IgKG4gPSBtX2ZpcnN0Q2hpbGQ7IG47IG4gPSBuLT5uZXh0U2libGluZygp
KQogICAgICAgICB3aWxsUmVtb3ZlQ2hpbGQobik7CiAgICAgCiAgICAgZm9yYmlkRXZlbnREaXNw
YXRjaCgpOwotICAgIHdoaWxlICgobiA9IF9maXJzdCkgIT0gMCkgeworICAgIHdoaWxlICgobiA9
IG1fZmlyc3RDaGlsZCkgIT0gMCkgewogICAgICAgICBOb2RlSW1wbCAqbmV4dCA9IG4tPm5leHRT
aWJsaW5nKCk7CiAgICAgICAgIAogICAgICAgICBuLT5yZWYoKTsKQEAgLTM4OSw5ICszODEsOSBA
QAogCiAgICAgICAgIG4tPmRlcmVmKCk7CiAKLSAgICAgICAgX2ZpcnN0ID0gbmV4dDsKKyAgICAg
ICAgbV9maXJzdENoaWxkID0gbmV4dDsKICAgICB9Ci0gICAgX2xhc3QgPSAwOworICAgIG1fbGFz
dENoaWxkID0gMDsKICAgICBhbGxvd0V2ZW50RGlzcGF0Y2goKTsKICAgICAKICAgICAvLyBEaXNw
YXRjaCBhIHNpbmdsZSBwb3N0LXJlbW92YWwgbXV0YXRpb24gZXZlbnQgZGVub3RpbmcgYSBtb2Rp
ZmllZCBzdWJ0cmVlLgpAQCAtMzk5LDE4ICszOTEsMTYgQEAKIH0KIAogCi1Ob2RlSW1wbCAqQ29u
dGFpbmVyTm9kZUltcGw6OmFwcGVuZENoaWxkICggTm9kZUltcGwgKm5ld0NoaWxkLCBpbnQgJmV4
Y2VwdGlvbmNvZGUgKQorUGFzc1JlZlB0cjxOb2RlSW1wbD4gQ29udGFpbmVyTm9kZUltcGw6OmFw
cGVuZENoaWxkKFBhc3NSZWZQdHI8Tm9kZUltcGw+IG5ld0NoaWxkLCBFeGNlcHRpb25Db2RlJiBl
YykKIHsKLSAgICBleGNlcHRpb25jb2RlID0gMDsKKyAgICBlYyA9IDA7CiAKLSAgICBSZWZQdHI8
Tm9kZUltcGw+IHByb3RlY3ROZXdDaGlsZChuZXdDaGlsZCk7IC8vIG1ha2Ugc3VyZSB0aGUgbmV3
IGNoaWxkIGlzIHJlZidkIGFuZCBkZXJlZidkIHNvIHdlIGRvbid0IGxlYWsgaXQKLQogICAgIC8v
IE1ha2Ugc3VyZSBhZGRpbmcgdGhlIG5ldyBjaGlsZCBpcyBvawotICAgIGNoZWNrQWRkQ2hpbGQo
bmV3Q2hpbGQsIGV4Y2VwdGlvbmNvZGUpOwotICAgIGlmIChleGNlcHRpb25jb2RlKQorICAgIGNo
ZWNrQWRkQ2hpbGQobmV3Q2hpbGQuZ2V0KCksIGVjKTsKKyAgICBpZiAoZWMpCiAgICAgICAgIHJl
dHVybiAwOwogICAgIAotICAgIGlmICggbmV3Q2hpbGQgPT0gX2xhc3QgKSAvLyBub3RoaW5nIHRv
IGRvCisgICAgaWYgKG5ld0NoaWxkID09IG1fbGFzdENoaWxkKSAvLyBub3RoaW5nIHRvIGRvCiAg
ICAgICAgIHJldHVybiBuZXdDaGlsZDsKIAogICAgIGJvb2wgaXNGcmFnbWVudCA9IG5ld0NoaWxk
LT5ub2RlVHlwZSgpID09IE5vZGU6OkRPQ1VNRU5UX0ZSQUdNRU5UX05PREU7CkBAIC00MjEsMjkg
KzQxMSwyOCBAQAogICAgICAgICByZXR1cm4gbmV3Q2hpbGQ7CiAKICAgICAvLyBOb3cgYWN0dWFs
bHkgYWRkIHRoZSBjaGlsZChyZW4pCi0gICAgTm9kZUltcGwgKm5leHRDaGlsZDsKLSAgICBOb2Rl
SW1wbCAqY2hpbGQgPSBpc0ZyYWdtZW50ID8gbmV3Q2hpbGQtPmZpcnN0Q2hpbGQoKSA6IG5ld0No
aWxkOwotCisgICAgUmVmUHRyPE5vZGVJbXBsPiBjaGlsZCA9IG5ld0NoaWxkLmdldCgpOworICAg
IGlmIChpc0ZyYWdtZW50KQorICAgICAgICBjaGlsZCA9IG5ld0NoaWxkLT5maXJzdENoaWxkKCk7
CiAgICAgd2hpbGUgKGNoaWxkKSB7Ci0gICAgICAgIG5leHRDaGlsZCA9IGlzRnJhZ21lbnQgPyBj
aGlsZC0+bmV4dFNpYmxpbmcoKSA6IDA7CisgICAgICAgIFJlZlB0cjxOb2RlSW1wbD4gbmV4dENo
aWxkID0gaXNGcmFnbWVudCA/IGNoaWxkLT5uZXh0U2libGluZygpIDogMDsKIAogICAgICAgICAv
LyBJZiBjaGlsZCBpcyBhbHJlYWR5IHByZXNlbnQgaW4gdGhlIHRyZWUsIGZpcnN0IHJlbW92ZSBp
dAotICAgICAgICBOb2RlSW1wbCAqb2xkUGFyZW50ID0gY2hpbGQtPnBhcmVudE5vZGUoKTsKLSAg
ICAgICAgaWYob2xkUGFyZW50KSB7Ci0gICAgICAgICAgICBvbGRQYXJlbnQtPnJlbW92ZUNoaWxk
KCBjaGlsZCwgZXhjZXB0aW9uY29kZSApOwotICAgICAgICAgICAgaWYgKGV4Y2VwdGlvbmNvZGUp
CisgICAgICAgIGlmIChOb2RlSW1wbCogb2xkUGFyZW50ID0gY2hpbGQtPnBhcmVudE5vZGUoKSkg
eworICAgICAgICAgICAgb2xkUGFyZW50LT5yZW1vdmVDaGlsZChjaGlsZC5nZXQoKSwgZWMpOwor
ICAgICAgICAgICAgaWYgKGVjKQogICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9
CiAKICAgICAgICAgLy8gQXBwZW5kIGNoaWxkIHRvIHRoZSBlbmQgb2YgdGhlIGxpc3QKICAgICAg
ICAgZm9yYmlkRXZlbnREaXNwYXRjaCgpOwogICAgICAgICBjaGlsZC0+c2V0UGFyZW50KHRoaXMp
OwotICAgICAgICBpZiAoX2xhc3QpIHsKLSAgICAgICAgICAgIGNoaWxkLT5zZXRQcmV2aW91c1Np
YmxpbmcoX2xhc3QpOwotICAgICAgICAgICAgX2xhc3QtPnNldE5leHRTaWJsaW5nKGNoaWxkKTsK
LSAgICAgICAgICAgIF9sYXN0ID0gY2hpbGQ7CisgICAgICAgIGlmIChtX2xhc3RDaGlsZCkgewor
ICAgICAgICAgICAgY2hpbGQtPnNldFByZXZpb3VzU2libGluZyhtX2xhc3RDaGlsZCk7CisgICAg
ICAgICAgICBtX2xhc3RDaGlsZC0+c2V0TmV4dFNpYmxpbmcoY2hpbGQuZ2V0KCkpOwogICAgICAg
ICB9IGVsc2UKLSAgICAgICAgICAgIF9maXJzdCA9IF9sYXN0ID0gY2hpbGQ7CisgICAgICAgICAg
ICBtX2ZpcnN0Q2hpbGQgPSBjaGlsZC5nZXQoKTsKKyAgICAgICAgbV9sYXN0Q2hpbGQgPSBjaGls
ZC5nZXQoKTsKICAgICAgICAgYWxsb3dFdmVudERpc3BhdGNoKCk7CiAKICAgICAgICAgLy8gQWRk
IGNoaWxkIHRvIHRoZSByZW5kZXJpbmcgdHJlZQpAQCAtNDUyLDcgKzQ0MSw3IEBACiAgICAgICAg
ICAgICBjaGlsZC0+YXR0YWNoKCk7CiAgICAgICAgIAogICAgICAgICAvLyBEaXNwYXRjaCB0aGUg
bXV0YXRpb24gZXZlbnRzCi0gICAgICAgIGRpc3BhdGNoQ2hpbGRJbnNlcnRlZEV2ZW50cyhjaGls
ZCxleGNlcHRpb25jb2RlKTsKKyAgICAgICAgZGlzcGF0Y2hDaGlsZEluc2VydGVkRXZlbnRzKGNo
aWxkLmdldCgpLCBlYyk7CiAKICAgICAgICAgY2hpbGQgPSBuZXh0Q2hpbGQ7CiAgICAgfQpAQCAt
NDYzLDExMCArNDUyLDY0IEBACiAgICAgcmV0dXJuIG5ld0NoaWxkOwogfQogCi1ib29sIENvbnRh
aW5lck5vZGVJbXBsOjpoYXNDaGlsZE5vZGVzICggICkgY29uc3QKK2Jvb2wgQ29udGFpbmVyTm9k
ZUltcGw6Omhhc0NoaWxkTm9kZXMoKSBjb25zdAogewotICAgIHJldHVybiBfZmlyc3QgIT0gMDsK
KyAgICByZXR1cm4gbV9maXJzdENoaWxkOwogfQogCi0vLyBub3QgcGFydCBvZiB0aGUgRE9NCi12
b2lkIENvbnRhaW5lck5vZGVJbXBsOjpzZXRGaXJzdENoaWxkKE5vZGVJbXBsICpjaGlsZCkKK0Nv
bnRhaW5lck5vZGVJbXBsKiBDb250YWluZXJOb2RlSW1wbDo6YWRkQ2hpbGQoUGFzc1JlZlB0cjxO
b2RlSW1wbD4gbmV3Q2hpbGQpCiB7Ci0gICAgX2ZpcnN0ID0gY2hpbGQ7Ci19CisgICAgLy8gVGhp
cyBmdW5jdGlvbiBpcyBvbmx5IHVzZWQgZHVyaW5nIHBhcnNpbmcuCisgICAgLy8gSXQgZG9lcyBu
b3Qgc2VuZCBhbnkgRE9NIG11dGF0aW9uIGV2ZW50cy4KIAotdm9pZCBDb250YWluZXJOb2RlSW1w
bDo6c2V0TGFzdENoaWxkKE5vZGVJbXBsICpjaGlsZCkKLXsKLSAgICBfbGFzdCA9IGNoaWxkOwot
fQotCi0vLyBjaGVjayBmb3Igc2FtZSBzb3VyY2UgZG9jdW1lbnQ6Ci1ib29sIENvbnRhaW5lck5v
ZGVJbXBsOjpjaGVja1NhbWVEb2N1bWVudCggTm9kZUltcGwgKm5ld0NoaWxkLCBpbnQgJmV4Y2Vw
dGlvbmNvZGUgKQotewotICAgIGV4Y2VwdGlvbmNvZGUgPSAwOwotICAgIERvY3VtZW50SW1wbCAq
b3duZXJEb2NUaGlzID0gZ2V0RG9jdW1lbnQoKTsKLSAgICAvLyBGSVhNRTogRG9oISBUaGlzIG5l
eHQgbGluZSBpc24ndCBnZXR0aW5nIG5ld0NoaWxkLCBzbyBpdCdzIG5ldmVyIGdvaW5nIHRvIHdv
cmshCi0gICAgRG9jdW1lbnRJbXBsICpvd25lckRvY05ldyA9IGdldERvY3VtZW50KCk7Ci0gICAg
aWYob3duZXJEb2NUaGlzICE9IG93bmVyRG9jTmV3KSB7Ci0gICAgICAgIGV4Y2VwdGlvbmNvZGUg
PSBET01FeGNlcHRpb246OldST05HX0RPQ1VNRU5UX0VSUjsKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotLy8gY2hlY2sgZm9yIGJlaW5nIGNoaWxk
OgotYm9vbCBDb250YWluZXJOb2RlSW1wbDo6Y2hlY2tJc0NoaWxkKCBOb2RlSW1wbCAqb2xkQ2hp
bGQsIGludCAmZXhjZXB0aW9uY29kZSApCi17Ci0gICAgaWYoIW9sZENoaWxkIHx8IG9sZENoaWxk
LT5wYXJlbnROb2RlKCkgIT0gdGhpcykgewotICAgICAgICBleGNlcHRpb25jb2RlID0gRE9NRXhj
ZXB0aW9uOjpOT1RfRk9VTkRfRVJSOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAg
cmV0dXJuIGZhbHNlOwotfQotCi1Ob2RlSW1wbCAqQ29udGFpbmVyTm9kZUltcGw6OmFkZENoaWxk
KE5vZGVJbXBsICpuZXdDaGlsZCkKLXsKLSAgICAvLyBkbyBub3QgYWRkIGFwcGx5Q2hhbmdlcyBo
ZXJlISBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgdXNlZCBkdXJpbmcgcGFyc2luZwotCi0gICAgUmVm
UHRyPE5vZGVJbXBsPiBwcm90ZWN0TmV3Q2hpbGQobmV3Q2hpbGQpOyAvLyBtYWtlIHN1cmUgdGhl
IG5ldyBjaGlsZCBpcyByZWYnZCBhbmQgZGVyZWYnZCBzbyB3ZSBkb24ndCBsZWFrIGl0Ci0KLSAg
ICAvLyBzaG9ydCBjaGVjayBmb3IgY29uc2lzdGVuY3kgd2l0aCBEVEQKLSAgICBpZiAoZ2V0RG9j
dW1lbnQoKS0+aXNIVE1MRG9jdW1lbnQoKSAmJiAhY2hpbGRBbGxvd2VkKG5ld0NoaWxkKSkKKyAg
ICAvLyBDaGVjayBmb3IgY29uc2lzdGVuY3kgd2l0aCBEVEQsIGJ1dCBvbmx5IHdoZW4gcGFyc2lu
ZyBIVE1MLgorICAgIGlmIChnZXREb2N1bWVudCgpLT5pc0hUTUxEb2N1bWVudCgpICYmICFjaGls
ZEFsbG93ZWQobmV3Q2hpbGQuZ2V0KCkpKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIC8vIGp1
c3QgYWRkIGl0Li4uCiAgICAgZm9yYmlkRXZlbnREaXNwYXRjaCgpOwogICAgIG5ld0NoaWxkLT5z
ZXRQYXJlbnQodGhpcyk7Ci0gICAgaWYoX2xhc3QpIHsKLSAgICAgICAgbmV3Q2hpbGQtPnNldFBy
ZXZpb3VzU2libGluZyhfbGFzdCk7Ci0gICAgICAgIF9sYXN0LT5zZXROZXh0U2libGluZyhuZXdD
aGlsZCk7Ci0gICAgICAgIF9sYXN0ID0gbmV3Q2hpbGQ7CisgICAgaWYgKG1fbGFzdENoaWxkKSB7
CisgICAgICAgIG5ld0NoaWxkLT5zZXRQcmV2aW91c1NpYmxpbmcobV9sYXN0Q2hpbGQpOworICAg
ICAgICBtX2xhc3RDaGlsZC0+c2V0TmV4dFNpYmxpbmcobmV3Q2hpbGQuZ2V0KCkpOwogICAgIH0g
ZWxzZQotICAgICAgICBfZmlyc3QgPSBfbGFzdCA9IG5ld0NoaWxkOworICAgICAgICBtX2ZpcnN0
Q2hpbGQgPSBuZXdDaGlsZC5nZXQoKTsKKyAgICBtX2xhc3RDaGlsZCA9IG5ld0NoaWxkLmdldCgp
OwogICAgIGFsbG93RXZlbnREaXNwYXRjaCgpOwogCiAgICAgaWYgKGluRG9jdW1lbnQoKSkKICAg
ICAgICAgbmV3Q2hpbGQtPmluc2VydGVkSW50b0RvY3VtZW50KCk7CiAgICAgY2hpbGRyZW5DaGFu
Z2VkKCk7CiAgICAgCi0gICAgaWYobmV3Q2hpbGQtPm5vZGVUeXBlKCkgPT0gTm9kZTo6RUxFTUVO
VF9OT0RFKQotICAgICAgICByZXR1cm4gbmV3Q2hpbGQ7CisgICAgaWYgKG5ld0NoaWxkLT5ub2Rl
VHlwZSgpID09IE5vZGU6OkVMRU1FTlRfTk9ERSkKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PENvbnRhaW5lck5vZGVJbXBsKj4obmV3Q2hpbGQuZ2V0KCkpOwogICAgIHJldHVybiB0aGlzOwog
fQogCiB2b2lkIENvbnRhaW5lck5vZGVJbXBsOjphdHRhY2goKQogewotICAgIE5vZGVJbXBsICpj
aGlsZCA9IF9maXJzdDsKLSAgICB3aGlsZShjaGlsZCAhPSAwKQotICAgIHsKKyAgICBmb3IgKE5v
ZGVJbXBsKiBjaGlsZCA9IG1fZmlyc3RDaGlsZDsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRT
aWJsaW5nKCkpCiAgICAgICAgIGNoaWxkLT5hdHRhY2goKTsKLSAgICAgICAgY2hpbGQgPSBjaGls
ZC0+bmV4dFNpYmxpbmcoKTsKLSAgICB9CiAgICAgTm9kZUltcGw6OmF0dGFjaCgpOwogfQogCiB2
b2lkIENvbnRhaW5lck5vZGVJbXBsOjpkZXRhY2goKQogewotICAgIE5vZGVJbXBsICpjaGlsZCA9
IF9maXJzdDsKLSAgICB3aGlsZShjaGlsZCAhPSAwKQotICAgIHsKLSAgICAgICAgTm9kZUltcGwq
IHByZXYgPSBjaGlsZDsKLSAgICAgICAgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKTsKLSAg
ICAgICAgcHJldi0+ZGV0YWNoKCk7Ci0gICAgfQorICAgIGZvciAoTm9kZUltcGwqIGNoaWxkID0g
bV9maXJzdENoaWxkOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkKKyAgICAg
ICAgY2hpbGQtPmRldGFjaCgpOwogICAgIE5vZGVJbXBsOjpkZXRhY2goKTsKIH0KIAogdm9pZCBD
b250YWluZXJOb2RlSW1wbDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKQogewogICAgIE5vZGVJbXBs
OjppbnNlcnRlZEludG9Eb2N1bWVudCgpOwotICAgIGZvciAoTm9kZUltcGwgKmNoaWxkID0gX2Zp
cnN0OyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkKKyAgICBmb3IgKE5vZGVJ
bXBsICpjaGlsZCA9IG1fZmlyc3RDaGlsZDsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJs
aW5nKCkpCiAgICAgICAgIGNoaWxkLT5pbnNlcnRlZEludG9Eb2N1bWVudCgpOwogfQogCiB2b2lk
IENvbnRhaW5lck5vZGVJbXBsOjpyZW1vdmVkRnJvbURvY3VtZW50KCkKIHsKICAgICBOb2RlSW1w
bDo6cmVtb3ZlZEZyb21Eb2N1bWVudCgpOwotICAgIGZvciAoTm9kZUltcGwgKmNoaWxkID0gX2Zp
cnN0OyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkKKyAgICBmb3IgKE5vZGVJ
bXBsICpjaGlsZCA9IG1fZmlyc3RDaGlsZDsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJs
aW5nKCkpCiAgICAgICAgIGNoaWxkLT5yZW1vdmVkRnJvbURvY3VtZW50KCk7CiB9CiAKQEAgLTU3
NCw3ICs1MTcsNyBAQAogewogICAgIE5vZGVJbXBsOjppbnNlcnRlZEludG9UcmVlKGRlZXApOwog
ICAgIGlmIChkZWVwKSB7Ci0gICAgICAgIGZvciAoTm9kZUltcGwgKmNoaWxkID0gX2ZpcnN0OyBj
aGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkKKyAgICAgICAgZm9yIChOb2RlSW1w
bCAqY2hpbGQgPSBtX2ZpcnN0Q2hpbGQ7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGlu
ZygpKQogICAgICAgICAgICAgY2hpbGQtPmluc2VydGVkSW50b1RyZWUoZGVlcCk7CiAgICAgfQog
fQpAQCAtNTgzLDcgKzUyNiw3IEBACiB7CiAgICAgTm9kZUltcGw6OnJlbW92ZWRGcm9tVHJlZShk
ZWVwKTsKICAgICBpZiAoZGVlcCkgewotICAgICAgICBmb3IgKE5vZGVJbXBsICpjaGlsZCA9IF9m
aXJzdDsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpCisgICAgICAgIGZvciAo
Tm9kZUltcGwgKmNoaWxkID0gbV9maXJzdENoaWxkOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4
dFNpYmxpbmcoKSkKICAgICAgICAgICAgIGNoaWxkLT5yZW1vdmVkRnJvbVRyZWUoZGVlcCk7CiAg
ICAgfQogfQpJbmRleDoga2h0bWwveG1sL3htbF90b2tlbml6ZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IGtodG1sL3htbC94bWxfdG9rZW5pemVyLmNwcAkocmV2aXNpb24gMTIyNzgpCisrKyBraHRtbC94
bWwveG1sX3Rva2VuaXplci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5OCwxMSArMzk4LDggQEAK
ICAgICAvLyBGSVhNRTogVGhpcyBoYWNrIGVuc3VyZXMgaW1wbGljaXQgdGFibGUgYm9kaWVzIGdl
dCBjb25zdHJ1Y3RlZCBpbiBYSFRNTCBhbmQgWE1MIGZpbGVzLgogICAgIC8vIFdlIHdhbnQgdG8g
Y29uc29saWRhdGUgdGhpcyB3aXRoIHRoZSBIVE1MIHBhcnNlciBhbmQgSFRNTCBET00gY29kZSBh
dCBzb21lIHBvaW50LgogICAgIC8vIEZvciBub3csIGl0J3MgdG9vIHJpc2t5IHRvIHJpcCB0aGF0
IGNvZGUgdXAuCi0gICAgaWYgKG1fY3VycmVudE5vZGUtPmhhc1RhZ05hbWUodGFibGVUYWcpICYm
Ci0gICAgICAgIG5ld0VsZW1lbnQtPmhhc1RhZ05hbWUodHJUYWcpICYmCi0gICAgICAgIG1fY3Vy
cmVudE5vZGUtPmlzSFRNTEVsZW1lbnQoKSAmJiBuZXdFbGVtZW50LT5pc0hUTUxFbGVtZW50KCkp
IHsKLSAgICAgICAgUmVmUHRyPE5vZGVJbXBsPiBpbXBsaWNpdFRCb2R5ID0KLSAgICAgICAgICAg
bmV3IEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbCh0Ym9keVRhZywgbV9kb2MsIHRydWUgLyog
aW1wbGljaXQgKi8pOworICAgIGlmIChtX2N1cnJlbnROb2RlLT5oYXNUYWdOYW1lKHRhYmxlVGFn
KSAmJiBuZXdFbGVtZW50LT5oYXNUYWdOYW1lKHRyVGFnKSkgeworICAgICAgICBSZWZQdHI8Tm9k
ZUltcGw+IGltcGxpY2l0VEJvZHkgPSBuZXcgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsKHRi
b2R5VGFnLCBtX2RvYywgdHJ1ZSAvKiBpbXBsaWNpdCAqLyk7CiAgICAgICAgIG1fY3VycmVudE5v
ZGUtPmFkZENoaWxkKGltcGxpY2l0VEJvZHkuZ2V0KCkpOwogICAgICAgICBzZXRDdXJyZW50Tm9k
ZShpbXBsaWNpdFRCb2R5LmdldCgpKTsKICAgICAgICAgaWYgKG1fdmlldyAmJiAhaW1wbGljaXRU
Qm9keS0+YXR0YWNoZWQoKSkKSW5kZXg6IGtodG1sL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnRJbXBs
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0ga2h0bWwvaHRtbC9IVE1MU2VsZWN0RWxlbWVudEltcGwuaAkocmV2
aXNpb24gMTIyNzgpCisrKyBraHRtbC9odG1sL0hUTUxTZWxlY3RFbGVtZW50SW1wbC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC04MSwxMSArODEsMTEgQEAKICAgICB2aXJ0dWFsIFFTdHJpbmcgc3RhdGUo
KTsKICAgICB2aXJ0dWFsIHZvaWQgcmVzdG9yZVN0YXRlKFFTdHJpbmdMaXN0ICYpOwogCi0gICAg
dmlydHVhbCBOb2RlSW1wbCAqaW5zZXJ0QmVmb3JlICggTm9kZUltcGwgKm5ld0NoaWxkLCBOb2Rl
SW1wbCAqcmVmQ2hpbGQsIGludCAmZXhjZXB0aW9uY29kZSApOwotICAgIHZpcnR1YWwgTm9kZUlt
cGwgKnJlcGxhY2VDaGlsZCAoIE5vZGVJbXBsICpuZXdDaGlsZCwgTm9kZUltcGwgKm9sZENoaWxk
LCBpbnQgJmV4Y2VwdGlvbmNvZGUgKTsKLSAgICB2aXJ0dWFsIE5vZGVJbXBsICpyZW1vdmVDaGls
ZCAoIE5vZGVJbXBsICpvbGRDaGlsZCwgaW50ICZleGNlcHRpb25jb2RlICk7Ci0gICAgdmlydHVh
bCBOb2RlSW1wbCAqYXBwZW5kQ2hpbGQgKCBOb2RlSW1wbCAqbmV3Q2hpbGQsIGludCAmZXhjZXB0
aW9uY29kZSApOwotICAgIHZpcnR1YWwgTm9kZUltcGwgKmFkZENoaWxkKCBOb2RlSW1wbCogbmV3
Q2hpbGQgKTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Tm9kZUltcGw+IGluc2VydEJlZm9yZShQ
YXNzUmVmUHRyPE5vZGVJbXBsPiBuZXdDaGlsZCwgTm9kZUltcGwqIHJlZkNoaWxkLCBFeGNlcHRp
b25Db2RlJik7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPE5vZGVJbXBsPiByZXBsYWNlQ2hpbGQo
UGFzc1JlZlB0cjxOb2RlSW1wbD4gbmV3Q2hpbGQsIE5vZGVJbXBsKiBvbGRDaGlsZCwgRXhjZXB0
aW9uQ29kZSYpOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxOb2RlSW1wbD4gcmVtb3ZlQ2hpbGQo
Tm9kZUltcGwqIGNoaWxkLCBFeGNlcHRpb25Db2RlJik7CisgICAgdmlydHVhbCBQYXNzUmVmUHRy
PE5vZGVJbXBsPiBhcHBlbmRDaGlsZChQYXNzUmVmUHRyPE5vZGVJbXBsPiBuZXdDaGlsZCwgRXhj
ZXB0aW9uQ29kZSYpOworICAgIHZpcnR1YWwgQ29udGFpbmVyTm9kZUltcGwqIGFkZENoaWxkKFBh
c3NSZWZQdHI8Tm9kZUltcGw+KTsKIAogICAgIHZpcnR1YWwgdm9pZCBjaGlsZHJlbkNoYW5nZWQo
KTsKIApJbmRleDoga2h0bWwvaHRtbC9odG1scGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBraHRt
bC9odG1sL2h0bWxwYXJzZXIuY3BwCShyZXZpc2lvbiAxMjI3OCkKKysrIGtodG1sL2h0bWwvaHRt
bHBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNTksNyArMTA1OSw2IEBACiAgICAgTm9k
ZUltcGwqIGN1cnJOb2RlID0gYmxvY2tFbGVtLT5maXJzdENoaWxkKCk7CiAgICAgd2hpbGUgKGN1
cnJOb2RlKSB7CiAgICAgICAgIE5vZGVJbXBsKiBuZXh0Tm9kZSA9IGN1cnJOb2RlLT5uZXh0U2li
bGluZygpOwotICAgICAgICBibG9ja0VsZW0tPnJlbW92ZUNoaWxkKGN1cnJOb2RlLCBleGNlcHRp
b25Db2RlKTsKICAgICAgICAgbmV3Tm9kZS0+YXBwZW5kQ2hpbGQoY3Vyck5vZGUsIGV4Y2VwdGlv
bkNvZGUpOwogICAgICAgICBjdXJyTm9kZSA9IG5leHROb2RlOwogICAgIH0KSW5kZXg6IGtodG1s
L2h0bWwvSFRNTEVsZW1lbnRJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBraHRtbC9odG1sL0hUTUxF
bGVtZW50SW1wbC5jcHAJKHJldmlzaW9uIDEyMjc4KQorKysga2h0bWwvaHRtbC9IVE1MRWxlbWVu
dEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCwyNyArMjQsMjYgQEAKIAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIkhUTUxFbGVtZW50SW1wbC5oIgotI2luY2x1ZGUgImh0bWwv
aHRtbF9kb2N1bWVudGltcGwuaCIKLSNpbmNsdWRlICJodG1sL2h0bWx0b2tlbml6ZXIuaCIKLSNp
bmNsdWRlICJodG1sZmFjdG9yeS5oIgogCi0jaW5jbHVkZSA8a3htbGNvcmUvSGFzaFNldC5oPgot
I2luY2x1ZGUgImVkaXRpbmcvdmlzaWJsZV90ZXh0LmgiCi0KKyNpbmNsdWRlICJFdmVudE5hbWVz
LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKLQotI2luY2x1ZGUgImRvbS9kb21fZXhjZXB0aW9uLmgi
Ci0jaW5jbHVkZSAicmVuZGVyaW5nL3JlbmRlcl9yZXBsYWNlZC5oIgotI2luY2x1ZGUgImNzcy9j
c3NfdmFsdWVpbXBsLmgiCi0jaW5jbHVkZSAiY3NzL2Nzc19zdHlsZXNoZWV0aW1wbC5oIgorI2lu
Y2x1ZGUgImNzc19ydWxlaW1wbC5oIgorI2luY2x1ZGUgImNzc19zdHlsZXNoZWV0aW1wbC5oIgor
I2luY2x1ZGUgImNzc192YWx1ZWltcGwuaCIKICNpbmNsdWRlICJjc3Nwcm9wZXJ0aWVzLmgiCiAj
aW5jbHVkZSAiY3NzdmFsdWVzLmgiCi0jaW5jbHVkZSAiY3NzL2Nzc19ydWxlaW1wbC5oIgotI2lu
Y2x1ZGUgInhtbC9kb21fdGV4dGltcGwuaCIKLSNpbmNsdWRlICJ4bWwvZG9tMl9ldmVudHNpbXBs
LmgiCi0jaW5jbHVkZSAieG1sL0V2ZW50TmFtZXMuaCIKLSNpbmNsdWRlICJlZGl0aW5nL21hcmt1
cC5oIgorI2luY2x1ZGUgImRvbTJfZXZlbnRzLmgiCisjaW5jbHVkZSAiZG9tMl9ldmVudHNpbXBs
LmgiCisjaW5jbHVkZSAiZG9tX2V4Y2VwdGlvbi5oIgorI2luY2x1ZGUgImRvbV90ZXh0aW1wbC5o
IgorI2luY2x1ZGUgImh0bWxfZG9jdW1lbnRpbXBsLmgiCisjaW5jbHVkZSAiaHRtbGZhY3Rvcnku
aCIKICNpbmNsdWRlICJodG1sbmFtZXMuaCIKKyNpbmNsdWRlICJodG1sdG9rZW5pemVyLmgiCisj
aW5jbHVkZSAibWFya3VwLmgiCisjaW5jbHVkZSAicmVuZGVyX3JlcGxhY2VkLmgiCisjaW5jbHVk
ZSAidmlzaWJsZV90ZXh0LmgiCisjaW5jbHVkZSA8a3htbGNvcmUvSGFzaFNldC5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKSW5kZXg6IGtodG1sL2h0bWwvSFRNTE9wdEdyb3VwRWxlbWVudElt
cGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIGtodG1sL2h0bWwvSFRNTE9wdEdyb3VwRWxlbWVudEltcGwu
Y3BwCShyZXZpc2lvbiAxMjI3OCkKKysrIGtodG1sL2h0bWwvSFRNTE9wdEdyb3VwRWxlbWVudElt
cGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCw0MyArNTQsNDQgQEAKICAgICByZXR1cm4gIm9w
dGdyb3VwIjsKIH0KIAotTm9kZUltcGwgKkhUTUxPcHRHcm91cEVsZW1lbnRJbXBsOjppbnNlcnRC
ZWZvcmUgKCBOb2RlSW1wbCAqbmV3Q2hpbGQsIE5vZGVJbXBsICpyZWZDaGlsZCwgaW50ICZleGNl
cHRpb25jb2RlICkKK1Bhc3NSZWZQdHI8Tm9kZUltcGw+IEhUTUxPcHRHcm91cEVsZW1lbnRJbXBs
OjppbnNlcnRCZWZvcmUgKCBQYXNzUmVmUHRyPE5vZGVJbXBsPiBuZXdDaGlsZCwgTm9kZUltcGwq
IHJlZkNoaWxkLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBOb2RlSW1wbCAqcmVzdWx0ID0g
SFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGw6Omluc2VydEJlZm9yZShuZXdDaGlsZCxyZWZDaGls
ZCwgZXhjZXB0aW9uY29kZSk7Ci0gICAgaWYgKCAhZXhjZXB0aW9uY29kZSApCisgICAgUGFzc1Jl
ZlB0cjxOb2RlSW1wbD4gcmVzdWx0ID0gSFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGw6Omluc2Vy
dEJlZm9yZShuZXdDaGlsZCwgcmVmQ2hpbGQsIGVjKTsKKyAgICBpZiAocmVzdWx0KQogICAgICAg
ICByZWNhbGNTZWxlY3RPcHRpb25zKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotTm9kZUlt
cGwgKkhUTUxPcHRHcm91cEVsZW1lbnRJbXBsOjpyZXBsYWNlQ2hpbGQgKCBOb2RlSW1wbCAqbmV3
Q2hpbGQsIE5vZGVJbXBsICpvbGRDaGlsZCwgaW50ICZleGNlcHRpb25jb2RlICkKK1Bhc3NSZWZQ
dHI8Tm9kZUltcGw+IEhUTUxPcHRHcm91cEVsZW1lbnRJbXBsOjpyZXBsYWNlQ2hpbGQoUGFzc1Jl
ZlB0cjxOb2RlSW1wbD4gbmV3Q2hpbGQsIE5vZGVJbXBsKiBvbGRDaGlsZCwgRXhjZXB0aW9uQ29k
ZSYgZWMpCiB7Ci0gICAgTm9kZUltcGwgKnJlc3VsdCA9IEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJ
bXBsOjpyZXBsYWNlQ2hpbGQobmV3Q2hpbGQsb2xkQ2hpbGQsIGV4Y2VwdGlvbmNvZGUpOwotICAg
IGlmKCFleGNlcHRpb25jb2RlKQorICAgIFBhc3NSZWZQdHI8Tm9kZUltcGw+IHJlc3VsdCA9IEhU
TUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsOjpyZXBsYWNlQ2hpbGQobmV3Q2hpbGQsIG9sZENoaWxk
LCBlYyk7CisgICAgaWYgKHJlc3VsdCkKICAgICAgICAgcmVjYWxjU2VsZWN0T3B0aW9ucygpOwog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLU5vZGVJbXBsICpIVE1MT3B0R3JvdXBFbGVtZW50SW1w
bDo6cmVtb3ZlQ2hpbGQgKCBOb2RlSW1wbCAqb2xkQ2hpbGQsIGludCAmZXhjZXB0aW9uY29kZSAp
CitQYXNzUmVmUHRyPE5vZGVJbXBsPiBIVE1MT3B0R3JvdXBFbGVtZW50SW1wbDo6cmVtb3ZlQ2hp
bGQoTm9kZUltcGwqIG9sZENoaWxkLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBOb2RlSW1w
bCAqcmVzdWx0ID0gSFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGw6OnJlbW92ZUNoaWxkKG9sZENo
aWxkLCBleGNlcHRpb25jb2RlKTsKLSAgICBpZiggIWV4Y2VwdGlvbmNvZGUgKQorICAgIFBhc3NS
ZWZQdHI8Tm9kZUltcGw+IHJlc3VsdCA9IEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsOjpyZW1v
dmVDaGlsZChvbGRDaGlsZCwgZWMpOworICAgIGlmIChyZXN1bHQpCiAgICAgICAgIHJlY2FsY1Nl
bGVjdE9wdGlvbnMoKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1Ob2RlSW1wbCAqSFRNTE9w
dEdyb3VwRWxlbWVudEltcGw6OmFwcGVuZENoaWxkICggTm9kZUltcGwgKm5ld0NoaWxkLCBpbnQg
JmV4Y2VwdGlvbmNvZGUgKQorUGFzc1JlZlB0cjxOb2RlSW1wbD4gSFRNTE9wdEdyb3VwRWxlbWVu
dEltcGw6OmFwcGVuZENoaWxkKFBhc3NSZWZQdHI8Tm9kZUltcGw+IG5ld0NoaWxkLCBFeGNlcHRp
b25Db2RlJiBlYykKIHsKLSAgICBOb2RlSW1wbCAqcmVzdWx0ID0gSFRNTEdlbmVyaWNGb3JtRWxl
bWVudEltcGw6OmFwcGVuZENoaWxkKG5ld0NoaWxkLCBleGNlcHRpb25jb2RlKTsKLSAgICBpZigg
IWV4Y2VwdGlvbmNvZGUgKQorICAgIFBhc3NSZWZQdHI8Tm9kZUltcGw+IHJlc3VsdCA9IEhUTUxH
ZW5lcmljRm9ybUVsZW1lbnRJbXBsOjphcHBlbmRDaGlsZChuZXdDaGlsZCwgZWMpOworICAgIGlm
IChyZXN1bHQpCiAgICAgICAgIHJlY2FsY1NlbGVjdE9wdGlvbnMoKTsKICAgICByZXR1cm4gcmVz
dWx0OwogfQogCi1Ob2RlSW1wbCogSFRNTE9wdEdyb3VwRWxlbWVudEltcGw6OmFkZENoaWxkKE5v
ZGVJbXBsKiBuZXdDaGlsZCkKK0NvbnRhaW5lck5vZGVJbXBsKiBIVE1MT3B0R3JvdXBFbGVtZW50
SW1wbDo6YWRkQ2hpbGQoUGFzc1JlZlB0cjxOb2RlSW1wbD4gbmV3Q2hpbGQpCiB7Ci0gICAgcmVj
YWxjU2VsZWN0T3B0aW9ucygpOwotCi0gICAgcmV0dXJuIEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJ
bXBsOjphZGRDaGlsZChuZXdDaGlsZCk7CisgICAgQ29udGFpbmVyTm9kZUltcGwqIHJlc3VsdCA9
IEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsOjphZGRDaGlsZChuZXdDaGlsZCk7CisgICAgaWYg
KHJlc3VsdCkKKyAgICAgICAgcmVjYWxjU2VsZWN0T3B0aW9ucygpOworICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKIHZvaWQgSFRNTE9wdEdyb3VwRWxlbWVudEltcGw6OnBhcnNlTWFwcGVkQXR0cmli
dXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKmF0dHIpCkluZGV4OiBraHRtbC9odG1sL0hUTUxTZWxl
Y3RFbGVtZW50SW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2h0bWwvaHRtbC9IVE1MU2VsZWN0RWxl
bWVudEltcGwuY3BwCShyZXZpc2lvbiAxMjI3OCkKKysrIGtodG1sL2h0bWwvSFRNTFNlbGVjdEVs
ZW1lbnRJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQwLDQzICsyNDAsNDQgQEAKICAgICBz
ZXRDaGFuZ2VkKHRydWUpOwogfQogCi1Ob2RlSW1wbCAqSFRNTFNlbGVjdEVsZW1lbnRJbXBsOjpp
bnNlcnRCZWZvcmUgKCBOb2RlSW1wbCAqbmV3Q2hpbGQsIE5vZGVJbXBsICpyZWZDaGlsZCwgaW50
ICZleGNlcHRpb25jb2RlICkKK1Bhc3NSZWZQdHI8Tm9kZUltcGw+IEhUTUxTZWxlY3RFbGVtZW50
SW1wbDo6aW5zZXJ0QmVmb3JlKFBhc3NSZWZQdHI8Tm9kZUltcGw+IG5ld0NoaWxkLCBOb2RlSW1w
bCogcmVmQ2hpbGQsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIE5vZGVJbXBsICpyZXN1bHQg
PSBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbDo6aW5zZXJ0QmVmb3JlKG5ld0NoaWxkLHJlZkNo
aWxkLCBleGNlcHRpb25jb2RlICk7Ci0gICAgaWYgKCFleGNlcHRpb25jb2RlKQorICAgIFBhc3NS
ZWZQdHI8Tm9kZUltcGw+IHJlc3VsdCA9IEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsOjppbnNl
cnRCZWZvcmUobmV3Q2hpbGQsIHJlZkNoaWxkLCBlYyk7CisgICAgaWYgKHJlc3VsdCkKICAgICAg
ICAgc2V0UmVjYWxjTGlzdEl0ZW1zKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotTm9kZUlt
cGwgKkhUTUxTZWxlY3RFbGVtZW50SW1wbDo6cmVwbGFjZUNoaWxkICggTm9kZUltcGwgKm5ld0No
aWxkLCBOb2RlSW1wbCAqb2xkQ2hpbGQsIGludCAmZXhjZXB0aW9uY29kZSApCitQYXNzUmVmUHRy
PE5vZGVJbXBsPiBIVE1MU2VsZWN0RWxlbWVudEltcGw6OnJlcGxhY2VDaGlsZChQYXNzUmVmUHRy
PE5vZGVJbXBsPiBuZXdDaGlsZCwgTm9kZUltcGwgKm9sZENoaWxkLCBFeGNlcHRpb25Db2RlJiBl
YykKIHsKLSAgICBOb2RlSW1wbCAqcmVzdWx0ID0gSFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGw6
OnJlcGxhY2VDaGlsZChuZXdDaGlsZCxvbGRDaGlsZCwgZXhjZXB0aW9uY29kZSk7Ci0gICAgaWYo
ICFleGNlcHRpb25jb2RlICkKKyAgICBQYXNzUmVmUHRyPE5vZGVJbXBsPiByZXN1bHQgPSBIVE1M
R2VuZXJpY0Zvcm1FbGVtZW50SW1wbDo6cmVwbGFjZUNoaWxkKG5ld0NoaWxkLCBvbGRDaGlsZCwg
ZWMpOworICAgIGlmIChyZXN1bHQpCiAgICAgICAgIHNldFJlY2FsY0xpc3RJdGVtcygpOwogICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKLU5vZGVJbXBsICpIVE1MU2VsZWN0RWxlbWVudEltcGw6OnJl
bW92ZUNoaWxkICggTm9kZUltcGwgKm9sZENoaWxkLCBpbnQgJmV4Y2VwdGlvbmNvZGUgKQorUGFz
c1JlZlB0cjxOb2RlSW1wbD4gSFRNTFNlbGVjdEVsZW1lbnRJbXBsOjpyZW1vdmVDaGlsZChOb2Rl
SW1wbCogb2xkQ2hpbGQsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIE5vZGVJbXBsICpyZXN1
bHQgPSBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbDo6cmVtb3ZlQ2hpbGQob2xkQ2hpbGQsIGV4
Y2VwdGlvbmNvZGUpOwotICAgIGlmKCAhZXhjZXB0aW9uY29kZSApCisgICAgUGFzc1JlZlB0cjxO
b2RlSW1wbD4gcmVzdWx0ID0gSFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGw6OnJlbW92ZUNoaWxk
KG9sZENoaWxkLCBlYyk7CisgICAgaWYgKHJlc3VsdCkKICAgICAgICAgc2V0UmVjYWxjTGlzdEl0
ZW1zKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotTm9kZUltcGwgKkhUTUxTZWxlY3RFbGVt
ZW50SW1wbDo6YXBwZW5kQ2hpbGQgKCBOb2RlSW1wbCAqbmV3Q2hpbGQsIGludCAmZXhjZXB0aW9u
Y29kZSApCitQYXNzUmVmUHRyPE5vZGVJbXBsPiBIVE1MU2VsZWN0RWxlbWVudEltcGw6OmFwcGVu
ZENoaWxkKFBhc3NSZWZQdHI8Tm9kZUltcGw+IG5ld0NoaWxkLCBFeGNlcHRpb25Db2RlJiBlYykK
IHsKLSAgICBOb2RlSW1wbCAqcmVzdWx0ID0gSFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGw6OmFw
cGVuZENoaWxkKG5ld0NoaWxkLCBleGNlcHRpb25jb2RlKTsKLSAgICBpZiggIWV4Y2VwdGlvbmNv
ZGUgKQorICAgIFBhc3NSZWZQdHI8Tm9kZUltcGw+IHJlc3VsdCA9IEhUTUxHZW5lcmljRm9ybUVs
ZW1lbnRJbXBsOjphcHBlbmRDaGlsZChuZXdDaGlsZCwgZWMpOworICAgIGlmIChyZXN1bHQpCiAg
ICAgICAgIHNldFJlY2FsY0xpc3RJdGVtcygpOwotICAgIHNldENoYW5nZWQodHJ1ZSk7CiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAotTm9kZUltcGwqIEhUTUxTZWxlY3RFbGVtZW50SW1wbDo6YWRk
Q2hpbGQoTm9kZUltcGwqIG5ld0NoaWxkKQorQ29udGFpbmVyTm9kZUltcGwqIEhUTUxTZWxlY3RF
bGVtZW50SW1wbDo6YWRkQ2hpbGQoUGFzc1JlZlB0cjxOb2RlSW1wbD4gbmV3Q2hpbGQpCiB7Ci0g
ICAgc2V0UmVjYWxjTGlzdEl0ZW1zKCk7Ci0gICAgcmV0dXJuIEhUTUxHZW5lcmljRm9ybUVsZW1l
bnRJbXBsOjphZGRDaGlsZChuZXdDaGlsZCk7CisgICAgQ29udGFpbmVyTm9kZUltcGwqIHJlc3Vs
dCA9IEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsOjphZGRDaGlsZChuZXdDaGlsZCk7CisgICAg
aWYgKHJlc3VsdCkKKyAgICAgICAgc2V0UmVjYWxjTGlzdEl0ZW1zKCk7CisgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIAogdm9pZCBIVE1MU2VsZWN0RWxlbWVudEltcGw6OnBhcnNlTWFwcGVkQXR0cmli
dXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKmF0dHIpCkluZGV4OiBraHRtbC9odG1sL2h0bWxfdGFi
bGVpbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0ga2h0bWwvaHRtbC9odG1sX3RhYmxlaW1wbC5oCShyZXZp
c2lvbiAxMjI3OCkKKysrIGtodG1sL2h0bWwvaHRtbF90YWJsZWltcGwuaAkod29ya2luZyBjb3B5
KQpAQCAtMTE4LDcgKzExOCw3IEBACiAgICAgdm9pZCBzZXRXaWR0aCggY29uc3QgRE9NU3RyaW5n
ICYgKTsKIAogICAgIC8vIG92ZXJyaWRlcwotICAgIHZpcnR1YWwgTm9kZUltcGwgKmFkZENoaWxk
KE5vZGVJbXBsICpjaGlsZCk7CisgICAgdmlydHVhbCBDb250YWluZXJOb2RlSW1wbCogYWRkQ2hp
bGQoUGFzc1JlZlB0cjxOb2RlSW1wbD4gbmV3Q2hpbGQpOwogICAgIHZpcnR1YWwgdm9pZCBjaGls
ZHJlbkNoYW5nZWQoKTsKICAgICAKICAgICB2aXJ0dWFsIGJvb2wgbWFwVG9FbnRyeShjb25zdCBR
dWFsaWZpZWROYW1lJiBhdHRyTmFtZSwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29u
c3Q7CkBAIC0xNjQsMTMgKzE2NCwxMiBAQAogY2xhc3MgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJ
bXBsIDogcHVibGljIEhUTUxUYWJsZVBhcnRFbGVtZW50SW1wbAogewogcHVibGljOgotICAgIEhU
TUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBE
b2N1bWVudEltcGwgKmRvYywgYm9vbCBpbXBsaWNpdCk7CisgICAgSFRNTFRhYmxlU2VjdGlvbkVs
ZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50SW1wbCosIGJv
b2wgaW1wbGljaXQpOwogCiAgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVt
ZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzT3B0aW9uYWw7IH0KICAgICB2aXJ0dWFsIGlu
dCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDg7IH0KICAgICB2aXJ0dWFsIGJvb2wgY2hl
Y2tEVEQoY29uc3QgTm9kZUltcGwqIG5ld0NoaWxkKTsKLQotICAgIHZpcnR1YWwgTm9kZUltcGwg
KmFkZENoaWxkKE5vZGVJbXBsICpjaGlsZCk7CisgICAgdmlydHVhbCBDb250YWluZXJOb2RlSW1w
bCogYWRkQ2hpbGQoUGFzc1JlZlB0cjxOb2RlSW1wbD4gbmV3Q2hpbGQpOwogICAgIAogICAgIEhU
TUxFbGVtZW50SW1wbCAqaW5zZXJ0Um93ICggaW50IGluZGV4LCBpbnQmIGV4Y2VwdGlvbmNvZGUg
KTsKICAgICB2b2lkIGRlbGV0ZVJvdyAoIGludCBpbmRleCwgaW50JiBleGNlcHRpb25jb2RlICk7
CkBAIC0yMDMsOCArMjAyLDcgQEAKICAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVx
dWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNPcHRpb25hbDsgfQogICAgIHZpcnR1
YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gNzsgfQogICAgIHZpcnR1YWwgYm9v
bCBjaGVja0RURChjb25zdCBOb2RlSW1wbCogbmV3Q2hpbGQpOwotCi0gICAgdmlydHVhbCBOb2Rl
SW1wbCAqYWRkQ2hpbGQoTm9kZUltcGwgKmNoaWxkKTsKKyAgICB2aXJ0dWFsIENvbnRhaW5lck5v
ZGVJbXBsKiBhZGRDaGlsZChQYXNzUmVmUHRyPE5vZGVJbXBsPiBuZXdDaGlsZCk7CiAgICAgCiAg
ICAgaW50IHJvd0luZGV4KCkgY29uc3Q7CiAgICAgaW50IHNlY3Rpb25Sb3dJbmRleCgpIGNvbnN0
OwpJbmRleDoga2h0bWwvaHRtbC9IVE1MT3B0R3JvdXBFbGVtZW50SW1wbC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIGtodG1sL2h0bWwvSFRNTE9wdEdyb3VwRWxlbWVudEltcGwuaAkocmV2aXNpb24gMTIyNzgp
CisrKyBraHRtbC9odG1sL0hUTUxPcHRHcm91cEVsZW1lbnRJbXBsLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQyLDExICs0MiwxMiBAQAogCiAgICAgdmlydHVhbCBib29sIGlzRm9jdXNhYmxlKCkgY29u
c3Q7CiAgICAgCi0gICAgdmlydHVhbCBOb2RlSW1wbCAqaW5zZXJ0QmVmb3JlICggTm9kZUltcGwg
Km5ld0NoaWxkLCBOb2RlSW1wbCAqcmVmQ2hpbGQsIGludCAmZXhjZXB0aW9uY29kZSApOwotICAg
IHZpcnR1YWwgTm9kZUltcGwgKnJlcGxhY2VDaGlsZCAoIE5vZGVJbXBsICpuZXdDaGlsZCwgTm9k
ZUltcGwgKm9sZENoaWxkLCBpbnQgJmV4Y2VwdGlvbmNvZGUgKTsKLSAgICB2aXJ0dWFsIE5vZGVJ
bXBsICpyZW1vdmVDaGlsZCAoIE5vZGVJbXBsICpvbGRDaGlsZCwgaW50ICZleGNlcHRpb25jb2Rl
ICk7Ci0gICAgdmlydHVhbCBOb2RlSW1wbCAqYXBwZW5kQ2hpbGQgKCBOb2RlSW1wbCAqbmV3Q2hp
bGQsIGludCAmZXhjZXB0aW9uY29kZSApOwotICAgIHZpcnR1YWwgTm9kZUltcGwgKmFkZENoaWxk
KCBOb2RlSW1wbCogbmV3Q2hpbGQgKTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Tm9kZUltcGw+
IGluc2VydEJlZm9yZShQYXNzUmVmUHRyPE5vZGVJbXBsPiBuZXdDaGlsZCwgTm9kZUltcGwqIHJl
ZkNoaWxkLCBFeGNlcHRpb25Db2RlJik7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPE5vZGVJbXBs
PiByZXBsYWNlQ2hpbGQoUGFzc1JlZlB0cjxOb2RlSW1wbD4gbmV3Q2hpbGQsIE5vZGVJbXBsKiBv
bGRDaGlsZCwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxOb2RlSW1w
bD4gcmVtb3ZlQ2hpbGQoTm9kZUltcGwqIGNoaWxkLCBFeGNlcHRpb25Db2RlJik7CisgICAgdmly
dHVhbCBQYXNzUmVmUHRyPE5vZGVJbXBsPiBhcHBlbmRDaGlsZChQYXNzUmVmUHRyPE5vZGVJbXBs
PiBuZXdDaGlsZCwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZpcnR1YWwgQ29udGFpbmVyTm9kZUlt
cGwqIGFkZENoaWxkKFBhc3NSZWZQdHI8Tm9kZUltcGw+KTsKKwogICAgIHZpcnR1YWwgdm9pZCBw
YXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGVJbXBsICphdHRyKTsKICAgICB2b2lk
IHJlY2FsY1NlbGVjdE9wdGlvbnMoKTsKIApJbmRleDoga2h0bWwvaHRtbC9odG1sX2RvY3VtZW50
aW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0ga2h0bWwvaHRtbC9odG1sX2RvY3VtZW50aW1wbC5jcHAJ
KHJldmlzaW9uIDEyMjc4KQorKysga2h0bWwvaHRtbC9odG1sX2RvY3VtZW50aW1wbC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEwOCw3ICsxMDgsNyBAQAogCiBFbGVtZW50SW1wbCogSFRNTERvY3Vt
ZW50SW1wbDo6ZG9jdW1lbnRFbGVtZW50KCkgY29uc3QKIHsKLSAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8RWxlbWVudEltcGwqPihfZmlyc3QpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxFbGVtZW50
SW1wbCo+KGZhc3RGaXJzdENoaWxkKCkpOwogfQogCiBET01TdHJpbmcgSFRNTERvY3VtZW50SW1w
bDo6bGFzdE1vZGlmaWVkKCkgY29uc3QKSW5kZXg6IGtodG1sL2h0bWwvaHRtbF90YWJsZWltcGwu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIGtodG1sL2h0bWwvaHRtbF90YWJsZWltcGwuY3BwCShyZXZpc2lv
biAxMjI3OCkKKysrIGtodG1sL2h0bWwvaHRtbF90YWJsZWltcGwuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC03OCw1MiArNzgsNDAgQEAKIE5vZGVJbXBsKiBIVE1MVGFibGVFbGVtZW50SW1wbDo6c2V0
Q2FwdGlvbiggSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnRJbXBsICpjICkKIHsKICAgICBpbnQgZXhj
ZXB0aW9uY29kZSA9IDA7Ci0gICAgTm9kZUltcGwgKnI7Ci0gICAgaWYgKE5vZGVJbXBsICpvYyA9
IHRDYXB0aW9uKSB7Ci0gICAgICAgIG9jLT5yZWYoKTsKKyAgICBpZiAoTm9kZUltcGwgKm9jID0g
dENhcHRpb24pCiAgICAgICAgIHJlcGxhY2VDaGlsZChjLCBvYywgZXhjZXB0aW9uY29kZSk7Ci0g
ICAgICAgIG9jLT5kZXJlZigpOwotICAgICAgICByID0gYzsKLSAgICB9IGVsc2UKLSAgICAgICAg
ciA9IGluc2VydEJlZm9yZShjLCBmaXJzdENoaWxkKCksIGV4Y2VwdGlvbmNvZGUpOworICAgIGVs
c2UKKyAgICAgICAgaW5zZXJ0QmVmb3JlKGMsIGZpcnN0Q2hpbGQoKSwgZXhjZXB0aW9uY29kZSk7
CiAgICAgdENhcHRpb24gPSBjOwotICAgIHJldHVybiByOworICAgIHJldHVybiB0Q2FwdGlvbjsK
IH0KIAogTm9kZUltcGwqIEhUTUxUYWJsZUVsZW1lbnRJbXBsOjpzZXRUSGVhZCggSFRNTFRhYmxl
U2VjdGlvbkVsZW1lbnRJbXBsICpzICkKIHsKICAgICBpbnQgZXhjZXB0aW9uY29kZSA9IDA7Ci0g
ICAgTm9kZUltcGwgKnI7Ci0gICAgaWYgKE5vZGVJbXBsICpoID0gaGVhZCkgewotICAgICAgICBo
LT5yZWYoKTsKKyAgICBpZiAoTm9kZUltcGwgKmggPSBoZWFkKQogICAgICAgICByZXBsYWNlQ2hp
bGQocywgaCwgZXhjZXB0aW9uY29kZSk7Ci0gICAgICAgIGgtPmRlcmVmKCk7Ci0gICAgICAgIHIg
PSBzOwotICAgIH0gZWxzZSBpZiAoZm9vdCkKLSAgICAgICAgciA9IGluc2VydEJlZm9yZShzLCBm
b290LCBleGNlcHRpb25jb2RlKTsKKyAgICBlbHNlIGlmIChmb290KQorICAgICAgICBpbnNlcnRC
ZWZvcmUocywgZm9vdCwgZXhjZXB0aW9uY29kZSk7CiAgICAgZWxzZSBpZiAoZmlyc3RCb2R5KQot
ICAgICAgICByID0gaW5zZXJ0QmVmb3JlKHMsIGZpcnN0Qm9keSwgZXhjZXB0aW9uY29kZSk7Cisg
ICAgICAgIGluc2VydEJlZm9yZShzLCBmaXJzdEJvZHksIGV4Y2VwdGlvbmNvZGUpOwogICAgIGVs
c2UKLSAgICAgICAgciA9IGFwcGVuZENoaWxkKHMsIGV4Y2VwdGlvbmNvZGUpOworICAgICAgICBh
cHBlbmRDaGlsZChzLCBleGNlcHRpb25jb2RlKTsKICAgICBoZWFkID0gczsKLSAgICByZXR1cm4g
cjsKKyAgICByZXR1cm4gaGVhZDsKIH0KIAogTm9kZUltcGwqIEhUTUxUYWJsZUVsZW1lbnRJbXBs
OjpzZXRURm9vdCggSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsICpzICkKIHsKICAgICBpbnQg
ZXhjZXB0aW9uY29kZSA9IDA7Ci0gICAgTm9kZUltcGwqIHI7Ci0gICAgaWYgKE5vZGVJbXBsICpm
ID0gZm9vdCkgewotICAgICAgICBmLT5yZWYoKTsKKyAgICBpZiAoTm9kZUltcGwgKmYgPSBmb290
KQogICAgICAgICByZXBsYWNlQ2hpbGQocywgZiwgZXhjZXB0aW9uY29kZSk7Ci0gICAgICAgIGYt
PmRlcmVmKCk7Ci0gICAgICAgIHIgPSBzOwotICAgIH0gZWxzZSBpZiAoZmlyc3RCb2R5KQotICAg
ICAgICByID0gaW5zZXJ0QmVmb3JlKHMsIGZpcnN0Qm9keSwgZXhjZXB0aW9uY29kZSk7CisgICAg
ZWxzZSBpZiAoZmlyc3RCb2R5KQorICAgICAgICBpbnNlcnRCZWZvcmUocywgZmlyc3RCb2R5LCBl
eGNlcHRpb25jb2RlKTsKICAgICBlbHNlCi0gICAgICAgIHIgPSBhcHBlbmRDaGlsZChzLCBleGNl
cHRpb25jb2RlKTsKKyAgICAgICAgYXBwZW5kQ2hpbGQocywgZXhjZXB0aW9uY29kZSk7CiAgICAg
Zm9vdCA9IHM7Ci0gICAgcmV0dXJuIHI7CisgICAgcmV0dXJuIGZvb3Q7CiB9CiAKIE5vZGVJbXBs
KiBIVE1MVGFibGVFbGVtZW50SW1wbDo6c2V0VEJvZHkoIEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50
SW1wbCAqcyApCkBAIC0xMzYsOSArMTI0LDkgQEAKICAgICAgICAgZmItPmRlcmVmKCk7CiAgICAg
ICAgIHIgPSBzOwogICAgIH0gZWxzZQotICAgICAgICByID0gYXBwZW5kQ2hpbGQocywgZXhjZXB0
aW9uY29kZSk7CisgICAgICAgIGFwcGVuZENoaWxkKHMsIGV4Y2VwdGlvbmNvZGUpOwogICAgIGZp
cnN0Qm9keSA9IHM7Ci0gICAgcmV0dXJuIHI7CisgICAgcmV0dXJuIGZpcnN0Qm9keTsKIH0KIAog
SFRNTEVsZW1lbnRJbXBsICpIVE1MVGFibGVFbGVtZW50SW1wbDo6Y3JlYXRlVEhlYWQoICApCkBA
IC0zMDQsNDkgKzI5MiwzNyBAQAogICAgICAgICBleGNlcHRpb25jb2RlID0gRE9NRXhjZXB0aW9u
OjpJTkRFWF9TSVpFX0VSUjsKIH0KIAotTm9kZUltcGwgKkhUTUxUYWJsZUVsZW1lbnRJbXBsOjph
ZGRDaGlsZChOb2RlSW1wbCAqY2hpbGQpCitDb250YWluZXJOb2RlSW1wbCogSFRNTFRhYmxlRWxl
bWVudEltcGw6OmFkZENoaWxkKFBhc3NSZWZQdHI8Tm9kZUltcGw+IGNoaWxkKQogewogICAgIGlm
IChjaGlsZC0+aGFzVGFnTmFtZShmb3JtVGFnKSkgewogICAgICAgICAvLyBGaXJzdCBhZGQgdGhl
IGNoaWxkLgogICAgICAgICBIVE1MRWxlbWVudEltcGw6OmFkZENoaWxkKGNoaWxkKTsKLSAgICAg
ICAgLy8gTm93IHNpbXBseSByZXR1cm4gb3Vyc2VsdmVzIGFzIHRoZSBuZXdub2RlLiAgVGhpcyBo
YXMgdGhlIGVmZmVjdCBvZgotICAgICAgICAvLyBkZW1vdGluZyB0aGUgZm9ybSB0byBhIGxlYWYg
YW5kIG1vdmluZyBpdCBzYWZlbHkgb3V0IG9mIHRoZSB3YXkuCisKKyAgICAgICAgLy8gTm93IHNp
bXBseSByZXR1cm4gb3Vyc2VsdmVzIGFzIHRoZSBjb250YWluZXIgdG8gaW5zZXJ0IGludG8uCisg
ICAgICAgIC8vIFRoaXMgaGFzIHRoZSBlZmZlY3Qgb2YgZGVtb3RpbmcgdGhlIGZvcm0gdG8gYSBs
ZWFmIGFuZCBtb3ZpbmcgaXQgc2FmZWx5IG91dCBvZiB0aGUgd2F5LgogICAgICAgICByZXR1cm4g
dGhpczsKICAgICB9Ci0gICAgCi0gICAgLy8gV2UgZG8gbm90IHdhbnQgdGhpcyBjaGVjay1ub2Rl
LWFsbG93ZWQgdGVzdCBoZXJlLCBob3dldmVyIHRoZSBjb2RlIHRvCi0gICAgLy8gYnVpbGQgdXAg
dGFibGVzIHJlbGllcyBvbiBjaGlsZEFsbG93ZWQgZmFpbGluZyB0byBtYWtlIHN1cmUgdGhhdCB0
aGUKLSAgICAvLyB0YWJsZSBpcyB3ZWxsLWZvcm1lZCwgdGhlIHByaW1hcnkgd29yayBiZWluZyB0
byBhZGQgYSB0Ym9keSBlbGVtZW50LgotICAgIC8vIEFzIDk5Ljk5OTklIG9mIHRhYmxlcyBvbiB0
aGUgd2VlYiBkbyBub3QgaGF2ZSB0Ym9keSBlbGVtZW50cywgaXQgc2VlbXMKLSAgICAvLyBvZGQg
dG8gdHJhdmVyc2UgYW4gImVycm9yIiBjYXNlIGZvciB0aGUgbW9zdCBjb21tb24gdGFibGUgbWFy
a3VwLgotICAgIC8vIFNlZSA8cmRhcjovL3Byb2JsZW0vMzcxOTM3Mz4gVGFibGUgcGFyc2luZyBh
bmQgY29uc3RydWN0aW9uIHJlbGllcyBvbiAKLSAgICAvLyBjaGlsZEFsbG93ZWQgZmFpbHVyZXMg
dG8gYnVpbGQgdXAgcHJvcGVyIERPTQotICAgIGlmIChjaGlsZC0+bm9kZVR5cGUoKSA9PSBOb2Rl
OjpET0NVTUVOVF9GUkFHTUVOVF9OT0RFKSB7Ci0gICAgICAgIC8vIGNoaWxkIGlzIGEgRG9jdW1l
bnRGcmFnbWVudC4uLiBjaGVjayBhbGwgaXRzIGNoaWxkcmVuIGluc3RlYWQgb2YgY2hpbGQgaXRz
ZWxmCi0gICAgICAgIGZvciAoTm9kZUltcGwgKmMgPSBjaGlsZC0+Zmlyc3RDaGlsZCgpOyBjOyBj
ID0gYy0+bmV4dFNpYmxpbmcoKSkKLSAgICAgICAgICAgIGlmICghY2hpbGRBbGxvd2VkKGMpKQot
ICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBlbHNlIGlmICghY2hpbGRBbGxv
d2VkKGNoaWxkKSkgewotICAgICAgICAvLyBjaGlsZCBpcyBub3QgYSBEb2N1bWVudEZyYWdtZW50
Li4uIGNoZWNrIGlmIGl0J3MgYWxsb3dlZCBkaXJlY3RseQorCisgICAgLy8gVGhlIGNyZWF0aW9u
IG9mIDx0Ym9keT4gZWxlbWVudHMgcmVsaWVzIG9uIHRoZSAiY2hpbGRBbGxvd2VkIiBjaGVjaywK
KyAgICAvLyBzbyB3ZSBuZWVkIHRvIGRvIGl0IGV2ZW4gZm9yIFhNTCBkb2N1bWVudHMuCisgICAg
YXNzZXJ0KGNoaWxkLT5ub2RlVHlwZSgpICE9IE5vZGU6OkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUp
OworICAgIGlmICghZ2V0RG9jdW1lbnQoKS0+aXNIVE1MRG9jdW1lbnQoKSAmJiAhY2hpbGRBbGxv
d2VkKGNoaWxkLmdldCgpKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQogCi0gICAgaW50IGV4
Y2VwdGlvbmNvZGUgPSAwOwotICAgIE5vZGVJbXBsICpyZXR2YWwgPSBhcHBlbmRDaGlsZCggY2hp
bGQsIGV4Y2VwdGlvbmNvZGUgKTsKLSAgICBpZiAocmV0dmFsKSB7CisgICAgQ29udGFpbmVyTm9k
ZUltcGwqIGNvbnRhaW5lciA9IEhUTUxFbGVtZW50SW1wbDo6YWRkQ2hpbGQoY2hpbGQuZ2V0KCkp
OworICAgIGlmIChjb250YWluZXIpIHsKICAgICAgICAgaWYgKCF0Q2FwdGlvbiAmJiBjaGlsZC0+
aGFzVGFnTmFtZShjYXB0aW9uVGFnKSkKLSAgICAgICAgICAgIHRDYXB0aW9uID0gc3RhdGljX2Nh
c3Q8SFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnRJbXBsICo+KGNoaWxkKTsKKyAgICAgICAgICAgIHRD
YXB0aW9uID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnRJbXBsICo+KGNoaWxk
LmdldCgpKTsKICAgICAgICAgZWxzZSBpZiAoIWhlYWQgJiYgY2hpbGQtPmhhc1RhZ05hbWUodGhl
YWRUYWcpKQotICAgICAgICAgICAgaGVhZCA9IHN0YXRpY19jYXN0PEhUTUxUYWJsZVNlY3Rpb25F
bGVtZW50SW1wbCAqPihjaGlsZCk7CisgICAgICAgICAgICBoZWFkID0gc3RhdGljX2Nhc3Q8SFRN
TFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsICo+KGNoaWxkLmdldCgpKTsKICAgICAgICAgZWxzZSBp
ZiAoIWZvb3QgJiYgY2hpbGQtPmhhc1RhZ05hbWUodGZvb3RUYWcpKQotICAgICAgICAgICAgZm9v
dCA9IHN0YXRpY19jYXN0PEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbCAqPihjaGlsZCk7Cisg
ICAgICAgICAgICBmb290ID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBs
ICo+KGNoaWxkLmdldCgpKTsKICAgICAgICAgZWxzZSBpZiAoIWZpcnN0Qm9keSAmJiBjaGlsZC0+
aGFzVGFnTmFtZSh0Ym9keVRhZykpIHsKLSAgICAgICAgICAgIGZpcnN0Qm9keSA9IHN0YXRpY19j
YXN0PEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbCAqPihjaGlsZCk7CisgICAgICAgICAgICBm
aXJzdEJvZHkgPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVTZWN0aW9uRWxlbWVudEltcGwgKj4oY2hp
bGQuZ2V0KCkpOwogICAgICAgICAgICAgZmlyc3RCb2R5LT5yZWYoKTsKICAgICAgICAgfQogICAg
IH0KLSAgICByZXR1cm4gcmV0dmFsOworICAgIHJldHVybiBjb250YWluZXI7CiB9CiAKIHZvaWQg
SFRNTFRhYmxlRWxlbWVudEltcGw6OmNoaWxkcmVuQ2hhbmdlZCgpCkBAIC03MjgsMTUgKzcwNCwx
NyBAQAogICAgICAgICAgICBuZXdDaGlsZC0+aGFzVGFnTmFtZShzY3JpcHRUYWcpOwogfQogCi1O
b2RlSW1wbCAqSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsOjphZGRDaGlsZChOb2RlSW1wbCAq
Y2hpbGQpCitDb250YWluZXJOb2RlSW1wbCogSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsOjph
ZGRDaGlsZChQYXNzUmVmUHRyPE5vZGVJbXBsPiBjaGlsZCkKIHsKICAgICBpZiAoY2hpbGQtPmhh
c1RhZ05hbWUoZm9ybVRhZykpIHsKICAgICAgICAgLy8gRmlyc3QgYWRkIHRoZSBjaGlsZC4KLSAg
ICAgICAgSFRNTEVsZW1lbnRJbXBsOjphZGRDaGlsZChjaGlsZCk7Ci0gICAgICAgIC8vIE5vdyBz
aW1wbHkgcmV0dXJuIG91cnNlbHZlcyBhcyB0aGUgbmV3bm9kZS4gIFRoaXMgaGFzIHRoZSBlZmZl
Y3Qgb2YKLSAgICAgICAgLy8gZGVtb3RpbmcgdGhlIGZvcm0gdG8gYSBsZWFmIGFuZCBtb3Zpbmcg
aXQgc2FmZWx5IG91dCBvZiB0aGUgd2F5LgorICAgICAgICBIVE1MVGFibGVQYXJ0RWxlbWVudElt
cGw6OmFkZENoaWxkKGNoaWxkKTsKKworICAgICAgICAvLyBOb3cgc2ltcGx5IHJldHVybiBvdXJz
ZWx2ZXMgYXMgdGhlIGNvbnRhaW5lciB0byBpbnNlcnQgaW50by4KKyAgICAgICAgLy8gVGhpcyBo
YXMgdGhlIGVmZmVjdCBvZiBkZW1vdGluZyB0aGUgZm9ybSB0byBhIGxlYWYgYW5kIG1vdmluZyBp
dCBzYWZlbHkgb3V0IG9mIHRoZSB3YXkuCiAgICAgICAgIHJldHVybiB0aGlzOwogICAgIH0KKwog
ICAgIHJldHVybiBIVE1MVGFibGVQYXJ0RWxlbWVudEltcGw6OmFkZENoaWxkKGNoaWxkKTsKIH0K
IApAQCAtODQ3LDE1ICs4MjUsMTcgQEAKICAgICAgICAgICAgbmV3Q2hpbGQtPmhhc1RhZ05hbWUo
Zm9ybVRhZykgfHwgbmV3Q2hpbGQtPmhhc1RhZ05hbWUoc2NyaXB0VGFnKTsKIH0KIAotTm9kZUlt
cGwgKkhUTUxUYWJsZVJvd0VsZW1lbnRJbXBsOjphZGRDaGlsZChOb2RlSW1wbCAqY2hpbGQpCitD
b250YWluZXJOb2RlSW1wbCogSFRNTFRhYmxlUm93RWxlbWVudEltcGw6OmFkZENoaWxkKFBhc3NS
ZWZQdHI8Tm9kZUltcGw+IGNoaWxkKQogewogICAgIGlmIChjaGlsZC0+aGFzVGFnTmFtZShmb3Jt
VGFnKSkgewogICAgICAgICAvLyBGaXJzdCBhZGQgdGhlIGNoaWxkLgotICAgICAgICBIVE1MRWxl
bWVudEltcGw6OmFkZENoaWxkKGNoaWxkKTsKLSAgICAgICAgLy8gTm93IHNpbXBseSByZXR1cm4g
b3Vyc2VsdmVzIGFzIHRoZSBuZXdub2RlLiAgVGhpcyBoYXMgdGhlIGVmZmVjdCBvZgotICAgICAg
ICAvLyBkZW1vdGluZyB0aGUgZm9ybSB0byBhIGxlYWYgYW5kIG1vdmluZyBpdCBzYWZlbHkgb3V0
IG9mIHRoZSB3YXkuCisgICAgICAgIEhUTUxUYWJsZVBhcnRFbGVtZW50SW1wbDo6YWRkQ2hpbGQo
Y2hpbGQpOworCisgICAgICAgIC8vIE5vdyBzaW1wbHkgcmV0dXJuIG91cnNlbHZlcyBhcyB0aGUg
Y29udGFpbmVyIHRvIGluc2VydCBpbnRvLgorICAgICAgICAvLyBUaGlzIGhhcyB0aGUgZWZmZWN0
IG9mIGRlbW90aW5nIHRoZSBmb3JtIHRvIGEgbGVhZiBhbmQgbW92aW5nIGl0IHNhZmVseSBvdXQg
b2YgdGhlIHdheS4KICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgfQorCiAgICAgcmV0dXJuIEhU
TUxUYWJsZVBhcnRFbGVtZW50SW1wbDo6YWRkQ2hpbGQoY2hpbGQpOwogfQogCkluZGV4OiBraHRt
bC9lY21hL2tqc19kb20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtodG1sL2VjbWEva2pzX2RvbS5jcHAJ
KHJldmlzaW9uIDEyMjc4KQorKysga2h0bWwvZWNtYS9ranNfZG9tLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTY1Nyw4ICsxNjU3LDkgQEAKICAgcmV0dXJuIHdpbiAmJiB3aW4tPmlzU2FmZVNjcmlw
dChleGVjKTsKIH0KIAotSlNWYWx1ZSAqZ2V0RE9NTm9kZShFeGVjU3RhdGUgKmV4ZWMsIE5vZGVJ
bXBsICpuKQorSlNWYWx1ZSAqZ2V0RE9NTm9kZShFeGVjU3RhdGUgKmV4ZWMsIFBhc3NSZWZQdHI8
Tm9kZUltcGw+IG5vZGUpCiB7CisgIE5vZGVJbXBsKiBuID0gbm9kZS5nZXQoKTsKICAgRE9NTm9k
ZSAqcmV0ID0gMDsKICAgaWYgKCFuKQogICAgIHJldHVybiBqc051bGwoKTsKSW5kZXg6IGtodG1s
L2VjbWEva2pzX2RvbS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtodG1sL2VjbWEva2pzX2RvbS5oCShyZXZp
c2lvbiAxMjI3OCkKKysrIGtodG1sL2VjbWEva2pzX2RvbS5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
ODQsNyArMjg0LDcgQEAKICAgSlNWYWx1ZSAqZ2V0RE9NRG9jdW1lbnROb2RlKEV4ZWNTdGF0ZSAq
ZXhlYywgRE9NOjpEb2N1bWVudEltcGwgKm4pOwogICBib29sIGNoZWNrTm9kZVNlY3VyaXR5KEV4
ZWNTdGF0ZSAqZXhlYywgRE9NOjpOb2RlSW1wbCAqbik7CiAgIEpTVmFsdWUgKmdldFJ1bnRpbWVP
YmplY3QoRXhlY1N0YXRlICpleGVjLCBET006Ok5vZGVJbXBsICpuKTsKLSAgSlNWYWx1ZSAqZ2V0
RE9NTm9kZShFeGVjU3RhdGUgKmV4ZWMsIERPTTo6Tm9kZUltcGwgKm4pOworICBKU1ZhbHVlICpn
ZXRET01Ob2RlKEV4ZWNTdGF0ZSosIFBhc3NSZWZQdHI8RE9NOjpOb2RlSW1wbD4pOwogICBKU1Zh
bHVlICpnZXRET01OYW1lZE5vZGVNYXAoRXhlY1N0YXRlICpleGVjLCBET006Ok5hbWVkTm9kZU1h
cEltcGwgKm0pOwogICBKU1ZhbHVlICpnZXRET01Ob2RlTGlzdChFeGVjU3RhdGUgKmV4ZWMsIERP
TTo6Tm9kZUxpc3RJbXBsICpsKTsKICAgSlNWYWx1ZSAqZ2V0RE9NRE9NSW1wbGVtZW50YXRpb24o
RXhlY1N0YXRlICpleGVjLCBET006OkRPTUltcGxlbWVudGF0aW9uSW1wbCAqaSk7CkluZGV4OiBi
aW5kaW5ncy9vYmpjL0RPTS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBiaW5kaW5ncy9vYmpjL0RPTS5tbQko
cmV2aXNpb24gMTIyNzgpCisrKyBiaW5kaW5ncy9vYmpjL0RPTS5tbQkod29ya2luZyBjb3B5KQpA
QCAtMjUzLDcgKzI1Myw3IEBACiAgICAgQVNTRVJUKHJlZkNoaWxkKTsKIAogICAgIGludCBleGNl
cHRpb25Db2RlID0gMDsKLSAgICBET01Ob2RlICpyZXN1bHQgPSBbRE9NTm9kZSBfbm9kZVdpdGhJ
bXBsOltzZWxmIF9ub2RlSW1wbF0tPmluc2VydEJlZm9yZShbbmV3Q2hpbGQgX25vZGVJbXBsXSwg
W3JlZkNoaWxkIF9ub2RlSW1wbF0sIGV4Y2VwdGlvbkNvZGUpXTsKKyAgICBET01Ob2RlICpyZXN1
bHQgPSBbRE9NTm9kZSBfbm9kZVdpdGhJbXBsOltzZWxmIF9ub2RlSW1wbF0tPmluc2VydEJlZm9y
ZShbbmV3Q2hpbGQgX25vZGVJbXBsXSwgW3JlZkNoaWxkIF9ub2RlSW1wbF0sIGV4Y2VwdGlvbkNv
ZGUpLmdldCgpXTsKICAgICByYWlzZU9uRE9NRXJyb3IoZXhjZXB0aW9uQ29kZSk7CiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KQEAgLTI2NCw3ICsyNjQsNyBAQAogICAgIEFTU0VSVChvbGRDaGlsZCk7
CiAKICAgICBpbnQgZXhjZXB0aW9uQ29kZSA9IDA7Ci0gICAgRE9NTm9kZSAqcmVzdWx0ID0gW0RP
TU5vZGUgX25vZGVXaXRoSW1wbDpbc2VsZiBfbm9kZUltcGxdLT5yZXBsYWNlQ2hpbGQoW25ld0No
aWxkIF9ub2RlSW1wbF0sIFtvbGRDaGlsZCBfbm9kZUltcGxdLCBleGNlcHRpb25Db2RlKV07Cisg
ICAgRE9NTm9kZSAqcmVzdWx0ID0gW0RPTU5vZGUgX25vZGVXaXRoSW1wbDpbc2VsZiBfbm9kZUlt
cGxdLT5yZXBsYWNlQ2hpbGQoW25ld0NoaWxkIF9ub2RlSW1wbF0sIFtvbGRDaGlsZCBfbm9kZUlt
cGxdLCBleGNlcHRpb25Db2RlKS5nZXQoKV07CiAgICAgcmFpc2VPbkRPTUVycm9yKGV4Y2VwdGlv
bkNvZGUpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC0yNzQsNyArMjc0LDcgQEAKICAgICBB
U1NFUlQob2xkQ2hpbGQpOwogCiAgICAgaW50IGV4Y2VwdGlvbkNvZGUgPSAwOwotICAgIERPTU5v
ZGUgKnJlc3VsdCA9IFtET01Ob2RlIF9ub2RlV2l0aEltcGw6W3NlbGYgX25vZGVJbXBsXS0+cmVt
b3ZlQ2hpbGQoW29sZENoaWxkIF9ub2RlSW1wbF0sIGV4Y2VwdGlvbkNvZGUpXTsKKyAgICBET01O
b2RlICpyZXN1bHQgPSBbRE9NTm9kZSBfbm9kZVdpdGhJbXBsOltzZWxmIF9ub2RlSW1wbF0tPnJl
bW92ZUNoaWxkKFtvbGRDaGlsZCBfbm9kZUltcGxdLCBleGNlcHRpb25Db2RlKS5nZXQoKV07CiAg
ICAgcmFpc2VPbkRPTUVycm9yKGV4Y2VwdGlvbkNvZGUpOwogICAgIHJldHVybiByZXN1bHQ7CiB9
CkBAIC0yODQsNyArMjg0LDcgQEAKICAgICBBU1NFUlQobmV3Q2hpbGQpOwogCiAgICAgaW50IGV4
Y2VwdGlvbkNvZGUgPSAwOwotICAgIERPTU5vZGUgKnJlc3VsdCA9IFtET01Ob2RlIF9ub2RlV2l0
aEltcGw6W3NlbGYgX25vZGVJbXBsXS0+YXBwZW5kQ2hpbGQoW25ld0NoaWxkIF9ub2RlSW1wbF0s
IGV4Y2VwdGlvbkNvZGUpXTsKKyAgICBET01Ob2RlICpyZXN1bHQgPSBbRE9NTm9kZSBfbm9kZVdp
dGhJbXBsOltzZWxmIF9ub2RlSW1wbF0tPmFwcGVuZENoaWxkKFtuZXdDaGlsZCBfbm9kZUltcGxd
LCBleGNlcHRpb25Db2RlKS5nZXQoKV07CiAgICAgcmFpc2VPbkRPTUVycm9yKGV4Y2VwdGlvbkNv
ZGUpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CkluZGV4OiBXZWJDb3JlK1NWRy9rZG9tLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZStTVkcva2RvbS5oCShyZXZpc2lvbiAxMjI3OCkKKysrIFdlYkNv
cmUrU1ZHL2tkb20uaAkod29ya2luZyBjb3B5KQpAQCAtNTMsNyArNTMsNyBAQAogICAgICAgICBO
T1RBVElPTl9OT0RFICAgICAgICAgICAgICAgPSAxMgogICAgIH07CiAKLSAgICBlbnVtIEV4Y2Vw
dGlvbkNvZGUKKyAgICBlbnVtIEV4Y2VwdGlvbkNvZGVzCiAgICAgewogICAgICAgICBJTkRFWF9T
SVpFX0VSUiAgICAgICAgICAgICAgPSAxLAogICAgICAgICBET01TVFJJTkdfU0laRV9FUlIgICAg
ICAgICAgPSAyLApJbmRleDogQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIENoYW5nZUxvZwkocmV2
aXNpb24gMTIyNzgpCisrKyBDaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMTcg
QEAKKzIwMDYtMDEtMjEgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC0gY2hhbmdlZCBtb3N0IGJh
c2ljIERPTSBvcGVyYXRpb25zIHRvIHVzZSBQYXNzUmVmUHRyIHRvIGF2b2lkIGxlYWtzCisKKyAg
ICAgICAgT25jZSB3ZSBkbyB0aGUgc2FtZSB3aXRoIGNsb25lTm9kZSwgSSBiZWxpZXZlIHdlJ2xs
IGZpeCBvbmUgb2Ygb3VyIFAxCisgICAgICAgIGJ1Z3MsIGJ1dCBjbG9uZU5vZGUgd2FzIGEgbGl0
dGxlIHRvbyBtdWNoIHRvIGRvIHdpdGhvdXQgZG9pbmcgdGhpcyBmaXJzdAorICAgICAgICBwYXNz
LgorCisgICAgICAgICoga2h0bWwveG1sL05vZGVJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Ok5vZGVJbXBsOjpjaGlsZE5vZGVzKTogVXBkYXRlZCBmb3IgcGFyYW1ldGVyIGNoYW5nZXMuCisg
ICAgICAgIChXZWJDb3JlOjpOb2RlSW1wbDo6aW5zZXJ0QmVmb3JlKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpOb2RlSW1wbDo6cmVwbGFjZUNoaWxkKTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpOb2RlSW1wbDo6cmVtb3ZlQ2hpbGQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok5v
ZGVJbXBsOjphcHBlbmRDaGlsZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Tm9kZUltcGw6
OmFkZENoaWxkKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpOb2RlSW1wbDo6YWRkRXZlbnRM
aXN0ZW5lcik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Tm9kZUltcGw6OnNldEhUTUxFdmVu
dExpc3RlbmVyKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpOb2RlSW1wbDo6aXNEZWZhdWx0
TmFtZXNwYWNlKTogVXBkYXRlZCBmb3IgY2hhbmdlZCBuYW1lIG9mIGFuY2VzdG9yRWxlbWVudC4K
KyAgICAgICAgKFdlYkNvcmU6Ok5vZGVJbXBsOjpsb29rdXBQcmVmaXgpOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6Ok5vZGVJbXBsOjpsb29rdXBOYW1lc3BhY2VVUkkpOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6Ok5vZGVJbXBsOjpsb29rdXBOYW1lc3BhY2VQcmVmaXgpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6Ok5vZGVJbXBsOjphbmNlc3RvckVsZW1lbnQpOiBDaGFuZ2VkIG5hbWUg
ZnJvbSBnZXRBbmNlc3RvckVsZW1lbnQuCisgICAgICAgICoga2h0bWwveG1sL05vZGVJbXBsLmg6
IENoYW5nZWQgbW9zdCBmdW5jdGlvbnMgd2hlcmUgaXQgbWFrZXMgc2Vuc2UgdG8gdGFrZSBhbmQg
cmV0dXJuCisgICAgICAgIFBhc3NSZWZQdHIgaW5zdGVhZCBvZiByYXcgcG9pbnRlcnMuIEV2ZW4g
bm9uLW9idmlvdXMgY2FzZXMgbGlrZSBhcHBlbmRDaGlsZCwgd2hlcmUgdGhlCisgICAgICAgIHJl
dHVybiB2YWx1ZSBoYXMgdG8gYmUgUGFzc1JlZlB0ciBvbmx5IGJlY2F1c2UgaXQgbWlnaHQgYmUg
cmVtb3ZlZCB3aGVuIHRoZSBKYXZhU2NyaXB0CisgICAgICAgIHRyaWdnZXJlZCBieSB0aGUgRE9N
IG11dGF0aW9uIGV2ZW50IHJ1bnMgKG5vcm1hbGx5LCB0aGVyZSdzIG5vIG5lZWQgdG8gcmV0dXJu
IGFuICJvd25pbmciCisgICAgICAgIHBvaW50ZXIgYmVjYXVzZSB0aGUgdHJlZSBub3cgb3ducyB0
aGUgbmV3bHktaW5zZXJ0ZWQgbm9kZSkuIE1hZGUgdGhlIGFuY2VzdG9yRWxlbWVudAorICAgICAg
ICBmdW5jdGlvbiBwcml2YXRlLgorCisgICAgICAgICoga2h0bWwveG1sL0NvbnRhaW5lck5vZGVJ
bXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhaW5lck5vZGVJbXBsOjpDb250YWluZXJO
b2RlSW1wbCk6IFVwZGF0ZWQgZm9yIGNoYW5nZXMgZnJvbQorICAgICAgICBfZmlyc3QgdG8gbV9m
aXJzdENoaWxkIGFuZCBfbGFzdCB0byBtX2xhc3RDaGlsZC4KKyAgICAgICAgKFdlYkNvcmU6OkNv
bnRhaW5lck5vZGVJbXBsOjpyZW1vdmVBbGxDaGlsZHJlbik6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6Q29udGFpbmVyTm9kZUltcGw6OmZpcnN0Q2hpbGQpOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OkNvbnRhaW5lck5vZGVJbXBsOjpsYXN0Q2hpbGQpOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OkNvbnRhaW5lck5vZGVJbXBsOjppbnNlcnRCZWZvcmUpOiBVcGRhdGVkIGZvciBwYXJh
bWV0ZXIgY2hhbmdlcy4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhaW5lck5vZGVJbXBsOjpyZXBs
YWNlQ2hpbGQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhaW5lck5vZGVJbXBsOjp3
aWxsUmVtb3ZlKTogVXBkYXRlZCBmb3IgbV9sYXN0Q2hpbGQuCisgICAgICAgIChXZWJDb3JlOjpD
b250YWluZXJOb2RlSW1wbDo6cmVtb3ZlQ2hpbGQpOiBVcGRhdGVkIGZvciBwYXJhbWV0ZXIgY2hh
bmdlcy4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhaW5lck5vZGVJbXBsOjpyZW1vdmVDaGlsZHJl
bik6IFVwZGF0ZWQgZm9yIG1fZmlyc3QvbGFzdENoaWxkLgorICAgICAgICAoV2ViQ29yZTo6Q29u
dGFpbmVyTm9kZUltcGw6OmFwcGVuZENoaWxkKTogVXBkYXRlZCBmb3IgcGFyYW1ldGVyIGNoYW5n
ZXMuCisgICAgICAgIChXZWJDb3JlOjpDb250YWluZXJOb2RlSW1wbDo6aGFzQ2hpbGROb2Rlcyk6
IFVwZGF0ZWQgZm9yIG1fZmlyc3RDaGlsZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhaW5lck5v
ZGVJbXBsOjphZGRDaGlsZCk6IFVwZGF0ZWQgZm9yIHBhcmFtZXRlciBjaGFuZ2VzLgorICAgICAg
ICAoV2ViQ29yZTo6Q29udGFpbmVyTm9kZUltcGw6OmF0dGFjaCk6IFVwZGF0ZWQgZm9yIG1fZmly
c3RDaGlsZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhaW5lck5vZGVJbXBsOjpkZXRhY2gpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhaW5lck5vZGVJbXBsOjppbnNlcnRlZEludG9E
b2N1bWVudCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q29udGFpbmVyTm9kZUltcGw6OnJl
bW92ZWRGcm9tRG9jdW1lbnQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhaW5lck5v
ZGVJbXBsOjppbnNlcnRlZEludG9UcmVlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDb250
YWluZXJOb2RlSW1wbDo6cmVtb3ZlZEZyb21UcmVlKTogRGl0dG8uCisgICAgICAgICoga2h0bWwv
eG1sL0NvbnRhaW5lck5vZGVJbXBsLmg6IFJlbW92ZWQgdW51c2VkIGNoZWNrU2FtZURvY3VtZW50
IGFuZCBjaGVja0lzQ2hpbGQuCisgICAgICAgIE1hZGUgbW9yZSB0aGluZ3MgcHJpdmF0ZSwgdXBk
YXRlZCBwYXJhbWV0ZXJzIGZvciBOb2RlSW1wbCBmdW5jdGlvbnMuCisKKyAgICAgICAgKiBraHRt
bC9odG1sL0hUTUxTZWxlY3RFbGVtZW50SW1wbC5jcHA6CisgICAgICAgIChET006OkhUTUxTZWxl
Y3RFbGVtZW50SW1wbDo6aW5zZXJ0QmVmb3JlKTogRGl0dG8uCisgICAgICAgIChET006OkhUTUxT
ZWxlY3RFbGVtZW50SW1wbDo6cmVwbGFjZUNoaWxkKTogRGl0dG8uCisgICAgICAgIChET006OkhU
TUxTZWxlY3RFbGVtZW50SW1wbDo6cmVtb3ZlQ2hpbGQpOiBEaXR0by4KKyAgICAgICAgKERPTTo6
SFRNTFNlbGVjdEVsZW1lbnRJbXBsOjphcHBlbmRDaGlsZCk6IERpdHRvLgorICAgICAgICAoRE9N
OjpIVE1MU2VsZWN0RWxlbWVudEltcGw6OmFkZENoaWxkKTogRGl0dG8uCisgICAgICAgICoga2h0
bWwvaHRtbC9IVE1MU2VsZWN0RWxlbWVudEltcGwuaDogRGl0dG8uCisKKyAgICAgICAgKiBraHRt
bC9odG1sL0hUTUxPcHRHcm91cEVsZW1lbnRJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxPcHRHcm91cEVsZW1lbnRJbXBsOjppbnNlcnRCZWZvcmUpOiBVcGRhdGVkIGZvciBwYXJhbWV0
ZXIgdHlwZSBjaGFuZ2UuCisgICAgICAgIEFsc28gY2hhbmdlZCB0byBsb29rIGF0IHJldHVybiB2
YWx1ZSwgbm90IGV4Y2VwdGlvbiBjb2RlLCB0byBjaGVjayBmb3Igc3VjY2Vzcy4KKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxPcHRHcm91cEVsZW1lbnRJbXBsOjpyZXBsYWNlQ2hpbGQpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxPcHRHcm91cEVsZW1lbnRJbXBsOjpyZW1vdmVDaGlsZCk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTE9wdEdyb3VwRWxlbWVudEltcGw6OmFwcGVu
ZENoaWxkKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MT3B0R3JvdXBFbGVtZW50SW1w
bDo6YWRkQ2hpbGQpOiBEaXR0by4KKyAgICAgICAgKiBraHRtbC9odG1sL0hUTUxPcHRHcm91cEVs
ZW1lbnRJbXBsLmg6IERpdHRvLgorCisgICAgICAgICogV2ViQ29yZStTVkcva2RvbS5oOiBSZW5h
bWVkIGVudW0gZnJvbSBFeGNlcHRpb25Db2RlIHRvIEV4Y2VwdGlvbkNvZGVzCisgICAgICAgIHRv
IGF2b2lkIGNvbmZsaWN0IHdpdGggYSB0eXBlZGVmIEV4Y2VwdGlvbkNvZGUgSSBhZGRlZC4KKwor
ICAgICAgICAqIGJpbmRpbmdzL29iamMvRE9NLm1tOgorICAgICAgICAoLVtET01Ob2RlIGluc2Vy
dEJlZm9yZTo6XSk6IEFkZGVkIGdldCgpIGNhbGwgc2luY2UgcmV0dXJuIHZhbHVlIGlzIGEgUGFz
c1JlZlB0ci4KKyAgICAgICAgKC1bRE9NTm9kZSByZXBsYWNlQ2hpbGQ6Ol0pOiBEaXR0by4KKyAg
ICAgICAgKC1bRE9NTm9kZSByZW1vdmVDaGlsZDpdKTogRGl0dG8uCisgICAgICAgICgtW0RPTU5v
ZGUgYXBwZW5kQ2hpbGQ6XSk6IERpdHRvLgorCisgICAgICAgICoga2h0bWwvZWNtYS9ranNfZG9t
Lmg6IENoYW5nZWQgZ2V0RE9NTm9kZSB0byB0YWtlIFBhc3NSZWZQdHIuCisgICAgICAgICoga2h0
bWwvZWNtYS9ranNfZG9tLmNwcDogKEtKUzo6Z2V0RE9NTm9kZSk6IENoYW5nZWQgdG8gdGFrZSBQ
YXNzUmVmUHRyLgorCisgICAgICAgICoga2h0bWwvaHRtbC9IVE1MRWxlbWVudEltcGwuY3BwOiBB
ZGRlZCBkb20yX2V2ZW50cy5oIGluY2x1ZGUsIG5vdyBuZWVkZWQuCisgICAgICAgIFJlLXNvcnRl
ZCBpbmNsdWRlcy4KKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHRWxlbWVudEltcGwuY3BwOiBEaXR0
by4KKworICAgICAgICAqIGtodG1sL2h0bWwvaHRtbF9kb2N1bWVudGltcGwuY3BwOiAoV2ViQ29y
ZTo6SFRNTERvY3VtZW50SW1wbDo6ZG9jdW1lbnRFbGVtZW50KToKKyAgICAgICAgQ2hhbmdlZCBh
Y2Nlc3MgdG8gbm93LXByaXZhdGUgZGF0YSBtZW1iZXIgX2ZpcnN0IHRvIGVxdWl2YWxlbnQgaW5s
aW5lIGZ1bmN0aW9uCisgICAgICAgIGZhc3RGaXJzdENoaWxkKCkuCisgICAgICAgICoga2h0bWwv
eG1sL0RvY3VtZW50SW1wbC5jcHA6IChXZWJDb3JlOjpEb2N1bWVudEltcGw6OnJlY2FsY1N0eWxl
KTogRGl0dG8uCisgICAgICAgICoga2h0bWwveG1sL2RvbV9lbGVtZW50aW1wbC5jcHA6IChXZWJD
b3JlOjpFbGVtZW50SW1wbDo6cmVjYWxjU3R5bGUpOiBEaXR0by4KKworICAgICAgICAqIGtodG1s
L2h0bWwvaHRtbF90YWJsZWltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRhYmxlRWxl
bWVudEltcGw6OnNldENhcHRpb24pOiBVcGRhdGVkIHRvIHdvcmsgd2l0aCBuZXcgcmVwbGFjZUNo
aWxkCisgICAgICAgIHRoYXQgcmV0dXJucyBQYXNzUmVmUHRyLgorICAgICAgICAoV2ViQ29yZTo6
SFRNTFRhYmxlRWxlbWVudEltcGw6OnNldFRIZWFkKTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpIVE1MVGFibGVFbGVtZW50SW1wbDo6c2V0VEZvb3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxUYWJsZUVsZW1lbnRJbXBsOjpzZXRUQm9keSk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTFRhYmxlRWxlbWVudEltcGw6OmFkZENoaWxkKTogVXBkYXRlZCBmb3IgcGFyYW1l
dGVyIHR5cGUgY2hhbmdlLgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRhYmxlU2VjdGlvbkVsZW1l
bnRJbXBsOjphZGRDaGlsZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRhYmxlUm93
RWxlbWVudEltcGw6OmFkZENoaWxkKTogRGl0dG8uCisgICAgICAgICoga2h0bWwvaHRtbC9odG1s
X3RhYmxlaW1wbC5oOiBEaXR0by4KKworICAgICAgICAqIGtodG1sL2h0bWwvaHRtbHBhcnNlci5j
cHA6IChIVE1MUGFyc2VyOjpoYW5kbGVSZXNpZHVhbFN0eWxlQ2xvc2VUYWdBY3Jvc3NCbG9ja3Mp
OgorICAgICAgICBSZW1vdmVkIGFuIHVubmVlZGVkIGV4cGxpY2l0IGNhbGwgdG8gcmVtb3ZlQ2hp
bGQuIGFwcGVuZENoaWxkIGFscmVhZHkgdGFrZXMgY2FyZSBvZgorICAgICAgICByZW1vdmluZyB0
aGUgY2hpbGQgZnJvbSBpdHMgb3duIGxvY2F0aW9uLiBUaGlzIGF2b2lkcyB0aGUgZmFjdCB0aGF0
IHJlbW92ZUNoaWxkIHdhcworICAgICAgICByZW1vdmluZyB0aGUgcGFyZW50LCB0aGUgb25seSB0
aGluZyBrZWVwaW5nIHRoZSBub2RlIGFsaXZlLiBUaGlzIGlzIHNvcnQgb2YgdGhlCisgICAgICAg
ICJmbGlwIHNpZGUiIG9mIG91ciByZW1vdmVDaGlsZCBsZWFrcyAtLSBjb2RlIHRoYXQgZGVwZW5k
ZWQgb24gdGhlIGJlaGF2aW9yIHRoYXQKKyAgICAgICAgY2F1c2VkIHRoZSBsZWFrcy4KKworICAg
ICAgICAqIGtodG1sL3htbC94bWxfdG9rZW5pemVyLmNwcDogKFdlYkNvcmU6OlhNTFRva2VuaXpl
cjo6c3RhcnRFbGVtZW50TnMpOgorICAgICAgICBSZW1vdmVkIHVubmVlZGVkIGlzSFRNTEVsZW1l
bnQoKSBjYWxscyBmcm9tIGJlZm9yZSB0aGUgInF1YWxpZmllZCBuYW1lIiBjaGFuZ2UuCisKIDIw
MDYtMDEtMjEgIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQG1hYy5jb20+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgRGFyaW4uCkluZGV4OiBrc3ZnMi9zdmcvU1ZHRWxlbWVudEltcGwuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdFbGVtZW50SW1wbC5jcHAJKHJldmlzaW9uIDEyMjc4
KQorKysga3N2ZzIvc3ZnL1NWR0VsZW1lbnRJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEs
MjMgKzIxLDI0IEBACiAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSA8a2RvbS9r
ZG9tLmg+CisjaW5jbHVkZSAiU1ZHRWxlbWVudEltcGwuaCIKKworI2luY2x1ZGUgIkRvY3VtZW50
SW1wbC5oIgorI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKKyNpbmNsdWRlICJTVkdET01JbXBsZW1l
bnRhdGlvbkltcGwuaCIKKyNpbmNsdWRlICJTVkdOYW1lcy5oIgorI2luY2x1ZGUgIlNWR1NWR0Vs
ZW1lbnRJbXBsLmgiCisjaW5jbHVkZSAiY3NzX3N0eWxlc2hlZXRpbXBsLmgiCisjaW5jbHVkZSAi
ZG9tMl9ldmVudHMuaCIKKyNpbmNsdWRlICJodG1sbmFtZXMuaCIKKyNpbmNsdWRlICJrc3ZnLmgi
CisjaW5jbHVkZSA8a2RvbS9ET01TdHJpbmcuaD4KICNpbmNsdWRlIDxrZG9tL05hbWVzcGFjZS5o
PgotI2luY2x1ZGUgPGtkb20vRE9NU3RyaW5nLmg+CisjaW5jbHVkZSA8a2RvbS9jb3JlL0F0dHJJ
bXBsLmg+CiAjaW5jbHVkZSA8a2RvbS9jb3JlL2RvbWF0dHJzLmg+Ci0jaW5jbHVkZSA8a2RvbS9j
b3JlL0F0dHJJbXBsLmg+Ci0jaW5jbHVkZSAiY3NzX3N0eWxlc2hlZXRpbXBsLmgiCiAjaW5jbHVk
ZSA8a2RvbS9ldmVudHMvRXZlbnRMaXN0ZW5lckltcGwuaD4KLSNpbmNsdWRlICJEb2N1bWVudElt
cGwuaCIKKyNpbmNsdWRlIDxrZG9tL2tkb20uaD4KIAotI2luY2x1ZGUgImtzdmcuaCIKLSNpbmNs
dWRlICJTVkdOYW1lcy5oIgotI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKLSNpbmNsdWRlICJodG1s
bmFtZXMuaCIKLSNpbmNsdWRlICJTVkdFbGVtZW50SW1wbC5oIgotI2luY2x1ZGUgIlNWR1NWR0Vs
ZW1lbnRJbXBsLmgiCi0jaW5jbHVkZSAiU1ZHRE9NSW1wbGVtZW50YXRpb25JbXBsLmgiCi0KIHVz
aW5nIG5hbWVzcGFjZSBLU1ZHOwogdXNpbmcgbmFtZXNwYWNlIERPTTo6SFRNTE5hbWVzOwogdXNp
bmcgbmFtZXNwYWNlIERPTTo6RXZlbnROYW1lczsK
</data>
<flag name="review"
          id="1345"
          type_id="1"
          status="+"
          setter="andersca"
    />
          </attachment>
      

    </bug>

</bugzilla>