<?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>159024</bug_id>
          
          <creation_ts>2016-06-22 09:46:00 -0700</creation_ts>
          <short_desc>[Soup] Clean up SocketStreamHandle soup implementation</short_desc>
          <delta_ts>2016-06-23 00:23:42 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Platform</component>
          <version>WebKit Local Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Soup</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>achristensen</cc>
    
    <cc>darin</cc>
    
    <cc>zan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1204523</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-06-22 09:46:00 -0700</bug_when>
    <thetext>While debugging bug #158613 today, I realized that we could clean up and simplify the SocketStreamHandle soup implementation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1204526</commentid>
    <comment_count>1</comment_count>
      <attachid>281842</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-06-22 09:52:21 -0700</bug_when>
    <thetext>Created attachment 281842
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1204777</commentid>
    <comment_count>2</comment_count>
      <attachid>281842</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2016-06-22 23:19:55 -0700</bug_when>
    <thetext>Comment on attachment 281842
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=281842&amp;action=review

&gt; Source/WebCore/platform/network/soup/SocketStreamHandleSoup.cpp:223
&gt; +    g_source_set_callback(m_writeReadySource.get(), reinterpret_cast&lt;GSourceFunc&gt;(writeReadyCallback), this, [](gpointer handle) {
&gt; +        static_cast&lt;SocketStreamHandle*&gt;(handle)-&gt;deref();
&gt; +    });

IMO the lambda would be more readable if its header was also placed on its own line, and all three lines being indented by 4 spaces compared to the start of this expression.

The rest of this patch adopts the leaked pointer into a RefPtr&lt;&gt; wrapper, this should do the same.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1204780</commentid>
    <comment_count>3</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-06-22 23:34:55 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Comment on attachment 281842 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=281842&amp;action=review

Thanks for the review!

&gt; &gt; Source/WebCore/platform/network/soup/SocketStreamHandleSoup.cpp:223
&gt; &gt; +    g_source_set_callback(m_writeReadySource.get(), reinterpret_cast&lt;GSourceFunc&gt;(writeReadyCallback), this, [](gpointer handle) {
&gt; &gt; +        static_cast&lt;SocketStreamHandle*&gt;(handle)-&gt;deref();
&gt; &gt; +    });
&gt; 
&gt; IMO the lambda would be more readable if its header was also placed on its
&gt; own line, and all three lines being indented by 4 spaces compared to the
&gt; start of this expression.

I agree, I&apos;ll do that.

&gt; The rest of this patch adopts the leaked pointer into a RefPtr&lt;&gt; wrapper,
&gt; this should do the same.

