<?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>6754</bug_id>
          
          <creation_ts>2006-01-24 02:36:59 -0800</creation_ts>
          <short_desc>Deploy RefPtr throughout more of WebCore</short_desc>
          <delta_ts>2006-01-26 00:37:26 -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>WebKit Misc.</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>P4</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Eric Seidel (no email)">eric</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>29691</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-01-24 02:36:59 -0800</bug_when>
    <thetext>Deploy RefPtr throughout more of WebCore

I was in the mood tonight... I spread a bit more of the RefPtr love throughout WebCore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>29692</commentid>
    <comment_count>1</comment_count>
      <attachid>5905</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-01-24 02:37:33 -0800</bug_when>
    <thetext>Created attachment 5905
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>29703</commentid>
    <comment_count>2</comment_count>
      <attachid>5905</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-01-24 08:18:04 -0800</bug_when>
    <thetext>Comment on attachment 5905
proposed patch

This looks wrong:

-    : AttributeImpl(name, value), m_styleDecl(decl)
+    : AttributeImpl(name, value)

and occurs twice. I wonder why this did not show up in testing.

+    void setDecl(CSSMappedAttributeDeclarationImpl* decl) { m_styleDecl = decl; }

This should take a PassRefPtr.

+    bool ret = dispatchGenericEvent(evt, exceptioncode);

Since &quot;evt&quot; is a PassRefPtr, once you pass it to dispatchGenericEvent it will change to 0, so you won&apos;t be able to call finishedWithEvent. So in this case, you need to pass evt.get() even though you have a PassRefPtr and the target function takes a PassRefPtr.

You should see obvious test failures from some of the problems above.

In HTMLElementImpl.cpp, the code assumes that it&apos;s OK to just keep nextNode in a raw pointer. But since functions like insertBefore and removeChild send DOM mutation events, it&apos;s entirely possible that nextNode will be deallocated. So nextNode needs to be a RefPtr too.

+                fragment-&gt;insertBefore(child, node.get(), ignoredExceptionCode);

Should just be node here, not node.get().

+            fragment-&gt;removeChild(node.get(), ignoredExceptionCode);

Same here.

+        RefPtr&lt;NodeImpl&gt; n = it.current();
+        removeChild(n.get(), exceptioncode);

This can just be removeChild(it.current(), exceptioncode). There used to be reason for the caller to ref/deref, but removeChild now takes a PassRefPtr.

+    RefPtr&lt;NodeImpl&gt; item = items[listIndex];
+    removeChild(item.get(), exceptioncode);

Same here.

