<?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>112729</bug_id>
          
          <creation_ts>2013-03-19 12:00:31 -0700</creation_ts>
          <short_desc>[GTK] Web Process crash when the UI process finishes too early</short_desc>
          <delta_ts>2013-04-12 10:23:17 -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>WebKit2</component>
          <version>528+ (Nightly 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>Gtk</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>andersca</cc>
    
    <cc>benjamin</cc>
    
    <cc>gustavo</cc>
    
    <cc>lauro.neto</cc>
    
    <cc>rafael.lobo</cc>
    
    <cc>sam</cc>
    
    <cc>sergio</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>858569</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2013-03-19 12:00:31 -0700</bug_when>
    <thetext>It finishes with the following error:

(WebKitWebProcess:16101): GLib-GIO-ERROR **: creating GSocket from fd 11: Bad file descriptor

The problem is when creating the GSocket in the WorkQeue for the socket descriptor. GLib considers a programmer error to create a GSocket providing an invalid socket and finishes the process with g_error(). We are actually providing a valid socket when creating the GSocket, but it can be invalidated by the worker thread while the GSocket is being created. This is because registerEventSourceHandler is called from the main thread and unregisterEventSourceHandler can be called from the worker thread. We are currently registering two even handlers, one to read data from the socket and another one to close the wk connection when the socket connection is broken. Every event source registered uses its own GSocket (even if the file descriptor is actually the same), so that when the UI process finishes too early, the first event handler can be executed in the worker thread, closing the socket descriptor, while the main thread is creating the GSocket for the second one. 
We don&apos;t really need to use a separate event handler to monitor the connection, because GSocket always notifies when condition is G_IO_HUP and G_IO_ERR even if they haven&apos;t been explicitly set in g_socket_create_source(). We can register socket event sources differently, providing also a function to be called when the connection is closed, using a single socket and the same even source.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>858581</commentid>
    <comment_count>1</comment_count>
      <attachid>193892</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2013-03-19 12:08:53 -0700</bug_when>
    <thetext>Created attachment 193892
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>858662</commentid>
    <comment_count>2</comment_count>
      <attachid>193892</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2013-03-19 13:16:11 -0700</bug_when>
    <thetext>Comment on attachment 193892
Patch

Looks good to me! Just need an owner stamp. Sam or Anders?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>869843</commentid>
    <comment_count>3</comment_count>
      <attachid>193892</attachid>
    <who name="Lauro Moura Maranhao Neto">lauro.neto</who>
    <bug_when>2013-04-05 10:26:25 -0700</bug_when>
    <thetext>Comment on attachment 193892
Patch

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

&gt; Source/WebKit2/Platform/gtk/WorkQueueGtk.cpp:99
&gt; +        return condition &amp; m_condition;

Shouldn&apos;t this function check whether m_cancellable was cancelled before? Calling g_cancellable_cancel will trigger the event source with the current condition.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>869934</commentid>
    <comment_count>4</comment_count>
    <who name="Lauro Moura Maranhao Neto">lauro.neto</who>
    <bug_when>2013-04-05 12:00:35 -0700</bug_when>
    <thetext>Also, I&apos;ve tested this patch with the Nix test I posted on bug #85066 [1] and it works almost fine. Sometimes the Connection&apos;s WorkQueue would lock in infinite poll calls when doing series of instant crash/respawn of the WebProcess. I think this happens because ProcessLauncherGtk.cpp::childFinishedFunction can close the socket in another thread while it&apos;s being polled by the Connection&apos;s WorkQueue.

From the close(2) man page:
&quot;It  is  probably  unwise to close file descriptors while they may be in use by system calls in other threads in the same process.  Since a file descriptor may be reused, there  are  some  obscure race conditions that may cause unintended side effects.&quot;

Should I open a separate bug for this? I&apos;ll try to trigger this condition in WebKitGtk+ using a modified version of WK2&apos;s MouseMoveAfterCrash.cpp.

[1] https://github.com/WebKitNix/webkitnix/blob/master/Tools/TestWebKitAPI/Tests/nix/WebViewWebProcessCrashed.cpp</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>870231</commentid>
    <comment_count>5</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2013-04-05 23:55:02 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 193892 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=193892&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/Platform/gtk/WorkQueueGtk.cpp:99
&gt; &gt; +        return condition &amp; m_condition;
&gt; 
&gt; Shouldn&apos;t this function check whether m_cancellable was cancelled before? Calling g_cancellable_cancel will trigger the event source with the current condition.

No, I don&apos;t think so, when the cancellable is cancelled, the callback is emitted with no flags, and we silently return FALSE to destroy the source.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>870232</commentid>
    <comment_count>6</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2013-04-05 23:59:14 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Also, I&apos;ve tested this patch with the Nix test I posted on bug #85066 [1] and it works almost fine. Sometimes the Connection&apos;s WorkQueue would lock in infinite poll calls when doing series of instant crash/respawn of the WebProcess. I think this happens because ProcessLauncherGtk.cpp::childFinishedFunction can close the socket in another thread while it&apos;s being polled by the Connection&apos;s WorkQueue.

Yes, I said that part of the patch written for the other bug was already solved by this patch. This fixes the case of the ui process returning too early, but it probably needs changes in the process launcher to fix the other bug. 

&gt; From the close(2) man page:
&gt; &quot;It  is  probably  unwise to close file descriptors while they may be in use by system calls in other threads in the same process.  Since a file descriptor may be reused, there  are  some  obscure race conditions that may cause unintended side effects.&quot;
&gt; 
&gt; Should I open a separate bug for this? I&apos;ll try to trigger this condition in WebKitGtk+ using a modified version of WK2&apos;s MouseMoveAfterCrash.cpp.

If the problem is the same than the mouse move after crash test issue, leave the other bug and make it depende on this one. 

Thanks for your help.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>870984</commentid>
    <comment_count>7</comment_count>
    <who name="Lauro Moura Maranhao Neto">lauro.neto</who>
    <bug_when>2013-04-08 11:57:03 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #4)
&gt; &gt; Also, I&apos;ve tested this patch with the Nix test I posted on bug #85066 [1] and it works almost fine. Sometimes the Connection&apos;s WorkQueue would lock in infinite poll calls when doing series of instant crash/respawn of the WebProcess. I think this happens because ProcessLauncherGtk.cpp::childFinishedFunction can close the socket in another thread while it&apos;s being polled by the Connection&apos;s WorkQueue.
&gt; 
&gt; Yes, I said that part of the patch written for the other bug was already solved by this patch. This fixes the case of the ui process returning too early, but it probably needs changes in the process launcher to fix the other bug. 

Ok.


&gt; &gt; From the close(2) man page:
&gt; &gt; &quot;It  is  probably  unwise to close file descriptors while they may be in use by system calls in other threads in the same process.  Since a file descriptor may be reused, there  are  some  obscure race conditions that may cause unintended side effects.&quot;
&gt; &gt; 
&gt; &gt; Should I open a separate bug for this? I&apos;ll try to trigger this condition in WebKitGtk+ using a modified version of WK2&apos;s MouseMoveAfterCrash.cpp.
&gt; 
&gt; If the problem is the same than the mouse move after crash test issue, leave the other bug and make it depende on this one. 

Even after fixing the bad file descriptor/lockup issues the mouse move test fails (Both GTK and Nix). So I&apos;ll open a new bug about the process launcher fixes and make the mouse move one depend on it. Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>874622</commentid>
    <comment_count>8</comment_count>
      <attachid>193892</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2013-04-12 06:48:37 -0700</bug_when>
    <thetext>Comment on attachment 193892
Patch

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

&gt; Source/WebKit2/Platform/CoreIPC/unix/ConnectionUnix.cpp:430
&gt;  #if PLATFORM(QT)
&gt;      m_socketNotifier = m_connectionQueue-&gt;registerSocketEventHandler(m_socketDescriptor, QSocketNotifier::Read, WTF::bind(&amp;Connection::readyReadHandler, this));
&gt;  #elif PLATFORM(GTK)
&gt; -    m_connectionQueue-&gt;registerEventSourceHandler(m_socketDescriptor, (G_IO_HUP | G_IO_ERR), WTF::bind(&amp;Connection::connectionDidClose, this));
&gt; -    m_connectionQueue-&gt;registerEventSourceHandler(m_socketDescriptor, G_IO_IN, WTF::bind(&amp;Connection::readyReadHandler, this));
&gt; +    m_connectionQueue-&gt;registerSocketEventHandler(m_socketDescriptor, G_IO_IN, WTF::bind(&amp;Connection::readyReadHandler, this), WTF::bind(&amp;Connection::connectionDidClose, this));
&gt;  #elif PLATFORM(EFL)
&gt;      m_connectionQueue-&gt;registerSocketEventHandler(m_socketDescriptor, WTF::bind(&amp;Connection::readyReadHandler, this));
&gt;  #endif

It&apos;s unfortunate that these #ifdefs are here - it feels like something that could be abstracted for ConnectionUnix.

&gt; Source/WebKit2/Platform/WorkQueue.h:82
&gt; +    void registerSocketEventHandler(int, int, const Function&lt;void()&gt;&amp;, const Function&lt;void()&gt;&amp;);

I think you should name both these Function parameters; it&apos;s not clear what they do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>874783</commentid>
    <comment_count>9</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2013-04-12 09:13:12 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 193892 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=193892&amp;action=review

Thanks for the review.

&gt; &gt; Source/WebKit2/Platform/CoreIPC/unix/ConnectionUnix.cpp:430
&gt; &gt;  #if PLATFORM(QT)
&gt; &gt;      m_socketNotifier = m_connectionQueue-&gt;registerSocketEventHandler(m_socketDescriptor, QSocketNotifier::Read, WTF::bind(&amp;Connection::readyReadHandler, this));
&gt; &gt;  #elif PLATFORM(GTK)
&gt; &gt; -    m_connectionQueue-&gt;registerEventSourceHandler(m_socketDescriptor, (G_IO_HUP | G_IO_ERR), WTF::bind(&amp;Connection::connectionDidClose, this));
&gt; &gt; -    m_connectionQueue-&gt;registerEventSourceHandler(m_socketDescriptor, G_IO_IN, WTF::bind(&amp;Connection::readyReadHandler, this));
&gt; &gt; +    m_connectionQueue-&gt;registerSocketEventHandler(m_socketDescriptor, G_IO_IN, WTF::bind(&amp;Connection::readyReadHandler, this), WTF::bind(&amp;Connection::connectionDidClose, this));
&gt; &gt;  #elif PLATFORM(EFL)
&gt; &gt;      m_connectionQueue-&gt;registerSocketEventHandler(m_socketDescriptor, WTF::bind(&amp;Connection::readyReadHandler, this));
&gt; &gt;  #endif
&gt; 
&gt; It&apos;s unfortunate that these #ifdefs are here - it feels like something that could be abstracted for ConnectionUnix.

Yeah, but unfortunately is not that easy, the Qt one returns a qt specific object. For GTK+ and EFL it should be easier to share a common interface.

&gt; &gt; Source/WebKit2/Platform/WorkQueue.h:82
&gt; &gt; +    void registerSocketEventHandler(int, int, const Function&lt;void()&gt;&amp;, const Function&lt;void()&gt;&amp;);
&gt; 
&gt; I think you should name both these Function parameters; it&apos;s not clear what they do.

Sure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>874823</commentid>
    <comment_count>10</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2013-04-12 10:23:17 -0700</bug_when>
    <thetext>Committed r148286: &lt;http://trac.webkit.org/changeset/148286&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>193892</attachid>
            <date>2013-03-19 12:08:53 -0700</date>
            <delta_ts>2013-04-12 06:48:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wk2-work-queue.diff</filename>
            <type>text/plain</type>
            <size>13243</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCAxZjMzYzVmLi5kNzIxM2U2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTkg
QEAKKzIwMTMtMDMtMTkgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtHVEtdIFdlYiBQcm9jZXNzIGNyYXNoIHdoZW4gdGhlIFVJIHByb2Nlc3Mg
ZmluaXNoZXMgdG9vIGVhcmx5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMTI3MjkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBUaGUgcHJvYmxlbSBpcyB3aGVuIGNyZWF0aW5nIHRoZSBHU29ja2V0IGluIHRo
ZSBXb3JrUWV1ZSBmb3IgdGhlCisgICAgICAgIHNvY2tldCBkZXNjcmlwdG9yLiBHTGliIGNvbnNp
ZGVycyBhIHByb2dyYW1tZXIgZXJyb3IgdG8gY3JlYXRlIGEKKyAgICAgICAgR1NvY2tldCBwcm92
aWRpbmcgYW4gaW52YWxpZCBzb2NrZXQgYW5kIGZpbmlzaGVzIHRoZSBwcm9jZXNzIHdpdGgKKyAg
ICAgICAgZ19lcnJvcigpLiBXZSBhcmUgYWN0dWFsbHkgcHJvdmlkaW5nIGEgdmFsaWQgc29ja2V0
IHdoZW4gY3JlYXRpbmcKKyAgICAgICAgdGhlIEdTb2NrZXQsIGJ1dCBpdCBjYW4gYmUgaW52YWxp
ZGF0ZWQgYnkgdGhlIHdvcmtlciB0aHJlYWQgd2hpbGUKKyAgICAgICAgdGhlIEdTb2NrZXQgaXMg
YmVpbmcgY3JlYXRlZC4gVGhpcyBpcyBiZWNhdXNlCisgICAgICAgIHJlZ2lzdGVyRXZlbnRTb3Vy
Y2VIYW5kbGVyIGlzIGNhbGxlZCBmcm9tIHRoZSBtYWluIHRocmVhZCBhbmQKKyAgICAgICAgdW5y
ZWdpc3RlckV2ZW50U291cmNlSGFuZGxlciBjYW4gYmUgY2FsbGVkIGZyb20gdGhlIHdvcmtlcgor
ICAgICAgICB0aHJlYWQuIFdlIGFyZSBjdXJyZW50bHkgcmVnaXN0ZXJpbmcgdHdvIGV2ZW50IGhh
bmRsZXJzLCBvbmUgdG8KKyAgICAgICAgcmVhZCBkYXRhIGZyb20gdGhlIHNvY2tldCBhbmQgYW5v
dGhlciBvbmUgdG8gY2xvc2UgdGhlIENvcmVJUEMKKyAgICAgICAgY29ubmVjdGlvbiB3aGVuIHRo
ZSBzb2NrZXQgY29ubmVjdGlvbiBpcyBicm9rZW4uIEV2ZXJ5IGV2ZW50CisgICAgICAgIHNvdXJj
ZSByZWdpc3RlcmVkIHVzZXMgaXRzIG93biBHU29ja2V0IChldmVuIGlmIHRoZSBmaWxlCisgICAg
ICAgIGRlc2NyaXB0b3IgaXMgYWN0dWFsbHkgdGhlIHNhbWUpLCBzbyB0aGF0IHdoZW4gdGhlIFVJ
IHByb2Nlc3MKKyAgICAgICAgZmluaXNoZXMgdG9vIGVhcmx5LCB0aGUgZmlyc3QgZXZlbnQgaGFu
ZGxlciBjYW4gYmUgZXhlY3V0ZWQgaW4gdGhlCisgICAgICAgIHdvcmtlciB0aHJlYWQsIGNsb3Np
bmcgdGhlIHNvY2tldCBkZXNjcmlwdG9yLCB3aGlsZSB0aGUgbWFpbgorICAgICAgICB0aHJlYWQg
aXMgY3JlYXRpbmcgdGhlIEdTb2NrZXQgZm9yIHRoZSBzZWNvbmQgb25lLgorICAgICAgICBXZSBk
b24ndCByZWFsbHkgbmVlZCB0byB1c2UgYSBzZXBhcmF0ZSBldmVudCBoYW5kbGVyIHRvIG1vbml0
b3IKKyAgICAgICAgdGhlIGNvbm5lY3Rpb24sIGJlY2F1c2UgR1NvY2tldCBhbHdheXMgbm90aWZp
ZXMgd2hlbiBjb25kaXRpb24gaXMKKyAgICAgICAgR19JT19IVVAgYW5kIEdfSU9fRVJSIGV2ZW4g
aWYgdGhleSBoYXZlbid0IGJlZW4gZXhwbGljaXRseSBzZXQgaW4KKyAgICAgICAgZ19zb2NrZXRf
Y3JlYXRlX3NvdXJjZSgpLiBXZSBjYW4gcmVnaXN0ZXIgc29ja2V0IGV2ZW50IHNvdXJjZXMKKyAg
ICAgICAgZGlmZmVyZW50bHksIHByb3ZpZGluZyBhbHNvIGEgZnVuY3Rpb24gdG8gYmUgY2FsbGVk
IHdoZW4gdGhlCisgICAgICAgIGNvbm5lY3Rpb24gaXMgY2xvc2VkLCB1c2luZyBhIHNpbmdsZSBz
b2NrZXQgYW5kIHRoZSBzYW1lIGV2ZW4gc291cmNlLgorCisgICAgICAgICogUGxhdGZvcm0vQ29y
ZUlQQy91bml4L0Nvbm5lY3Rpb25Vbml4LmNwcDoKKyAgICAgICAgKENvcmVJUEM6OkNvbm5lY3Rp
b246OnBsYXRmb3JtSW52YWxpZGF0ZSk6CisgICAgICAgIChDb3JlSVBDOjpDb25uZWN0aW9uOjpv
cGVuKTogUmVnaXN0ZXIgYSBzaW5nbGUgc29ja2V0IGV2ZW50CisgICAgICAgIGhhbmRsZXIgcHJv
dmlkaW5nIGFsc28gYSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiB0aGUgY29ubmVjdGlvbgor
ICAgICAgICBpcyBjbG9zZWQuCisgICAgICAgICogUGxhdGZvcm0vV29ya1F1ZXVlLmg6CisgICAg
ICAgIChXb3JrUXVldWUpOgorICAgICAgICAqIFBsYXRmb3JtL2d0ay9Xb3JrUXVldWVHdGsuY3Bw
OiBUaGUgRXZlbnRTb3VyY2UgY2xhc3MgaGFzIGJlZW4KKyAgICAgICAgc3BsaXQsIG1vdmluZyBl
dmVyeXRpbmcgc3BlY2lmaWMgdG8gc29ja2V0IGV2ZW50IHNvdXJjZSB0byBhCisgICAgICAgIGRl
cml2ZWQgY2xhc3MgU29ja2V0RXZlbnRTb3VyY2UuCisgICAgICAgIChXb3JrUXVldWU6OkV2ZW50
U291cmNlOjpFdmVudFNvdXJjZSk6CisgICAgICAgIChXb3JrUXVldWU6OkV2ZW50U291cmNlOjpw
ZXJmb3JtV29yayk6CisgICAgICAgIChXb3JrUXVldWU6OkV2ZW50U291cmNlOjpwZXJmb3JtV29y
a09uY2UpOgorICAgICAgICAoV29ya1F1ZXVlOjpFdmVudFNvdXJjZTo6cGVyZm9ybVdvcmtPblRl
cm1pbmF0aW9uKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6RXZlbnRTb3VyY2U6OmRlbGV0ZUV2ZW50
U291cmNlKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6RXZlbnRTb3VyY2UpOgorICAgICAgICAoV29y
a1F1ZXVlOjpTb2NrZXRFdmVudFNvdXJjZSk6CisgICAgICAgIChXb3JrUXVldWU6OlNvY2tldEV2
ZW50U291cmNlOjpTb2NrZXRFdmVudFNvdXJjZSk6CisgICAgICAgIChXb3JrUXVldWU6OlNvY2tl
dEV2ZW50U291cmNlOjpjYW5jZWwpOgorICAgICAgICAoV29ya1F1ZXVlOjpTb2NrZXRFdmVudFNv
dXJjZTo6ZGlkQ2xvc2UpOgorICAgICAgICAoV29ya1F1ZXVlOjpTb2NrZXRFdmVudFNvdXJjZTo6
Y2hlY2tDb25kaXRpb24pOgorICAgICAgICAoV29ya1F1ZXVlOjpTb2NrZXRFdmVudFNvdXJjZTo6
ZXZlbnRDYWxsYmFjayk6CisgICAgICAgIChXb3JrUXVldWU6OnJlZ2lzdGVyU29ja2V0RXZlbnRI
YW5kbGVyKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6dW5yZWdpc3RlclNvY2tldEV2ZW50SGFuZGxl
cik6CisgICAgICAgIChXb3JrUXVldWU6OmRpc3BhdGNoT25Tb3VyY2UpOgorCiAyMDEzLTAzLTE1
ICBaYW4gRG9iZXJzZWsgIDx6ZG9iZXJzZWtAaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXSBF
bmZvcmNlIHRoZSBDKysxMSBzdGFuZGFyZCB3aGVuIGNvbXBpbGluZyBXZWJLaXQyCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL3VuaXgvQ29ubmVjdGlvblVuaXgu
Y3BwIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy91bml4L0Nvbm5lY3Rpb25Vbml4
LmNwcAppbmRleCBjNmExODZlLi4zZDc2ODgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9Q
bGF0Zm9ybS9Db3JlSVBDL3VuaXgvQ29ubmVjdGlvblVuaXguY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1BsYXRmb3JtL0NvcmVJUEMvdW5peC9Db25uZWN0aW9uVW5peC5jcHAKQEAgLTE0MCw3ICsx
NDAsNyBAQCB2b2lkIENvbm5lY3Rpb246OnBsYXRmb3JtSW52YWxpZGF0ZSgpCiAgICAgICAgIHJl
dHVybjsKIAogI2lmIFBMQVRGT1JNKEdUSykKLSAgICBtX2Nvbm5lY3Rpb25RdWV1ZS0+dW5yZWdp
c3RlckV2ZW50U291cmNlSGFuZGxlcihtX3NvY2tldERlc2NyaXB0b3IpOworICAgIG1fY29ubmVj
dGlvblF1ZXVlLT51bnJlZ2lzdGVyU29ja2V0RXZlbnRIYW5kbGVyKG1fc29ja2V0RGVzY3JpcHRv
cik7CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKFFUKQpAQCAtNDI0LDggKzQyNCw3IEBAIGJvb2wg
Q29ubmVjdGlvbjo6b3BlbigpCiAjaWYgUExBVEZPUk0oUVQpCiAgICAgbV9zb2NrZXROb3RpZmll
ciA9IG1fY29ubmVjdGlvblF1ZXVlLT5yZWdpc3RlclNvY2tldEV2ZW50SGFuZGxlcihtX3NvY2tl
dERlc2NyaXB0b3IsIFFTb2NrZXROb3RpZmllcjo6UmVhZCwgV1RGOjpiaW5kKCZDb25uZWN0aW9u
OjpyZWFkeVJlYWRIYW5kbGVyLCB0aGlzKSk7CiAjZWxpZiBQTEFURk9STShHVEspCi0gICAgbV9j
b25uZWN0aW9uUXVldWUtPnJlZ2lzdGVyRXZlbnRTb3VyY2VIYW5kbGVyKG1fc29ja2V0RGVzY3Jp
cHRvciwgKEdfSU9fSFVQIHwgR19JT19FUlIpLCBXVEY6OmJpbmQoJkNvbm5lY3Rpb246OmNvbm5l
Y3Rpb25EaWRDbG9zZSwgdGhpcykpOwotICAgIG1fY29ubmVjdGlvblF1ZXVlLT5yZWdpc3RlckV2
ZW50U291cmNlSGFuZGxlcihtX3NvY2tldERlc2NyaXB0b3IsIEdfSU9fSU4sIFdURjo6YmluZCgm
Q29ubmVjdGlvbjo6cmVhZHlSZWFkSGFuZGxlciwgdGhpcykpOworICAgIG1fY29ubmVjdGlvblF1
ZXVlLT5yZWdpc3RlclNvY2tldEV2ZW50SGFuZGxlcihtX3NvY2tldERlc2NyaXB0b3IsIEdfSU9f
SU4sIFdURjo6YmluZCgmQ29ubmVjdGlvbjo6cmVhZHlSZWFkSGFuZGxlciwgdGhpcyksIFdURjo6
YmluZCgmQ29ubmVjdGlvbjo6Y29ubmVjdGlvbkRpZENsb3NlLCB0aGlzKSk7CiAjZWxpZiBQTEFU
Rk9STShFRkwpCiAgICAgbV9jb25uZWN0aW9uUXVldWUtPnJlZ2lzdGVyU29ja2V0RXZlbnRIYW5k
bGVyKG1fc29ja2V0RGVzY3JpcHRvciwgV1RGOjpiaW5kKCZDb25uZWN0aW9uOjpyZWFkeVJlYWRI
YW5kbGVyLCB0aGlzKSk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRm
b3JtL1dvcmtRdWV1ZS5oIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vV29ya1F1ZXVlLmgKaW5k
ZXggODMyYmIzMS4uMmQ0Njk3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0v
V29ya1F1ZXVlLmgKKysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vV29ya1F1ZXVlLmgKQEAg
LTc5LDggKzc5LDggQEAgcHVibGljOgogICAgIFFTb2NrZXROb3RpZmllciogcmVnaXN0ZXJTb2Nr
ZXRFdmVudEhhbmRsZXIoaW50LCBRU29ja2V0Tm90aWZpZXI6OlR5cGUsIGNvbnN0IEZ1bmN0aW9u
PHZvaWQoKT4mKTsKICAgICB2b2lkIGRpc3BhdGNoT25UZXJtaW5hdGlvbihXZWJLaXQ6OlBsYXRm
b3JtUHJvY2Vzc0lkZW50aWZpZXIsIGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mKTsKICNlbGlmIFBM
QVRGT1JNKEdUSykKLSAgICB2b2lkIHJlZ2lzdGVyRXZlbnRTb3VyY2VIYW5kbGVyKGludCwgaW50
LCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+Jik7Ci0gICAgdm9pZCB1bnJlZ2lzdGVyRXZlbnRTb3Vy
Y2VIYW5kbGVyKGludCk7CisgICAgdm9pZCByZWdpc3RlclNvY2tldEV2ZW50SGFuZGxlcihpbnQs
IGludCwgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYsIGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mKTsK
KyAgICB2b2lkIHVucmVnaXN0ZXJTb2NrZXRFdmVudEhhbmRsZXIoaW50KTsKICAgICB2b2lkIGRp
c3BhdGNoT25UZXJtaW5hdGlvbihXZWJLaXQ6OlBsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXIsIGNv
bnN0IEZ1bmN0aW9uPHZvaWQoKT4mKTsKICNlbGlmIFBMQVRGT1JNKEVGTCkKICAgICB2b2lkIHJl
Z2lzdGVyU29ja2V0RXZlbnRIYW5kbGVyKGludCwgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYpOwpA
QCAtMTYzLDggKzE2Myw5IEBAIHByaXZhdGU6CiAgICAgR1JlZlB0cjxHTWFpbkxvb3A+IG1fZXZl
bnRMb29wOwogICAgIE11dGV4IG1fZXZlbnRTb3VyY2VzTG9jazsKICAgICBjbGFzcyBFdmVudFNv
dXJjZTsKLSAgICBIYXNoTWFwPGludCwgVmVjdG9yPEV2ZW50U291cmNlKj4gPiBtX2V2ZW50U291
cmNlczsKLSAgICB0eXBlZGVmIEhhc2hNYXA8aW50LCBWZWN0b3I8RXZlbnRTb3VyY2UqPiA+Ojpp
dGVyYXRvciBFdmVudFNvdXJjZUl0ZXJhdG9yOyAKKyAgICBjbGFzcyBTb2NrZXRFdmVudFNvdXJj
ZTsKKyAgICBIYXNoTWFwPGludCwgVmVjdG9yPFNvY2tldEV2ZW50U291cmNlKj4gPiBtX2V2ZW50
U291cmNlczsKKyAgICB0eXBlZGVmIEhhc2hNYXA8aW50LCBWZWN0b3I8U29ja2V0RXZlbnRTb3Vy
Y2UqPiA+OjppdGVyYXRvciBTb2NrZXRFdmVudFNvdXJjZUl0ZXJhdG9yOwogI2VsaWYgUExBVEZP
Uk0oRUZMKQogICAgIGNsYXNzIFRpbWVyV29ya0l0ZW0gewogICAgIHB1YmxpYzoKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL2d0ay9Xb3JrUXVldWVHdGsuY3BwIGIvU291cmNl
L1dlYktpdDIvUGxhdGZvcm0vZ3RrL1dvcmtRdWV1ZUd0ay5jcHAKaW5kZXggN2FiNGU1My4uN2Fk
Mjk5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vZ3RrL1dvcmtRdWV1ZUd0
ay5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vZ3RrL1dvcmtRdWV1ZUd0ay5jcHAK
QEAgLTM2LDU5ICszNiw5MSBAQAogLy8gV29ya1F1ZXVlOjpFdmVudFNvdXJjZQogY2xhc3MgV29y
a1F1ZXVlOjpFdmVudFNvdXJjZSB7CiBwdWJsaWM6Ci0gICAgRXZlbnRTb3VyY2UoY29uc3QgRnVu
Y3Rpb248dm9pZCgpPiYgZnVuY3Rpb24sIFdvcmtRdWV1ZSogd29ya1F1ZXVlLCBHQ2FuY2VsbGFi
bGUqIGNhbmNlbGxhYmxlKQorICAgIEV2ZW50U291cmNlKGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4m
IGZ1bmN0aW9uLCBXb3JrUXVldWUqIHdvcmtRdWV1ZSkKICAgICAgICAgOiBtX2Z1bmN0aW9uKGZ1
bmN0aW9uKQogICAgICAgICAsIG1fd29ya1F1ZXVlKHdvcmtRdWV1ZSkKLSAgICAgICAgLCBtX2Nh
bmNlbGxhYmxlKGNhbmNlbGxhYmxlKQogICAgIHsKKyAgICAgICAgQVNTRVJUKHdvcmtRdWV1ZSk7
CiAgICAgfQogCi0gICAgdm9pZCBjYW5jZWwoKQorICAgIHZvaWQgcGVyZm9ybVdvcmsoKQogICAg
IHsKLSAgICAgICAgaWYgKCFtX2NhbmNlbGxhYmxlKQotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICBnX2NhbmNlbGxhYmxlX2NhbmNlbChtX2NhbmNlbGxhYmxlKTsKKyAgICAgICAgbV9mdW5j
dGlvbigpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGV4ZWN1dGVFdmVudFNvdXJjZShFdmVu
dFNvdXJjZSogZXZlbnRTb3VyY2UpCisgICAgc3RhdGljIGdib29sZWFuIHBlcmZvcm1Xb3JrT25j
ZShFdmVudFNvdXJjZSogZXZlbnRTb3VyY2UpCiAgICAgewogICAgICAgICBBU1NFUlQoZXZlbnRT
b3VyY2UpOwotICAgICAgICBldmVudFNvdXJjZS0+bV9mdW5jdGlvbigpOworICAgICAgICBldmVu
dFNvdXJjZS0+cGVyZm9ybVdvcmsoKTsKKyAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgIH0KIAot
ICAgIHN0YXRpYyBnYm9vbGVhbiBwZXJmb3JtV29ya09uY2UoRXZlbnRTb3VyY2UqIGV2ZW50U291
cmNlKQorICAgIHN0YXRpYyBnYm9vbGVhbiBwZXJmb3JtV29ya09uVGVybWluYXRpb24oR1BpZCwg
Z2ludCwgRXZlbnRTb3VyY2UqIGV2ZW50U291cmNlKQogICAgIHsKLSAgICAgICAgZXhlY3V0ZUV2
ZW50U291cmNlKGV2ZW50U291cmNlKTsKKyAgICAgICAgQVNTRVJUKGV2ZW50U291cmNlKTsKKyAg
ICAgICAgZXZlbnRTb3VyY2UtPnBlcmZvcm1Xb3JrKCk7CiAgICAgICAgIHJldHVybiBGQUxTRTsK
ICAgICB9CiAKLSAgICBzdGF0aWMgZ2Jvb2xlYW4gcGVyZm9ybVdvcmsoR1NvY2tldCogc29ja2V0
LCBHSU9Db25kaXRpb24gY29uZGl0aW9uLCBFdmVudFNvdXJjZSogZXZlbnRTb3VyY2UpCisgICAg
c3RhdGljIHZvaWQgZGVsZXRlRXZlbnRTb3VyY2UoRXZlbnRTb3VyY2UqIGV2ZW50U291cmNlKQog
ICAgIHsKLSAgICAgICAgaWYgKCEoY29uZGl0aW9uICYgR19JT19JTikgJiYgIShjb25kaXRpb24g
JiBHX0lPX0hVUCkgJiYgIShjb25kaXRpb24gJiBHX0lPX0VSUikpIHsKLSAgICAgICAgICAgIC8v
IEV2ZW50U291cmNlIGhhcyBiZWVuIGNhbmNlbGxlZCwgcmV0dXJuIEZBTFNFIHRvIGRlc3Ryb3kg
dGhlIHNvdXJjZS4KLSAgICAgICAgICAgIHJldHVybiBGQUxTRTsKLSAgICAgICAgfQorICAgICAg
ICBBU1NFUlQoZXZlbnRTb3VyY2UpOworICAgICAgICBkZWxldGUgZXZlbnRTb3VyY2U7CisgICAg
fQorCitwcml2YXRlOgorICAgIEZ1bmN0aW9uPHZvaWQoKT4gbV9mdW5jdGlvbjsKKyAgICBSZWZQ
dHI8V29ya1F1ZXVlPiBtX3dvcmtRdWV1ZTsKK307CiAKLSAgICAgICAgZXhlY3V0ZUV2ZW50U291
cmNlKGV2ZW50U291cmNlKTsKLSAgICAgICAgcmV0dXJuIFRSVUU7CitjbGFzcyBXb3JrUXVldWU6
OlNvY2tldEV2ZW50U291cmNlIDogcHVibGljIFdvcmtRdWV1ZTo6RXZlbnRTb3VyY2UgeworcHVi
bGljOgorICAgIFNvY2tldEV2ZW50U291cmNlKGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0
aW9uLCBXb3JrUXVldWUqIHdvcmtRdWV1ZSwgaW50IGNvbmRpdGlvbiwgR0NhbmNlbGxhYmxlKiBj
YW5jZWxsYWJsZSwgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgY2xvc2VGdW5jdGlvbikKKyAgICAg
ICAgOiBFdmVudFNvdXJjZShmdW5jdGlvbiwgd29ya1F1ZXVlKQorICAgICAgICAsIG1fY29uZGl0
aW9uKGNvbmRpdGlvbikKKyAgICAgICAgLCBtX2NhbmNlbGxhYmxlKGNhbmNlbGxhYmxlKQorICAg
ICAgICAsIG1fY2xvc2VGdW5jdGlvbihjbG9zZUZ1bmN0aW9uKQorICAgIHsKKyAgICAgICAgQVNT
RVJUKGNhbmNlbGxhYmxlKTsKICAgICB9CiAKLSAgICBzdGF0aWMgZ2Jvb2xlYW4gcGVyZm9ybVdv
cmtPblRlcm1pbmF0aW9uKEdQaWQsIGdpbnQsIEV2ZW50U291cmNlKiBldmVudFNvdXJjZSkKKyAg
ICB2b2lkIGNhbmNlbCgpCiAgICAgewotICAgICAgICBleGVjdXRlRXZlbnRTb3VyY2UoZXZlbnRT
b3VyY2UpOwotICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIGdfY2FuY2VsbGFibGVfY2Fu
Y2VsKG1fY2FuY2VsbGFibGUpOworICAgIH0KKworICAgIHZvaWQgZGlkQ2xvc2UoKQorICAgIHsK
KyAgICAgICAgbV9jbG9zZUZ1bmN0aW9uKCk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgZGVs
ZXRlRXZlbnRTb3VyY2UoRXZlbnRTb3VyY2UqIGV2ZW50U291cmNlKSAKKyAgICBib29sIGNoZWNr
Q29uZGl0aW9uKEdJT0NvbmRpdGlvbiBjb25kaXRpb24pIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gY29uZGl0aW9uICYgbV9jb25kaXRpb247CisgICAgfQorCisgICAgc3RhdGljIGdib29s
ZWFuIGV2ZW50Q2FsbGJhY2soR1NvY2tldCogc29ja2V0LCBHSU9Db25kaXRpb24gY29uZGl0aW9u
LCBTb2NrZXRFdmVudFNvdXJjZSogZXZlbnRTb3VyY2UpCiAgICAgewogICAgICAgICBBU1NFUlQo
ZXZlbnRTb3VyY2UpOwotICAgICAgICBkZWxldGUgZXZlbnRTb3VyY2U7CisKKyAgICAgICAgaWYg
KGNvbmRpdGlvbiAmIEdfSU9fSFVQIHx8IGNvbmRpdGlvbiAmIEdfSU9fRVJSKSB7CisgICAgICAg
ICAgICBldmVudFNvdXJjZS0+ZGlkQ2xvc2UoKTsKKyAgICAgICAgICAgIHJldHVybiBGQUxTRTsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChldmVudFNvdXJjZS0+Y2hlY2tDb25kaXRpb24oY29u
ZGl0aW9uKSkgeworICAgICAgICAgICAgZXZlbnRTb3VyY2UtPnBlcmZvcm1Xb3JrKCk7CisgICAg
ICAgICAgICByZXR1cm4gVFJVRTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEV2ZW50U291cmNl
IGhhcyBiZWVuIGNhbmNlbGxlZCwgcmV0dXJuIEZBTFNFIHRvIGRlc3Ryb3kgdGhlIHNvdXJjZS4K
KyAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgIH0KLSAgIAotcHVibGljOgotICAgIEZ1bmN0aW9u
PHZvaWQoKT4gbV9mdW5jdGlvbjsKLSAgICBSZWZQdHI8V29ya1F1ZXVlPiBtX3dvcmtRdWV1ZTsK
KworcHJpdmF0ZToKKyAgICBpbnQgbV9jb25kaXRpb247CiAgICAgR0NhbmNlbGxhYmxlKiBtX2Nh
bmNlbGxhYmxlOworICAgIEZ1bmN0aW9uPHZvaWQoKT4gbV9jbG9zZUZ1bmN0aW9uOwogfTsKIAog
Ly8gV29ya1F1ZXVlCkBAIC0xNDAsMjUgKzE3MiwyNSBAQCB2b2lkIFdvcmtRdWV1ZTo6d29ya1F1
ZXVlVGhyZWFkQm9keSgpCiAgICAgZ19tYWluX2xvb3BfcnVuKG1fZXZlbnRMb29wLmdldCgpKTsK
IH0KIAotdm9pZCBXb3JrUXVldWU6OnJlZ2lzdGVyRXZlbnRTb3VyY2VIYW5kbGVyKGludCBmaWxl
RGVzY3JpcHRvciwgaW50IGNvbmRpdGlvbiwgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rp
b24pCit2b2lkIFdvcmtRdWV1ZTo6cmVnaXN0ZXJTb2NrZXRFdmVudEhhbmRsZXIoaW50IGZpbGVE
ZXNjcmlwdG9yLCBpbnQgY29uZGl0aW9uLCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlv
biwgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgY2xvc2VGdW5jdGlvbikKIHsKICAgICBHUmVmUHRy
PEdTb2NrZXQ+IHNvY2tldCA9IGFkb3B0R1JlZihnX3NvY2tldF9uZXdfZnJvbV9mZChmaWxlRGVz
Y3JpcHRvciwgMCkpOwogICAgIEFTU0VSVChzb2NrZXQpOwogICAgIEdSZWZQdHI8R0NhbmNlbGxh
YmxlPiBjYW5jZWxsYWJsZSA9IGFkb3B0R1JlZihnX2NhbmNlbGxhYmxlX25ldygpKTsKICAgICBH
UmVmUHRyPEdTb3VyY2U+IGRpc3BhdGNoU291cmNlID0gYWRvcHRHUmVmKGdfc29ja2V0X2NyZWF0
ZV9zb3VyY2Uoc29ja2V0LmdldCgpLCBzdGF0aWNfY2FzdDxHSU9Db25kaXRpb24+KGNvbmRpdGlv
biksIGNhbmNlbGxhYmxlLmdldCgpKSk7CiAgICAgQVNTRVJUKGRpc3BhdGNoU291cmNlKTsKLSAg
ICBFdmVudFNvdXJjZSogZXZlbnRTb3VyY2UgPSBuZXcgRXZlbnRTb3VyY2UoZnVuY3Rpb24sIHRo
aXMsIGNhbmNlbGxhYmxlLmdldCgpKTsKKyAgICBTb2NrZXRFdmVudFNvdXJjZSogZXZlbnRTb3Vy
Y2UgPSBuZXcgU29ja2V0RXZlbnRTb3VyY2UoZnVuY3Rpb24sIHRoaXMsIGNvbmRpdGlvbiwgY2Fu
Y2VsbGFibGUuZ2V0KCksIGNsb3NlRnVuY3Rpb24pOwogICAgIEFTU0VSVChldmVudFNvdXJjZSk7
CiAKLSAgICBnX3NvdXJjZV9zZXRfY2FsbGJhY2soZGlzcGF0Y2hTb3VyY2UuZ2V0KCksIHJlaW50
ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KCZXb3JrUXVldWU6OkV2ZW50U291cmNlOjpwZXJmb3Jt
V29yayksCisgICAgZ19zb3VyY2Vfc2V0X2NhbGxiYWNrKGRpc3BhdGNoU291cmNlLmdldCgpLCBy
ZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPigmV29ya1F1ZXVlOjpTb2NrZXRFdmVudFNvdXJj
ZTo6ZXZlbnRDYWxsYmFjayksCiAgICAgICAgIGV2ZW50U291cmNlLCByZWludGVycHJldF9jYXN0
PEdEZXN0cm95Tm90aWZ5PigmV29ya1F1ZXVlOjpFdmVudFNvdXJjZTo6ZGVsZXRlRXZlbnRTb3Vy
Y2UpKTsKIAogICAgIC8vIFNldCB1cCB0aGUgZXZlbnQgc291cmNlcyB1bmRlciB0aGUgbXV0ZXgg
c2luY2UgdGhpcyBpcyBzaGFyZWQgYWNyb3NzIG11bHRpcGxlIHRocmVhZHMuCiAgICAgewogICAg
ICAgICBNdXRleExvY2tlciBsb2NrZXIobV9ldmVudFNvdXJjZXNMb2NrKTsKLSAgICAgICAgVmVj
dG9yPEV2ZW50U291cmNlKj4gc291cmNlczsKLSAgICAgICAgRXZlbnRTb3VyY2VJdGVyYXRvciBp
dCA9IG1fZXZlbnRTb3VyY2VzLmZpbmQoZmlsZURlc2NyaXB0b3IpOwotICAgICAgICBpZiAoaXQg
IT0gbV9ldmVudFNvdXJjZXMuZW5kKCkpIAorICAgICAgICBWZWN0b3I8U29ja2V0RXZlbnRTb3Vy
Y2UqPiBzb3VyY2VzOworICAgICAgICBTb2NrZXRFdmVudFNvdXJjZUl0ZXJhdG9yIGl0ID0gbV9l
dmVudFNvdXJjZXMuZmluZChmaWxlRGVzY3JpcHRvcik7CisgICAgICAgIGlmIChpdCAhPSBtX2V2
ZW50U291cmNlcy5lbmQoKSkKICAgICAgICAgICAgIHNvdXJjZXMgPSBpdC0+dmFsdWU7CiAKICAg
ICAgICAgc291cmNlcy5hcHBlbmQoZXZlbnRTb3VyY2UpOwpAQCAtMTY4LDE4ICsyMDAsMTggQEAg
dm9pZCBXb3JrUXVldWU6OnJlZ2lzdGVyRXZlbnRTb3VyY2VIYW5kbGVyKGludCBmaWxlRGVzY3Jp
cHRvciwgaW50IGNvbmRpdGlvbiwgY28KICAgICBnX3NvdXJjZV9hdHRhY2goZGlzcGF0Y2hTb3Vy
Y2UuZ2V0KCksIG1fZXZlbnRDb250ZXh0LmdldCgpKTsKIH0KIAotdm9pZCBXb3JrUXVldWU6OnVu
cmVnaXN0ZXJFdmVudFNvdXJjZUhhbmRsZXIoaW50IGZpbGVEZXNjcmlwdG9yKQordm9pZCBXb3Jr
UXVldWU6OnVucmVnaXN0ZXJTb2NrZXRFdmVudEhhbmRsZXIoaW50IGZpbGVEZXNjcmlwdG9yKQog
ewogICAgIEFTU0VSVChmaWxlRGVzY3JpcHRvcik7Ci0gICAgCisKICAgICBNdXRleExvY2tlciBs
b2NrZXIobV9ldmVudFNvdXJjZXNMb2NrKTsKLSAgICAKLSAgICBFdmVudFNvdXJjZUl0ZXJhdG9y
IGl0ID0gbV9ldmVudFNvdXJjZXMuZmluZChmaWxlRGVzY3JpcHRvcik7CisKKyAgICBTb2NrZXRF
dmVudFNvdXJjZUl0ZXJhdG9yIGl0ID0gbV9ldmVudFNvdXJjZXMuZmluZChmaWxlRGVzY3JpcHRv
cik7CiAgICAgQVNTRVJUKGl0ICE9IG1fZXZlbnRTb3VyY2VzLmVuZCgpKTsKICAgICBBU1NFUlQo
bV9ldmVudFNvdXJjZXMuY29udGFpbnMoZmlsZURlc2NyaXB0b3IpKTsKIAogICAgIGlmIChpdCAh
PSBtX2V2ZW50U291cmNlcy5lbmQoKSkgewotICAgICAgICBWZWN0b3I8RXZlbnRTb3VyY2UqPiBz
b3VyY2VzID0gaXQtPnZhbHVlOworICAgICAgICBWZWN0b3I8U29ja2V0RXZlbnRTb3VyY2UqPiBz
b3VyY2VzID0gaXQtPnZhbHVlOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc291
cmNlcy5zaXplKCk7IGkrKykKICAgICAgICAgICAgIHNvdXJjZXNbaV0tPmNhbmNlbCgpOwogCkBA
IC0xODksMTAgKzIyMSw4IEBAIHZvaWQgV29ya1F1ZXVlOjp1bnJlZ2lzdGVyRXZlbnRTb3VyY2VI
YW5kbGVyKGludCBmaWxlRGVzY3JpcHRvcikKIAogdm9pZCBXb3JrUXVldWU6OmRpc3BhdGNoT25T
b3VyY2UoR1NvdXJjZSogZGlzcGF0Y2hTb3VyY2UsIGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1
bmN0aW9uLCBHU291cmNlRnVuYyBzb3VyY2VDYWxsYmFjaykKIHsKLSAgICBFdmVudFNvdXJjZSog
ZXZlbnRTb3VyY2UgPSBuZXcgRXZlbnRTb3VyY2UoZnVuY3Rpb24sIHRoaXMsIDApOwotCi0gICAg
Z19zb3VyY2Vfc2V0X2NhbGxiYWNrKGRpc3BhdGNoU291cmNlLCBzb3VyY2VDYWxsYmFjaywgZXZl
bnRTb3VyY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8R0Rl
c3Ryb3lOb3RpZnk+KCZXb3JrUXVldWU6OkV2ZW50U291cmNlOjpkZWxldGVFdmVudFNvdXJjZSkp
OworICAgIGdfc291cmNlX3NldF9jYWxsYmFjayhkaXNwYXRjaFNvdXJjZSwgc291cmNlQ2FsbGJh
Y2ssIG5ldyBFdmVudFNvdXJjZShmdW5jdGlvbiwgdGhpcyksCisgICAgICAgIHJlaW50ZXJwcmV0
X2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+KCZXb3JrUXVldWU6OkV2ZW50U291cmNlOjpkZWxldGVFdmVu
dFNvdXJjZSkpOwogCiAgICAgZ19zb3VyY2VfYXR0YWNoKGRpc3BhdGNoU291cmNlLCBtX2V2ZW50
Q29udGV4dC5nZXQoKSk7CiB9Cg==
</data>
<flag name="review"
          id="215525"
          type_id="1"
          status="+"
          setter="andersca"
    />
          </attachment>
      

    </bug>

</bugzilla>