Because in the other cases the callback is always called, even if the operation is cancelled, but in this case, if the source is destroyed before being dispatched the callback is not called and the handler leaked, that&apos;s why I&apos;m using the destroy notify that is always called. Also note that the callback is called multiple times, because by default the source continues until it&apos;s cancelled or destroyed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1204785</commentid>
    <comment_count>4</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-06-23 00:19:53 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (In reply to comment #2)
&gt; &gt; Comment on attachment 281842 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=281842&amp;action=review
&gt; 
&gt; Thanks for the review!
&gt; 
&gt; &gt; &gt; Source/WebCore/platform/network/soup/SocketStreamHandleSoup.cpp:223
&gt; &gt; &gt; +    g_source_set_callback(m_writeReadySource.get(), reinterpret_cast&lt;GSourceFunc&gt;(writeReadyCallback), this, [](gpointer handle) {
&gt; &gt; &gt; +        static_cast&lt;SocketStreamHandle*&gt;(handle)-&gt;deref();
&gt; &gt; &gt; +    });
&gt; &gt; 
&gt; &gt; IMO the lambda would be more readable if its header was also placed on its
&gt; &gt; own line, and all three lines being indented by 4 spaces compared to the
&gt; &gt; start of this expression.
&gt; 
&gt; I agree, I&apos;ll do that.
&gt; 
&gt; &gt; The rest of this patch adopts the leaked pointer into a RefPtr&lt;&gt; wrapper,
&gt; &gt; this should do the same.
&gt; 
&gt; Because in the other cases the callback is always called, even if the
&gt; operation is cancelled, but in this case, if the source is destroyed before
&gt; being dispatched the callback is not called and the handler leaked, that&apos;s
&gt; why I&apos;m using the destroy notify that is always called. Also note that the
&gt; callback is called multiple times, because by default the source continues
&gt; until it&apos;s cancelled or destroyed.

Sorry, I misunderstood, I thought you meant to adopt the ref in the source callback, not in the destroy notify callback. In this case I used explicit ref/deref because it&apos;s clearer than having a function that only adopts a ref and returns</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1204786</commentid>
    <comment_count>5</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-06-23 00:23:42 -0700</bug_when>
    <thetext>Committed r202370: &lt;http://trac.webkit.org/changeset/202370&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>281842</attachid>
            <date>2016-06-22 09:52:21 -0700</date>
            <delta_ts>2016-06-22 23:19:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wcore-soup-socket-stream-handle.diff</filename>
            <type>text/plain</type>
            <size>17376</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBkMmNlMzRkLi5hZDg5YjFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMzcg
QEAKIDIwMTYtMDYtMjIgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgogCisgICAgICAgIFtTb3VwXSBDbGVhbiB1cCBTb2NrZXRTdHJlYW1IYW5kbGUgc291cCBpbXBs
ZW1lbnRhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTU5MDI0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgU3RvcCB1c2luZyBhIGdsb2JhbCBIYXNoTWFwIHRvICJhY2l2YXRlIi8iZGVhY3RpdmF0ZSIg
aGFuZGxlcywgYW5kIGp1c3QgdGFrZSBhIHJlZmVyZW5jZSBvZiB0aGUgaGFuZGxlIGFuZAorICAg
ICAgICBwYXNzIHRoZSBvd25lcnNoaXAgdG8gdGhlIGNhbGxiYWNrcywgdXNpbmcgYSBHQ2FuY2Vs
bGFibGUgdG8gY2FuY2VsIGFsbCBhc3luYyBvcGVyYXRpb25zLgorCisgICAgICAgICogcGxhdGZv
cm0vbmV0d29yay9zb3VwL1NvY2tldFN0cmVhbUhhbmRsZS5oOgorICAgICAgICAoV2ViQ29yZTo6
U29ja2V0U3RyZWFtSGFuZGxlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3Ry
ZWFtSGFuZGxlOjppZCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9zb3Vw
L1NvY2tldFN0cmVhbUhhbmRsZVNvdXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3Ry
ZWFtSGFuZGxlOjpTb2NrZXRTdHJlYW1IYW5kbGUpOgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0
U3RyZWFtSGFuZGxlOjpjb25uZWN0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFt
SGFuZGxlOjpjb25uZWN0ZWRDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJl
YW1IYW5kbGU6OnJlYWRCeXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5k
bGU6OnJlYWRSZWFkeUNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhh
bmRsZTo6ZGlkRmFpbCk6CisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGU6OnBs
YXRmb3JtU2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGU6OnBsYXRm
b3JtQ2xvc2UpOgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlOjpiZWdpbldh
aXRpbmdGb3JTb2NrZXRXcml0YWJpbGl0eSk6CisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJl
YW1IYW5kbGU6OndyaXRlUmVhZHlDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpnZXRIYW5k
bGVGcm9tSWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6ZGVhY3RpdmF0ZUhhbmRsZSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjphY3RpdmF0ZUhhbmRsZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGU6On5Tb2NrZXRTdHJlYW1IYW5kbGUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y29ubmVjdGVkQ2FsbGJhY2spOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6cmVhZFJlYWR5Q2FsbGJhY2spOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6d3JpdGVSZWFkeUNhbGxiYWNrKTogRGVsZXRlZC4KKworMjAxNi0wNi0yMiAg
Q2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CisKICAgICAgICAgW0dU
S10gQWRkIHN1cHBvcnQgZm9yIHZhcmlhZGljIHBhcmFtZXRlcnMgdG8gR09iamVjdCBET00gYmlu
ZGluZ3MKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1
ODk0MgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAv
U29ja2V0U3RyZWFtSGFuZGxlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3Nv
dXAvU29ja2V0U3RyZWFtSGFuZGxlLmgKaW5kZXggZTMwMDkyOS4uMTdkOWExOCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvY2tldFN0cmVhbUhhbmRs
ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9Tb2NrZXRTdHJl
YW1IYW5kbGUuaApAQCAtMzcsNDQgKzM3LDQ4IEBACiAKICNpZiBVU0UoU09VUCkKIAotI2luY2x1
ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNs
dWRlIDx3dGYvZ2xpYi9HUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotICAgIGNs
YXNzIE5ldHdvcmtpbmdDb250ZXh0OwotICAgIGNsYXNzIFNvY2tldFN0cmVhbUhhbmRsZUNsaWVu
dDsKLQotICAgIGNsYXNzIFNvY2tldFN0cmVhbUhhbmRsZSA6IHB1YmxpYyBSZWZDb3VudGVkPFNv
Y2tldFN0cmVhbUhhbmRsZT4sIHB1YmxpYyBTb2NrZXRTdHJlYW1IYW5kbGVCYXNlIHsKLSAgICBw
dWJsaWM6Ci0gICAgICAgIHN0YXRpYyBSZWY8U29ja2V0U3RyZWFtSGFuZGxlPiBjcmVhdGUoY29u
c3QgVVJMJiB1cmwsIFNvY2tldFN0cmVhbUhhbmRsZUNsaWVudCogY2xpZW50LCBOZXR3b3JraW5n
Q29udGV4dCYsIGJvb2wpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU29ja2V0U3RyZWFtSGFuZGxl
KHVybCwgY2xpZW50KSk7IH0KLSAgICAgICAgc3RhdGljIFJlZjxTb2NrZXRTdHJlYW1IYW5kbGU+
IGNyZWF0ZShHU29ja2V0Q29ubmVjdGlvbiogc29ja2V0Q29ubmVjdGlvbiwgU29ja2V0U3RyZWFt
SGFuZGxlQ2xpZW50KiBjbGllbnQpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU29ja2V0U3RyZWFt
SGFuZGxlKHNvY2tldENvbm5lY3Rpb24sIGNsaWVudCkpOyB9Ci0KLSAgICAgICAgdmlydHVhbCB+
U29ja2V0U3RyZWFtSGFuZGxlKCk7Ci0gICAgICAgIHZvaWQgY29ubmVjdGVkKEdTb2NrZXRDb25u
ZWN0aW9uKiwgR0Vycm9yKik7Ci0gICAgICAgIHZvaWQgcmVhZEJ5dGVzKHNpZ25lZCBsb25nLCBH
RXJyb3IqKTsKLSAgICAgICAgdm9pZCB3cml0ZVJlYWR5KCk7Ci0gICAgICAgIHZvaWQqIGlkKCkg
eyByZXR1cm4gbV9pZDsgfQotCi0gICAgcHJvdGVjdGVkOgotICAgICAgICB2aXJ0dWFsIGludCBw
bGF0Zm9ybVNlbmQoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCk7Ci0gICAgICAgIHZpcnR1
YWwgdm9pZCBwbGF0Zm9ybUNsb3NlKCk7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBHUmVmUHRy
PEdTb2NrZXRDb25uZWN0aW9uPiBtX3NvY2tldENvbm5lY3Rpb247Ci0gICAgICAgIEdSZWZQdHI8
R0lucHV0U3RyZWFtPiBtX2lucHV0U3RyZWFtOwotICAgICAgICBHUmVmUHRyPEdQb2xsYWJsZU91
dHB1dFN0cmVhbT4gbV9vdXRwdXRTdHJlYW07Ci0gICAgICAgIEdSZWZQdHI8R1NvdXJjZT4gbV93
cml0ZVJlYWR5U291cmNlOwotICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Y2hhcltdPiBtX3JlYWRC
dWZmZXI7Ci0gICAgICAgIHZvaWQqIG1faWQ7Ci0KLSAgICAgICAgU29ja2V0U3RyZWFtSGFuZGxl
KGNvbnN0IFVSTCYsIFNvY2tldFN0cmVhbUhhbmRsZUNsaWVudCopOwotICAgICAgICBTb2NrZXRT
dHJlYW1IYW5kbGUoR1NvY2tldENvbm5lY3Rpb24qLCBTb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQq
KTsKLQotICAgICAgICB2b2lkIGJlZ2luV2FpdGluZ0ZvclNvY2tldFdyaXRhYmlsaXR5KCk7Ci0g
ICAgICAgIHZvaWQgc3RvcFdhaXRpbmdGb3JTb2NrZXRXcml0YWJpbGl0eSgpOwotICAgIH07Citj
bGFzcyBOZXR3b3JraW5nQ29udGV4dDsKK2NsYXNzIFNvY2tldFN0cmVhbUVycm9yOworY2xhc3Mg
U29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50OworCitjbGFzcyBTb2NrZXRTdHJlYW1IYW5kbGUgZmlu
YWwgOiBwdWJsaWMgUmVmQ291bnRlZDxTb2NrZXRTdHJlYW1IYW5kbGU+LCBwdWJsaWMgU29ja2V0
U3RyZWFtSGFuZGxlQmFzZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxTb2NrZXRTdHJlYW1I
YW5kbGU+IGNyZWF0ZShjb25zdCBVUkwmIHVybCwgU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50KiBj
bGllbnQsIE5ldHdvcmtpbmdDb250ZXh0JiwgYm9vbCkgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBT
b2NrZXRTdHJlYW1IYW5kbGUodXJsLCBjbGllbnQpKTsgfQorICAgIHN0YXRpYyBSZWY8U29ja2V0
U3RyZWFtSGFuZGxlPiBjcmVhdGUoR1NvY2tldENvbm5lY3Rpb24qIHNvY2tldENvbm5lY3Rpb24s
IFNvY2tldFN0cmVhbUhhbmRsZUNsaWVudCogY2xpZW50KSB7IHJldHVybiBhZG9wdFJlZigqbmV3
IFNvY2tldFN0cmVhbUhhbmRsZShzb2NrZXRDb25uZWN0aW9uLCBjbGllbnQpKTsgfQorCisgICAg
dmlydHVhbCB+U29ja2V0U3RyZWFtSGFuZGxlKCk7CisKK3ByaXZhdGU6CisgICAgU29ja2V0U3Ry
ZWFtSGFuZGxlKGNvbnN0IFVSTCYsIFNvY2tldFN0cmVhbUhhbmRsZUNsaWVudCopOworICAgIFNv
Y2tldFN0cmVhbUhhbmRsZShHU29ja2V0Q29ubmVjdGlvbiosIFNvY2tldFN0cmVhbUhhbmRsZUNs
aWVudCopOworCisgICAgaW50IHBsYXRmb3JtU2VuZChjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVu
Z3RoKSBvdmVycmlkZTsKKyAgICB2b2lkIHBsYXRmb3JtQ2xvc2UoKSBvdmVycmlkZTsKKworICAg
IHZvaWQgYmVnaW5XYWl0aW5nRm9yU29ja2V0V3JpdGFiaWxpdHkoKTsKKyAgICB2b2lkIHN0b3BX
YWl0aW5nRm9yU29ja2V0V3JpdGFiaWxpdHkoKTsKKworICAgIHN0YXRpYyB2b2lkIGNvbm5lY3Rl
ZENhbGxiYWNrKEdTb2NrZXRDbGllbnQqLCBHQXN5bmNSZXN1bHQqLCBTb2NrZXRTdHJlYW1IYW5k
bGUqKTsKKyAgICBzdGF0aWMgdm9pZCByZWFkUmVhZHlDYWxsYmFjayhHSW5wdXRTdHJlYW0qLCBH
QXN5bmNSZXN1bHQqLCBTb2NrZXRTdHJlYW1IYW5kbGUqKTsKKyAgICBzdGF0aWMgZ2Jvb2xlYW4g
d3JpdGVSZWFkeUNhbGxiYWNrKEdQb2xsYWJsZU91dHB1dFN0cmVhbSosIFNvY2tldFN0cmVhbUhh
bmRsZSopOworCisgICAgdm9pZCBjb25uZWN0ZWQoR1JlZlB0cjxHU29ja2V0Q29ubmVjdGlvbj4m
Jik7CisgICAgdm9pZCByZWFkQnl0ZXMoZ3NzaXplKTsKKyAgICB2b2lkIGRpZEZhaWwoU29ja2V0
U3RyZWFtRXJyb3ImJik7CisgICAgdm9pZCB3cml0ZVJlYWR5KCk7CisKKyAgICBHUmVmUHRyPEdT
b2NrZXRDb25uZWN0aW9uPiBtX3NvY2tldENvbm5lY3Rpb247CisgICAgR1JlZlB0cjxHSW5wdXRT
dHJlYW0+IG1faW5wdXRTdHJlYW07CisgICAgR1JlZlB0cjxHUG9sbGFibGVPdXRwdXRTdHJlYW0+
IG1fb3V0cHV0U3RyZWFtOworICAgIEdSZWZQdHI8R1NvdXJjZT4gbV93cml0ZVJlYWR5U291cmNl
OworICAgIEdSZWZQdHI8R0NhbmNlbGxhYmxlPiBtX2NhbmNlbGxhYmxlOworICAgIHN0ZDo6dW5p
cXVlX3B0cjxjaGFyW10+IG1fcmVhZEJ1ZmZlcjsKK307CiAKIH0gIC8vIG5hbWVzcGFjZSBXZWJD
b3JlCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9T
b2NrZXRTdHJlYW1IYW5kbGVTb3VwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvc291cC9Tb2NrZXRTdHJlYW1IYW5kbGVTb3VwLmNwcAppbmRleCBmODQyZTg0Li5hNDBhM2Nl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvU29ja2V0
U3RyZWFtSGFuZGxlU291cC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9zb3VwL1NvY2tldFN0cmVhbUhhbmRsZVNvdXAuY3BwCkBAIC01MCwxMDQgKzUwLDEwOCBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLS8vIFRoZXNlIGZ1bmN0aW9ucyBpbW1lZGlhdGVseSBj
YWxsIHRoZSBzaW1pbGFybHkgbmFtZWQgU29ja2V0U3RyZWFtSGFuZGxlIG1ldGhvZHMuCi1zdGF0
aWMgdm9pZCBjb25uZWN0ZWRDYWxsYmFjayhHU29ja2V0Q2xpZW50KiwgR0FzeW5jUmVzdWx0Kiwg
dm9pZCopOwotc3RhdGljIHZvaWQgcmVhZFJlYWR5Q2FsbGJhY2soR0lucHV0U3RyZWFtKiwgR0Fz
eW5jUmVzdWx0Kiwgdm9pZCopOwotc3RhdGljIGdib29sZWFuIHdyaXRlUmVhZHlDYWxsYmFjayhH
UG9sbGFibGVPdXRwdXRTdHJlYW0qLCB2b2lkKik7Ci0KLS8vIEhhdmluZyBhIGxpc3Qgb2YgYWN0
aXZlIGhhbmRsZXMgbWVhbnMgdGhhdCB3ZSBkbyBub3QgaGF2ZSB0byB3b3JyeSBhYm91dCBXZWJD
b3JlCi0vLyByZWZlcmVuY2UgY291bnRpbmcgaW4gR0xpYiBjYWxsYmFja3MuIE9uY2UgdGhlIGhh
bmRsZSBpcyBvZmYgdGhlIGFjdGl2ZSBoYW5kbGVzIGxpc3QKLS8vIHdlIGp1c3QgaWdub3JlIGl0
IGluIHRoZSBjYWxsYmFjay4gV2UgYXZvaWQgYSBsb3Qgb2YgZXh0cmEgY2hlY2tzIGFuZCB0cmlj
a3kKLS8vIHNpdHVhdGlvbnMgdGhpcyB3YXkuCi1zdGF0aWMgSGFzaE1hcDx2b2lkKiwgU29ja2V0
U3RyZWFtSGFuZGxlKj4gZ0FjdGl2ZUhhbmRsZXM7Ci1DT01QSUxFX0FTU0VSVChIYXNoVHJhaXRz
PFNvY2tldFN0cmVhbUhhbmRsZSo+OjplbXB0eVZhbHVlSXNaZXJvLCBlbXB0eU1hcFZhbHVlX2lz
XzApOwotCi1zdGF0aWMgU29ja2V0U3RyZWFtSGFuZGxlKiBnZXRIYW5kbGVGcm9tSWQodm9pZCog
aWQpCi17Ci0gICAgcmV0dXJuIGdBY3RpdmVIYW5kbGVzLmdldChpZCk7Ci19Ci0KLXN0YXRpYyB2
b2lkIGRlYWN0aXZhdGVIYW5kbGUoU29ja2V0U3RyZWFtSGFuZGxlJiBoYW5kbGUpCi17Ci0gICAg
Z0FjdGl2ZUhhbmRsZXMucmVtb3ZlKGhhbmRsZS5pZCgpKTsKLX0KLQotc3RhdGljIHZvaWQqIGFj
dGl2YXRlSGFuZGxlKFNvY2tldFN0cmVhbUhhbmRsZSYgaGFuZGxlKQotewotICAgIC8vIFRoZSBm
aXJzdCBpZCBjYW5ub3QgYmUgMCwgYmVjYXVzZSBpdCBjb25mbGljdHMgd2l0aCB0aGUgSGFzaE1h
cCBlbXB0eVZhbHVlLgotICAgIHN0YXRpYyBnaW50IGN1cnJlbnRIYW5kbGVJZCA9IDE7Ci0gICAg
dm9pZCogaWQgPSBHSU5UX1RPX1BPSU5URVIoY3VycmVudEhhbmRsZUlkKyspOwotICAgIGdBY3Rp
dmVIYW5kbGVzLnNldChpZCwgJmhhbmRsZSk7Ci0gICAgcmV0dXJuIGlkOwotfQotCiBTb2NrZXRT
dHJlYW1IYW5kbGU6OlNvY2tldFN0cmVhbUhhbmRsZShjb25zdCBVUkwmIHVybCwgU29ja2V0U3Ry
ZWFtSGFuZGxlQ2xpZW50KiBjbGllbnQpCiAgICAgOiBTb2NrZXRTdHJlYW1IYW5kbGVCYXNlKHVy
bCwgY2xpZW50KQorICAgICwgbV9jYW5jZWxsYWJsZShhZG9wdEdSZWYoZ19jYW5jZWxsYWJsZV9u
ZXcoKSkpCiB7CiAgICAgTE9HKE5ldHdvcmssICJTb2NrZXRTdHJlYW1IYW5kbGUgJXAgbmV3IGNs
aWVudCAlcCIsIHRoaXMsIG1fY2xpZW50KTsKLSAgICB1bnNpZ25lZCBpbnQgcG9ydCA9IHVybC5o
YXNQb3J0KCkgPyB1cmwucG9ydCgpIDogKHVybC5wcm90b2NvbElzKCJ3c3MiKSA/IDQ0MyA6IDgw
KTsKKyAgICB1bnNpZ25lZCBwb3J0ID0gdXJsLmhhc1BvcnQoKSA/IHVybC5wb3J0KCkgOiAodXJs
LnByb3RvY29sSXMoIndzcyIpID8gNDQzIDogODApOwogCi0gICAgbV9pZCA9IGFjdGl2YXRlSGFu
ZGxlKCp0aGlzKTsKICAgICBHUmVmUHRyPEdTb2NrZXRDbGllbnQ+IHNvY2tldENsaWVudCA9IGFk
b3B0R1JlZihnX3NvY2tldF9jbGllbnRfbmV3KCkpOwogICAgIGlmICh1cmwucHJvdG9jb2xJcygi
d3NzIikpCiAgICAgICAgIGdfc29ja2V0X2NsaWVudF9zZXRfdGxzKHNvY2tldENsaWVudC5nZXQo
KSwgVFJVRSk7Ci0gICAgZ19zb2NrZXRfY2xpZW50X2Nvbm5lY3RfdG9faG9zdF9hc3luYyhzb2Nr
ZXRDbGllbnQuZ2V0KCksIHVybC5ob3N0KCkudXRmOCgpLmRhdGEoKSwgcG9ydCwgMCwKLSAgICAg
ICAgcmVpbnRlcnByZXRfY2FzdDxHQXN5bmNSZWFkeUNhbGxiYWNrPihjb25uZWN0ZWRDYWxsYmFj
ayksIG1faWQpOworICAgIFJlZlB0cjxTb2NrZXRTdHJlYW1IYW5kbGU+IHByb3RlY3RlZFRoaXMo
dGhpcyk7CisgICAgZ19zb2NrZXRfY2xpZW50X2Nvbm5lY3RfdG9faG9zdF9hc3luYyhzb2NrZXRD
bGllbnQuZ2V0KCksIHVybC5ob3N0KCkudXRmOCgpLmRhdGEoKSwgcG9ydCwgbV9jYW5jZWxsYWJs
ZS5nZXQoKSwKKyAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxHQXN5bmNSZWFkeUNhbGxiYWNrPihj
b25uZWN0ZWRDYWxsYmFjayksIHByb3RlY3RlZFRoaXMubGVha1JlZigpKTsKIH0KIAogU29ja2V0
U3RyZWFtSGFuZGxlOjpTb2NrZXRTdHJlYW1IYW5kbGUoR1NvY2tldENvbm5lY3Rpb24qIHNvY2tl
dENvbm5lY3Rpb24sIFNvY2tldFN0cmVhbUhhbmRsZUNsaWVudCogY2xpZW50KQogICAgIDogU29j
a2V0U3RyZWFtSGFuZGxlQmFzZShVUkwoKSwgY2xpZW50KQorICAgICwgbV9jYW5jZWxsYWJsZShh
ZG9wdEdSZWYoZ19jYW5jZWxsYWJsZV9uZXcoKSkpCiB7CiAgICAgTE9HKE5ldHdvcmssICJTb2Nr
ZXRTdHJlYW1IYW5kbGUgJXAgbmV3IGNsaWVudCAlcCIsIHRoaXMsIG1fY2xpZW50KTsKLSAgICBt
X2lkID0gYWN0aXZhdGVIYW5kbGUoKnRoaXMpOwotICAgIGNvbm5lY3RlZChzb2NrZXRDb25uZWN0
aW9uLCAwKTsKKyAgICBHUmVmUHRyPEdTb2NrZXRDb25uZWN0aW9uPiBjb25uZWN0aW9uID0gc29j
a2V0Q29ubmVjdGlvbjsKKyAgICBjb25uZWN0ZWQoV1RGTW92ZShjb25uZWN0aW9uKSk7CiB9CiAK
IFNvY2tldFN0cmVhbUhhbmRsZTo6flNvY2tldFN0cmVhbUhhbmRsZSgpCiB7CiAgICAgTE9HKE5l
dHdvcmssICJTb2NrZXRTdHJlYW1IYW5kbGUgJXAgZGVsZXRlIiwgdGhpcyk7Ci0gICAgLy8gSWYg
Zm9yIHNvbWUgcmVhc29uIHdlIHdlcmUgZGVzdHJveWVkIHdpdGhvdXQgY2xvc2luZywgZW5zdXJl
IHRoYXQgd2UgYXJlIGRlYWN0aXZhdGVkLgotICAgIGRlYWN0aXZhdGVIYW5kbGUoKnRoaXMpOwog
ICAgIHNldENsaWVudChudWxscHRyKTsKIH0KIAotdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OmNv
bm5lY3RlZChHU29ja2V0Q29ubmVjdGlvbiogc29ja2V0Q29ubmVjdGlvbiwgR0Vycm9yKiBlcnJv
cikKK3ZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjpjb25uZWN0ZWQoR1JlZlB0cjxHU29ja2V0Q29u
bmVjdGlvbj4mJiBzb2NrZXRDb25uZWN0aW9uKQogewotICAgIGlmIChlcnJvcikgewotICAgICAg
ICBtX2NsaWVudC0+ZGlkRmFpbFNvY2tldFN0cmVhbSgqdGhpcywgU29ja2V0U3RyZWFtRXJyb3Io
ZXJyb3ItPmNvZGUsIGVycm9yLT5tZXNzYWdlKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBtX3NvY2tldENvbm5lY3Rpb24gPSBzb2NrZXRDb25uZWN0aW9uOworICAgIG1fc29ja2V0
Q29ubmVjdGlvbiA9IFdURk1vdmUoc29ja2V0Q29ubmVjdGlvbik7CiAgICAgbV9vdXRwdXRTdHJl
YW0gPSBHX1BPTExBQkxFX09VVFBVVF9TVFJFQU0oZ19pb19zdHJlYW1fZ2V0X291dHB1dF9zdHJl
YW0oR19JT19TVFJFQU0obV9zb2NrZXRDb25uZWN0aW9uLmdldCgpKSkpOwogICAgIG1faW5wdXRT
dHJlYW0gPSBnX2lvX3N0cmVhbV9nZXRfaW5wdXRfc3RyZWFtKEdfSU9fU1RSRUFNKG1fc29ja2V0
Q29ubmVjdGlvbi5nZXQoKSkpOwotCiAgICAgbV9yZWFkQnVmZmVyID0gc3RkOjptYWtlX3VuaXF1
ZTxjaGFyW10+KFJFQURfQlVGRkVSX1NJWkUpOwotICAgIGdfaW5wdXRfc3RyZWFtX3JlYWRfYXN5
bmMobV9pbnB1dFN0cmVhbS5nZXQoKSwgbV9yZWFkQnVmZmVyLmdldCgpLCBSRUFEX0JVRkZFUl9T
SVpFLCBHX1BSSU9SSVRZX0RFRkFVTFQsIDAsCi0gICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8R0Fz
eW5jUmVhZHlDYWxsYmFjaz4ocmVhZFJlYWR5Q2FsbGJhY2spLCBtX2lkKTsKKworICAgIFJlZlB0
cjxTb2NrZXRTdHJlYW1IYW5kbGU+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgZ19pbnB1dF9z
dHJlYW1fcmVhZF9hc3luYyhtX2lucHV0U3RyZWFtLmdldCgpLCBtX3JlYWRCdWZmZXIuZ2V0KCks
IFJFQURfQlVGRkVSX1NJWkUsIEdfUFJJT1JJVFlfREVGQVVMVCwgbV9jYW5jZWxsYWJsZS5nZXQo
KSwKKyAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxHQXN5bmNSZWFkeUNhbGxiYWNrPihyZWFkUmVh
ZHlDYWxsYmFjayksIHByb3RlY3RlZFRoaXMubGVha1JlZigpKTsKIAogICAgIG1fc3RhdGUgPSBP
cGVuOwogICAgIG1fY2xpZW50LT5kaWRPcGVuU29ja2V0U3RyZWFtKCp0aGlzKTsKIH0KIAotdm9p
ZCBTb2NrZXRTdHJlYW1IYW5kbGU6OnJlYWRCeXRlcyhzaWduZWQgbG9uZyBieXRlc1JlYWQsIEdF
cnJvciogZXJyb3IpCit2b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6Y29ubmVjdGVkQ2FsbGJhY2so
R1NvY2tldENsaWVudCogY2xpZW50LCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgU29ja2V0U3RyZWFt
SGFuZGxlKiBoYW5kbGUpCiB7Ci0gICAgaWYgKGVycm9yKSB7Ci0gICAgICAgIG1fY2xpZW50LT5k
aWRGYWlsU29ja2V0U3RyZWFtKCp0aGlzLCBTb2NrZXRTdHJlYW1FcnJvcihlcnJvci0+Y29kZSwg
ZXJyb3ItPm1lc3NhZ2UpKTsKKyAgICBSZWZQdHI8U29ja2V0U3RyZWFtSGFuZGxlPiBwcm90ZWN0
ZWRUaGlzID0gYWRvcHRSZWYoaGFuZGxlKTsKKworICAgIC8vIEFsd2F5cyBmaW5pc2ggdGhlIGNv
bm5lY3Rpb24sIGV2ZW4gaWYgdGhpcyBTb2NrZXRTdHJlYW1IYW5kbGUgd2FzIGNhbmNlbGxlZCBl
YXJsaWVyLgorICAgIEdVbmlxdWVPdXRQdHI8R0Vycm9yPiBlcnJvcjsKKyAgICBHUmVmUHRyPEdT
b2NrZXRDb25uZWN0aW9uPiBzb2NrZXRDb25uZWN0aW9uID0gYWRvcHRHUmVmKGdfc29ja2V0X2Ns
aWVudF9jb25uZWN0X3RvX2hvc3RfZmluaXNoKGNsaWVudCwgcmVzdWx0LCAmZXJyb3Iub3V0UHRy
KCkpKTsKKworICAgIC8vIFRoZSBTb2NrZXRTdHJlYW1IYW5kbGUgaGFzIGJlZW4gY2FuY2VsbGVk
LCBzbyBqdXN0IGNsb3NlIHRoZSBjb25uZWN0aW9uLCBpZ25vcmluZyBlcnJvcnMuCisgICAgaWYg
KGdfY2FuY2VsbGFibGVfaXNfY2FuY2VsbGVkKGhhbmRsZS0+bV9jYW5jZWxsYWJsZS5nZXQoKSkp
IHsKKyAgICAgICAgaWYgKHNvY2tldENvbm5lY3Rpb24pCisgICAgICAgICAgICBnX2lvX3N0cmVh
bV9jbG9zZShHX0lPX1NUUkVBTShzb2NrZXRDb25uZWN0aW9uLmdldCgpKSwgbnVsbHB0ciwgbnVs
bHB0cik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKKyAgICBpZiAoZXJyb3IpCisgICAgICAg
IGhhbmRsZS0+ZGlkRmFpbChTb2NrZXRTdHJlYW1FcnJvcihlcnJvci0+Y29kZSwgZXJyb3ItPm1l
c3NhZ2UpKTsKKyAgICBlbHNlCisgICAgICAgIGhhbmRsZS0+Y29ubmVjdGVkKFdURk1vdmUoc29j
a2V0Q29ubmVjdGlvbikpOworfQorCit2b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6cmVhZEJ5dGVz
KGdzc2l6ZSBieXRlc1JlYWQpCit7CiAgICAgaWYgKCFieXRlc1JlYWQpIHsKICAgICAgICAgY2xv
c2UoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIC8vIFRoZSBjbGllbnQgY2FuIGNs
b3NlIHRoZSBoYW5kbGUsIHBvdGVudGlhbGx5IHJlbW92aW5nIHRoZSBsYXN0IHJlZmVyZW5jZS4K
LSAgICBSZWY8U29ja2V0U3RyZWFtSGFuZGxlPiBwcm90ZWN0ZWRUaGlzKCp0aGlzKTsgCisgICAg
UmVmUHRyPFNvY2tldFN0cmVhbUhhbmRsZT4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICBtX2Ns
aWVudC0+ZGlkUmVjZWl2ZVNvY2tldFN0cmVhbURhdGEoKnRoaXMsIG1fcmVhZEJ1ZmZlci5nZXQo
KSwgYnl0ZXNSZWFkKTsKLSAgICBpZiAobV9pbnB1dFN0cmVhbSkgLy8gVGhlIGNsaWVudCBtYXkg
aGF2ZSBjbG9zZWQgdGhlIGNvbm5lY3Rpb24uCi0gICAgICAgIGdfaW5wdXRfc3RyZWFtX3JlYWRf
YXN5bmMobV9pbnB1dFN0cmVhbS5nZXQoKSwgbV9yZWFkQnVmZmVyLmdldCgpLCBSRUFEX0JVRkZF
Ul9TSVpFLCBHX1BSSU9SSVRZX0RFRkFVTFQsIDAsCi0gICAgICAgICAgICByZWludGVycHJldF9j
YXN0PEdBc3luY1JlYWR5Q2FsbGJhY2s+KHJlYWRSZWFkeUNhbGxiYWNrKSwgbV9pZCk7CisgICAg
aWYgKG1faW5wdXRTdHJlYW0pIHsKKyAgICAgICAgZ19pbnB1dF9zdHJlYW1fcmVhZF9hc3luYyht
X2lucHV0U3RyZWFtLmdldCgpLCBtX3JlYWRCdWZmZXIuZ2V0KCksIFJFQURfQlVGRkVSX1NJWkUs
IEdfUFJJT1JJVFlfREVGQVVMVCwgbV9jYW5jZWxsYWJsZS5nZXQoKSwKKyAgICAgICAgICAgIHJl
aW50ZXJwcmV0X2Nhc3Q8R0FzeW5jUmVhZHlDYWxsYmFjaz4ocmVhZFJlYWR5Q2FsbGJhY2spLCBw
cm90ZWN0ZWRUaGlzLmxlYWtSZWYoKSk7CisgICAgfQorfQorCit2b2lkIFNvY2tldFN0cmVhbUhh
bmRsZTo6cmVhZFJlYWR5Q2FsbGJhY2soR0lucHV0U3RyZWFtKiBzdHJlYW0sIEdBc3luY1Jlc3Vs
dCogcmVzdWx0LCBTb2NrZXRTdHJlYW1IYW5kbGUqIGhhbmRsZSkKK3sKKyAgICBSZWZQdHI8U29j
a2V0U3RyZWFtSGFuZGxlPiBwcm90ZWN0ZWRUaGlzID0gYWRvcHRSZWYoaGFuZGxlKTsKKworICAg
IC8vIEFsd2F5cyBmaW5pc2ggdGhlIHJlYWQsIGV2ZW4gaWYgdGhpcyBTb2NrZXRTdHJlYW1IYW5k
bGUgd2FzIGNhbmNlbGxlZCBlYXJsaWVyLgorICAgIEdVbmlxdWVPdXRQdHI8R0Vycm9yPiBlcnJv
cjsKKyAgICBnc3NpemUgYnl0ZXNSZWFkID0gZ19pbnB1dF9zdHJlYW1fcmVhZF9maW5pc2goc3Ry
ZWFtLCByZXN1bHQsICZlcnJvci5vdXRQdHIoKSk7CisKKyAgICBpZiAoZ19jYW5jZWxsYWJsZV9p
c19jYW5jZWxsZWQoaGFuZGxlLT5tX2NhbmNlbGxhYmxlLmdldCgpKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgaWYgKGVycm9yKQorICAgICAgICBoYW5kbGUtPmRpZEZhaWwoU29ja2V0U3RyZWFt
RXJyb3IoZXJyb3ItPmNvZGUsIGVycm9yLT5tZXNzYWdlKSk7CisgICAgZWxzZQorICAgICAgICBo
YW5kbGUtPnJlYWRCeXRlcyhieXRlc1JlYWQpOworfQorCit2b2lkIFNvY2tldFN0cmVhbUhhbmRs
ZTo6ZGlkRmFpbChTb2NrZXRTdHJlYW1FcnJvciYmIGVycm9yKQoreworICAgIG1fY2xpZW50LT5k
aWRGYWlsU29ja2V0U3RyZWFtKCp0aGlzLCBXVEZNb3ZlKGVycm9yKSk7CiB9CiAKIHZvaWQgU29j
a2V0U3RyZWFtSGFuZGxlOjp3cml0ZVJlYWR5KCkKQEAgLTE2OCwxMiArMTcyLDEyIEBAIGludCBT
b2NrZXRTdHJlYW1IYW5kbGU6OnBsYXRmb3JtU2VuZChjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVu
Z3RoKQogICAgICAgICByZXR1cm4gMDsKIAogICAgIEdVbmlxdWVPdXRQdHI8R0Vycm9yPiBlcnJv
cjsKLSAgICBnc3NpemUgd3JpdHRlbiA9IGdfcG9sbGFibGVfb3V0cHV0X3N0cmVhbV93cml0ZV9u
b25ibG9ja2luZyhtX291dHB1dFN0cmVhbS5nZXQoKSwgZGF0YSwgbGVuZ3RoLCAwLCAmZXJyb3Iu
b3V0UHRyKCkpOworICAgIGdzc2l6ZSB3cml0dGVuID0gZ19wb2xsYWJsZV9vdXRwdXRfc3RyZWFt
X3dyaXRlX25vbmJsb2NraW5nKG1fb3V0cHV0U3RyZWFtLmdldCgpLCBkYXRhLCBsZW5ndGgsIG1f
Y2FuY2VsbGFibGUuZ2V0KCksICZlcnJvci5vdXRQdHIoKSk7CiAgICAgaWYgKGVycm9yKSB7CiAg
ICAgICAgIGlmIChnX2Vycm9yX21hdGNoZXMoZXJyb3IuZ2V0KCksIEdfSU9fRVJST1IsIEdfSU9f
RVJST1JfV09VTERfQkxPQ0spKQogICAgICAgICAgICAgYmVnaW5XYWl0aW5nRm9yU29ja2V0V3Jp
dGFiaWxpdHkoKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9jbGllbnQtPmRpZEZhaWxT
b2NrZXRTdHJlYW0oKnRoaXMsIFNvY2tldFN0cmVhbUVycm9yKGVycm9yLT5jb2RlLCBlcnJvci0+
bWVzc2FnZSkpOworICAgICAgICAgICAgZGlkRmFpbChTb2NrZXRTdHJlYW1FcnJvcihlcnJvci0+
Y29kZSwgZXJyb3ItPm1lc3NhZ2UpKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCkBAIC0x
ODgsMjAgKzE5MiwyMCBAQCBpbnQgU29ja2V0U3RyZWFtSGFuZGxlOjpwbGF0Zm9ybVNlbmQoY29u
c3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCkKIHZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjpwbGF0
Zm9ybUNsb3NlKCkKIHsKICAgICBMT0coTmV0d29yaywgIlNvY2tldFN0cmVhbUhhbmRsZSAlcCBw
bGF0Zm9ybUNsb3NlIiwgdGhpcyk7Ci0gICAgLy8gV2UgcmVtb3ZlIHRoaXMgaGFuZGxlIGZyb20g
dGhlIGFjdGl2ZSBoYW5kbGVzIGxpc3QgZmlyc3QsIHRvIGRpc2FibGUgYWxsIGNhbGxiYWNrcy4K
LSAgICBkZWFjdGl2YXRlSGFuZGxlKCp0aGlzKTsKKyAgICAvLyBXZSBjYW5jZWwgdGhpcyBoYW5k
bGUgZmlyc3QgdG8gZGlzYWJsZSBhbGwgY2FsbGJhY2tzLgorICAgIGdfY2FuY2VsbGFibGVfY2Fu
Y2VsKG1fY2FuY2VsbGFibGUuZ2V0KCkpOwogICAgIHN0b3BXYWl0aW5nRm9yU29ja2V0V3JpdGFi
aWxpdHkoKTsKIAogICAgIGlmIChtX3NvY2tldENvbm5lY3Rpb24pIHsKICAgICAgICAgR1VuaXF1
ZU91dFB0cjxHRXJyb3I+IGVycm9yOwotICAgICAgICBnX2lvX3N0cmVhbV9jbG9zZShHX0lPX1NU
UkVBTShtX3NvY2tldENvbm5lY3Rpb24uZ2V0KCkpLCAwLCAmZXJyb3Iub3V0UHRyKCkpOworICAg
ICAgICBnX2lvX3N0cmVhbV9jbG9zZShHX0lPX1NUUkVBTShtX3NvY2tldENvbm5lY3Rpb24uZ2V0
KCkpLCBudWxscHRyLCAmZXJyb3Iub3V0UHRyKCkpOwogICAgICAgICBpZiAoZXJyb3IpCi0gICAg
ICAgICAgICBtX2NsaWVudC0+ZGlkRmFpbFNvY2tldFN0cmVhbSgqdGhpcywgU29ja2V0U3RyZWFt
RXJyb3IoZXJyb3ItPmNvZGUsIGVycm9yLT5tZXNzYWdlKSk7Ci0gICAgICAgIG1fc29ja2V0Q29u
bmVjdGlvbiA9IDA7CisgICAgICAgICAgICBkaWRGYWlsKFNvY2tldFN0cmVhbUVycm9yKGVycm9y
LT5jb2RlLCBlcnJvci0+bWVzc2FnZSkpOworICAgICAgICBtX3NvY2tldENvbm5lY3Rpb24gPSBu
dWxscHRyOwogICAgIH0KIAotICAgIG1fb3V0cHV0U3RyZWFtID0gMDsKLSAgICBtX2lucHV0U3Ry
ZWFtID0gMDsKKyAgICBtX291dHB1dFN0cmVhbSA9IG51bGxwdHI7CisgICAgbV9pbnB1dFN0cmVh
bSA9IG51bGxwdHI7CiAgICAgbV9yZWFkQnVmZmVyID0gbnVsbHB0cjsKIAogICAgIG1fY2xpZW50
LT5kaWRDbG9zZVNvY2tldFN0cmVhbSgqdGhpcyk7CkBAIC0yMTIsOCArMjE2LDExIEBAIHZvaWQg
U29ja2V0U3RyZWFtSGFuZGxlOjpiZWdpbldhaXRpbmdGb3JTb2NrZXRXcml0YWJpbGl0eSgpCiAg
ICAgaWYgKG1fd3JpdGVSZWFkeVNvdXJjZSkgLy8gQWxyZWFkeSB3YWl0aW5nLgogICAgICAgICBy
ZXR1cm47CiAKLSAgICBtX3dyaXRlUmVhZHlTb3VyY2UgPSBhZG9wdEdSZWYoZ19wb2xsYWJsZV9v
dXRwdXRfc3RyZWFtX2NyZWF0ZV9zb3VyY2UobV9vdXRwdXRTdHJlYW0uZ2V0KCksIDApKTsKLSAg
ICBnX3NvdXJjZV9zZXRfY2FsbGJhY2sobV93cml0ZVJlYWR5U291cmNlLmdldCgpLCByZWludGVy
cHJldF9jYXN0PEdTb3VyY2VGdW5jPih3cml0ZVJlYWR5Q2FsbGJhY2spLCBtX2lkLCAwKTsKKyAg
ICBtX3dyaXRlUmVhZHlTb3VyY2UgPSBhZG9wdEdSZWYoZ19wb2xsYWJsZV9vdXRwdXRfc3RyZWFt
X2NyZWF0ZV9zb3VyY2UobV9vdXRwdXRTdHJlYW0uZ2V0KCksIG1fY2FuY2VsbGFibGUuZ2V0KCkp
KTsKKyAgICByZWYoKTsKKyAgICBnX3NvdXJjZV9zZXRfY2FsbGJhY2sobV93cml0ZVJlYWR5U291
cmNlLmdldCgpLCByZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPih3cml0ZVJlYWR5Q2FsbGJh
Y2spLCB0aGlzLCBbXShncG9pbnRlciBoYW5kbGUpIHsKKyAgICAgICAgc3RhdGljX2Nhc3Q8U29j
a2V0U3RyZWFtSGFuZGxlKj4oaGFuZGxlKS0+ZGVyZWYoKTsKKyAgICB9KTsKICAgICBnX3NvdXJj
ZV9hdHRhY2gobV93cml0ZVJlYWR5U291cmNlLmdldCgpLCBnX21haW5fY29udGV4dF9nZXRfdGhy
ZWFkX2RlZmF1bHQoKSk7CiB9CiAKQEAgLTIyNiw0NCArMjMzLDEzIEBAIHZvaWQgU29ja2V0U3Ry
ZWFtSGFuZGxlOjpzdG9wV2FpdGluZ0ZvclNvY2tldFdyaXRhYmlsaXR5KCkKICAgICBtX3dyaXRl
UmVhZHlTb3VyY2UgPSBudWxscHRyOwogfQogCi1zdGF0aWMgdm9pZCBjb25uZWN0ZWRDYWxsYmFj
ayhHU29ja2V0Q2xpZW50KiBjbGllbnQsIEdBc3luY1Jlc3VsdCogcmVzdWx0LCB2b2lkKiBpZCkK
LXsKLSAgICAvLyBBbHdheXMgZmluaXNoIHRoZSBjb25uZWN0aW9uLCBldmVuIGlmIHRoaXMgU29j
a2V0U3RyZWFtSGFuZGxlIHdhcyBkZWFjdGl2YXRlZCBlYXJsaWVyLgotICAgIEdVbmlxdWVPdXRQ
dHI8R0Vycm9yPiBlcnJvcjsKLSAgICBHU29ja2V0Q29ubmVjdGlvbiogc29ja2V0Q29ubmVjdGlv
biA9IGdfc29ja2V0X2NsaWVudF9jb25uZWN0X3RvX2hvc3RfZmluaXNoKGNsaWVudCwgcmVzdWx0
LCAmZXJyb3Iub3V0UHRyKCkpOwotCi0gICAgLy8gVGhlIFNvY2tldFN0cmVhbUhhbmRsZSBoYXMg
YmVlbiBkZWFjdGl2YXRlZCwgc28ganVzdCBjbG9zZSB0aGUgY29ubmVjdGlvbiwgaWdub3Jpbmcg
ZXJyb3JzLgotICAgIFNvY2tldFN0cmVhbUhhbmRsZSogaGFuZGxlID0gZ2V0SGFuZGxlRnJvbUlk
KGlkKTsKLSAgICBpZiAoIWhhbmRsZSkgewotICAgICAgICBpZiAoc29ja2V0Q29ubmVjdGlvbikK
LSAgICAgICAgICAgIGdfaW9fc3RyZWFtX2Nsb3NlKEdfSU9fU1RSRUFNKHNvY2tldENvbm5lY3Rp
b24pLCAwLCAwKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGhhbmRsZS0+Y29ubmVj
dGVkKHNvY2tldENvbm5lY3Rpb24sIGVycm9yLmdldCgpKTsKLX0KLQotc3RhdGljIHZvaWQgcmVh
ZFJlYWR5Q2FsbGJhY2soR0lucHV0U3RyZWFtKiBzdHJlYW0sIEdBc3luY1Jlc3VsdCogcmVzdWx0
LCB2b2lkKiBpZCkKLXsKLSAgICAvLyBBbHdheXMgZmluaXNoIHRoZSByZWFkLCBldmVuIGlmIHRo
aXMgU29ja2V0U3RyZWFtSGFuZGxlIHdhcyBkZWFjdGl2YXRlZCBlYXJsaWVyLgotICAgIEdVbmlx
dWVPdXRQdHI8R0Vycm9yPiBlcnJvcjsKLSAgICBnc3NpemUgYnl0ZXNSZWFkID0gZ19pbnB1dF9z
dHJlYW1fcmVhZF9maW5pc2goc3RyZWFtLCByZXN1bHQsICZlcnJvci5vdXRQdHIoKSk7Ci0KLSAg
ICBTb2NrZXRTdHJlYW1IYW5kbGUqIGhhbmRsZSA9IGdldEhhbmRsZUZyb21JZChpZCk7Ci0gICAg
aWYgKCFoYW5kbGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIGhhbmRsZS0+cmVhZEJ5dGVzKGJ5
dGVzUmVhZCwgZXJyb3IuZ2V0KCkpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gd3JpdGVSZWFkeUNh
bGxiYWNrKEdQb2xsYWJsZU91dHB1dFN0cmVhbSosIHZvaWQqIGlkKQorZ2Jvb2xlYW4gU29ja2V0
U3RyZWFtSGFuZGxlOjp3cml0ZVJlYWR5Q2FsbGJhY2soR1BvbGxhYmxlT3V0cHV0U3RyZWFtKiwg
U29ja2V0U3RyZWFtSGFuZGxlKiBoYW5kbGUpCiB7Ci0gICAgU29ja2V0U3RyZWFtSGFuZGxlKiBo
YW5kbGUgPSBnZXRIYW5kbGVGcm9tSWQoaWQpOwotICAgIGlmICghaGFuZGxlKQotICAgICAgICBy
ZXR1cm4gRkFMU0U7CisgICAgaWYgKGdfY2FuY2VsbGFibGVfaXNfY2FuY2VsbGVkKGhhbmRsZS0+
bV9jYW5jZWxsYWJsZS5nZXQoKSkpCisgICAgICAgIHJldHVybiBHX1NPVVJDRV9SRU1PVkU7CiAK
ICAgICBoYW5kbGUtPndyaXRlUmVhZHkoKTsKLSAgICByZXR1cm4gVFJVRTsKKyAgICByZXR1cm4g
R19TT1VSQ0VfQ09OVElOVUU7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>
<flag name="review"
          id="305669"
          type_id="1"
          status="+"
          setter="zan"
    />
          </attachment>
      

    </bug>

</bugzilla>