+    if(index &gt;= 0 &amp;&amp; index &lt; numRows) {

Needs a space after the if (two times).

+        RefPtr&lt;NodeImpl&gt; row = children-&gt;item(index);
+        HTMLElementImpl::removeChild(row.get(), exceptioncode);

Same thing, no need to use a RefPtr for this. (Twice.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>29989</commentid>
    <comment_count>3</comment_count>
      <attachid>5975</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-01-25 23:48:08 -0800</bug_when>
    <thetext>Created attachment 5975
addressed darin&apos;s concerns</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>5905</attachid>
            <date>2006-01-24 02:37:33 -0800</date>
            <delta_ts>2006-01-25 23:48:08 -0800</delta_ts>
            <desc>proposed patch</desc>
            <filename>refptr.patch</filename>
            <type>text/plain</type>
            <size>30519</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">SW5kZXg6IGtodG1sL3htbC9kb21fcG9zaXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBraHRtbC94bWwv
ZG9tX3Bvc2l0aW9uLmgJKHJldmlzaW9uIDEyMzMwKQorKysga2h0bWwveG1sL2RvbV9wb3NpdGlv
bi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMywxNiArMjMsMTYgQEAKICAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAog
ICovCiAKLSNpZm5kZWYgX19kb21fcG9zaXRpb25faF9fCi0jZGVmaW5lIF9fZG9tX3Bvc2l0aW9u
X2hfXworI2lmbmRlZiBQb3NpdGlvbl9ICisjZGVmaW5lIFBvc2l0aW9uX0gKIAorI2luY2x1ZGUg
Ik5vZGVJbXBsLmgiCiAjaW5jbHVkZSAidGV4dF9hZmZpbml0eS5oIgogCiBuYW1lc3BhY2UgRE9N
IHsKIAogY2xhc3MgQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uSW1wbDsKIGNsYXNzIEVsZW1l
bnRJbXBsOwotY2xhc3MgTm9kZUltcGw7CiBjbGFzcyBSYW5nZUltcGw7CiAKIGVudW0gRVVzaW5n
Q29tcG9zZWRDaGFyYWN0ZXJzIHsgTm90VXNpbmdDb21wb3NlZENoYXJhY3RlcnMgPSBmYWxzZSwg
VXNpbmdDb21wb3NlZENoYXJhY3RlcnMgPSB0cnVlIH07CkBAIC00MiwxNCArNDIsMTAgQEAgY2xh
c3MgUG9zaXRpb24KIHB1YmxpYzoKICAgICBQb3NpdGlvbigpIDogbV9ub2RlKDApLCBtX29mZnNl
dCgwKSB7IH0KICAgICBQb3NpdGlvbihOb2RlSW1wbCAqbm9kZSwgaW50IG9mZnNldCk7Ci0gICAg
UG9zaXRpb24oY29uc3QgUG9zaXRpb24gJik7Ci0gICAgflBvc2l0aW9uKCk7Ci0KLSAgICBQb3Np
dGlvbiAmb3BlcmF0b3I9KGNvbnN0IFBvc2l0aW9uICZvKTsKIAogICAgIHZvaWQgY2xlYXIoKTsK
IAotICAgIE5vZGVJbXBsICpub2RlKCkgY29uc3QgeyByZXR1cm4gbV9ub2RlOyB9CisgICAgTm9k
ZUltcGwgKm5vZGUoKSBjb25zdCB7IHJldHVybiBtX25vZGUuZ2V0KCk7IH0KICAgICBpbnQgb2Zm
c2V0KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0KIAogICAgIGJvb2wgaXNOdWxsKCkgY29u
c3QgeyByZXR1cm4gbV9ub2RlID09IDA7IH0KQEAgLTEwMiw3ICs5OCw3IEBAIHByaXZhdGU6CiAg
ICAgUG9zaXRpb24gcHJldmlvdXNDaGFyYWN0ZXJQb3NpdGlvbihraHRtbDo6RUFmZmluaXR5IGFm
ZmluaXR5KSBjb25zdDsKICAgICBQb3NpdGlvbiBuZXh0Q2hhcmFjdGVyUG9zaXRpb24oa2h0bWw6
OkVBZmZpbml0eSBhZmZpbml0eSkgY29uc3Q7CiAgICAgCi0gICAgTm9kZUltcGwgKm1fbm9kZTsK
KyAgICBSZWZQdHI8Tm9kZUltcGw+IG1fbm9kZTsKICAgICBpbnQgbV9vZmZzZXQ7CiB9OwogCkBA
IC0xMjEsNCArMTE3LDQgQEAgUG9zaXRpb24gZW5kUG9zaXRpb24oY29uc3QgUmFuZ2VJbXBsICop
OwogCiB9IC8vIG5hbWVzcGFjZSBET00KIAotI2VuZGlmIC8vIF9fZG9tX3Bvc2l0aW9uX2hfXwor
I2VuZGlmIC8vIFBvc2l0aW9uX0gKSW5kZXg6IGtodG1sL3htbC9Ob2RlSW1wbC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIGtodG1sL3htbC9Ob2RlSW1wbC5oCShyZXZpc2lvbiAxMjMzMCkKKysrIGtodG1sL3ht
bC9Ob2RlSW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNjYsOCArMjY2LDggQEAgcHVibGljOgog
ICAgIEV2ZW50TGlzdGVuZXIgKmdldEhUTUxFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmlu
ZyYgZXZlbnRUeXBlKTsKICAgICB2b2lkIHJlbW92ZUFsbEV2ZW50TGlzdGVuZXJzKCk7CiAKLSAg
ICBib29sIGRpc3BhdGNoRXZlbnQoRXZlbnRJbXBsKiwgRXhjZXB0aW9uQ29kZSYsIGJvb2wgdGVt
cEV2ZW50ID0gZmFsc2UpOwotICAgIGJvb2wgZGlzcGF0Y2hHZW5lcmljRXZlbnQoRXZlbnRJbXBs
KiwgRXhjZXB0aW9uQ29kZSYpOworICAgIGJvb2wgZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2
ZW50SW1wbD4sIEV4Y2VwdGlvbkNvZGUmLCBib29sIHRlbXBFdmVudCA9IGZhbHNlKTsKKyAgICBi
b29sIGRpc3BhdGNoR2VuZXJpY0V2ZW50KFBhc3NSZWZQdHI8RXZlbnRJbXBsPiwgRXhjZXB0aW9u
Q29kZSYpOwogICAgIGJvb2wgZGlzcGF0Y2hIVE1MRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiBl
dmVudFR5cGUsIGJvb2wgY2FuQnViYmxlLCBib29sIGNhbmNlbGFibGUpOwogICAgIGJvb2wgZGlz
cGF0Y2hXaW5kb3dFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgYm9vbCBjYW5C
dWJibGUsIGJvb2wgY2FuY2VsYWJsZSk7CiAgICAgYm9vbCBkaXNwYXRjaE1vdXNlRXZlbnQoUU1v
dXNlRXZlbnQqLCBjb25zdCBBdG9taWNTdHJpbmcmIG92ZXJyaWRlVHlwZSwgaW50IG92ZXJyaWRl
RGV0YWlsID0gMCk7CkluZGV4OiBraHRtbC94bWwvZG9tX2VsZW1lbnRpbXBsLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0ga2h0bWwveG1sL2RvbV9lbGVtZW50aW1wbC5oCShyZXZpc2lvbiAxMjMzMCkKKysrIGto
dG1sL3htbC9kb21fZWxlbWVudGltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMzc3LDM1ICszNzcs
MjYgQEAgY2xhc3MgTWFwcGVkQXR0cmlidXRlSW1wbCA6IHB1YmxpYyBBdHRyaQogewogcHVibGlj
OgogICAgIE1hcHBlZEF0dHJpYnV0ZUltcGwoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29u
c3QgQXRvbWljU3RyaW5nJiB2YWx1ZSwgQ1NTTWFwcGVkQXR0cmlidXRlRGVjbGFyYXRpb25JbXBs
KiBkZWNsID0gMCkKLSAgICA6IEF0dHJpYnV0ZUltcGwobmFtZSwgdmFsdWUpLCBtX3N0eWxlRGVj
bChkZWNsKQorICAgIDogQXR0cmlidXRlSW1wbChuYW1lLCB2YWx1ZSkKICAgICB7Ci0gICAgICAg
IGlmIChkZWNsKQotICAgICAgICAgICAgZGVjbC0+cmVmKCk7CiAgICAgfQogCiAgICAgTWFwcGVk
QXR0cmlidXRlSW1wbChjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGNvbnN0IEF0b21pY1N0cmlu
ZyYgdmFsdWUsIENTU01hcHBlZEF0dHJpYnV0ZURlY2xhcmF0aW9uSW1wbCogZGVjbCA9IDApCi0g
ICAgOiBBdHRyaWJ1dGVJbXBsKG5hbWUsIHZhbHVlKSwgbV9zdHlsZURlY2woZGVjbCkKKyAgICA6
IEF0dHJpYnV0ZUltcGwobmFtZSwgdmFsdWUpCiAgICAgewotICAgICAgICBpZiAoZGVjbCkKLSAg
ICAgICAgICAgIGRlY2wtPnJlZigpOwogICAgIH0KIAogICAgIH5NYXBwZWRBdHRyaWJ1dGVJbXBs
KCk7CiAKICAgICB2aXJ0dWFsIEF0dHJpYnV0ZUltcGwqIGNsb25lKGJvb2wgcHJlc2VydmVEZWNs
PXRydWUpIGNvbnN0OwogCi0gICAgdmlydHVhbCBDU1NTdHlsZURlY2xhcmF0aW9uSW1wbCogc3R5
bGUoKSBjb25zdCB7IHJldHVybiBtX3N0eWxlRGVjbDsgfQorICAgIHZpcnR1YWwgQ1NTU3R5bGVE
ZWNsYXJhdGlvbkltcGwqIHN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdHlsZURlY2wuZ2V0KCk7
IH0KIAotICAgIENTU01hcHBlZEF0dHJpYnV0ZURlY2xhcmF0aW9uSW1wbCogZGVjbCgpIGNvbnN0
IHsgcmV0dXJuIG1fc3R5bGVEZWNsOyB9Ci0gICAgdm9pZCBzZXREZWNsKENTU01hcHBlZEF0dHJp
YnV0ZURlY2xhcmF0aW9uSW1wbCogZGVjbCkgCi0gICAgeyAKLSAgICAgICAgaWYgKG1fc3R5bGVE
ZWNsKSBtX3N0eWxlRGVjbC0+ZGVyZWYoKTsKLSAgICAgICAgbV9zdHlsZURlY2wgPSBkZWNsOwot
ICAgICAgICBpZiAobV9zdHlsZURlY2wpIG1fc3R5bGVEZWNsLT5yZWYoKTsKLSAgICB9CisgICAg
Q1NTTWFwcGVkQXR0cmlidXRlRGVjbGFyYXRpb25JbXBsKiBkZWNsKCkgY29uc3QgeyByZXR1cm4g
bV9zdHlsZURlY2wuZ2V0KCk7IH0KKyAgICB2b2lkIHNldERlY2woQ1NTTWFwcGVkQXR0cmlidXRl
RGVjbGFyYXRpb25JbXBsKiBkZWNsKSB7IG1fc3R5bGVEZWNsID0gZGVjbDsgfQogCiBwcml2YXRl
OgotICAgIENTU01hcHBlZEF0dHJpYnV0ZURlY2xhcmF0aW9uSW1wbCogbV9zdHlsZURlY2w7Cisg
ICAgUmVmUHRyPENTU01hcHBlZEF0dHJpYnV0ZURlY2xhcmF0aW9uSW1wbD4gbV9zdHlsZURlY2w7
CiB9OwogCiBjbGFzcyBOYW1lZE1hcHBlZEF0dHJNYXBJbXBsIDogcHVibGljIE5hbWVkQXR0ck1h
cEltcGwKQEAgLTQ2MCw3ICs0NTEsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgc2V0TWFw
cGVkQXR0cmlidXRlRGVjbChNYXBwZWRBdHRyaWJ1dGVFbnRyeSB0eXBlLCBBdHRyaWJ1dGVJbXBs
KiBhdHRyLCBDU1NNYXBwZWRBdHRyaWJ1dGVEZWNsYXJhdGlvbkltcGwqIGRlY2wpOwogICAgIHN0
YXRpYyB2b2lkIHJlbW92ZU1hcHBlZEF0dHJpYnV0ZURlY2woTWFwcGVkQXR0cmlidXRlRW50cnkg
dHlwZSwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYg
YXR0clZhbHVlKTsKICAgICAKLSAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbkltcGwqIGlu
bGluZVN0eWxlRGVjbCgpIGNvbnN0IHsgcmV0dXJuIG1faW5saW5lU3R5bGVEZWNsOyB9CisgICAg
Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb25JbXBsKiBpbmxpbmVTdHlsZURlY2woKSBjb25zdCB7
IHJldHVybiBtX2lubGluZVN0eWxlRGVjbC5nZXQoKTsgfQogICAgIHZpcnR1YWwgQ1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb25JbXBsKiBhZGRpdGlvbmFsQXR0cmlidXRlU3R5bGVEZWNsKCk7CiAg
ICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb25JbXBsKiBnZXRJbmxpbmVTdHlsZURlY2woKTsK
ICAgICBDU1NTdHlsZURlY2xhcmF0aW9uSW1wbCogc3R5bGUoKTsKQEAgLTQ3Nyw3ICs0NjgsNyBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCBBdHRyaWJ1dGVJbXBsKiBjcmVhdGVBdHRyaWJ1dGUoY29u
c3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgRE9NU3RyaW5nSW1wbCogdmFsdWUpOwogCiBwcm90ZWN0
ZWQ6Ci0gICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb25JbXBsKiBtX2lubGluZVN0eWxlRGVj
bDsKKyAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb25JbXBsPiBtX2lubGluZVN0
eWxlRGVjbDsKICAgICBtdXRhYmxlIGJvb2wgbV9pc1N0eWxlQXR0cmlidXRlVmFsaWQgOiAxOwog
ICAgIG11dGFibGUgYm9vbCBtX3N5bmNocm9uaXppbmdTdHlsZUF0dHJpYnV0ZSA6IDE7CiB9OwpJ
bmRleDoga2h0bWwveG1sL2RvbV9wb3NpdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2h0bWwveG1s
L2RvbV9wb3NpdGlvbi5jcHAJKHJldmlzaW9uIDEyMzMwKQorKysga2h0bWwveG1sL2RvbV9wb3Np
dGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk2LDUxICs5NiwxNCBAQCBzdGF0aWMgTm9kZUlt
cGwgKnByZXZpb3VzUmVuZGVyZWRFZGl0YWJsCiAgICAgcmV0dXJuIDA7CiB9CiAKLQogUG9zaXRp
b246OlBvc2l0aW9uKE5vZGVJbXBsICpub2RlLCBpbnQgb2Zmc2V0KSAKICAgICA6IG1fbm9kZShu
b2RlKSwgbV9vZmZzZXQob2Zmc2V0KSAKLXsgCi0gICAgaWYgKG5vZGUpIHsKLSAgICAgICAgbm9k
ZS0+cmVmKCk7Ci0gICAgfQotfQotCi1Qb3NpdGlvbjo6UG9zaXRpb24oY29uc3QgUG9zaXRpb24g
Jm8pCi0gICAgOiBtX25vZGUoby5tX25vZGUpLCBtX29mZnNldChvLm1fb2Zmc2V0KSAKLXsKLSAg
ICBpZiAobV9ub2RlKSB7Ci0gICAgICAgIG1fbm9kZS0+cmVmKCk7Ci0gICAgfQotfQotCi1Qb3Np
dGlvbjo6flBvc2l0aW9uKCkKLXsKLSAgICBpZiAobV9ub2RlKSB7Ci0gICAgICAgIG1fbm9kZS0+
ZGVyZWYoKTsKLSAgICB9Ci19Ci0KLVBvc2l0aW9uICZQb3NpdGlvbjo6b3BlcmF0b3I9KGNvbnN0
IFBvc2l0aW9uICZvKQogewotICAgIGlmIChtX25vZGUpIHsKLSAgICAgICAgbV9ub2RlLT5kZXJl
ZigpOwotICAgIH0KLSAgICBtX25vZGUgPSBvLm1fbm9kZTsKLSAgICBpZiAobV9ub2RlKSB7Ci0g
ICAgICAgIG1fbm9kZS0+cmVmKCk7Ci0gICAgfQotCi0gICAgbV9vZmZzZXQgPSBvLm1fb2Zmc2V0
OwotICAgIAotICAgIHJldHVybiAqdGhpczsKIH0KIAogdm9pZCBQb3NpdGlvbjo6Y2xlYXIoKQog
ewotICAgIGlmIChtX25vZGUpIHsKLSAgICAgICAgbV9ub2RlLT5kZXJlZigpOwotICAgICAgICBt
X25vZGUgPSAwOwotICAgIH0KKyAgICBtX25vZGUgPSAwOwogICAgIG1fb2Zmc2V0ID0gMDsKIH0K
IApJbmRleDoga2h0bWwveG1sL05vZGVJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBraHRtbC94bWwv
Tm9kZUltcGwuY3BwCShyZXZpc2lvbiAxMjMzMCkKKysrIGtodG1sL3htbC9Ob2RlSW1wbC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ4NCwxNiArNDg0LDEzIEBAIEV2ZW50TGlzdGVuZXIgKk5vZGVJ
bXBsOjpnZXRIVE1MRXZlbnRMaXMKIH0KIAogCi1ib29sIE5vZGVJbXBsOjpkaXNwYXRjaEV2ZW50
KEV2ZW50SW1wbCAqZXZ0LCBpbnQgJmV4Y2VwdGlvbmNvZGUsIGJvb2wgdGVtcEV2ZW50KQorYm9v
bCBOb2RlSW1wbDo6ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50SW1wbD4gZXZ0LCBpbnQg
JmV4Y2VwdGlvbmNvZGUsIGJvb2wgdGVtcEV2ZW50KQogewogICAgIGFzc2VydCghZXZlbnREaXNw
YXRjaEZvcmJpZGRlbigpKTsKICAgICBpZiAoIWV2dCB8fCBldnQtPnR5cGUoKS5pc0VtcHR5KCkp
IHsgCiAgICAgICAgIGV4Y2VwdGlvbmNvZGUgPSBFdmVudEV4Y2VwdGlvbjo6X0VYQ0VQVElPTl9P
RkZTRVQgKyBFdmVudEV4Y2VwdGlvbjo6VU5TUEVDSUZJRURfRVZFTlRfVFlQRV9FUlI7CiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0KLSAgICBldnQtPnJlZigpOwotCiAgICAgZXZ0LT5z
ZXRUYXJnZXQodGhpcyk7CiAKICAgICAvLyBXZSd2ZSBoYWQgYXQgbGVhc3Qgb25lIHJlcG9ydCBv
ZiBhIGNyYXNoIG9uIGEgcGFnZSB3aGVyZSBkb2N1bWVudCBpcyBudWxsIGhlcmUuCkBAIC01MDks
MjYgKzUwNiwyMiBAQCBib29sIE5vZGVJbXBsOjpkaXNwYXRjaEV2ZW50KEV2ZW50SW1wbCAqCiAg
ICAgICAgIHZpZXcgPSBkb2MtPnZpZXcoKTsKICAgICB9CiAKLSAgICBib29sIHJldCA9IGRpc3Bh
dGNoR2VuZXJpY0V2ZW50KCBldnQsIGV4Y2VwdGlvbmNvZGUgKTsKKyAgICBib29sIHJldCA9IGRp
c3BhdGNoR2VuZXJpY0V2ZW50KGV2dCwgZXhjZXB0aW9uY29kZSk7CiAKICAgICAvLyBJZiB0ZW1w
RXZlbnQgaXMgdHJ1ZSwgdGhpcyBtZWFucyB0aGF0IHRoZSBET00gaW1wbGVtZW50YXRpb24gd2ls
bCBub3QgYmUgc3RvcmluZyBhIHJlZmVyZW5jZSB0byB0aGUgZXZlbnQsIGkuZS4KICAgICAvLyB0
aGVyZSBpcyBubyB3YXkgdG8gcmV0cmlldmUgaXQgZnJvbSBqYXZhc2NyaXB0IGlmIGEgc2NyaXB0
IGRvZXMgbm90IGFscmVhZHkgaGF2ZSBhIHJlZmVyZW5jZSB0byBpdCBpbiBhIHZhcmlhYmxlLgog
ICAgIC8vIFNvIHRoZXJlIGlzIG5vIG5lZWQgZm9yIHRoZSBpbnRlcnByZXRlciB0byBrZWVwIHRo
ZSBldmVudCBpbiBpdCdzIGNhY2hlCiAgICAgaWYgKHRlbXBFdmVudCAmJiBmcmFtZSAmJiBmcmFt
ZS0+alNjcmlwdCgpKQotICAgICAgICBmcmFtZS0+alNjcmlwdCgpLT5maW5pc2hlZFdpdGhFdmVu
dChldnQpOwotCi0gICAgZXZ0LT5kZXJlZigpOworICAgICAgICBmcmFtZS0+alNjcmlwdCgpLT5m
aW5pc2hlZFdpdGhFdmVudChldnQuZ2V0KCkpOwogCiAgICAgcmV0dXJuIHJldDsKIH0KIAotYm9v
bCBOb2RlSW1wbDo6ZGlzcGF0Y2hHZW5lcmljRXZlbnQoIEV2ZW50SW1wbCAqZXZ0LCBpbnQgJi8q
ZXhjZXB0aW9uY29kZSAqLykKK2Jvb2wgTm9kZUltcGw6OmRpc3BhdGNoR2VuZXJpY0V2ZW50KFBh
c3NSZWZQdHI8RXZlbnRJbXBsPiBldnQsIGludCAmLypleGNlcHRpb25jb2RlICovKQogewogICAg
IGFzc2VydCghZXZlbnREaXNwYXRjaEZvcmJpZGRlbigpKTsKICAgICBhc3NlcnQoZXZ0LT50YXJn
ZXQoKSk7Ci0KLSAgICBldnQtPnJlZigpOwotCisgICAgCiAgICAgLy8gIyMjIGNoZWNrIHRoYXQg
dHlwZSBzcGVjaWZpZWQKIAogICAgIC8vIHdvcmsgb3V0IHdoYXQgbm9kZXMgdG8gc2VuZCBldmVu
dCB0bwpAQCAtNTQ0LDE0ICs1MzcsMTQgQEAgYm9vbCBOb2RlSW1wbDo6ZGlzcGF0Y2hHZW5lcmlj
RXZlbnQoIEV2ZQogICAgIAogICAgIC8vIEJlZm9yZSB3ZSBiZWdpbiBkaXNwYXRjaGluZyBldmVu
dHMsIGdpdmUgdGhlIHRhcmdldCBub2RlIGEgY2hhbmNlIHRvIGRvIHNvbWUgd29yayBwcmlvcgog
ICAgIC8vIHRvIHRoZSBET00gZXZlbnQgaGFuZGxlcnMgZ2V0dGluZyBhIGNyYWNrLgotICAgIHZv
aWQqIGRhdGEgPSBwcmVEaXNwYXRjaEV2ZW50SGFuZGxlcihldnQpOworICAgIHZvaWQqIGRhdGEg
PSBwcmVEaXNwYXRjaEV2ZW50SGFuZGxlcihldnQuZ2V0KCkpOwogCiAgICAgLy8gdHJpZ2dlciBh
bnkgY2FwdHVyaW5nIGV2ZW50IGhhbmRsZXJzIG9uIG91ciB3YXkgZG93bgogICAgIGV2dC0+c2V0
RXZlbnRQaGFzZShFdmVudDo6Q0FQVFVSSU5HX1BIQVNFKTsKICAgICBpdC50b0ZpcnN0KCk7CiAg
ICAgZm9yICg7IGl0LmN1cnJlbnQoKSAmJiBpdC5jdXJyZW50KCkgIT0gdGhpcyAmJiAhZXZ0LT5w
cm9wYWdhdGlvblN0b3BwZWQoKTsgKytpdCkgewogICAgICAgICBldnQtPnNldEN1cnJlbnRUYXJn
ZXQoaXQuY3VycmVudCgpKTsKLSAgICAgICAgaXQuY3VycmVudCgpLT5oYW5kbGVMb2NhbEV2ZW50
cyhldnQsdHJ1ZSk7CisgICAgICAgIGl0LmN1cnJlbnQoKS0+aGFuZGxlTG9jYWxFdmVudHMoZXZ0
LmdldCgpLCB0cnVlKTsKICAgICB9CiAKICAgICAvLyBkaXNwYXRjaCB0byB0aGUgYWN0dWFsIHRh
cmdldCBub2RlCkBAIC01NjEsNyArNTU0LDcgQEAgYm9vbCBOb2RlSW1wbDo6ZGlzcGF0Y2hHZW5l
cmljRXZlbnQoIEV2ZQogICAgICAgICBldnQtPnNldEN1cnJlbnRUYXJnZXQoaXQuY3VycmVudCgp
KTsKIAogICAgICAgICBpZiAoIWV2dC0+cHJvcGFnYXRpb25TdG9wcGVkKCkpCi0gICAgICAgICAg
ICBpdC5jdXJyZW50KCktPmhhbmRsZUxvY2FsRXZlbnRzKGV2dCxmYWxzZSk7CisgICAgICAgICAg
ICBpdC5jdXJyZW50KCktPmhhbmRsZUxvY2FsRXZlbnRzKGV2dC5nZXQoKSwgZmFsc2UpOwogICAg
IH0KICAgICAtLWl0OwogCkBAIC01ODEsNyArNTc0LDcgQEAgYm9vbCBOb2RlSW1wbDo6ZGlzcGF0
Y2hHZW5lcmljRXZlbnQoIEV2ZQogICAgICAgICBldnQtPnNldEV2ZW50UGhhc2UoRXZlbnQ6OkJV
QkJMSU5HX1BIQVNFKTsKICAgICAgICAgZm9yICg7IGl0LmN1cnJlbnQoKSAmJiAhZXZ0LT5wcm9w
YWdhdGlvblN0b3BwZWQoKSAmJiAhZXZ0LT5nZXRDYW5jZWxCdWJibGUoKTsgLS1pdCkgewogICAg
ICAgICAgICAgZXZ0LT5zZXRDdXJyZW50VGFyZ2V0KGl0LmN1cnJlbnQoKSk7Ci0gICAgICAgICAg
ICBpdC5jdXJyZW50KCktPmhhbmRsZUxvY2FsRXZlbnRzKGV2dCxmYWxzZSk7CisgICAgICAgICAg
ICBpdC5jdXJyZW50KCktPmhhbmRsZUxvY2FsRXZlbnRzKGV2dC5nZXQoKSwgZmFsc2UpOwogICAg
ICAgICB9CiAgICAgfQogCkBAIC01OTEsMTQgKzU4NCwxNCBAQCBib29sIE5vZGVJbXBsOjpkaXNw
YXRjaEdlbmVyaWNFdmVudCggRXZlCiAKIAogICAgIC8vIE5vdyBjYWxsIHRoZSBwb3N0IGRpc3Bh
dGNoLgotICAgIHBvc3REaXNwYXRjaEV2ZW50SGFuZGxlcihldnQsIGRhdGEpOworICAgIHBvc3RE
aXNwYXRjaEV2ZW50SGFuZGxlcihldnQuZ2V0KCksIGRhdGEpOwogICAgIAogICAgIGlmIChldnQt
PmJ1YmJsZXMoKSkgewogICAgICAgICAvLyBub3cgd2UgY2FsbCBhbGwgZGVmYXVsdCBldmVudCBo
YW5kbGVycyAodGhpcyBpcyBub3QgcGFydCBvZiBET00gLSBpdCBpcyBpbnRlcm5hbCB0byBraHRt
bCkKIAogICAgICAgICBpdC50b0xhc3QoKTsKICAgICAgICAgZm9yICg7IGl0LmN1cnJlbnQoKSAm
JiAhZXZ0LT5kZWZhdWx0UHJldmVudGVkKCkgJiYgIWV2dC0+ZGVmYXVsdEhhbmRsZWQoKTsgLS1p
dCkKLSAgICAgICAgICAgIGl0LmN1cnJlbnQoKS0+ZGVmYXVsdEV2ZW50SGFuZGxlcihldnQpOwor
ICAgICAgICAgICAgaXQuY3VycmVudCgpLT5kZWZhdWx0RXZlbnRIYW5kbGVyKGV2dC5nZXQoKSk7
CiAgICAgfQogICAgIAogICAgIC8vIGRlcmVmIGFsbCBub2RlcyBpbiBjaGFpbgpAQCAtNjA4LDEx
ICs2MDEsNyBAQCBib29sIE5vZGVJbXBsOjpkaXNwYXRjaEdlbmVyaWNFdmVudCggRXZlCiAKICAg
ICBEb2N1bWVudEltcGw6OnVwZGF0ZURvY3VtZW50c1JlbmRlcmluZygpOwogCi0gICAgYm9vbCBk
ZWZhdWx0UHJldmVudGVkID0gZXZ0LT5kZWZhdWx0UHJldmVudGVkKCk7Ci0KLSAgICBldnQtPmRl
cmVmKCk7Ci0KLSAgICByZXR1cm4gIWRlZmF1bHRQcmV2ZW50ZWQ7IC8vICMjIyB3aGF0IGlmIGRl
ZmF1bHRQcmV2ZW50ZWQgd2FzIGNhbGxlZCBiZWZvcmUgZGlzcGF0Y2hFdmVudD8KKyAgICByZXR1
cm4gIWV2dC0+ZGVmYXVsdFByZXZlbnRlZCgpOyAvLyAjIyMgd2hhdCBpZiBkZWZhdWx0UHJldmVu
dGVkIHdhcyBjYWxsZWQgYmVmb3JlIGRpc3BhdGNoRXZlbnQ/CiB9CiAKIGJvb2wgTm9kZUltcGw6
OmRpc3BhdGNoSFRNTEV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyAmZXZlbnRUeXBlLCBib29sIGNh
bkJ1YmJsZUFyZywgYm9vbCBjYW5jZWxhYmxlQXJnKQpAQCAtNzQ3LDMzICs3MzYsMzAgQEAgYm9v
bCBOb2RlSW1wbDo6ZGlzcGF0Y2hNb3VzZUV2ZW50KGNvbnN0IAogCiAgICAgYm9vbCBzd2FsbG93
RXZlbnQgPSBmYWxzZTsKIAotICAgIEV2ZW50SW1wbCAqbWUgPSBuZXcgTW91c2VFdmVudEltcGwo
ZXZlbnRUeXBlLHRydWUsY2FuY2VsYWJsZSxnZXREb2N1bWVudCgpLT5kZWZhdWx0VmlldygpLAor
ICAgIFJlZlB0cjxFdmVudEltcGw+IG1lID0gbmV3IE1vdXNlRXZlbnRJbXBsKGV2ZW50VHlwZSx0
cnVlLGNhbmNlbGFibGUsZ2V0RG9jdW1lbnQoKS0+ZGVmYXVsdFZpZXcoKSwKICAgICAgICAgICAg
ICAgICAgICBkZXRhaWwsc2NyZWVuWCxzY3JlZW5ZLGNsaWVudFgsY2xpZW50WSxjdHJsS2V5LGFs
dEtleSxzaGlmdEtleSxtZXRhS2V5LAogICAgICAgICAgICAgICAgICAgIGJ1dHRvbiwgMCwgMCwg
aXNTaW11bGF0ZWQpOwotICAgIG1lLT5yZWYoKTsKKyAgICAKICAgICBkaXNwYXRjaEV2ZW50KG1l
LCBleGNlcHRpb25jb2RlLCB0cnVlKTsKICAgICBib29sIGRlZmF1bHRIYW5kbGVkID0gbWUtPmRl
ZmF1bHRIYW5kbGVkKCk7CiAgICAgYm9vbCBkZWZhdWx0UHJldmVudGVkID0gbWUtPmRlZmF1bHRQ
cmV2ZW50ZWQoKTsKICAgICBpZiAoZGVmYXVsdEhhbmRsZWQgfHwgZGVmYXVsdFByZXZlbnRlZCkK
ICAgICAgICAgc3dhbGxvd0V2ZW50ID0gdHJ1ZTsKLSAgICBtZS0+ZGVyZWYoKTsKIAogICAgIC8v
IFNwZWNpYWwgY2FzZTogSWYgaXQncyBhIGRvdWJsZSBjbGljayBldmVudCwgd2UgYWxzbyBzZW5k
IHRoZSBLSFRNTF9EQkxDTElDSyBldmVudC4gVGhpcyBpcyBub3QgcGFydAogICAgIC8vIG9mIHRo
ZSBET00gc3BlY3MsIGJ1dCBpcyB1c2VkIGZvciBjb21wYXRpYmlsaXR5IHdpdGggdGhlIG9uZGJs
Y2xpY2s9IiIgYXR0cmlidXRlLiAgVGhpcyBpcyB0cmVhdGVkCiAgICAgLy8gYXMgYSBzZXBhcmF0
ZSBldmVudCBpbiBvdGhlciBET00tY29tcGxpYW50IGJyb3dzZXJzIGxpa2UgRmlyZWZveCwgYW5k
IHNvIHdlIGRvIHRoZSBzYW1lLgogICAgIGlmIChldmVudFR5cGUgPT0gY2xpY2tFdmVudCAmJiBk
ZXRhaWwgPT0gMikgewogICAgICAgICBtZSA9IG5ldyBNb3VzZUV2ZW50SW1wbChraHRtbERibGNs
aWNrRXZlbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUsY2FuY2VsYWJs
ZSxnZXREb2N1bWVudCgpLT5kZWZhdWx0VmlldygpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkZXRhaWwsc2NyZWVuWCxzY3JlZW5ZLGNsaWVudFgsY2xpZW50WSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY3RybEtleSxhbHRLZXksc2hpZnRLZXksbWV0YUtleSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uLDAsIDAsIGlzU2ltdWxhdGVk
KTsKLSAgICAgICAgbWUtPnJlZigpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
cnVlLCBjYW5jZWxhYmxlLGdldERvY3VtZW50KCktPmRlZmF1bHRWaWV3KCksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRldGFpbCwgc2NyZWVuWCwgc2NyZWVuWSwgY2xpZW50WCwg
Y2xpZW50WSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3RybEtleSwgYWx0S2V5
LCBzaGlmdEtleSwgbWV0YUtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnV0
dG9uLCAwLCAwLCBpc1NpbXVsYXRlZCk7CiAgICAgICAgIGlmIChkZWZhdWx0SGFuZGxlZCkKICAg
ICAgICAgICAgIG1lLT5zZXREZWZhdWx0SGFuZGxlZCgpOwogICAgICAgICBkaXNwYXRjaEV2ZW50
KG1lLGV4Y2VwdGlvbmNvZGUsdHJ1ZSk7CiAgICAgICAgIGlmIChtZS0+ZGVmYXVsdEhhbmRsZWQo
KSB8fCBtZS0+ZGVmYXVsdFByZXZlbnRlZCgpKQogICAgICAgICAgICAgc3dhbGxvd0V2ZW50ID0g
dHJ1ZTsKLSAgICAgICAgbWUtPmRlcmVmKCk7CiAgICAgfQogCiAgICAgLy8gQWxzbyBzZW5kIGEg
RE9NQWN0aXZhdGUgZXZlbnQsIHdoaWNoIGNhdXNlcyB0aGluZ3MgbGlrZSBmb3JtIHN1Ym1pc3Np
b25zIHRvIG9jY3VyLgpAQCAtODcxLDIwICs4NTcsMTYgQEAgYm9vbCBOb2RlSW1wbDo6ZGlzcGF0
Y2hLZXlFdmVudChRS2V5RXZlbgogewogICAgIGFzc2VydCghZXZlbnREaXNwYXRjaEZvcmJpZGRl
bigpKTsKICAgICBpbnQgZXhjZXB0aW9uY29kZSA9IDA7Ci0gICAgLy9rZERlYnVnKDYwMTApIDw8
ICJET006Ok5vZGVJbXBsOiBkaXNwYXRjaGluZyBrZXlib2FyZCBldmVudCIgPDwgZW5kbDsKLSAg
ICBLZXlib2FyZEV2ZW50SW1wbCAqa2V5Ym9hcmRFdmVudEltcGwgPSBuZXcgS2V5Ym9hcmRFdmVu
dEltcGwoa2V5LCBnZXREb2N1bWVudCgpLT5kZWZhdWx0VmlldygpKTsKLSAgICBrZXlib2FyZEV2
ZW50SW1wbC0+cmVmKCk7CisgICAgUmVmUHRyPEtleWJvYXJkRXZlbnRJbXBsPiBrZXlib2FyZEV2
ZW50SW1wbCA9IG5ldyBLZXlib2FyZEV2ZW50SW1wbChrZXksIGdldERvY3VtZW50KCktPmRlZmF1
bHRWaWV3KCkpOwogICAgIGJvb2wgciA9IGRpc3BhdGNoRXZlbnQoa2V5Ym9hcmRFdmVudEltcGws
ZXhjZXB0aW9uY29kZSx0cnVlKTsKIAogICAgIC8vIHdlIHdhbnQgdG8gcmV0dXJuIGZhbHNlIGlm
IGRlZmF1bHQgaXMgcHJldmVudGVkIChhbHJlYWR5IHRha2VuIGNhcmUgb2YpCiAgICAgLy8gb3Ig
aWYgdGhlIGVsZW1lbnQgaXMgZGVmYXVsdC1oYW5kbGVkIGJ5IHRoZSBET00uIE90aGVyd2lzZSB3
ZSBsZXQgaXQganVzdAogICAgIC8vIGxldCBpdCBnZXQgaGFuZGxlZCBieSBBcHBLaXQgCiAgICAg
aWYgKGtleWJvYXJkRXZlbnRJbXBsLT5kZWZhdWx0SGFuZGxlZCgpKQotICAgICAgciA9IGZhbHNl
OwotCi0gICAga2V5Ym9hcmRFdmVudEltcGwtPmRlcmVmKCk7CisgICAgICAgIHIgPSBmYWxzZTsK
KyAgICAKICAgICByZXR1cm4gcjsKLQogfQogCiB2b2lkIE5vZGVJbXBsOjpkaXNwYXRjaFdoZWVs
RXZlbnQoUVdoZWVsRXZlbnQgKmUpCkBAIC0xMzgzLDIzICsxMzY1LDIyIEBAIE5vZGVJbXBsICpO
b2RlSW1wbDo6bmV4dExlYWZOb2RlKCkgY29uc3QKIAogdm9pZCBOb2RlSW1wbDo6Y3JlYXRlUmVu
ZGVyZXJJZk5lZWRlZCgpCiB7Ci0KICAgICBpZiAoIWdldERvY3VtZW50KCktPnNob3VsZENyZWF0
ZVJlbmRlcmVycygpKQogICAgICAgICByZXR1cm47Ci0gICAgICAgIAorICAgIAogICAgIGFzc2Vy
dCghYXR0YWNoZWQoKSk7CiAgICAgYXNzZXJ0KCFyZW5kZXJlcigpKTsKICAgICAKICAgICBOb2Rl
SW1wbCAqcGFyZW50ID0gcGFyZW50Tm9kZSgpOyAgICAKICAgICBhc3NlcnQocGFyZW50KTsKLSAg
ICAgICAgCisgICAgCiAgICAgUmVuZGVyT2JqZWN0ICpwYXJlbnRSZW5kZXJlciA9IHBhcmVudC0+
cmVuZGVyZXIoKTsKICAgICBpZiAocGFyZW50UmVuZGVyZXIgJiYgcGFyZW50UmVuZGVyZXItPmNh
bkhhdmVDaGlsZHJlbigpCiAjaWYgU1ZHX1NVUFBPUlQKICAgICAgICAgJiYgcGFyZW50LT5jaGls
ZFNob3VsZENyZWF0ZVJlbmRlcmVyKHRoaXMpCiAjZW5kaWYKICAgICAgICAgKSB7Ci0gICAgICAg
IFJlbmRlclN0eWxlICpzdHlsZSA9IHN0eWxlRm9yUmVuZGVyZXIocGFyZW50UmVuZGVyZXIpOwor
ICAgICAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBzdHlsZUZvclJlbmRlcmVyKHBhcmVudFJlbmRl
cmVyKTsKICAgICAgICAgc3R5bGUtPnJlZigpOwogI2lmbmRlZiBLSFRNTF9OT19YQkwKICAgICAg
ICAgYm9vbCByZXNvbHZlU3R5bGUgPSBmYWxzZTsKSW5kZXg6IGtodG1sL3htbC9kb21fZWxlbWVu
dGltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIGtodG1sL3htbC9kb21fZWxlbWVudGltcGwuY3BwCShy
ZXZpc2lvbiAxMjMzMCkKKysrIGtodG1sL3htbC9kb21fZWxlbWVudGltcGwuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMTk0LDEzICsxMTk0LDExIEBAIHZvaWQgU3R5bGVkRWxlbWVudEltcGw6OnVw
ZGF0ZVN0eWxlQXR0cmkKIAogTWFwcGVkQXR0cmlidXRlSW1wbDo6fk1hcHBlZEF0dHJpYnV0ZUlt
cGwoKQogewotICAgIGlmIChtX3N0eWxlRGVjbCkKLSAgICAgICAgbV9zdHlsZURlY2wtPmRlcmVm
KCk7CiB9CiAKIEF0dHJpYnV0ZUltcGwqIE1hcHBlZEF0dHJpYnV0ZUltcGw6OmNsb25lKGJvb2wg
cHJlc2VydmVEZWNsKSBjb25zdAogewotICAgIHJldHVybiBuZXcgTWFwcGVkQXR0cmlidXRlSW1w
bChtX25hbWUsIG1fdmFsdWUsIHByZXNlcnZlRGVjbCA/IG1fc3R5bGVEZWNsIDogMCk7CisgICAg
cmV0dXJuIG5ldyBNYXBwZWRBdHRyaWJ1dGVJbXBsKG1fbmFtZSwgbV92YWx1ZSwgcHJlc2VydmVE
ZWNsID8gbV9zdHlsZURlY2wuZ2V0KCkgOiAwKTsKIH0KIAogTmFtZWRNYXBwZWRBdHRyTWFwSW1w
bDo6TmFtZWRNYXBwZWRBdHRyTWFwSW1wbChFbGVtZW50SW1wbCAqZSkKQEAgLTEyODUsNyArMTI4
Myw2IEBAIHZvaWQgTmFtZWRNYXBwZWRBdHRyTWFwSW1wbDo6cGFyc2VDbGFzc0EKIFN0eWxlZEVs
ZW1lbnRJbXBsOjpTdHlsZWRFbGVtZW50SW1wbChjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBE
b2N1bWVudEltcGwgKmRvYykKICAgICA6IEVsZW1lbnRJbXBsKG5hbWUsIGRvYykKIHsKLSAgICBt
X2lubGluZVN0eWxlRGVjbCA9IDA7CiAgICAgbV9pc1N0eWxlQXR0cmlidXRlVmFsaWQgPSB0cnVl
OwogICAgIG1fc3luY2hyb25pemluZ1N0eWxlQXR0cmlidXRlID0gZmFsc2U7CiB9CkBAIC0xMzAz
LDcgKzEzMDAsNiBAQCBBdHRyaWJ1dGVJbXBsKiBTdHlsZWRFbGVtZW50SW1wbDo6Y3JlYXRlCiB2
b2lkIFN0eWxlZEVsZW1lbnRJbXBsOjpjcmVhdGVJbmxpbmVTdHlsZURlY2woKQogewogICAgIG1f
aW5saW5lU3R5bGVEZWNsID0gbmV3IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uSW1wbDsKLSAg
ICBtX2lubGluZVN0eWxlRGVjbC0+cmVmKCk7CiAgICAgbV9pbmxpbmVTdHlsZURlY2wtPnNldFBh
cmVudChnZXREb2N1bWVudCgpLT5lbGVtZW50U2hlZXQoKSk7CiAgICAgbV9pbmxpbmVTdHlsZURl
Y2wtPnNldE5vZGUodGhpcyk7CiAgICAgbV9pbmxpbmVTdHlsZURlY2wtPnNldFN0cmljdFBhcnNp
bmcoIWdldERvY3VtZW50KCktPmluQ29tcGF0TW9kZSgpKTsKQEAgLTEzMTQsNyArMTMxMCw2IEBA
IHZvaWQgU3R5bGVkRWxlbWVudEltcGw6OmRlc3Ryb3lJbmxpbmVTdHkKICAgICBpZiAobV9pbmxp
bmVTdHlsZURlY2wpIHsKICAgICAgICAgbV9pbmxpbmVTdHlsZURlY2wtPnNldE5vZGUoMCk7CiAg
ICAgICAgIG1faW5saW5lU3R5bGVEZWNsLT5zZXRQYXJlbnQoMCk7Ci0gICAgICAgIG1faW5saW5l
U3R5bGVEZWNsLT5kZXJlZigpOwogICAgICAgICBtX2lubGluZVN0eWxlRGVjbCA9IDA7CiAgICAg
fQogfQpAQCAtMTQxNCw3ICsxNDA5LDcgQEAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb25JbXBs
KiBTdHlsZWRFbAogewogICAgIGlmICghbV9pbmxpbmVTdHlsZURlY2wpCiAgICAgICAgIGNyZWF0
ZUlubGluZVN0eWxlRGVjbCgpOwotICAgIHJldHVybiBtX2lubGluZVN0eWxlRGVjbDsKKyAgICBy
ZXR1cm4gbV9pbmxpbmVTdHlsZURlY2wuZ2V0KCk7CiB9CiAKIENTU1N0eWxlRGVjbGFyYXRpb25J
bXBsKiBTdHlsZWRFbGVtZW50SW1wbDo6c3R5bGUoKQpJbmRleDoga2h0bWwvaHRtbC9odG1sX2hl
YWRpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBraHRtbC9odG1sL2h0bWxfaGVhZGltcGwuY3BwCShy
ZXZpc2lvbiAxMjMzMCkKKysrIGtodG1sL2h0bWwvaHRtbF9oZWFkaW1wbC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTExNyw3ICsxMTcsNiBAQCB2b2lkIEhUTUxCYXNlRWxlbWVudEltcGw6OnNldFRh
cmdldChjb25zCiBIVE1MTGlua0VsZW1lbnRJbXBsOjpIVE1MTGlua0VsZW1lbnRJbXBsKERvY3Vt
ZW50SW1wbCAqZG9jKQogICAgIDogSFRNTEVsZW1lbnRJbXBsKGxpbmtUYWcsIGRvYykKIHsKLSAg
ICBtX3NoZWV0ID0gMDsKICAgICBtX2xvYWRpbmcgPSBmYWxzZTsKICAgICBtX2NhY2hlZFNoZWV0
ID0gMDsKICAgICBtX2lzU3R5bGVTaGVldCA9IG1faXNJY29uID0gbV9hbHRlcm5hdGUgPSBmYWxz
ZTsKQEAgLTEyNiw4ICsxMjUsOCBAQCBIVE1MTGlua0VsZW1lbnRJbXBsOjpIVE1MTGlua0VsZW1l
bnRJbXBsCiAKIEhUTUxMaW5rRWxlbWVudEltcGw6On5IVE1MTGlua0VsZW1lbnRJbXBsKCkKIHsK
LSAgICBpZihtX3NoZWV0KSBtX3NoZWV0LT5kZXJlZigpOwotICAgIGlmKG1fY2FjaGVkU2hlZXQp
IG1fY2FjaGVkU2hlZXQtPmRlcmVmKHRoaXMpOworICAgIGlmIChtX2NhY2hlZFNoZWV0KQorICAg
ICAgICBtX2NhY2hlZFNoZWV0LT5kZXJlZih0aGlzKTsKIH0KIAogdm9pZCBIVE1MTGlua0VsZW1l
bnRJbXBsOjpzZXREaXNhYmxlZFN0YXRlKGJvb2wgX2Rpc2FibGVkKQpAQCAtMjU0LDcgKzI1Myw2
IEBAIHZvaWQgSFRNTExpbmtFbGVtZW50SW1wbDo6cHJvY2VzcygpCiAgICAgfQogICAgIGVsc2Ug
aWYgKG1fc2hlZXQpIHsKICAgICAgICAgLy8gd2Ugbm8gbG9uZ2VyIGNvbnRhaW4gYSBzdHlsZXNo
ZWV0LCBlLmcuIHBlcmhhcHMgcmVsIG9yIHR5cGUgd2FzIGNoYW5nZWQKLSAgICAgICAgbV9zaGVl
dC0+ZGVyZWYoKTsKICAgICAgICAgbV9zaGVldCA9IDA7CiAgICAgICAgIGdldERvY3VtZW50KCkt
PnVwZGF0ZVN0eWxlU2VsZWN0b3IoKTsKICAgICB9CkBAIC0yNzQsMTMgKzI3MiwxMCBAQCB2b2lk
IEhUTUxMaW5rRWxlbWVudEltcGw6OnJlbW92ZWRGcm9tRG9jCiAKIHZvaWQgSFRNTExpbmtFbGVt
ZW50SW1wbDo6c2V0U3R5bGVTaGVldChjb25zdCBET006OkRPTVN0cmluZyAmdXJsLCBjb25zdCBE
T006OkRPTVN0cmluZyAmc2hlZXRTdHIpCiB7Ci0gICAgaWYgKG1fc2hlZXQpCi0gICAgICAgIG1f
c2hlZXQtPmRlcmVmKCk7CiAgICAgbV9zaGVldCA9IG5ldyBDU1NTdHlsZVNoZWV0SW1wbCh0aGlz
LCB1cmwpOwotICAgIG1fc2hlZXQtPnJlZigpOwotICAgIG1fc2hlZXQtPnBhcnNlU3RyaW5nKCBz
aGVldFN0ciwgIWdldERvY3VtZW50KCktPmluQ29tcGF0TW9kZSgpICk7CisgICAgbV9zaGVldC0+
cGFyc2VTdHJpbmcoc2hlZXRTdHIsICFnZXREb2N1bWVudCgpLT5pbkNvbXBhdE1vZGUoKSk7CiAK
LSAgICBNZWRpYUxpc3RJbXBsICptZWRpYSA9IG5ldyBNZWRpYUxpc3RJbXBsKCBtX3NoZWV0LCBt
X21lZGlhICk7CisgICAgTWVkaWFMaXN0SW1wbCAqbWVkaWEgPSBuZXcgTWVkaWFMaXN0SW1wbCht
X3NoZWV0LmdldCgpLCBtX21lZGlhKTsKICAgICBtX3NoZWV0LT5zZXRNZWRpYSggbWVkaWEgKTsK
IAogICAgIG1fbG9hZGluZyA9IGZhbHNlOwpAQCAtMjkyLDkgKzI4NywxMSBAQCB2b2lkIEhUTUxM
aW5rRWxlbWVudEltcGw6OnNldFN0eWxlU2hlZXQoCiAKIGJvb2wgSFRNTExpbmtFbGVtZW50SW1w
bDo6aXNMb2FkaW5nKCkgY29uc3QKIHsKLSAgICBpZihtX2xvYWRpbmcpIHJldHVybiB0cnVlOwot
ICAgIGlmKCFtX3NoZWV0KSByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PENT
U1N0eWxlU2hlZXRJbXBsICo+KG1fc2hlZXQpLT5pc0xvYWRpbmcoKTsKKyAgICBpZiAobV9sb2Fk
aW5nKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoIW1fc2hlZXQpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q1NTU3R5bGVTaGVldEltcGwgKj4o
bV9zaGVldC5nZXQoKSktPmlzTG9hZGluZygpOwogfQogCiB2b2lkIEhUTUxMaW5rRWxlbWVudElt
cGw6OnNoZWV0TG9hZGVkKCkKQEAgLTcwNywxMyArNzA0LDExIEBAIHZvaWQgSFRNTFNjcmlwdEVs
ZW1lbnRJbXBsOjpzZXRUeXBlKGNvbnMKIAogSFRNTFN0eWxlRWxlbWVudEltcGw6OkhUTUxTdHls
ZUVsZW1lbnRJbXBsKERvY3VtZW50SW1wbCAqZG9jKSA6IEhUTUxFbGVtZW50SW1wbChzdHlsZVRh
ZywgZG9jKQogewotICAgIG1fc2hlZXQgPSAwOwogICAgIG1fbG9hZGluZyA9IGZhbHNlOwogfQog
CiBIVE1MU3R5bGVFbGVtZW50SW1wbDo6fkhUTUxTdHlsZUVsZW1lbnRJbXBsKCkKIHsKLSAgICBp
ZihtX3NoZWV0KSBtX3NoZWV0LT5kZXJlZigpOwogfQogCiAvLyBvdGhlciBzdHVmZi4uLgpAQCAt
NzUzLDkgKzc0OCw4IEBAIHZvaWQgSFRNTFN0eWxlRWxlbWVudEltcGw6OmNoaWxkcmVuQ2hhbmcK
ICAgICB9CiAKICAgICBpZiAobV9zaGVldCkgewotICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8Q1NT
U3R5bGVTaGVldEltcGwgKj4obV9zaGVldCktPmlzTG9hZGluZygpKQorICAgICAgICBpZiAoc3Rh
dGljX2Nhc3Q8Q1NTU3R5bGVTaGVldEltcGwgKj4obV9zaGVldC5nZXQoKSktPmlzTG9hZGluZygp
KQogICAgICAgICAgICAgZ2V0RG9jdW1lbnQoKS0+c3R5bGVzaGVldExvYWRlZCgpOyAvLyBSZW1v
dmUgb3Vyc2VsdmVzIGZyb20gdGhlIHNoZWV0IGxpc3QuCi0gICAgICAgIG1fc2hlZXQtPmRlcmVm
KCk7CiAgICAgICAgIG1fc2hlZXQgPSAwOwogICAgIH0KIApAQCAtNzY1LDEwICs3NTksOSBAQCB2
b2lkIEhUTUxTdHlsZUVsZW1lbnRJbXBsOjpjaGlsZHJlbkNoYW5nCiAgICAgICAgIGdldERvY3Vt
ZW50KCktPmFkZFBlbmRpbmdTaGVldCgpOwogICAgICAgICBtX2xvYWRpbmcgPSB0cnVlOwogICAg
ICAgICBtX3NoZWV0ID0gbmV3IENTU1N0eWxlU2hlZXRJbXBsKHRoaXMpOwotICAgICAgICBtX3No
ZWV0LT5yZWYoKTsKLSAgICAgICAgbV9zaGVldC0+cGFyc2VTdHJpbmcoIHRleHQsICFnZXREb2N1
bWVudCgpLT5pbkNvbXBhdE1vZGUoKSApOwotICAgICAgICBNZWRpYUxpc3RJbXBsICptZWRpYSA9
IG5ldyBNZWRpYUxpc3RJbXBsKCBtX3NoZWV0LCBtX21lZGlhICk7Ci0gICAgICAgIG1fc2hlZXQt
PnNldE1lZGlhKCBtZWRpYSApOworICAgICAgICBtX3NoZWV0LT5wYXJzZVN0cmluZyh0ZXh0LCAh
Z2V0RG9jdW1lbnQoKS0+aW5Db21wYXRNb2RlKCkpOworICAgICAgICBNZWRpYUxpc3RJbXBsICpt
ZWRpYSA9IG5ldyBNZWRpYUxpc3RJbXBsKG1fc2hlZXQuZ2V0KCksIG1fbWVkaWEpOworICAgICAg
ICBtX3NoZWV0LT5zZXRNZWRpYShtZWRpYSk7CiAgICAgICAgIG1fbG9hZGluZyA9IGZhbHNlOwog
ICAgIH0KIApAQCAtNzc4LDkgKzc3MSwxMSBAQCB2b2lkIEhUTUxTdHlsZUVsZW1lbnRJbXBsOjpj
aGlsZHJlbkNoYW5nCiAKIGJvb2wgSFRNTFN0eWxlRWxlbWVudEltcGw6OmlzTG9hZGluZygpIGNv
bnN0CiB7Ci0gICAgaWYgKG1fbG9hZGluZykgcmV0dXJuIHRydWU7Ci0gICAgaWYoIW1fc2hlZXQp
IHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q1NTU3R5bGVTaGVldEltcGwg
Kj4obV9zaGVldCktPmlzTG9hZGluZygpOworICAgIGlmIChtX2xvYWRpbmcpCisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIGlmICghbV9zaGVldCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IHJldHVybiBzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0SW1wbCAqPihtX3NoZWV0LmdldCgpKS0+
aXNMb2FkaW5nKCk7CiB9CiAKIHZvaWQgSFRNTFN0eWxlRWxlbWVudEltcGw6OnNoZWV0TG9hZGVk
KCkKSW5kZXg6IGtodG1sL2h0bWwvaHRtbF9iYXNlaW1wbC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2h0
bWwvaHRtbC9odG1sX2Jhc2VpbXBsLmNwcAkocmV2aXNpb24gMTIzMzApCisrKyBraHRtbC9odG1s
L2h0bWxfYmFzZWltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Miw3ICs1Miw3IEBAIHVzaW5n
IG5hbWVzcGFjZSBFdmVudE5hbWVzOwogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAogSFRN
TEJvZHlFbGVtZW50SW1wbDo6SFRNTEJvZHlFbGVtZW50SW1wbChEb2N1bWVudEltcGwgKmRvYykK
LSAgICA6IEhUTUxFbGVtZW50SW1wbChib2R5VGFnLCBkb2MpLCBtX2xpbmtEZWNsKDApCisgICAg
OiBIVE1MRWxlbWVudEltcGwoYm9keVRhZywgZG9jKQogewogfQogCkBAIC02MSwxNCArNjEsMTIg
QEAgSFRNTEJvZHlFbGVtZW50SW1wbDo6fkhUTUxCb2R5RWxlbWVudEltcAogICAgIGlmIChtX2xp
bmtEZWNsKSB7CiAgICAgICAgIG1fbGlua0RlY2wtPnNldE5vZGUoMCk7CiAgICAgICAgIG1fbGlu
a0RlY2wtPnNldFBhcmVudCgwKTsKLSAgICAgICAgbV9saW5rRGVjbC0+ZGVyZWYoKTsKICAgICB9
CiB9CiAKIHZvaWQgSFRNTEJvZHlFbGVtZW50SW1wbDo6Y3JlYXRlTGlua0RlY2woKQogewogICAg
IG1fbGlua0RlY2wgPSBuZXcgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb25JbXBsOwotICAgIG1f
bGlua0RlY2wtPnJlZigpOwogICAgIG1fbGlua0RlY2wtPnNldFBhcmVudChnZXREb2N1bWVudCgp
LT5lbGVtZW50U2hlZXQoKSk7CiAgICAgbV9saW5rRGVjbC0+c2V0Tm9kZSh0aGlzKTsKICAgICBt
X2xpbmtEZWNsLT5zZXRTdHJpY3RQYXJzaW5nKCFnZXREb2N1bWVudCgpLT5pbkNvbXBhdE1vZGUo
KSk7CkBAIC0xMjksMTkgKzEyNywxNSBAQCB2b2lkIEhUTUxCb2R5RWxlbWVudEltcGw6OnBhcnNl
TWFwcGVkQXR0CiAgICAgICAgICAgICBpZiAoIW1fbGlua0RlY2wpCiAgICAgICAgICAgICAgICAg
Y3JlYXRlTGlua0RlY2woKTsKICAgICAgICAgICAgIG1fbGlua0RlY2wtPnNldFByb3BlcnR5KENT
U19QUk9QX0NPTE9SLCBhdHRyLT52YWx1ZSgpLCBmYWxzZSwgZmFsc2UpOwotICAgICAgICAgICAg
Q1NTVmFsdWVJbXBsKiB2YWwgPSBtX2xpbmtEZWNsLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU19Q
Uk9QX0NPTE9SKTsKLSAgICAgICAgICAgIGlmICh2YWwpIHsKLSAgICAgICAgICAgICAgICB2YWwt
PnJlZigpOwotICAgICAgICAgICAgICAgIGlmICh2YWwtPmlzUHJpbWl0aXZlVmFsdWUoKSkgewot
ICAgICAgICAgICAgICAgICAgICBRQ29sb3IgY29sID0gZ2V0RG9jdW1lbnQoKS0+c3R5bGVTZWxl
Y3RvcigpLT5nZXRDb2xvckZyb21QcmltaXRpdmVWYWx1ZShzdGF0aWNfY2FzdDxDU1NQcmltaXRp
dmVWYWx1ZUltcGwqPih2YWwpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGF0dHItPm5hbWUo
KSA9PSBsaW5rQXR0cikKLSAgICAgICAgICAgICAgICAgICAgICAgIGdldERvY3VtZW50KCktPnNl
dExpbmtDb2xvcihjb2wpOwotICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChhdHRyLT5uYW1l
KCkgPT0gdmxpbmtBdHRyKQotICAgICAgICAgICAgICAgICAgICAgICAgZ2V0RG9jdW1lbnQoKS0+
c2V0VmlzaXRlZExpbmtDb2xvcihjb2wpOwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgICAgICAgICBnZXREb2N1bWVudCgpLT5zZXRBY3RpdmVMaW5rQ29sb3IoY29s
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgdmFsLT5kZXJlZigpOworICAg
ICAgICAgICAgUmVmUHRyPENTU1ZhbHVlSW1wbD4gdmFsID0gbV9saW5rRGVjbC0+Z2V0UHJvcGVy
dHlDU1NWYWx1ZShDU1NfUFJPUF9DT0xPUik7CisgICAgICAgICAgICBpZiAodmFsICYmIHZhbC0+
aXNQcmltaXRpdmVWYWx1ZSgpKSB7CisgICAgICAgICAgICAgICAgUUNvbG9yIGNvbCA9IGdldERv
Y3VtZW50KCktPnN0eWxlU2VsZWN0b3IoKS0+Z2V0Q29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoc3Rh
dGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWVJbXBsKj4odmFsLmdldCgpKSk7CisgICAgICAgICAg
ICAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBsaW5rQXR0cikKKyAgICAgICAgICAgICAgICAgICAg
Z2V0RG9jdW1lbnQoKS0+c2V0TGlua0NvbG9yKGNvbCk7CisgICAgICAgICAgICAgICAgZWxzZSBp
ZiAoYXR0ci0+bmFtZSgpID09IHZsaW5rQXR0cikKKyAgICAgICAgICAgICAgICAgICAgZ2V0RG9j
dW1lbnQoKS0+c2V0VmlzaXRlZExpbmtDb2xvcihjb2wpOworICAgICAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICAgICAgZ2V0RG9jdW1lbnQoKS0+c2V0QWN0aXZlTGlua0NvbG9yKGNv
bCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgCkluZGV4OiBraHRtbC9odG1s
L2h0bWxfYmFzZWltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBraHRtbC9odG1sL2h0bWxfYmFzZWltcGwu
aAkocmV2aXNpb24gMTIzMzApCisrKyBraHRtbC9odG1sL2h0bWxfYmFzZWltcGwuaAkod29ya2lu
ZyBjb3B5KQpAQCAtODAsNyArODAsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRWTGluayhjb25z
dCBET01TdHJpbmcgJik7CiAKIHByb3RlY3RlZDoKLSAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJh
dGlvbkltcGwqIG1fbGlua0RlY2w7CisgICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0
aW9uSW1wbD4gbV9saW5rRGVjbDsKIH07CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KSW5kZXg6IGto
dG1sL2h0bWwvSFRNTEVsZW1lbnRJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBraHRtbC9odG1sL0hU
TUxFbGVtZW50SW1wbC5jcHAJKHJldmlzaW9uIDEyMzMwKQorKysga2h0bWwvaHRtbC9IVE1MRWxl
bWVudEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjgsMzEgKzI2OCwxOSBAQCBEb2N1bWVu
dEZyYWdtZW50SW1wbCAqSFRNTEVsZW1lbnRJbXBsOjpjCiAgICAgLy8gY2hpbGQgb2YgYW4gZWxl
bWVudC4KIAogICAgIE5vZGVJbXBsICpuZXh0Tm9kZTsKLSAgICBmb3IgKE5vZGVJbXBsICpub2Rl
ID0gZnJhZ21lbnQtPmZpcnN0Q2hpbGQoKTsgbm9kZSAhPSBOVUxMOyBub2RlID0gbmV4dE5vZGUp
IHsKKyAgICBmb3IgKFJlZlB0cjxOb2RlSW1wbD4gbm9kZSA9IGZyYWdtZW50LT5maXJzdENoaWxk
KCk7IG5vZGU7IG5vZGUgPSBuZXh0Tm9kZSkgewogICAgICAgICBuZXh0Tm9kZSA9IG5vZGUtPm5l
eHRTaWJsaW5nKCk7Ci0gICAgICAgIG5vZGUtPnJlZigpOwogICAgICAgICBpZiAobm9kZS0+aGFz
VGFnTmFtZShodG1sVGFnKSB8fCBub2RlLT5oYXNUYWdOYW1lKGJvZHlUYWcpKSB7CiAgICAgICAg
ICAgICBOb2RlSW1wbCAqZmlyc3RDaGlsZCA9IG5vZGUtPmZpcnN0Q2hpbGQoKTsKLSAgICAgICAg
ICAgIGlmIChmaXJzdENoaWxkICE9IE5VTEwpIHsKKyAgICAgICAgICAgIGlmIChmaXJzdENoaWxk
KQogICAgICAgICAgICAgICAgIG5leHROb2RlID0gZmlyc3RDaGlsZDsKKyAgICAgICAgICAgIGZv
ciAoUmVmUHRyPE5vZGVJbXBsPiBjaGlsZCA9IGZpcnN0Q2hpbGQ7IGNoaWxkOyBjaGlsZCA9IGNo
aWxkLT5uZXh0U2libGluZygpKSB7CisgICAgICAgICAgICAgICAgbm9kZS0+cmVtb3ZlQ2hpbGQo
Y2hpbGQuZ2V0KCksIGlnbm9yZWRFeGNlcHRpb25Db2RlKTsKKyAgICAgICAgICAgICAgICBmcmFn
bWVudC0+aW5zZXJ0QmVmb3JlKGNoaWxkLCBub2RlLmdldCgpLCBpZ25vcmVkRXhjZXB0aW9uQ29k
ZSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBOb2RlSW1wbCAqbmV4dENoaWxkOwotICAg
ICAgICAgICAgZm9yIChOb2RlSW1wbCAqY2hpbGQgPSBmaXJzdENoaWxkOyBjaGlsZCAhPSBOVUxM
OyBjaGlsZCA9IG5leHRDaGlsZCkgewotICAgICAgICAgICAgICAgIG5leHRDaGlsZCA9IGNoaWxk
LT5uZXh0U2libGluZygpOwotICAgICAgICAgICAgICAgIGNoaWxkLT5yZWYoKTsKLSAgICAgICAg
ICAgICAgICBub2RlLT5yZW1vdmVDaGlsZChjaGlsZCwgaWdub3JlZEV4Y2VwdGlvbkNvZGUpOwot
ICAgICAgICAgICAgICAgIGZyYWdtZW50LT5pbnNlcnRCZWZvcmUoY2hpbGQsIG5vZGUsIGlnbm9y
ZWRFeGNlcHRpb25Db2RlKTsKLSAgICAgICAgICAgICAgICBjaGlsZC0+ZGVyZWYoKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGZyYWdtZW50LT5yZW1vdmVDaGlsZChub2RlLCBpZ25vcmVk
RXhjZXB0aW9uQ29kZSk7CisgICAgICAgICAgICBmcmFnbWVudC0+cmVtb3ZlQ2hpbGQobm9kZS5n
ZXQoKSwgaWdub3JlZEV4Y2VwdGlvbkNvZGUpOwogICAgICAgICB9IGVsc2UgaWYgKG5vZGUtPmhh
c1RhZ05hbWUoaGVhZFRhZykpCi0gICAgICAgICAgICBmcmFnbWVudC0+cmVtb3ZlQ2hpbGQobm9k
ZSwgaWdub3JlZEV4Y2VwdGlvbkNvZGUpOwotCi0gICAgICAgIC8vIEltcG9ydGFudCB0byBkbyB0
aGlzIGRlcmVmIGFmdGVyIHJlbW92ZUNoaWxkLCBiZWNhdXNlIGlmIHRoZSBvbmx5IHRoaW5nCi0g
ICAgICAgIC8vIGtlZXBpbmcgYSBub2RlIGFyb3VuZCBpcyBhIHBhcmVudCB0aGF0IGlzIG5vbi0w
LCByZW1vdmVDaGlsZCB3aWxsIG5vdAotICAgICAgICAvLyBkZWxldGUgdGhlIG5vZGUuIFRoaXMg
d29ya3MgZmluZSBpbiBKYXZhU2NyaXB0IGJlY2F1c2UgdGhlcmUncyBhbHdheXMKLSAgICAgICAg
Ly8gYSByZWYgb2YgdGhlIG5vZGUsIGJ1dCBoZXJlIGluIEMrKyB3ZSBuZWVkIHRvIGRvIGl0IGV4
cGxpY2l0bHkuCi0gICAgICAgIG5vZGUtPmRlcmVmKCk7CisgICAgICAgICAgICBmcmFnbWVudC0+
cmVtb3ZlQ2hpbGQobm9kZS5nZXQoKSwgaWdub3JlZEV4Y2VwdGlvbkNvZGUpOwogICAgIH0KIAog
ICAgIC8vIFRyaWNrIHRvIGdldCB0aGUgZnJhZ21lbnQgYmFjayB0byB0aGUgZmxvYXRpbmcgc3Rh
dGUsIHdpdGggMApJbmRleDoga2h0bWwvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50SW1wbC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0ga2h0bWwvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50SW1wbC5jcHAJKHJl
dmlzaW9uIDEyMzMwKQorKysga2h0bWwvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50SW1wbC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIzMywxMCArMjMzLDggQEAgdm9pZCBIVE1MVGV4dEFyZWFFbGVt
ZW50SW1wbDo6c2V0RGVmYXVsdAogICAgIFFQdHJMaXN0SXRlcmF0b3I8Tm9kZUltcGw+IGl0KHRv
UmVtb3ZlKTsKICAgICBpbnQgZXhjZXB0aW9uY29kZSA9IDA7CiAgICAgZm9yICg7IGl0LmN1cnJl
bnQoKTsgKytpdCkgewotICAgICAgICBOb2RlSW1wbCAqbiA9IGl0LmN1cnJlbnQoKTsKLSAgICAg
ICAgbi0+cmVmKCk7Ci0gICAgICAgIHJlbW92ZUNoaWxkKG4sIGV4Y2VwdGlvbmNvZGUpOwotICAg
ICAgICBuLT5kZXJlZigpOworICAgICAgICBSZWZQdHI8Tm9kZUltcGw+IG4gPSBpdC5jdXJyZW50
KCk7CisgICAgICAgIHJlbW92ZUNoaWxkKG4uZ2V0KCksIGV4Y2VwdGlvbmNvZGUpOwogICAgIH0K
ICAgICBpbnNlcnRCZWZvcmUoZ2V0RG9jdW1lbnQoKS0+Y3JlYXRlVGV4dE5vZGUoZGVmYXVsdFZh
bHVlKSxmaXJzdENoaWxkKCksIGV4Y2VwdGlvbmNvZGUpOwogICAgIHNldFZhbHVlKGRlZmF1bHRW
YWx1ZSk7CkluZGV4OiBraHRtbC9odG1sL0hUTUxTZWxlY3RFbGVtZW50SW1wbC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0ga2h0bWwvaHRtbC9IVE1MU2VsZWN0RWxlbWVudEltcGwuY3BwCShyZXZpc2lvbiAx
MjMzMCkKKysrIGtodG1sL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnRJbXBsLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTQ4LDEwICsxNDgsOCBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50SW1wbDo6cmVt
b3ZlKCBpbnQgCiAgICAgaWYobGlzdEluZGV4IDwgMCB8fCBpbmRleCA+PSBpbnQoaXRlbXMuc2l6
ZSgpKSkKICAgICAgICAgcmV0dXJuOyAvLyAjIyMgd2hhdCBzaG91bGQgd2UgZG8gPyByZW1vdmUg
dGhlIGxhc3QgaXRlbT8KIAotICAgIE5vZGVJbXBsICppdGVtID0gaXRlbXNbbGlzdEluZGV4XTsK
LSAgICBpdGVtLT5yZWYoKTsKLSAgICByZW1vdmVDaGlsZChpdGVtLCBleGNlcHRpb25jb2RlKTsK
LSAgICBpdGVtLT5kZXJlZigpOworICAgIFJlZlB0cjxOb2RlSW1wbD4gaXRlbSA9IGl0ZW1zW2xp
c3RJbmRleF07CisgICAgcmVtb3ZlQ2hpbGQoaXRlbS5nZXQoKSwgZXhjZXB0aW9uY29kZSk7CiAg
ICAgaWYoICFleGNlcHRpb25jb2RlICkKICAgICAgICAgc2V0UmVjYWxjTGlzdEl0ZW1zKCk7CiB9
CkluZGV4OiBraHRtbC9odG1sL2h0bWxfaGVhZGltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBraHRtbC9o
dG1sL2h0bWxfaGVhZGltcGwuaAkocmV2aXNpb24gMTIzMzApCisrKyBraHRtbC9odG1sL2h0bWxf
aGVhZGltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMTA5LDcgKzEwOSw3IEBAIHB1YmxpYzoKICAg
ICBET01TdHJpbmcgdHlwZSgpIGNvbnN0OwogICAgIHZvaWQgc2V0VHlwZShjb25zdCBET01TdHJp
bmcgJik7CiAKLSAgICBTdHlsZVNoZWV0SW1wbCogc2hlZXQoKSBjb25zdCB7IHJldHVybiBtX3No
ZWV0OyB9CisgICAgU3R5bGVTaGVldEltcGwqIHNoZWV0KCkgY29uc3QgeyByZXR1cm4gbV9zaGVl
dC5nZXQoKTsgfQogCiAgICAgLy8gb3ZlcmxvYWQgZnJvbSBIVE1MRWxlbWVudEltcGwKICAgICB2
aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlSW1wbCAqYXR0
cik7CkBAIC0xMzcsNyArMTM3LDcgQEAgcHVibGljOgogCiBwcm90ZWN0ZWQ6CiAgICAga2h0bWw6
OkNhY2hlZENTU1N0eWxlU2hlZXQgKm1fY2FjaGVkU2hlZXQ7Ci0gICAgQ1NTU3R5bGVTaGVldElt
cGwgKm1fc2hlZXQ7CisgICAgUmVmUHRyPENTU1N0eWxlU2hlZXRJbXBsPiBtX3NoZWV0OwogICAg
IERPTVN0cmluZyBtX3VybDsKICAgICBET01TdHJpbmcgbV90eXBlOwogICAgIFFTdHJpbmcgbV9t
ZWRpYTsKQEAgLTI0Nyw3ICsyNDcsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBpbnQgdGFnUHJp
b3JpdHkoKSBjb25zdCB7IHJldHVybiAxOyB9CiAgICAgdmlydHVhbCBib29sIGNoZWNrRFREKGNv
bnN0IE5vZGVJbXBsKiBuZXdDaGlsZCkgeyByZXR1cm4gbmV3Q2hpbGQtPmlzVGV4dE5vZGUoKTsg
fQogCi0gICAgU3R5bGVTaGVldEltcGwgKnNoZWV0KCkgY29uc3QgeyByZXR1cm4gbV9zaGVldDsg
fQorICAgIFN0eWxlU2hlZXRJbXBsICpzaGVldCgpIGNvbnN0IHsgcmV0dXJuIG1fc2hlZXQuZ2V0
KCk7IH0KIAogICAgIC8vIG92ZXJsb2FkIGZyb20gSFRNTEVsZW1lbnRJbXBsCiAgICAgdmlydHVh
bCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKmF0dHIpOwpA
QCAtMjY4LDcgKzI2OCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFR5cGUoY29uc3QgRE9NU3Ry
aW5nICYpOwogCiBwcm90ZWN0ZWQ6Ci0gICAgQ1NTU3R5bGVTaGVldEltcGwgKm1fc2hlZXQ7Cisg
ICAgUmVmUHRyPENTU1N0eWxlU2hlZXRJbXBsPiBtX3NoZWV0OwogICAgIGJvb2wgbV9sb2FkaW5n
OwogICAgIERPTVN0cmluZyBtX3R5cGU7CiAgICAgUVN0cmluZyBtX21lZGlhOwpJbmRleDoga2h0
bWwvaHRtbC9odG1sX3RhYmxlaW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2h0bWwvaHRtbC9odG1s
X3RhYmxlaW1wbC5jcHAJKHJldmlzaW9uIDEyMzMwKQorKysga2h0bWwvaHRtbC9odG1sX3RhYmxl
aW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4MCwxNCArMzgwLDEwIEBAIHZvaWQgSFRNTFRh
YmxlRWxlbWVudEltcGw6OnBhcnNlTWFwcGVkQXQKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUo
KSA9PSBib3JkZXJBdHRyKSAgewogICAgICAgICBtX25vQm9yZGVyID0gdHJ1ZTsKICAgICAgICAg
aWYgKGF0dHItPmRlY2woKSkgewotICAgICAgICAgICAgQ1NTVmFsdWVJbXBsKiB2YWwgPSBhdHRy
LT5kZWNsKCktPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTX1BST1BfQk9SREVSX0xFRlRfV0lEVEgp
OwotICAgICAgICAgICAgaWYgKHZhbCkgewotICAgICAgICAgICAgICAgIHZhbC0+cmVmKCk7Ci0g
ICAgICAgICAgICAgICAgaWYgKHZhbC0+aXNQcmltaXRpdmVWYWx1ZSgpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlSW1wbCogcHJpbVZhbCA9IHN0YXRpY19jYXN0PENT
U1ByaW1pdGl2ZVZhbHVlSW1wbCo+KHZhbCk7Ci0gICAgICAgICAgICAgICAgICAgIG1fbm9Cb3Jk
ZXIgPSAhcHJpbVZhbC0+Z2V0RmxvYXRWYWx1ZShDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJF
Uik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHZhbC0+ZGVyZWYoKTsKKyAg
ICAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZUltcGw+IHZhbCA9IGF0dHItPmRlY2woKS0+Z2V0UHJv
cGVydHlDU1NWYWx1ZShDU1NfUFJPUF9CT1JERVJfTEVGVF9XSURUSCk7CisgICAgICAgICAgICBp
ZiAodmFsICYmIHZhbC0+aXNQcmltaXRpdmVWYWx1ZSgpKSB7CisgICAgICAgICAgICAgICAgQ1NT
UHJpbWl0aXZlVmFsdWVJbXBsKiBwcmltVmFsID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFs
dWVJbXBsKj4odmFsLmdldCgpKTsKKyAgICAgICAgICAgICAgICBtX25vQm9yZGVyID0gIXByaW1W
YWwtPmdldEZsb2F0VmFsdWUoQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpOwogICAgICAg
ICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKCFhdHRyLT5pc051bGwoKSkgewpA
QCAtNzQ5LDEyICs3NDUsMTEgQEAgdm9pZCBIVE1MVGFibGVTZWN0aW9uRWxlbWVudEltcGw6OmRl
bGV0ZQogewogICAgIFJlZlB0cjxOb2RlTGlzdEltcGw+IGNoaWxkcmVuID0gY2hpbGROb2Rlcygp
OwogICAgIGludCBudW1Sb3dzID0gY2hpbGRyZW4gPyAoaW50KWNoaWxkcmVuLT5sZW5ndGgoKSA6
IDA7Ci0gICAgaWYgKCBpbmRleCA9PSAtMSApIGluZGV4ID0gbnVtUm93cyAtIDE7Ci0gICAgaWYo
IGluZGV4ID49IDAgJiYgaW5kZXggPCBudW1Sb3dzICkgewotICAgICAgICBOb2RlSW1wbCAqcm93
ID0gY2hpbGRyZW4tPml0ZW0oaW5kZXgpOwotICAgICAgICByb3ctPnJlZigpOwotICAgICAgICBI
VE1MRWxlbWVudEltcGw6OnJlbW92ZUNoaWxkKHJvdywgZXhjZXB0aW9uY29kZSk7Ci0gICAgICAg
IHJvdy0+ZGVyZWYoKTsKKyAgICBpZiAoaW5kZXggPT0gLTEpCisgICAgICAgIGluZGV4ID0gbnVt
Um93cyAtIDE7CisgICAgaWYoaW5kZXggPj0gMCAmJiBpbmRleCA8IG51bVJvd3MpIHsKKyAgICAg
ICAgUmVmUHRyPE5vZGVJbXBsPiByb3cgPSBjaGlsZHJlbi0+aXRlbShpbmRleCk7CisgICAgICAg
IEhUTUxFbGVtZW50SW1wbDo6cmVtb3ZlQ2hpbGQocm93LmdldCgpLCBleGNlcHRpb25jb2RlKTsK
ICAgICB9IGVsc2UKICAgICAgICAgZXhjZXB0aW9uY29kZSA9IERPTUV4Y2VwdGlvbjo6SU5ERVhf
U0laRV9FUlI7CiB9CkBAIC05MjgsMTIgKzkyMywxMSBAQCB2b2lkIEhUTUxUYWJsZVJvd0VsZW1l
bnRJbXBsOjpkZWxldGVDZWxsCiB7CiAgICAgUmVmUHRyPE5vZGVMaXN0SW1wbD4gY2hpbGRyZW4g
PSBjaGlsZE5vZGVzKCk7CiAgICAgaW50IG51bUNlbGxzID0gY2hpbGRyZW4gPyBjaGlsZHJlbi0+
bGVuZ3RoKCkgOiAwOwotICAgIGlmICggaW5kZXggPT0gLTEgKSBpbmRleCA9IG51bUNlbGxzLTE7
Ci0gICAgaWYoIGluZGV4ID49IDAgJiYgaW5kZXggPCBudW1DZWxscyApIHsKLSAgICAgICAgTm9k
ZUltcGwgKnJvdyA9IGNoaWxkcmVuLT5pdGVtKGluZGV4KTsKLSAgICAgICAgcm93LT5yZWYoKTsK
LSAgICAgICAgSFRNTEVsZW1lbnRJbXBsOjpyZW1vdmVDaGlsZChyb3csIGV4Y2VwdGlvbmNvZGUp
OwotICAgICAgICByb3ctPmRlcmVmKCk7CisgICAgaWYgKGluZGV4ID09IC0xICkKKyAgICAgICAg
aW5kZXggPSBudW1DZWxscy0xOworICAgIGlmKGluZGV4ID49IDAgJiYgaW5kZXggPCBudW1DZWxs
cykgeworICAgICAgICBSZWZQdHI8Tm9kZUltcGw+IHJvdyA9IGNoaWxkcmVuLT5pdGVtKGluZGV4
KTsKKyAgICAgICAgSFRNTEVsZW1lbnRJbXBsOjpyZW1vdmVDaGlsZChyb3cuZ2V0KCksIGV4Y2Vw
dGlvbmNvZGUpOwogICAgIH0gZWxzZQogICAgICAgICBleGNlcHRpb25jb2RlID0gRE9NRXhjZXB0
aW9uOjpJTkRFWF9TSVpFX0VSUjsKIH0K
</data>
<flag name="review"
          id="1382"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>5975</attachid>
            <date>2006-01-25 23:48:08 -0800</date>
            <delta_ts>2006-01-26 00:34:06 -0800</delta_ts>
            <desc>addressed darin&apos;s concerns</desc>
            <filename>refptr.patch</filename>
            <type>text/plain</type>
            <size>31103</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">SW5kZXg6IGtodG1sL3htbC9kb21fcG9zaXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBraHRtbC94bWwv
ZG9tX3Bvc2l0aW9uLmgJKHJldmlzaW9uIDEyMzgzKQorKysga2h0bWwveG1sL2RvbV9wb3NpdGlv
bi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMywxNiArMjMsMTYgQEAKICAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAog
ICovCiAKLSNpZm5kZWYgX19kb21fcG9zaXRpb25faF9fCi0jZGVmaW5lIF9fZG9tX3Bvc2l0aW9u
X2hfXworI2lmbmRlZiBQb3NpdGlvbl9ICisjZGVmaW5lIFBvc2l0aW9uX0gKIAorI2luY2x1ZGUg
Ik5vZGVJbXBsLmgiCiAjaW5jbHVkZSAidGV4dF9hZmZpbml0eS5oIgogCiBuYW1lc3BhY2UgRE9N
IHsKIAogY2xhc3MgQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uSW1wbDsKIGNsYXNzIEVsZW1l
bnRJbXBsOwotY2xhc3MgTm9kZUltcGw7CiBjbGFzcyBSYW5nZUltcGw7CiAKIGVudW0gRVVzaW5n
Q29tcG9zZWRDaGFyYWN0ZXJzIHsgTm90VXNpbmdDb21wb3NlZENoYXJhY3RlcnMgPSBmYWxzZSwg
VXNpbmdDb21wb3NlZENoYXJhY3RlcnMgPSB0cnVlIH07CkBAIC00MiwxNCArNDIsMTAgQEAgY2xh
c3MgUG9zaXRpb24KIHB1YmxpYzoKICAgICBQb3NpdGlvbigpIDogbV9ub2RlKDApLCBtX29mZnNl
dCgwKSB7IH0KICAgICBQb3NpdGlvbihOb2RlSW1wbCAqbm9kZSwgaW50IG9mZnNldCk7Ci0gICAg
UG9zaXRpb24oY29uc3QgUG9zaXRpb24gJik7Ci0gICAgflBvc2l0aW9uKCk7Ci0KLSAgICBQb3Np
dGlvbiAmb3BlcmF0b3I9KGNvbnN0IFBvc2l0aW9uICZvKTsKIAogICAgIHZvaWQgY2xlYXIoKTsK
IAotICAgIE5vZGVJbXBsICpub2RlKCkgY29uc3QgeyByZXR1cm4gbV9ub2RlOyB9CisgICAgTm9k
ZUltcGwgKm5vZGUoKSBjb25zdCB7IHJldHVybiBtX25vZGUuZ2V0KCk7IH0KICAgICBpbnQgb2Zm
c2V0KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0KIAogICAgIGJvb2wgaXNOdWxsKCkgY29u
c3QgeyByZXR1cm4gbV9ub2RlID09IDA7IH0KQEAgLTEwMiw3ICs5OCw3IEBAIHByaXZhdGU6CiAg
ICAgUG9zaXRpb24gcHJldmlvdXNDaGFyYWN0ZXJQb3NpdGlvbihraHRtbDo6RUFmZmluaXR5IGFm
ZmluaXR5KSBjb25zdDsKICAgICBQb3NpdGlvbiBuZXh0Q2hhcmFjdGVyUG9zaXRpb24oa2h0bWw6
OkVBZmZpbml0eSBhZmZpbml0eSkgY29uc3Q7CiAgICAgCi0gICAgTm9kZUltcGwgKm1fbm9kZTsK
KyAgICBSZWZQdHI8Tm9kZUltcGw+IG1fbm9kZTsKICAgICBpbnQgbV9vZmZzZXQ7CiB9OwogCkBA
IC0xMjYsNCArMTIyLDQgQEAgdm9pZCBzaG93VHJlZShjb25zdCBQb3NpdGlvbiAqcG9zKTsKIAog
fSAvLyBuYW1lc3BhY2UgRE9NCiAKLSNlbmRpZiAvLyBfX2RvbV9wb3NpdGlvbl9oX18KKyNlbmRp
ZiAvLyBQb3NpdGlvbl9ICkluZGV4OiBraHRtbC94bWwvTm9kZUltcGwuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBraHRtbC94bWwvTm9kZUltcGwuaAkocmV2aXNpb24gMTIzODMpCisrKyBraHRtbC94bWwvTm9k
ZUltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMjY2LDggKzI2Niw4IEBAIHB1YmxpYzoKICAgICBF
dmVudExpc3RlbmVyICpnZXRIVE1MRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2
ZW50VHlwZSk7CiAgICAgdm9pZCByZW1vdmVBbGxFdmVudExpc3RlbmVycygpOwogCi0gICAgYm9v
bCBkaXNwYXRjaEV2ZW50KEV2ZW50SW1wbCosIEV4Y2VwdGlvbkNvZGUmLCBib29sIHRlbXBFdmVu
dCA9IGZhbHNlKTsKLSAgICBib29sIGRpc3BhdGNoR2VuZXJpY0V2ZW50KEV2ZW50SW1wbCosIEV4
Y2VwdGlvbkNvZGUmKTsKKyAgICBib29sIGRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudElt
cGw+LCBFeGNlcHRpb25Db2RlJiwgYm9vbCB0ZW1wRXZlbnQgPSBmYWxzZSk7CisgICAgYm9vbCBk
aXNwYXRjaEdlbmVyaWNFdmVudChQYXNzUmVmUHRyPEV2ZW50SW1wbD4sIEV4Y2VwdGlvbkNvZGUm
KTsKICAgICBib29sIGRpc3BhdGNoSFRNTEV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRU
eXBlLCBib29sIGNhbkJ1YmJsZSwgYm9vbCBjYW5jZWxhYmxlKTsKICAgICBib29sIGRpc3BhdGNo
V2luZG93RXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIGJvb2wgY2FuQnViYmxl
LCBib29sIGNhbmNlbGFibGUpOwogICAgIGJvb2wgZGlzcGF0Y2hNb3VzZUV2ZW50KFFNb3VzZUV2
ZW50KiwgY29uc3QgQXRvbWljU3RyaW5nJiBvdmVycmlkZVR5cGUsIGludCBvdmVycmlkZURldGFp
bCA9IDApOwpJbmRleDoga2h0bWwveG1sL2RvbV9lbGVtZW50aW1wbC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IGtodG1sL3htbC9kb21fZWxlbWVudGltcGwuaAkocmV2aXNpb24gMTIzODMpCisrKyBraHRtbC94
bWwvZG9tX2VsZW1lbnRpbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3OSwzMyArMzc5LDIyIEBA
IHB1YmxpYzoKICAgICBNYXBwZWRBdHRyaWJ1dGVJbXBsKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5h
bWUsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUsIENTU01hcHBlZEF0dHJpYnV0ZURlY2xhcmF0
aW9uSW1wbCogZGVjbCA9IDApCiAgICAgOiBBdHRyaWJ1dGVJbXBsKG5hbWUsIHZhbHVlKSwgbV9z
dHlsZURlY2woZGVjbCkKICAgICB7Ci0gICAgICAgIGlmIChkZWNsKQotICAgICAgICAgICAgZGVj
bC0+cmVmKCk7CiAgICAgfQogCiAgICAgTWFwcGVkQXR0cmlidXRlSW1wbChjb25zdCBBdG9taWNT
dHJpbmcmIG5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUsIENTU01hcHBlZEF0dHJpYnV0
ZURlY2xhcmF0aW9uSW1wbCogZGVjbCA9IDApCiAgICAgOiBBdHRyaWJ1dGVJbXBsKG5hbWUsIHZh
bHVlKSwgbV9zdHlsZURlY2woZGVjbCkKICAgICB7Ci0gICAgICAgIGlmIChkZWNsKQotICAgICAg
ICAgICAgZGVjbC0+cmVmKCk7CiAgICAgfQogCi0gICAgfk1hcHBlZEF0dHJpYnV0ZUltcGwoKTsK
LQogICAgIHZpcnR1YWwgQXR0cmlidXRlSW1wbCogY2xvbmUoYm9vbCBwcmVzZXJ2ZURlY2w9dHJ1
ZSkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIENTU1N0eWxlRGVjbGFyYXRpb25JbXBsKiBzdHlsZSgp
IGNvbnN0IHsgcmV0dXJuIG1fc3R5bGVEZWNsOyB9CisgICAgdmlydHVhbCBDU1NTdHlsZURlY2xh
cmF0aW9uSW1wbCogc3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0eWxlRGVjbC5nZXQoKTsgfQog
Ci0gICAgQ1NTTWFwcGVkQXR0cmlidXRlRGVjbGFyYXRpb25JbXBsKiBkZWNsKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdHlsZURlY2w7IH0KLSAgICB2b2lkIHNldERlY2woQ1NTTWFwcGVkQXR0cmlidXRl
RGVjbGFyYXRpb25JbXBsKiBkZWNsKSAKLSAgICB7IAotICAgICAgICBpZiAobV9zdHlsZURlY2wp
IG1fc3R5bGVEZWNsLT5kZXJlZigpOwotICAgICAgICBtX3N0eWxlRGVjbCA9IGRlY2w7Ci0gICAg
ICAgIGlmIChtX3N0eWxlRGVjbCkgbV9zdHlsZURlY2wtPnJlZigpOwotICAgIH0KKyAgICBDU1NN
YXBwZWRBdHRyaWJ1dGVEZWNsYXJhdGlvbkltcGwqIGRlY2woKSBjb25zdCB7IHJldHVybiBtX3N0
eWxlRGVjbC5nZXQoKTsgfQorICAgIHZvaWQgc2V0RGVjbChDU1NNYXBwZWRBdHRyaWJ1dGVEZWNs
YXJhdGlvbkltcGwqIGRlY2wpIHsgbV9zdHlsZURlY2wgPSBkZWNsOyB9CiAKIHByaXZhdGU6Ci0g
ICAgQ1NTTWFwcGVkQXR0cmlidXRlRGVjbGFyYXRpb25JbXBsKiBtX3N0eWxlRGVjbDsKKyAgICBS
ZWZQdHI8Q1NTTWFwcGVkQXR0cmlidXRlRGVjbGFyYXRpb25JbXBsPiBtX3N0eWxlRGVjbDsKIH07
CiAKIGNsYXNzIE5hbWVkTWFwcGVkQXR0ck1hcEltcGwgOiBwdWJsaWMgTmFtZWRBdHRyTWFwSW1w
bApAQCAtNDYwLDcgKzQ0OSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBzZXRNYXBwZWRB
dHRyaWJ1dGVEZWNsKE1hcHBlZEF0dHJpYnV0ZUVudHJ5IHR5cGUsIEF0dHJpYnV0ZUltcGwqIGF0
dHIsIENTU01hcHBlZEF0dHJpYnV0ZURlY2xhcmF0aW9uSW1wbCogZGVjbCk7CiAgICAgc3RhdGlj
IHZvaWQgcmVtb3ZlTWFwcGVkQXR0cmlidXRlRGVjbChNYXBwZWRBdHRyaWJ1dGVFbnRyeSB0eXBl
LCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiBhdHRy
VmFsdWUpOwogICAgIAotICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uSW1wbCogaW5saW5l
U3R5bGVEZWNsKCkgY29uc3QgeyByZXR1cm4gbV9pbmxpbmVTdHlsZURlY2w7IH0KKyAgICBDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbkltcGwqIGlubGluZVN0eWxlRGVjbCgpIGNvbnN0IHsgcmV0
dXJuIG1faW5saW5lU3R5bGVEZWNsLmdldCgpOyB9CiAgICAgdmlydHVhbCBDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbkltcGwqIGFkZGl0aW9uYWxBdHRyaWJ1dGVTdHlsZURlY2woKTsKICAgICBD
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbkltcGwqIGdldElubGluZVN0eWxlRGVjbCgpOwogICAg
IENTU1N0eWxlRGVjbGFyYXRpb25JbXBsKiBzdHlsZSgpOwpAQCAtNDc3LDcgKzQ2Niw3IEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIEF0dHJpYnV0ZUltcGwqIGNyZWF0ZUF0dHJpYnV0ZShjb25zdCBR
dWFsaWZpZWROYW1lJiBuYW1lLCBET01TdHJpbmdJbXBsKiB2YWx1ZSk7CiAKIHByb3RlY3RlZDoK
LSAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbkltcGwqIG1faW5saW5lU3R5bGVEZWNsOwor
ICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbkltcGw+IG1faW5saW5lU3R5bGVE
ZWNsOwogICAgIG11dGFibGUgYm9vbCBtX2lzU3R5bGVBdHRyaWJ1dGVWYWxpZCA6IDE7CiAgICAg
bXV0YWJsZSBib29sIG1fc3luY2hyb25pemluZ1N0eWxlQXR0cmlidXRlIDogMTsKIH07CkluZGV4
OiBraHRtbC94bWwvZG9tX3Bvc2l0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBraHRtbC94bWwvZG9t
X3Bvc2l0aW9uLmNwcAkocmV2aXNpb24gMTIzODMpCisrKyBraHRtbC94bWwvZG9tX3Bvc2l0aW9u
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTYsNTEgKzk2LDE0IEBAIHN0YXRpYyBOb2RlSW1wbCAq
cHJldmlvdXNSZW5kZXJlZEVkaXRhYmwKICAgICByZXR1cm4gMDsKIH0KIAotCiBQb3NpdGlvbjo6
UG9zaXRpb24oTm9kZUltcGwgKm5vZGUsIGludCBvZmZzZXQpIAogICAgIDogbV9ub2RlKG5vZGUp
LCBtX29mZnNldChvZmZzZXQpIAoteyAKLSAgICBpZiAobm9kZSkgewotICAgICAgICBub2RlLT5y
ZWYoKTsKLSAgICB9Ci19Ci0KLVBvc2l0aW9uOjpQb3NpdGlvbihjb25zdCBQb3NpdGlvbiAmbykK
LSAgICA6IG1fbm9kZShvLm1fbm9kZSksIG1fb2Zmc2V0KG8ubV9vZmZzZXQpIAotewotICAgIGlm
IChtX25vZGUpIHsKLSAgICAgICAgbV9ub2RlLT5yZWYoKTsKLSAgICB9Ci19Ci0KLVBvc2l0aW9u
Ojp+UG9zaXRpb24oKQotewotICAgIGlmIChtX25vZGUpIHsKLSAgICAgICAgbV9ub2RlLT5kZXJl
ZigpOwotICAgIH0KLX0KLQotUG9zaXRpb24gJlBvc2l0aW9uOjpvcGVyYXRvcj0oY29uc3QgUG9z
aXRpb24gJm8pCiB7Ci0gICAgaWYgKG1fbm9kZSkgewotICAgICAgICBtX25vZGUtPmRlcmVmKCk7
Ci0gICAgfQotICAgIG1fbm9kZSA9IG8ubV9ub2RlOwotICAgIGlmIChtX25vZGUpIHsKLSAgICAg
ICAgbV9ub2RlLT5yZWYoKTsKLSAgICB9Ci0KLSAgICBtX29mZnNldCA9IG8ubV9vZmZzZXQ7Ci0g
ICAgCi0gICAgcmV0dXJuICp0aGlzOwogfQogCiB2b2lkIFBvc2l0aW9uOjpjbGVhcigpCiB7Ci0g
ICAgaWYgKG1fbm9kZSkgewotICAgICAgICBtX25vZGUtPmRlcmVmKCk7Ci0gICAgICAgIG1fbm9k
ZSA9IDA7Ci0gICAgfQorICAgIG1fbm9kZSA9IDA7CiAgICAgbV9vZmZzZXQgPSAwOwogfQogCklu
ZGV4OiBraHRtbC94bWwvTm9kZUltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtodG1sL3htbC9Ob2Rl
SW1wbC5jcHAJKHJldmlzaW9uIDEyMzgzKQorKysga2h0bWwveG1sL05vZGVJbXBsLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDg0LDE2ICs0ODQsMTMgQEAgRXZlbnRMaXN0ZW5lciAqTm9kZUltcGw6
OmdldEhUTUxFdmVudExpcwogfQogCiAKLWJvb2wgTm9kZUltcGw6OmRpc3BhdGNoRXZlbnQoRXZl
bnRJbXBsICpldnQsIGludCAmZXhjZXB0aW9uY29kZSwgYm9vbCB0ZW1wRXZlbnQpCitib29sIE5v
ZGVJbXBsOjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnRJbXBsPiBldnQsIGludCAmZXhj
ZXB0aW9uY29kZSwgYm9vbCB0ZW1wRXZlbnQpCiB7CiAgICAgYXNzZXJ0KCFldmVudERpc3BhdGNo
Rm9yYmlkZGVuKCkpOwogICAgIGlmICghZXZ0IHx8IGV2dC0+dHlwZSgpLmlzRW1wdHkoKSkgeyAK
ICAgICAgICAgZXhjZXB0aW9uY29kZSA9IEV2ZW50RXhjZXB0aW9uOjpfRVhDRVBUSU9OX09GRlNF
VCArIEV2ZW50RXhjZXB0aW9uOjpVTlNQRUNJRklFRF9FVkVOVF9UWVBFX0VSUjsKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIH0KLQotICAgIGV2dC0+cmVmKCk7Ci0KICAgICBldnQtPnNldFRh
cmdldCh0aGlzKTsKIAogICAgIC8vIFdlJ3ZlIGhhZCBhdCBsZWFzdCBvbmUgcmVwb3J0IG9mIGEg
Y3Jhc2ggb24gYSBwYWdlIHdoZXJlIGRvY3VtZW50IGlzIG51bGwgaGVyZS4KQEAgLTUwOSwyNiAr
NTA2LDIyIEBAIGJvb2wgTm9kZUltcGw6OmRpc3BhdGNoRXZlbnQoRXZlbnRJbXBsICoKICAgICAg
ICAgdmlldyA9IGRvYy0+dmlldygpOwogICAgIH0KIAotICAgIGJvb2wgcmV0ID0gZGlzcGF0Y2hH
ZW5lcmljRXZlbnQoIGV2dCwgZXhjZXB0aW9uY29kZSApOworICAgIGJvb2wgcmV0ID0gZGlzcGF0
Y2hHZW5lcmljRXZlbnQoZXZ0LmdldCgpLCBleGNlcHRpb25jb2RlKTsKIAogICAgIC8vIElmIHRl
bXBFdmVudCBpcyB0cnVlLCB0aGlzIG1lYW5zIHRoYXQgdGhlIERPTSBpbXBsZW1lbnRhdGlvbiB3
aWxsIG5vdCBiZSBzdG9yaW5nIGEgcmVmZXJlbmNlIHRvIHRoZSBldmVudCwgaS5lLgogICAgIC8v
IHRoZXJlIGlzIG5vIHdheSB0byByZXRyaWV2ZSBpdCBmcm9tIGphdmFzY3JpcHQgaWYgYSBzY3Jp
cHQgZG9lcyBub3QgYWxyZWFkeSBoYXZlIGEgcmVmZXJlbmNlIHRvIGl0IGluIGEgdmFyaWFibGUu
CiAgICAgLy8gU28gdGhlcmUgaXMgbm8gbmVlZCBmb3IgdGhlIGludGVycHJldGVyIHRvIGtlZXAg
dGhlIGV2ZW50IGluIGl0J3MgY2FjaGUKICAgICBpZiAodGVtcEV2ZW50ICYmIGZyYW1lICYmIGZy
YW1lLT5qU2NyaXB0KCkpCi0gICAgICAgIGZyYW1lLT5qU2NyaXB0KCktPmZpbmlzaGVkV2l0aEV2
ZW50KGV2dCk7Ci0KLSAgICBldnQtPmRlcmVmKCk7CisgICAgICAgIGZyYW1lLT5qU2NyaXB0KCkt
PmZpbmlzaGVkV2l0aEV2ZW50KGV2dC5nZXQoKSk7CiAKICAgICByZXR1cm4gcmV0OwogfQogCi1i
b29sIE5vZGVJbXBsOjpkaXNwYXRjaEdlbmVyaWNFdmVudCggRXZlbnRJbXBsICpldnQsIGludCAm
LypleGNlcHRpb25jb2RlICovKQorYm9vbCBOb2RlSW1wbDo6ZGlzcGF0Y2hHZW5lcmljRXZlbnQo
UGFzc1JlZlB0cjxFdmVudEltcGw+IGV2dCwgaW50ICYvKmV4Y2VwdGlvbmNvZGUgKi8pCiB7CiAg
ICAgYXNzZXJ0KCFldmVudERpc3BhdGNoRm9yYmlkZGVuKCkpOwogICAgIGFzc2VydChldnQtPnRh
cmdldCgpKTsKLQotICAgIGV2dC0+cmVmKCk7Ci0KKyAgICAKICAgICAvLyAjIyMgY2hlY2sgdGhh
dCB0eXBlIHNwZWNpZmllZAogCiAgICAgLy8gd29yayBvdXQgd2hhdCBub2RlcyB0byBzZW5kIGV2
ZW50IHRvCkBAIC01NDQsMTQgKzUzNywxNCBAQCBib29sIE5vZGVJbXBsOjpkaXNwYXRjaEdlbmVy
aWNFdmVudCggRXZlCiAgICAgCiAgICAgLy8gQmVmb3JlIHdlIGJlZ2luIGRpc3BhdGNoaW5nIGV2
ZW50cywgZ2l2ZSB0aGUgdGFyZ2V0IG5vZGUgYSBjaGFuY2UgdG8gZG8gc29tZSB3b3JrIHByaW9y
CiAgICAgLy8gdG8gdGhlIERPTSBldmVudCBoYW5kbGVycyBnZXR0aW5nIGEgY3JhY2suCi0gICAg
dm9pZCogZGF0YSA9IHByZURpc3BhdGNoRXZlbnRIYW5kbGVyKGV2dCk7CisgICAgdm9pZCogZGF0
YSA9IHByZURpc3BhdGNoRXZlbnRIYW5kbGVyKGV2dC5nZXQoKSk7CiAKICAgICAvLyB0cmlnZ2Vy
IGFueSBjYXB0dXJpbmcgZXZlbnQgaGFuZGxlcnMgb24gb3VyIHdheSBkb3duCiAgICAgZXZ0LT5z
ZXRFdmVudFBoYXNlKEV2ZW50OjpDQVBUVVJJTkdfUEhBU0UpOwogICAgIGl0LnRvRmlyc3QoKTsK
ICAgICBmb3IgKDsgaXQuY3VycmVudCgpICYmIGl0LmN1cnJlbnQoKSAhPSB0aGlzICYmICFldnQt
PnByb3BhZ2F0aW9uU3RvcHBlZCgpOyArK2l0KSB7CiAgICAgICAgIGV2dC0+c2V0Q3VycmVudFRh
cmdldChpdC5jdXJyZW50KCkpOwotICAgICAgICBpdC5jdXJyZW50KCktPmhhbmRsZUxvY2FsRXZl
bnRzKGV2dCx0cnVlKTsKKyAgICAgICAgaXQuY3VycmVudCgpLT5oYW5kbGVMb2NhbEV2ZW50cyhl
dnQuZ2V0KCksIHRydWUpOwogICAgIH0KIAogICAgIC8vIGRpc3BhdGNoIHRvIHRoZSBhY3R1YWwg
dGFyZ2V0IG5vZGUKQEAgLTU2MSw3ICs1NTQsNyBAQCBib29sIE5vZGVJbXBsOjpkaXNwYXRjaEdl
bmVyaWNFdmVudCggRXZlCiAgICAgICAgIGV2dC0+c2V0Q3VycmVudFRhcmdldChpdC5jdXJyZW50
KCkpOwogCiAgICAgICAgIGlmICghZXZ0LT5wcm9wYWdhdGlvblN0b3BwZWQoKSkKLSAgICAgICAg
ICAgIGl0LmN1cnJlbnQoKS0+aGFuZGxlTG9jYWxFdmVudHMoZXZ0LGZhbHNlKTsKKyAgICAgICAg
ICAgIGl0LmN1cnJlbnQoKS0+aGFuZGxlTG9jYWxFdmVudHMoZXZ0LmdldCgpLCBmYWxzZSk7CiAg
ICAgfQogICAgIC0taXQ7CiAKQEAgLTU4MSw3ICs1NzQsNyBAQCBib29sIE5vZGVJbXBsOjpkaXNw
YXRjaEdlbmVyaWNFdmVudCggRXZlCiAgICAgICAgIGV2dC0+c2V0RXZlbnRQaGFzZShFdmVudDo6
QlVCQkxJTkdfUEhBU0UpOwogICAgICAgICBmb3IgKDsgaXQuY3VycmVudCgpICYmICFldnQtPnBy
b3BhZ2F0aW9uU3RvcHBlZCgpICYmICFldnQtPmdldENhbmNlbEJ1YmJsZSgpOyAtLWl0KSB7CiAg
ICAgICAgICAgICBldnQtPnNldEN1cnJlbnRUYXJnZXQoaXQuY3VycmVudCgpKTsKLSAgICAgICAg
ICAgIGl0LmN1cnJlbnQoKS0+aGFuZGxlTG9jYWxFdmVudHMoZXZ0LGZhbHNlKTsKKyAgICAgICAg
ICAgIGl0LmN1cnJlbnQoKS0+aGFuZGxlTG9jYWxFdmVudHMoZXZ0LmdldCgpLCBmYWxzZSk7CiAg
ICAgICAgIH0KICAgICB9CiAKQEAgLTU5MSwxNCArNTg0LDE0IEBAIGJvb2wgTm9kZUltcGw6OmRp
c3BhdGNoR2VuZXJpY0V2ZW50KCBFdmUKIAogCiAgICAgLy8gTm93IGNhbGwgdGhlIHBvc3QgZGlz
cGF0Y2guCi0gICAgcG9zdERpc3BhdGNoRXZlbnRIYW5kbGVyKGV2dCwgZGF0YSk7CisgICAgcG9z
dERpc3BhdGNoRXZlbnRIYW5kbGVyKGV2dC5nZXQoKSwgZGF0YSk7CiAgICAgCiAgICAgaWYgKGV2
dC0+YnViYmxlcygpKSB7CiAgICAgICAgIC8vIG5vdyB3ZSBjYWxsIGFsbCBkZWZhdWx0IGV2ZW50
IGhhbmRsZXJzICh0aGlzIGlzIG5vdCBwYXJ0IG9mIERPTSAtIGl0IGlzIGludGVybmFsIHRvIGto
dG1sKQogCiAgICAgICAgIGl0LnRvTGFzdCgpOwogICAgICAgICBmb3IgKDsgaXQuY3VycmVudCgp
ICYmICFldnQtPmRlZmF1bHRQcmV2ZW50ZWQoKSAmJiAhZXZ0LT5kZWZhdWx0SGFuZGxlZCgpOyAt
LWl0KQotICAgICAgICAgICAgaXQuY3VycmVudCgpLT5kZWZhdWx0RXZlbnRIYW5kbGVyKGV2dCk7
CisgICAgICAgICAgICBpdC5jdXJyZW50KCktPmRlZmF1bHRFdmVudEhhbmRsZXIoZXZ0LmdldCgp
KTsKICAgICB9CiAgICAgCiAgICAgLy8gZGVyZWYgYWxsIG5vZGVzIGluIGNoYWluCkBAIC02MDgs
MTEgKzYwMSw3IEBAIGJvb2wgTm9kZUltcGw6OmRpc3BhdGNoR2VuZXJpY0V2ZW50KCBFdmUKIAog
ICAgIERvY3VtZW50SW1wbDo6dXBkYXRlRG9jdW1lbnRzUmVuZGVyaW5nKCk7CiAKLSAgICBib29s
IGRlZmF1bHRQcmV2ZW50ZWQgPSBldnQtPmRlZmF1bHRQcmV2ZW50ZWQoKTsKLQotICAgIGV2dC0+
ZGVyZWYoKTsKLQotICAgIHJldHVybiAhZGVmYXVsdFByZXZlbnRlZDsgLy8gIyMjIHdoYXQgaWYg
ZGVmYXVsdFByZXZlbnRlZCB3YXMgY2FsbGVkIGJlZm9yZSBkaXNwYXRjaEV2ZW50PworICAgIHJl
dHVybiAhZXZ0LT5kZWZhdWx0UHJldmVudGVkKCk7IC8vICMjIyB3aGF0IGlmIGRlZmF1bHRQcmV2
ZW50ZWQgd2FzIGNhbGxlZCBiZWZvcmUgZGlzcGF0Y2hFdmVudD8KIH0KIAogYm9vbCBOb2RlSW1w
bDo6ZGlzcGF0Y2hIVE1MRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nICZldmVudFR5cGUsIGJvb2wg
Y2FuQnViYmxlQXJnLCBib29sIGNhbmNlbGFibGVBcmcpCkBAIC03NDcsMzMgKzczNiwzMCBAQCBi
b29sIE5vZGVJbXBsOjpkaXNwYXRjaE1vdXNlRXZlbnQoY29uc3QgCiAKICAgICBib29sIHN3YWxs
b3dFdmVudCA9IGZhbHNlOwogCi0gICAgRXZlbnRJbXBsICptZSA9IG5ldyBNb3VzZUV2ZW50SW1w
bChldmVudFR5cGUsdHJ1ZSxjYW5jZWxhYmxlLGdldERvY3VtZW50KCktPmRlZmF1bHRWaWV3KCks
CisgICAgUmVmUHRyPEV2ZW50SW1wbD4gbWUgPSBuZXcgTW91c2VFdmVudEltcGwoZXZlbnRUeXBl
LHRydWUsY2FuY2VsYWJsZSxnZXREb2N1bWVudCgpLT5kZWZhdWx0VmlldygpLAogICAgICAgICAg
ICAgICAgICAgIGRldGFpbCxzY3JlZW5YLHNjcmVlblksY2xpZW50WCxjbGllbnRZLGN0cmxLZXks
YWx0S2V5LHNoaWZ0S2V5LG1ldGFLZXksCiAgICAgICAgICAgICAgICAgICAgYnV0dG9uLCAwLCAw
LCBpc1NpbXVsYXRlZCk7Ci0gICAgbWUtPnJlZigpOworICAgIAogICAgIGRpc3BhdGNoRXZlbnQo
bWUsIGV4Y2VwdGlvbmNvZGUsIHRydWUpOwogICAgIGJvb2wgZGVmYXVsdEhhbmRsZWQgPSBtZS0+
ZGVmYXVsdEhhbmRsZWQoKTsKICAgICBib29sIGRlZmF1bHRQcmV2ZW50ZWQgPSBtZS0+ZGVmYXVs
dFByZXZlbnRlZCgpOwogICAgIGlmIChkZWZhdWx0SGFuZGxlZCB8fCBkZWZhdWx0UHJldmVudGVk
KQogICAgICAgICBzd2FsbG93RXZlbnQgPSB0cnVlOwotICAgIG1lLT5kZXJlZigpOwogCiAgICAg
Ly8gU3BlY2lhbCBjYXNlOiBJZiBpdCdzIGEgZG91YmxlIGNsaWNrIGV2ZW50LCB3ZSBhbHNvIHNl
bmQgdGhlIEtIVE1MX0RCTENMSUNLIGV2ZW50LiBUaGlzIGlzIG5vdCBwYXJ0CiAgICAgLy8gb2Yg
dGhlIERPTSBzcGVjcywgYnV0IGlzIHVzZWQgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgb25k
YmxjbGljaz0iIiBhdHRyaWJ1dGUuICBUaGlzIGlzIHRyZWF0ZWQKICAgICAvLyBhcyBhIHNlcGFy
YXRlIGV2ZW50IGluIG90aGVyIERPTS1jb21wbGlhbnQgYnJvd3NlcnMgbGlrZSBGaXJlZm94LCBh
bmQgc28gd2UgZG8gdGhlIHNhbWUuCiAgICAgaWYgKGV2ZW50VHlwZSA9PSBjbGlja0V2ZW50ICYm
IGRldGFpbCA9PSAyKSB7CiAgICAgICAgIG1lID0gbmV3IE1vdXNlRXZlbnRJbXBsKGtodG1sRGJs
Y2xpY2tFdmVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSxjYW5jZWxh
YmxlLGdldERvY3VtZW50KCktPmRlZmF1bHRWaWV3KCksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRldGFpbCxzY3JlZW5YLHNjcmVlblksY2xpZW50WCxjbGllbnRZLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjdHJsS2V5LGFsdEtleSxzaGlmdEtleSxtZXRhS2V5
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXR0b24sMCwgMCwgaXNTaW11bGF0
ZWQpOwotICAgICAgICBtZS0+cmVmKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRydWUsIGNhbmNlbGFibGUsZ2V0RG9jdW1lbnQoKS0+ZGVmYXVsdFZpZXcoKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZGV0YWlsLCBzY3JlZW5YLCBzY3JlZW5ZLCBjbGllbnRY
LCBjbGllbnRZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHJsS2V5LCBhbHRL
ZXksIHNoaWZ0S2V5LCBtZXRhS2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
dXR0b24sIDAsIDAsIGlzU2ltdWxhdGVkKTsKICAgICAgICAgaWYgKGRlZmF1bHRIYW5kbGVkKQog
ICAgICAgICAgICAgbWUtPnNldERlZmF1bHRIYW5kbGVkKCk7CiAgICAgICAgIGRpc3BhdGNoRXZl
bnQobWUsZXhjZXB0aW9uY29kZSx0cnVlKTsKICAgICAgICAgaWYgKG1lLT5kZWZhdWx0SGFuZGxl
ZCgpIHx8IG1lLT5kZWZhdWx0UHJldmVudGVkKCkpCiAgICAgICAgICAgICBzd2FsbG93RXZlbnQg
PSB0cnVlOwotICAgICAgICBtZS0+ZGVyZWYoKTsKICAgICB9CiAKICAgICAvLyBBbHNvIHNlbmQg
YSBET01BY3RpdmF0ZSBldmVudCwgd2hpY2ggY2F1c2VzIHRoaW5ncyBsaWtlIGZvcm0gc3VibWlz
c2lvbnMgdG8gb2NjdXIuCkBAIC04NzEsMjAgKzg1NywxNiBAQCBib29sIE5vZGVJbXBsOjpkaXNw
YXRjaEtleUV2ZW50KFFLZXlFdmVuCiB7CiAgICAgYXNzZXJ0KCFldmVudERpc3BhdGNoRm9yYmlk
ZGVuKCkpOwogICAgIGludCBleGNlcHRpb25jb2RlID0gMDsKLSAgICAvL2tkRGVidWcoNjAxMCkg
PDwgIkRPTTo6Tm9kZUltcGw6IGRpc3BhdGNoaW5nIGtleWJvYXJkIGV2ZW50IiA8PCBlbmRsOwot
ICAgIEtleWJvYXJkRXZlbnRJbXBsICprZXlib2FyZEV2ZW50SW1wbCA9IG5ldyBLZXlib2FyZEV2
ZW50SW1wbChrZXksIGdldERvY3VtZW50KCktPmRlZmF1bHRWaWV3KCkpOwotICAgIGtleWJvYXJk
RXZlbnRJbXBsLT5yZWYoKTsKKyAgICBSZWZQdHI8S2V5Ym9hcmRFdmVudEltcGw+IGtleWJvYXJk
RXZlbnRJbXBsID0gbmV3IEtleWJvYXJkRXZlbnRJbXBsKGtleSwgZ2V0RG9jdW1lbnQoKS0+ZGVm
YXVsdFZpZXcoKSk7CiAgICAgYm9vbCByID0gZGlzcGF0Y2hFdmVudChrZXlib2FyZEV2ZW50SW1w
bCxleGNlcHRpb25jb2RlLHRydWUpOwogCiAgICAgLy8gd2Ugd2FudCB0byByZXR1cm4gZmFsc2Ug
aWYgZGVmYXVsdCBpcyBwcmV2ZW50ZWQgKGFscmVhZHkgdGFrZW4gY2FyZSBvZikKICAgICAvLyBv
ciBpZiB0aGUgZWxlbWVudCBpcyBkZWZhdWx0LWhhbmRsZWQgYnkgdGhlIERPTS4gT3RoZXJ3aXNl
IHdlIGxldCBpdCBqdXN0CiAgICAgLy8gbGV0IGl0IGdldCBoYW5kbGVkIGJ5IEFwcEtpdCAKICAg
ICBpZiAoa2V5Ym9hcmRFdmVudEltcGwtPmRlZmF1bHRIYW5kbGVkKCkpCi0gICAgICByID0gZmFs
c2U7Ci0KLSAgICBrZXlib2FyZEV2ZW50SW1wbC0+ZGVyZWYoKTsKKyAgICAgICAgciA9IGZhbHNl
OworICAgIAogICAgIHJldHVybiByOwotCiB9CiAKIHZvaWQgTm9kZUltcGw6OmRpc3BhdGNoV2hl
ZWxFdmVudChRV2hlZWxFdmVudCAqZSkKQEAgLTEzOTcsMjMgKzEzNzksMjIgQEAgTm9kZUltcGwg
Kk5vZGVJbXBsOjpuZXh0TGVhZk5vZGUoKSBjb25zdAogCiB2b2lkIE5vZGVJbXBsOjpjcmVhdGVS
ZW5kZXJlcklmTmVlZGVkKCkKIHsKLQogICAgIGlmICghZ2V0RG9jdW1lbnQoKS0+c2hvdWxkQ3Jl
YXRlUmVuZGVyZXJzKCkpCiAgICAgICAgIHJldHVybjsKLSAgICAgICAgCisgICAgCiAgICAgYXNz
ZXJ0KCFhdHRhY2hlZCgpKTsKICAgICBhc3NlcnQoIXJlbmRlcmVyKCkpOwogICAgIAogICAgIE5v
ZGVJbXBsICpwYXJlbnQgPSBwYXJlbnROb2RlKCk7ICAgIAogICAgIGFzc2VydChwYXJlbnQpOwot
ICAgICAgICAKKyAgICAKICAgICBSZW5kZXJPYmplY3QgKnBhcmVudFJlbmRlcmVyID0gcGFyZW50
LT5yZW5kZXJlcigpOwogICAgIGlmIChwYXJlbnRSZW5kZXJlciAmJiBwYXJlbnRSZW5kZXJlci0+
Y2FuSGF2ZUNoaWxkcmVuKCkKICNpZiBTVkdfU1VQUE9SVAogICAgICAgICAmJiBwYXJlbnQtPmNo
aWxkU2hvdWxkQ3JlYXRlUmVuZGVyZXIodGhpcykKICNlbmRpZgogICAgICAgICApIHsKLSAgICAg
ICAgUmVuZGVyU3R5bGUgKnN0eWxlID0gc3R5bGVGb3JSZW5kZXJlcihwYXJlbnRSZW5kZXJlcik7
CisgICAgICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHN0eWxlRm9yUmVuZGVyZXIocGFyZW50UmVu
ZGVyZXIpOwogICAgICAgICBzdHlsZS0+cmVmKCk7CiAjaWZuZGVmIEtIVE1MX05PX1hCTAogICAg
ICAgICBib29sIHJlc29sdmVTdHlsZSA9IGZhbHNlOwpJbmRleDoga2h0bWwveG1sL2RvbV9lbGVt
ZW50aW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2h0bWwveG1sL2RvbV9lbGVtZW50aW1wbC5jcHAJ
KHJldmlzaW9uIDEyMzgzKQorKysga2h0bWwveG1sL2RvbV9lbGVtZW50aW1wbC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTExOTIsMTUgKzExOTIsOSBAQCB2b2lkIFN0eWxlZEVsZW1lbnRJbXBsOjp1
cGRhdGVTdHlsZUF0dHJpCiAgICAgfQogfQogCi1NYXBwZWRBdHRyaWJ1dGVJbXBsOjp+TWFwcGVk
QXR0cmlidXRlSW1wbCgpCi17Ci0gICAgaWYgKG1fc3R5bGVEZWNsKQotICAgICAgICBtX3N0eWxl
RGVjbC0+ZGVyZWYoKTsKLX0KLQogQXR0cmlidXRlSW1wbCogTWFwcGVkQXR0cmlidXRlSW1wbDo6
Y2xvbmUoYm9vbCBwcmVzZXJ2ZURlY2wpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG5ldyBNYXBwZWRB
dHRyaWJ1dGVJbXBsKG1fbmFtZSwgbV92YWx1ZSwgcHJlc2VydmVEZWNsID8gbV9zdHlsZURlY2wg
OiAwKTsKKyAgICByZXR1cm4gbmV3IE1hcHBlZEF0dHJpYnV0ZUltcGwobV9uYW1lLCBtX3ZhbHVl
LCBwcmVzZXJ2ZURlY2wgPyBtX3N0eWxlRGVjbC5nZXQoKSA6IDApOwogfQogCiBOYW1lZE1hcHBl
ZEF0dHJNYXBJbXBsOjpOYW1lZE1hcHBlZEF0dHJNYXBJbXBsKEVsZW1lbnRJbXBsICplKQpAQCAt
MTI4NSw3ICsxMjc5LDYgQEAgdm9pZCBOYW1lZE1hcHBlZEF0dHJNYXBJbXBsOjpwYXJzZUNsYXNz
QQogU3R5bGVkRWxlbWVudEltcGw6OlN0eWxlZEVsZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmllZE5h
bWUmIG5hbWUsIERvY3VtZW50SW1wbCAqZG9jKQogICAgIDogRWxlbWVudEltcGwobmFtZSwgZG9j
KQogewotICAgIG1faW5saW5lU3R5bGVEZWNsID0gMDsKICAgICBtX2lzU3R5bGVBdHRyaWJ1dGVW
YWxpZCA9IHRydWU7CiAgICAgbV9zeW5jaHJvbml6aW5nU3R5bGVBdHRyaWJ1dGUgPSBmYWxzZTsK
IH0KQEAgLTEzMDMsNyArMTI5Niw2IEBAIEF0dHJpYnV0ZUltcGwqIFN0eWxlZEVsZW1lbnRJbXBs
OjpjcmVhdGUKIHZvaWQgU3R5bGVkRWxlbWVudEltcGw6OmNyZWF0ZUlubGluZVN0eWxlRGVjbCgp
CiB7CiAgICAgbV9pbmxpbmVTdHlsZURlY2wgPSBuZXcgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRp
b25JbXBsOwotICAgIG1faW5saW5lU3R5bGVEZWNsLT5yZWYoKTsKICAgICBtX2lubGluZVN0eWxl
RGVjbC0+c2V0UGFyZW50KGdldERvY3VtZW50KCktPmVsZW1lbnRTaGVldCgpKTsKICAgICBtX2lu
bGluZVN0eWxlRGVjbC0+c2V0Tm9kZSh0aGlzKTsKICAgICBtX2lubGluZVN0eWxlRGVjbC0+c2V0
U3RyaWN0UGFyc2luZyghZ2V0RG9jdW1lbnQoKS0+aW5Db21wYXRNb2RlKCkpOwpAQCAtMTMxNCw3
ICsxMzA2LDYgQEAgdm9pZCBTdHlsZWRFbGVtZW50SW1wbDo6ZGVzdHJveUlubGluZVN0eQogICAg
IGlmIChtX2lubGluZVN0eWxlRGVjbCkgewogICAgICAgICBtX2lubGluZVN0eWxlRGVjbC0+c2V0
Tm9kZSgwKTsKICAgICAgICAgbV9pbmxpbmVTdHlsZURlY2wtPnNldFBhcmVudCgwKTsKLSAgICAg
ICAgbV9pbmxpbmVTdHlsZURlY2wtPmRlcmVmKCk7CiAgICAgICAgIG1faW5saW5lU3R5bGVEZWNs
ID0gMDsKICAgICB9CiB9CkBAIC0xNDE0LDcgKzE0MDUsNyBAQCBDU1NNdXRhYmxlU3R5bGVEZWNs
YXJhdGlvbkltcGwqIFN0eWxlZEVsCiB7CiAgICAgaWYgKCFtX2lubGluZVN0eWxlRGVjbCkKICAg
ICAgICAgY3JlYXRlSW5saW5lU3R5bGVEZWNsKCk7Ci0gICAgcmV0dXJuIG1faW5saW5lU3R5bGVE
ZWNsOworICAgIHJldHVybiBtX2lubGluZVN0eWxlRGVjbC5nZXQoKTsKIH0KIAogQ1NTU3R5bGVE
ZWNsYXJhdGlvbkltcGwqIFN0eWxlZEVsZW1lbnRJbXBsOjpzdHlsZSgpCkluZGV4OiBraHRtbC9o
dG1sL2h0bWxfaGVhZGltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtodG1sL2h0bWwvaHRtbF9oZWFk
aW1wbC5jcHAJKHJldmlzaW9uIDEyMzgzKQorKysga2h0bWwvaHRtbC9odG1sX2hlYWRpbXBsLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTE3LDcgKzExNyw2IEBAIHZvaWQgSFRNTEJhc2VFbGVtZW50
SW1wbDo6c2V0VGFyZ2V0KGNvbnMKIEhUTUxMaW5rRWxlbWVudEltcGw6OkhUTUxMaW5rRWxlbWVu
dEltcGwoRG9jdW1lbnRJbXBsICpkb2MpCiAgICAgOiBIVE1MRWxlbWVudEltcGwobGlua1RhZywg
ZG9jKQogewotICAgIG1fc2hlZXQgPSAwOwogICAgIG1fbG9hZGluZyA9IGZhbHNlOwogICAgIG1f
Y2FjaGVkU2hlZXQgPSAwOwogICAgIG1faXNTdHlsZVNoZWV0ID0gbV9pc0ljb24gPSBtX2FsdGVy
bmF0ZSA9IGZhbHNlOwpAQCAtMTI2LDggKzEyNSw4IEBAIEhUTUxMaW5rRWxlbWVudEltcGw6OkhU
TUxMaW5rRWxlbWVudEltcGwKIAogSFRNTExpbmtFbGVtZW50SW1wbDo6fkhUTUxMaW5rRWxlbWVu
dEltcGwoKQogewotICAgIGlmKG1fc2hlZXQpIG1fc2hlZXQtPmRlcmVmKCk7Ci0gICAgaWYobV9j
YWNoZWRTaGVldCkgbV9jYWNoZWRTaGVldC0+ZGVyZWYodGhpcyk7CisgICAgaWYgKG1fY2FjaGVk
U2hlZXQpCisgICAgICAgIG1fY2FjaGVkU2hlZXQtPmRlcmVmKHRoaXMpOwogfQogCiB2b2lkIEhU
TUxMaW5rRWxlbWVudEltcGw6OnNldERpc2FibGVkU3RhdGUoYm9vbCBfZGlzYWJsZWQpCkBAIC0y
NTQsNyArMjUzLDYgQEAgdm9pZCBIVE1MTGlua0VsZW1lbnRJbXBsOjpwcm9jZXNzKCkKICAgICB9
CiAgICAgZWxzZSBpZiAobV9zaGVldCkgewogICAgICAgICAvLyB3ZSBubyBsb25nZXIgY29udGFp
biBhIHN0eWxlc2hlZXQsIGUuZy4gcGVyaGFwcyByZWwgb3IgdHlwZSB3YXMgY2hhbmdlZAotICAg
ICAgICBtX3NoZWV0LT5kZXJlZigpOwogICAgICAgICBtX3NoZWV0ID0gMDsKICAgICAgICAgZ2V0
RG9jdW1lbnQoKS0+dXBkYXRlU3R5bGVTZWxlY3RvcigpOwogICAgIH0KQEAgLTI3NCwxMyArMjcy
LDEwIEBAIHZvaWQgSFRNTExpbmtFbGVtZW50SW1wbDo6cmVtb3ZlZEZyb21Eb2MKIAogdm9pZCBI
VE1MTGlua0VsZW1lbnRJbXBsOjpzZXRTdHlsZVNoZWV0KGNvbnN0IERPTTo6RE9NU3RyaW5nICZ1
cmwsIGNvbnN0IERPTTo6RE9NU3RyaW5nICZzaGVldFN0cikKIHsKLSAgICBpZiAobV9zaGVldCkK
LSAgICAgICAgbV9zaGVldC0+ZGVyZWYoKTsKICAgICBtX3NoZWV0ID0gbmV3IENTU1N0eWxlU2hl
ZXRJbXBsKHRoaXMsIHVybCk7Ci0gICAgbV9zaGVldC0+cmVmKCk7Ci0gICAgbV9zaGVldC0+cGFy
c2VTdHJpbmcoIHNoZWV0U3RyLCAhZ2V0RG9jdW1lbnQoKS0+aW5Db21wYXRNb2RlKCkgKTsKKyAg
ICBtX3NoZWV0LT5wYXJzZVN0cmluZyhzaGVldFN0ciwgIWdldERvY3VtZW50KCktPmluQ29tcGF0
TW9kZSgpKTsKIAotICAgIE1lZGlhTGlzdEltcGwgKm1lZGlhID0gbmV3IE1lZGlhTGlzdEltcGwo
IG1fc2hlZXQsIG1fbWVkaWEgKTsKKyAgICBNZWRpYUxpc3RJbXBsICptZWRpYSA9IG5ldyBNZWRp
YUxpc3RJbXBsKG1fc2hlZXQuZ2V0KCksIG1fbWVkaWEpOwogICAgIG1fc2hlZXQtPnNldE1lZGlh
KCBtZWRpYSApOwogCiAgICAgbV9sb2FkaW5nID0gZmFsc2U7CkBAIC0yOTIsOSArMjg3LDExIEBA
IHZvaWQgSFRNTExpbmtFbGVtZW50SW1wbDo6c2V0U3R5bGVTaGVldCgKIAogYm9vbCBIVE1MTGlu
a0VsZW1lbnRJbXBsOjppc0xvYWRpbmcoKSBjb25zdAogewotICAgIGlmKG1fbG9hZGluZykgcmV0
dXJuIHRydWU7Ci0gICAgaWYoIW1fc2hlZXQpIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8Q1NTU3R5bGVTaGVldEltcGwgKj4obV9zaGVldCktPmlzTG9hZGluZygpOworICAg
IGlmIChtX2xvYWRpbmcpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGlmICghbV9zaGVldCkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxDU1NTdHlsZVNo
ZWV0SW1wbCAqPihtX3NoZWV0LmdldCgpKS0+aXNMb2FkaW5nKCk7CiB9CiAKIHZvaWQgSFRNTExp
bmtFbGVtZW50SW1wbDo6c2hlZXRMb2FkZWQoKQpAQCAtNzA3LDE1ICs3MDQsOSBAQCB2b2lkIEhU
TUxTY3JpcHRFbGVtZW50SW1wbDo6c2V0VHlwZShjb25zCiAKIEhUTUxTdHlsZUVsZW1lbnRJbXBs
OjpIVE1MU3R5bGVFbGVtZW50SW1wbChEb2N1bWVudEltcGwgKmRvYykgOiBIVE1MRWxlbWVudElt
cGwoc3R5bGVUYWcsIGRvYykKIHsKLSAgICBtX3NoZWV0ID0gMDsKICAgICBtX2xvYWRpbmcgPSBm
YWxzZTsKIH0KIAotSFRNTFN0eWxlRWxlbWVudEltcGw6On5IVE1MU3R5bGVFbGVtZW50SW1wbCgp
Ci17Ci0gICAgaWYobV9zaGVldCkgbV9zaGVldC0+ZGVyZWYoKTsKLX0KLQogLy8gb3RoZXIgc3R1
ZmYuLi4KIHZvaWQgSFRNTFN0eWxlRWxlbWVudEltcGw6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1h
cHBlZEF0dHJpYnV0ZUltcGwgKmF0dHIpCiB7CkBAIC03NTMsOSArNzQ0LDggQEAgdm9pZCBIVE1M
U3R5bGVFbGVtZW50SW1wbDo6Y2hpbGRyZW5DaGFuZwogICAgIH0KIAogICAgIGlmIChtX3NoZWV0
KSB7Ci0gICAgICAgIGlmIChzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0SW1wbCAqPihtX3NoZWV0
KS0+aXNMb2FkaW5nKCkpCisgICAgICAgIGlmIChzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0SW1w
bCAqPihtX3NoZWV0LmdldCgpKS0+aXNMb2FkaW5nKCkpCiAgICAgICAgICAgICBnZXREb2N1bWVu
dCgpLT5zdHlsZXNoZWV0TG9hZGVkKCk7IC8vIFJlbW92ZSBvdXJzZWx2ZXMgZnJvbSB0aGUgc2hl
ZXQgbGlzdC4KLSAgICAgICAgbV9zaGVldC0+ZGVyZWYoKTsKICAgICAgICAgbV9zaGVldCA9IDA7
CiAgICAgfQogCkBAIC03NjUsMTAgKzc1NSw5IEBAIHZvaWQgSFRNTFN0eWxlRWxlbWVudEltcGw6
OmNoaWxkcmVuQ2hhbmcKICAgICAgICAgZ2V0RG9jdW1lbnQoKS0+YWRkUGVuZGluZ1NoZWV0KCk7
CiAgICAgICAgIG1fbG9hZGluZyA9IHRydWU7CiAgICAgICAgIG1fc2hlZXQgPSBuZXcgQ1NTU3R5
bGVTaGVldEltcGwodGhpcyk7Ci0gICAgICAgIG1fc2hlZXQtPnJlZigpOwotICAgICAgICBtX3No
ZWV0LT5wYXJzZVN0cmluZyggdGV4dCwgIWdldERvY3VtZW50KCktPmluQ29tcGF0TW9kZSgpICk7
Ci0gICAgICAgIE1lZGlhTGlzdEltcGwgKm1lZGlhID0gbmV3IE1lZGlhTGlzdEltcGwoIG1fc2hl
ZXQsIG1fbWVkaWEgKTsKLSAgICAgICAgbV9zaGVldC0+c2V0TWVkaWEoIG1lZGlhICk7CisgICAg
ICAgIG1fc2hlZXQtPnBhcnNlU3RyaW5nKHRleHQsICFnZXREb2N1bWVudCgpLT5pbkNvbXBhdE1v
ZGUoKSk7CisgICAgICAgIE1lZGlhTGlzdEltcGwgKm1lZGlhID0gbmV3IE1lZGlhTGlzdEltcGwo
bV9zaGVldC5nZXQoKSwgbV9tZWRpYSk7CisgICAgICAgIG1fc2hlZXQtPnNldE1lZGlhKG1lZGlh
KTsKICAgICAgICAgbV9sb2FkaW5nID0gZmFsc2U7CiAgICAgfQogCkBAIC03NzgsOSArNzY3LDEx
IEBAIHZvaWQgSFRNTFN0eWxlRWxlbWVudEltcGw6OmNoaWxkcmVuQ2hhbmcKIAogYm9vbCBIVE1M
U3R5bGVFbGVtZW50SW1wbDo6aXNMb2FkaW5nKCkgY29uc3QKIHsKLSAgICBpZiAobV9sb2FkaW5n
KSByZXR1cm4gdHJ1ZTsKLSAgICBpZighbV9zaGVldCkgcmV0dXJuIGZhbHNlOwotICAgIHJldHVy
biBzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0SW1wbCAqPihtX3NoZWV0KS0+aXNMb2FkaW5nKCk7
CisgICAgaWYgKG1fbG9hZGluZykKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKCFtX3No
ZWV0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PENTU1N0
eWxlU2hlZXRJbXBsICo+KG1fc2hlZXQuZ2V0KCkpLT5pc0xvYWRpbmcoKTsKIH0KIAogdm9pZCBI
VE1MU3R5bGVFbGVtZW50SW1wbDo6c2hlZXRMb2FkZWQoKQpJbmRleDoga2h0bWwvaHRtbC9odG1s
X2Jhc2VpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBraHRtbC9odG1sL2h0bWxfYmFzZWltcGwuY3Bw
CShyZXZpc2lvbiAxMjM4MykKKysrIGtodG1sL2h0bWwvaHRtbF9iYXNlaW1wbC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTUyLDcgKzUyLDcgQEAgdXNpbmcgbmFtZXNwYWNlIEV2ZW50TmFtZXM7CiB1
c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCiBIVE1MQm9keUVsZW1lbnRJbXBsOjpIVE1MQm9k
eUVsZW1lbnRJbXBsKERvY3VtZW50SW1wbCAqZG9jKQotICAgIDogSFRNTEVsZW1lbnRJbXBsKGJv
ZHlUYWcsIGRvYyksIG1fbGlua0RlY2woMCkKKyAgICA6IEhUTUxFbGVtZW50SW1wbChib2R5VGFn
LCBkb2MpCiB7CiB9CiAKQEAgLTYxLDE0ICs2MSwxMiBAQCBIVE1MQm9keUVsZW1lbnRJbXBsOjp+
SFRNTEJvZHlFbGVtZW50SW1wCiAgICAgaWYgKG1fbGlua0RlY2wpIHsKICAgICAgICAgbV9saW5r
RGVjbC0+c2V0Tm9kZSgwKTsKICAgICAgICAgbV9saW5rRGVjbC0+c2V0UGFyZW50KDApOwotICAg
ICAgICBtX2xpbmtEZWNsLT5kZXJlZigpOwogICAgIH0KIH0KIAogdm9pZCBIVE1MQm9keUVsZW1l
bnRJbXBsOjpjcmVhdGVMaW5rRGVjbCgpCiB7CiAgICAgbV9saW5rRGVjbCA9IG5ldyBDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbkltcGw7Ci0gICAgbV9saW5rRGVjbC0+cmVmKCk7CiAgICAgbV9s
aW5rRGVjbC0+c2V0UGFyZW50KGdldERvY3VtZW50KCktPmVsZW1lbnRTaGVldCgpKTsKICAgICBt
X2xpbmtEZWNsLT5zZXROb2RlKHRoaXMpOwogICAgIG1fbGlua0RlY2wtPnNldFN0cmljdFBhcnNp
bmcoIWdldERvY3VtZW50KCktPmluQ29tcGF0TW9kZSgpKTsKQEAgLTEyOSwxOSArMTI3LDE1IEBA
IHZvaWQgSFRNTEJvZHlFbGVtZW50SW1wbDo6cGFyc2VNYXBwZWRBdHQKICAgICAgICAgICAgIGlm
ICghbV9saW5rRGVjbCkKICAgICAgICAgICAgICAgICBjcmVhdGVMaW5rRGVjbCgpOwogICAgICAg
ICAgICAgbV9saW5rRGVjbC0+c2V0UHJvcGVydHkoQ1NTX1BST1BfQ09MT1IsIGF0dHItPnZhbHVl
KCksIGZhbHNlLCBmYWxzZSk7Ci0gICAgICAgICAgICBDU1NWYWx1ZUltcGwqIHZhbCA9IG1fbGlu
a0RlY2wtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTX1BST1BfQ09MT1IpOwotICAgICAgICAgICAg
aWYgKHZhbCkgewotICAgICAgICAgICAgICAgIHZhbC0+cmVmKCk7Ci0gICAgICAgICAgICAgICAg
aWYgKHZhbC0+aXNQcmltaXRpdmVWYWx1ZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIENvbG9y
IGNvbCA9IGdldERvY3VtZW50KCktPnN0eWxlU2VsZWN0b3IoKS0+Z2V0Q29sb3JGcm9tUHJpbWl0
aXZlVmFsdWUoc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWVJbXBsKj4odmFsKSk7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gbGlua0F0dHIpCi0gICAgICAgICAg
ICAgICAgICAgICAgICBnZXREb2N1bWVudCgpLT5zZXRMaW5rQ29sb3IoY29sKTsKLSAgICAgICAg
ICAgICAgICAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IHZsaW5rQXR0cikKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGdldERvY3VtZW50KCktPnNldFZpc2l0ZWRMaW5rQ29sb3IoY29sKTsK
LSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgZ2V0RG9j
dW1lbnQoKS0+c2V0QWN0aXZlTGlua0NvbG9yKGNvbCk7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIHZhbC0+ZGVyZWYoKTsKKyAgICAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZUlt
cGw+IHZhbCA9IG1fbGlua0RlY2wtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTX1BST1BfQ09MT1Ip
OworICAgICAgICAgICAgaWYgKHZhbCAmJiB2YWwtPmlzUHJpbWl0aXZlVmFsdWUoKSkgeworICAg
ICAgICAgICAgICAgIENvbG9yIGNvbCA9IGdldERvY3VtZW50KCktPnN0eWxlU2VsZWN0b3IoKS0+
Z2V0Q29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWVJ
bXBsKj4odmFsLmdldCgpKSk7CisgICAgICAgICAgICAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBs
aW5rQXR0cikKKyAgICAgICAgICAgICAgICAgICAgZ2V0RG9jdW1lbnQoKS0+c2V0TGlua0NvbG9y
KGNvbCk7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IHZsaW5rQXR0
cikKKyAgICAgICAgICAgICAgICAgICAgZ2V0RG9jdW1lbnQoKS0+c2V0VmlzaXRlZExpbmtDb2xv
cihjb2wpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgZ2V0RG9j
dW1lbnQoKS0+c2V0QWN0aXZlTGlua0NvbG9yKGNvbCk7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KICAgICAgICAgCkluZGV4OiBraHRtbC9odG1sL2h0bWxfYmFzZWltcGwuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBraHRtbC9odG1sL2h0bWxfYmFzZWltcGwuaAkocmV2aXNpb24gMTIzODMpCisrKyBraHRt
bC9odG1sL2h0bWxfYmFzZWltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtODAsNyArODAsNyBAQCBw
dWJsaWM6CiAgICAgdm9pZCBzZXRWTGluayhjb25zdCBET01TdHJpbmcgJik7CiAKIHByb3RlY3Rl
ZDoKLSAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbkltcGwqIG1fbGlua0RlY2w7CisgICAg
UmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uSW1wbD4gbV9saW5rRGVjbDsKIH07CiAK
IC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KSW5kZXg6IGtodG1sL2h0bWwvSFRNTEVsZW1lbnRJbXBsLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBraHRtbC9odG1sL0hUTUxFbGVtZW50SW1wbC5jcHAJKHJldmlzaW9u
IDEyMzgzKQorKysga2h0bWwvaHRtbC9IVE1MRWxlbWVudEltcGwuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNjcsMzIgKzI2NywyMCBAQCBEb2N1bWVudEZyYWdtZW50SW1wbCAqSFRNTEVsZW1lbnRJ
bXBsOjpjCiAgICAgLy8gYWNjb21tb2RhdGUgZm9sa3MgcGFzc2luZyBjb21wbGV0ZSBIVE1MIGRv
Y3VtZW50cyB0byBtYWtlIHRoZQogICAgIC8vIGNoaWxkIG9mIGFuIGVsZW1lbnQuCiAKLSAgICBO
b2RlSW1wbCAqbmV4dE5vZGU7Ci0gICAgZm9yIChOb2RlSW1wbCAqbm9kZSA9IGZyYWdtZW50LT5m
aXJzdENoaWxkKCk7IG5vZGUgIT0gTlVMTDsgbm9kZSA9IG5leHROb2RlKSB7CisgICAgUmVmUHRy
PE5vZGVJbXBsPiBuZXh0Tm9kZTsKKyAgICBmb3IgKFJlZlB0cjxOb2RlSW1wbD4gbm9kZSA9IGZy
YWdtZW50LT5maXJzdENoaWxkKCk7IG5vZGU7IG5vZGUgPSBuZXh0Tm9kZSkgewogICAgICAgICBu
ZXh0Tm9kZSA9IG5vZGUtPm5leHRTaWJsaW5nKCk7Ci0gICAgICAgIG5vZGUtPnJlZigpOwogICAg
ICAgICBpZiAobm9kZS0+aGFzVGFnTmFtZShodG1sVGFnKSB8fCBub2RlLT5oYXNUYWdOYW1lKGJv
ZHlUYWcpKSB7CiAgICAgICAgICAgICBOb2RlSW1wbCAqZmlyc3RDaGlsZCA9IG5vZGUtPmZpcnN0
Q2hpbGQoKTsKLSAgICAgICAgICAgIGlmIChmaXJzdENoaWxkICE9IE5VTEwpIHsKKyAgICAgICAg
ICAgIGlmIChmaXJzdENoaWxkKQogICAgICAgICAgICAgICAgIG5leHROb2RlID0gZmlyc3RDaGls
ZDsKKyAgICAgICAgICAgIGZvciAoUmVmUHRyPE5vZGVJbXBsPiBjaGlsZCA9IGZpcnN0Q2hpbGQ7
IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7CisgICAgICAgICAgICAgICAg
bm9kZS0+cmVtb3ZlQ2hpbGQoY2hpbGQuZ2V0KCksIGlnbm9yZWRFeGNlcHRpb25Db2RlKTsKKyAg
ICAgICAgICAgICAgICBmcmFnbWVudC0+aW5zZXJ0QmVmb3JlKGNoaWxkLCBub2RlLmdldCgpLCBp
Z25vcmVkRXhjZXB0aW9uQ29kZSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBOb2RlSW1w
bCAqbmV4dENoaWxkOwotICAgICAgICAgICAgZm9yIChOb2RlSW1wbCAqY2hpbGQgPSBmaXJzdENo
aWxkOyBjaGlsZCAhPSBOVUxMOyBjaGlsZCA9IG5leHRDaGlsZCkgewotICAgICAgICAgICAgICAg
IG5leHRDaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpOwotICAgICAgICAgICAgICAgIGNoaWxk
LT5yZWYoKTsKLSAgICAgICAgICAgICAgICBub2RlLT5yZW1vdmVDaGlsZChjaGlsZCwgaWdub3Jl
ZEV4Y2VwdGlvbkNvZGUpOwotICAgICAgICAgICAgICAgIGZyYWdtZW50LT5pbnNlcnRCZWZvcmUo
Y2hpbGQsIG5vZGUsIGlnbm9yZWRFeGNlcHRpb25Db2RlKTsKLSAgICAgICAgICAgICAgICBjaGls
ZC0+ZGVyZWYoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZyYWdtZW50LT5yZW1vdmVD
aGlsZChub2RlLCBpZ25vcmVkRXhjZXB0aW9uQ29kZSk7CisgICAgICAgICAgICBmcmFnbWVudC0+
cmVtb3ZlQ2hpbGQobm9kZS5nZXQoKSwgaWdub3JlZEV4Y2VwdGlvbkNvZGUpOwogICAgICAgICB9
IGVsc2UgaWYgKG5vZGUtPmhhc1RhZ05hbWUoaGVhZFRhZykpCi0gICAgICAgICAgICBmcmFnbWVu
dC0+cmVtb3ZlQ2hpbGQobm9kZSwgaWdub3JlZEV4Y2VwdGlvbkNvZGUpOwotCi0gICAgICAgIC8v
IEltcG9ydGFudCB0byBkbyB0aGlzIGRlcmVmIGFmdGVyIHJlbW92ZUNoaWxkLCBiZWNhdXNlIGlm
IHRoZSBvbmx5IHRoaW5nCi0gICAgICAgIC8vIGtlZXBpbmcgYSBub2RlIGFyb3VuZCBpcyBhIHBh
cmVudCB0aGF0IGlzIG5vbi0wLCByZW1vdmVDaGlsZCB3aWxsIG5vdAotICAgICAgICAvLyBkZWxl
dGUgdGhlIG5vZGUuIFRoaXMgd29ya3MgZmluZSBpbiBKYXZhU2NyaXB0IGJlY2F1c2UgdGhlcmUn
cyBhbHdheXMKLSAgICAgICAgLy8gYSByZWYgb2YgdGhlIG5vZGUsIGJ1dCBoZXJlIGluIEMrKyB3
ZSBuZWVkIHRvIGRvIGl0IGV4cGxpY2l0bHkuCi0gICAgICAgIG5vZGUtPmRlcmVmKCk7CisgICAg
ICAgICAgICBmcmFnbWVudC0+cmVtb3ZlQ2hpbGQobm9kZS5nZXQoKSwgaWdub3JlZEV4Y2VwdGlv
bkNvZGUpOwogICAgIH0KIAogICAgIC8vIFRyaWNrIHRvIGdldCB0aGUgZnJhZ21lbnQgYmFjayB0
byB0aGUgZmxvYXRpbmcgc3RhdGUsIHdpdGggMApJbmRleDoga2h0bWwvaHRtbC9IVE1MVGV4dEFy
ZWFFbGVtZW50SW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2h0bWwvaHRtbC9IVE1MVGV4dEFyZWFF
bGVtZW50SW1wbC5jcHAJKHJldmlzaW9uIDEyMzgzKQorKysga2h0bWwvaHRtbC9IVE1MVGV4dEFy
ZWFFbGVtZW50SW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzMywxMCArMjMzLDggQEAgdm9p
ZCBIVE1MVGV4dEFyZWFFbGVtZW50SW1wbDo6c2V0RGVmYXVsdAogICAgIFFQdHJMaXN0SXRlcmF0
b3I8Tm9kZUltcGw+IGl0KHRvUmVtb3ZlKTsKICAgICBpbnQgZXhjZXB0aW9uY29kZSA9IDA7CiAg
ICAgZm9yICg7IGl0LmN1cnJlbnQoKTsgKytpdCkgewotICAgICAgICBOb2RlSW1wbCAqbiA9IGl0
LmN1cnJlbnQoKTsKLSAgICAgICAgbi0+cmVmKCk7Ci0gICAgICAgIHJlbW92ZUNoaWxkKG4sIGV4
Y2VwdGlvbmNvZGUpOwotICAgICAgICBuLT5kZXJlZigpOworICAgICAgICBSZWZQdHI8Tm9kZUlt
cGw+IG4gPSBpdC5jdXJyZW50KCk7CisgICAgICAgIHJlbW92ZUNoaWxkKG4uZ2V0KCksIGV4Y2Vw
dGlvbmNvZGUpOwogICAgIH0KICAgICBpbnNlcnRCZWZvcmUoZ2V0RG9jdW1lbnQoKS0+Y3JlYXRl
VGV4dE5vZGUoZGVmYXVsdFZhbHVlKSxmaXJzdENoaWxkKCksIGV4Y2VwdGlvbmNvZGUpOwogICAg
IHNldFZhbHVlKGRlZmF1bHRWYWx1ZSk7CkluZGV4OiBraHRtbC9odG1sL0hUTUxTZWxlY3RFbGVt
ZW50SW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2h0bWwvaHRtbC9IVE1MU2VsZWN0RWxlbWVudElt
cGwuY3BwCShyZXZpc2lvbiAxMjM4MykKKysrIGtodG1sL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnRJ
bXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ4LDEwICsxNDgsOCBAQCB2b2lkIEhUTUxTZWxl
Y3RFbGVtZW50SW1wbDo6cmVtb3ZlKCBpbnQgCiAgICAgaWYobGlzdEluZGV4IDwgMCB8fCBpbmRl
eCA+PSBpbnQoaXRlbXMuc2l6ZSgpKSkKICAgICAgICAgcmV0dXJuOyAvLyAjIyMgd2hhdCBzaG91
bGQgd2UgZG8gPyByZW1vdmUgdGhlIGxhc3QgaXRlbT8KIAotICAgIE5vZGVJbXBsICppdGVtID0g
aXRlbXNbbGlzdEluZGV4XTsKLSAgICBpdGVtLT5yZWYoKTsKLSAgICByZW1vdmVDaGlsZChpdGVt
LCBleGNlcHRpb25jb2RlKTsKLSAgICBpdGVtLT5kZXJlZigpOworICAgIFJlZlB0cjxOb2RlSW1w
bD4gaXRlbSA9IGl0ZW1zW2xpc3RJbmRleF07CisgICAgcmVtb3ZlQ2hpbGQoaXRlbS5nZXQoKSwg
ZXhjZXB0aW9uY29kZSk7CiAgICAgaWYoICFleGNlcHRpb25jb2RlICkKICAgICAgICAgc2V0UmVj
YWxjTGlzdEl0ZW1zKCk7CiB9CkluZGV4OiBraHRtbC9odG1sL2h0bWxfaGVhZGltcGwuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBraHRtbC9odG1sL2h0bWxfaGVhZGltcGwuaAkocmV2aXNpb24gMTIzODMpCisr
KyBraHRtbC9odG1sL2h0bWxfaGVhZGltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMTA5LDcgKzEw
OSw3IEBAIHB1YmxpYzoKICAgICBET01TdHJpbmcgdHlwZSgpIGNvbnN0OwogICAgIHZvaWQgc2V0
VHlwZShjb25zdCBET01TdHJpbmcgJik7CiAKLSAgICBTdHlsZVNoZWV0SW1wbCogc2hlZXQoKSBj
b25zdCB7IHJldHVybiBtX3NoZWV0OyB9CisgICAgU3R5bGVTaGVldEltcGwqIHNoZWV0KCkgY29u
c3QgeyByZXR1cm4gbV9zaGVldC5nZXQoKTsgfQogCiAgICAgLy8gb3ZlcmxvYWQgZnJvbSBIVE1M
RWxlbWVudEltcGwKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVk
QXR0cmlidXRlSW1wbCAqYXR0cik7CkBAIC0xMzcsNyArMTM3LDcgQEAgcHVibGljOgogCiBwcm90
ZWN0ZWQ6CiAgICAga2h0bWw6OkNhY2hlZENTU1N0eWxlU2hlZXQgKm1fY2FjaGVkU2hlZXQ7Ci0g
ICAgQ1NTU3R5bGVTaGVldEltcGwgKm1fc2hlZXQ7CisgICAgUmVmUHRyPENTU1N0eWxlU2hlZXRJ
bXBsPiBtX3NoZWV0OwogICAgIERPTVN0cmluZyBtX3VybDsKICAgICBET01TdHJpbmcgbV90eXBl
OwogICAgIFFTdHJpbmcgbV9tZWRpYTsKQEAgLTI0MSwxMyArMjQxLDEyIEBAIGNsYXNzIEhUTUxT
dHlsZUVsZW1lbnRJbXBsIDogcHVibGljIEhUTUwKIHsKIHB1YmxpYzoKICAgICBIVE1MU3R5bGVF
bGVtZW50SW1wbChEb2N1bWVudEltcGwgKmRvYyk7Ci0gICAgfkhUTUxTdHlsZUVsZW1lbnRJbXBs
KCk7CiAKICAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25z
dCB7IHJldHVybiBUYWdTdGF0dXNSZXF1aXJlZDsgfQogICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9y
aXR5KCkgY29uc3QgeyByZXR1cm4gMTsgfQogICAgIHZpcnR1YWwgYm9vbCBjaGVja0RURChjb25z
dCBOb2RlSW1wbCogbmV3Q2hpbGQpIHsgcmV0dXJuIG5ld0NoaWxkLT5pc1RleHROb2RlKCk7IH0K
IAotICAgIFN0eWxlU2hlZXRJbXBsICpzaGVldCgpIGNvbnN0IHsgcmV0dXJuIG1fc2hlZXQ7IH0K
KyAgICBTdHlsZVNoZWV0SW1wbCAqc2hlZXQoKSBjb25zdCB7IHJldHVybiBtX3NoZWV0LmdldCgp
OyB9CiAKICAgICAvLyBvdmVybG9hZCBmcm9tIEhUTUxFbGVtZW50SW1wbAogICAgIHZpcnR1YWwg
dm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGVJbXBsICphdHRyKTsKQEAg
LTI2OCw3ICsyNjcsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRUeXBlKGNvbnN0IERPTVN0cmlu
ZyAmKTsKIAogcHJvdGVjdGVkOgotICAgIENTU1N0eWxlU2hlZXRJbXBsICptX3NoZWV0OworICAg
IFJlZlB0cjxDU1NTdHlsZVNoZWV0SW1wbD4gbV9zaGVldDsKICAgICBib29sIG1fbG9hZGluZzsK
ICAgICBET01TdHJpbmcgbV90eXBlOwogICAgIFFTdHJpbmcgbV9tZWRpYTsKSW5kZXg6IGtodG1s
L2h0bWwvaHRtbF90YWJsZWltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtodG1sL2h0bWwvaHRtbF90
YWJsZWltcGwuY3BwCShyZXZpc2lvbiAxMjM4MykKKysrIGtodG1sL2h0bWwvaHRtbF90YWJsZWlt
cGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zODAsMTQgKzM4MCwxMCBAQCB2b2lkIEhUTUxUYWJs
ZUVsZW1lbnRJbXBsOjpwYXJzZU1hcHBlZEF0CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkg
PT0gYm9yZGVyQXR0cikgIHsKICAgICAgICAgbV9ub0JvcmRlciA9IHRydWU7CiAgICAgICAgIGlm
IChhdHRyLT5kZWNsKCkpIHsKLSAgICAgICAgICAgIENTU1ZhbHVlSW1wbCogdmFsID0gYXR0ci0+
ZGVjbCgpLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU19QUk9QX0JPUkRFUl9MRUZUX1dJRFRIKTsK
LSAgICAgICAgICAgIGlmICh2YWwpIHsKLSAgICAgICAgICAgICAgICB2YWwtPnJlZigpOwotICAg
ICAgICAgICAgICAgIGlmICh2YWwtPmlzUHJpbWl0aXZlVmFsdWUoKSkgewotICAgICAgICAgICAg
ICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZUltcGwqIHByaW1WYWwgPSBzdGF0aWNfY2FzdDxDU1NQ
cmltaXRpdmVWYWx1ZUltcGwqPih2YWwpOwotICAgICAgICAgICAgICAgICAgICBtX25vQm9yZGVy
ID0gIXByaW1WYWwtPmdldEZsb2F0VmFsdWUoQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIp
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB2YWwtPmRlcmVmKCk7CisgICAg
ICAgICAgICBSZWZQdHI8Q1NTVmFsdWVJbXBsPiB2YWwgPSBhdHRyLT5kZWNsKCktPmdldFByb3Bl
cnR5Q1NTVmFsdWUoQ1NTX1BST1BfQk9SREVSX0xFRlRfV0lEVEgpOworICAgICAgICAgICAgaWYg
KHZhbCAmJiB2YWwtPmlzUHJpbWl0aXZlVmFsdWUoKSkgeworICAgICAgICAgICAgICAgIENTU1By
aW1pdGl2ZVZhbHVlSW1wbCogcHJpbVZhbCA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVl
SW1wbCo+KHZhbC5nZXQoKSk7CisgICAgICAgICAgICAgICAgbV9ub0JvcmRlciA9ICFwcmltVmFs
LT5nZXRGbG9hdFZhbHVlKENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgfQogICAgICAgICBlbHNlIGlmICghYXR0ci0+aXNOdWxsKCkpIHsKQEAg
LTczNSw3ICs3MzEsNyBAQCBIVE1MRWxlbWVudEltcGwgKkhUTUxUYWJsZVNlY3Rpb25FbGVtZW50
CiAgICAgICAgICAgICBhcHBlbmRDaGlsZChyLCBleGNlcHRpb25jb2RlKTsKICAgICAgICAgZWxz
ZSB7CiAgICAgICAgICAgICBOb2RlSW1wbCAqbjsKLSAgICAgICAgICAgIGlmKGluZGV4IDwgMSkK
KyAgICAgICAgICAgIGlmIChpbmRleCA8IDEpCiAgICAgICAgICAgICAgICAgbiA9IGZpcnN0Q2hp
bGQoKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBuID0gY2hpbGRyZW4tPml0
ZW0oaW5kZXgpOwpAQCAtNzQ5LDEyICs3NDUsMTEgQEAgdm9pZCBIVE1MVGFibGVTZWN0aW9uRWxl
bWVudEltcGw6OmRlbGV0ZQogewogICAgIFJlZlB0cjxOb2RlTGlzdEltcGw+IGNoaWxkcmVuID0g
Y2hpbGROb2RlcygpOwogICAgIGludCBudW1Sb3dzID0gY2hpbGRyZW4gPyAoaW50KWNoaWxkcmVu
LT5sZW5ndGgoKSA6IDA7Ci0gICAgaWYgKCBpbmRleCA9PSAtMSApIGluZGV4ID0gbnVtUm93cyAt
IDE7Ci0gICAgaWYoIGluZGV4ID49IDAgJiYgaW5kZXggPCBudW1Sb3dzICkgewotICAgICAgICBO
b2RlSW1wbCAqcm93ID0gY2hpbGRyZW4tPml0ZW0oaW5kZXgpOwotICAgICAgICByb3ctPnJlZigp
OwotICAgICAgICBIVE1MRWxlbWVudEltcGw6OnJlbW92ZUNoaWxkKHJvdywgZXhjZXB0aW9uY29k
ZSk7Ci0gICAgICAgIHJvdy0+ZGVyZWYoKTsKKyAgICBpZiAoaW5kZXggPT0gLTEpCisgICAgICAg
IGluZGV4ID0gbnVtUm93cyAtIDE7CisgICAgaWYgKGluZGV4ID49IDAgJiYgaW5kZXggPCBudW1S
b3dzKSB7CisgICAgICAgIFJlZlB0cjxOb2RlSW1wbD4gcm93ID0gY2hpbGRyZW4tPml0ZW0oaW5k
ZXgpOworICAgICAgICBIVE1MRWxlbWVudEltcGw6OnJlbW92ZUNoaWxkKHJvdy5nZXQoKSwgZXhj
ZXB0aW9uY29kZSk7CiAgICAgfSBlbHNlCiAgICAgICAgIGV4Y2VwdGlvbmNvZGUgPSBET01FeGNl
cHRpb246OklOREVYX1NJWkVfRVJSOwogfQpAQCAtOTI4LDEyICs5MjMsMTEgQEAgdm9pZCBIVE1M
VGFibGVSb3dFbGVtZW50SW1wbDo6ZGVsZXRlQ2VsbAogewogICAgIFJlZlB0cjxOb2RlTGlzdElt
cGw+IGNoaWxkcmVuID0gY2hpbGROb2RlcygpOwogICAgIGludCBudW1DZWxscyA9IGNoaWxkcmVu
ID8gY2hpbGRyZW4tPmxlbmd0aCgpIDogMDsKLSAgICBpZiAoIGluZGV4ID09IC0xICkgaW5kZXgg
PSBudW1DZWxscy0xOwotICAgIGlmKCBpbmRleCA+PSAwICYmIGluZGV4IDwgbnVtQ2VsbHMgKSB7
Ci0gICAgICAgIE5vZGVJbXBsICpyb3cgPSBjaGlsZHJlbi0+aXRlbShpbmRleCk7Ci0gICAgICAg
IHJvdy0+cmVmKCk7Ci0gICAgICAgIEhUTUxFbGVtZW50SW1wbDo6cmVtb3ZlQ2hpbGQocm93LCBl
eGNlcHRpb25jb2RlKTsKLSAgICAgICAgcm93LT5kZXJlZigpOworICAgIGlmIChpbmRleCA9PSAt
MSApCisgICAgICAgIGluZGV4ID0gbnVtQ2VsbHMtMTsKKyAgICBpZiAoaW5kZXggPj0gMCAmJiBp
bmRleCA8IG51bUNlbGxzKSB7CisgICAgICAgIFJlZlB0cjxOb2RlSW1wbD4gcm93ID0gY2hpbGRy
ZW4tPml0ZW0oaW5kZXgpOworICAgICAgICBIVE1MRWxlbWVudEltcGw6OnJlbW92ZUNoaWxkKHJv
dy5nZXQoKSwgZXhjZXB0aW9uY29kZSk7CiAgICAgfSBlbHNlCiAgICAgICAgIGV4Y2VwdGlvbmNv
ZGUgPSBET01FeGNlcHRpb246OklOREVYX1NJWkVfRVJSOwogfQo=
</data>
<flag name="review"
          id="1410"
          type_id="1"
          status="+"
          setter="mjs"
    />
          </attachment>
      

    </bug>

</bugzilla>