<?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>141508</bug_id>
          
          <creation_ts>2015-02-12 06:29:04 -0800</creation_ts>
          <short_desc>[SOUP] Synchronous XMLHttpRequests can time out when we reach the max connections limit</short_desc>
          <delta_ts>2015-03-03 11:05:14 -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>Platform</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>
          
          <blocked>142164</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>clopez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>danw</cc>
    
    <cc>gustavo</cc>
    
    <cc>mrobinson</cc>
    
    <cc>svillar</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1068589</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-02-12 06:29:04 -0800</bug_when>
    <thetext>This is the same problem that bug #84560 tried to fix, but nowadays the browser is not frozen, but the sync requests end up timing out after the 10 seconds timeout used by default for sync loads. The patch that landed in bug #84560 was not enough. This is what is happening now:

 1. We are the max connections limit (normally the connections per host).
 2. A new sync load is started, we increase the max conns limit by 1. Let&apos;s say max conns per host was 6, now is 7. We run the nested main loop with a custom context to ensure next request is the only one processed.
 3. The request is correctly processed creating the new connection needed, now current num connection wold be 7.
 4. The syn request finishes, so we finish the nested main loop and the limits are decreased by one again. The mac conns per host is now 6, but current num conns is still 7. At this point the connection is still IN_USE, because the message is still in the queue.
 5. A new sync request is started, we increase the limits again, now max conns per host would be 7 again
 6. The new load is not processed because current num conns is still 7 and limit is also 7. The new connection we created for the previous request hasn&apos;t been dropped.
 7. Nothing is processed, because the nested main loop and the connections limit, so we keep doing nothing for 10 seconds until the timeout source is scheduled.

And this keeps happening all the time while there are more sync loads. This not only makes many things not working, but everything very slow, since we do nothing for 10 seconds every time this happen.

The first solution that I thought was dropping idle connections in libsoup after the conns limits is set when the new limit is less than the current number of connections. But when we decrease the limits (in step 4) the message is still running, it switches to finishing right after step 4, so the connection is still in IN_USE state. After step 4, the message is processed again and it switches to FINISHED, then it&apos;s unqueued and its connection is set to IDLE.

We might try to keep that approach, but decreasing the limits in an idle, but I&apos;m not sure if it would be possible that before the idle, the connection is reused by another request waiting for a connection free, and set to IN_USE again. If this approach would be possible, we could even cancel the idle if a new sync request is started immediately and reuse the connection. But i&apos;m not sure this is possible or reliable.

Any other solution that I can think of, would require new libsoup API, something like a message flag (IGNORE_CONNECTION_LIMITS, for example), that forces the message to create a new connection but only if we have reached the limit (otherwise we would reuse an idle connection unless there&apos;s another message flag or whatever preventing that). If a new connection is created for this particular message, we would drop that connection automatically when the message is unqueued (again we could do that after a short delay, just in case another message with that flag is queued).

What do you think? any other solution?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1068590</commentid>
    <comment_count>1</comment_count>
    <who name="Dan Winship">danw</who>
    <bug_when>2015-02-12 06:31:49 -0800</bug_when>
    <thetext>might be able to fix it by running the inner loop until you get SoupSession::request-unqueued rather than just waiting for the message to finish?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1068591</commentid>
    <comment_count>2</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-02-12 06:36:19 -0800</bug_when>
    <thetext>(In reply to comment #1)
&gt; might be able to fix it by running the inner loop until you get
&gt; SoupSession::request-unqueued rather than just waiting for the message to
&gt; finish?

Yes, I thought about a similar solution but using SoupMessage::finished, and then I realized that it&apos;s unqueued right after SoupMessage::finished. I didn&apos;t see the request-unqueued signal. That Would still require changes in libsoup, though, to drop idle connections when limits are changed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1069379</commentid>
    <comment_count>3</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-02-15 23:10:48 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (In reply to comment #1)
&gt; &gt; might be able to fix it by running the inner loop until you get
&gt; &gt; SoupSession::request-unqueued rather than just waiting for the message to
&gt; &gt; finish?
&gt; 
&gt; Yes, I thought about a similar solution but using SoupMessage::finished, and
&gt; then I realized that it&apos;s unqueued right after SoupMessage::finished. I
&gt; didn&apos;t see the request-unqueued signal. That Would still require changes in
&gt; libsoup, though, to drop idle connections when limits are changed.

The problem is that the queue is not kicked when a message loaded from the cache switches to FINISHING state, so when using the nested main loop, since no other requests are processed (because of the different main context), the ::unqueue signal is never emitted and the main loop doesn&apos;t finish. I guess we should fix that in libsoup, but even fixing that would produce inconsistencies between resources loaded from the network and from the cache, because cached resources switch to FINISHING too early, so the message can be unqueued before we have finished reading the data stream, and the main loop could finish too early. 

The thing is that it doesn&apos;t seem to be possible to fix this without doing any change in libsoup, so I think a specific solution (something like the message flag I proposed) would work better, and it will be more reliable. This approach of increasing the limits and decreasing them after words looks very weak to me (and a bit hacky, TBH)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1069797</commentid>
    <comment_count>4</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-02-17 00:21:19 -0800</bug_when>
    <thetext>I&apos;ve finally managed to make my test case work reliably by patching libsoup to kick the queue for cached resources after switching to FINISHING state and cleanup idle connections when limit properties change and are less than the current number of connections. In WebKit I changed the synchronous loader to finish the loop when the message is unqueued or when we finish loading the resource, if we are still reading the stream when the message is unqueued we wait for the didFinishLoading, and if the message hasn&apos;t been unqueued when we finish loading the data, then we wait for unqueued. 
I&apos;m not happy with this solution, it looks tricky, hacky and weak to me, and it&apos;s very risky if something goes wrong, because the nested main loop might never end blocking the networking process forever (in multiprocess model this affects all the web processes). This is because the timeout for sync resources is cleared when the request finishes loading, but now we wait for the message to be unqueued to finish the loop.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1073286</commentid>
    <comment_count>5</comment_count>
      <attachid>247661</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-03-02 05:31:22 -0800</bug_when>
    <thetext>Created attachment 247661
Patch

I think we should also bump the libsoup version in jhbuild when 2.50 is released.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1073287</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-03-02 05:33:33 -0800</bug_when>
    <thetext>Attachment 247661 did not pass style-queue:


ERROR: Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestResources.cpp:709:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestResources.cpp:711:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestResources.cpp:820:  This { should be at the end of the previous line  [whitespace/braces] [4]
Total errors found: 3 in 4 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1073632</commentid>
    <comment_count>7</comment_count>
      <attachid>247751</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-03-02 23:52:33 -0800</bug_when>
    <thetext>Created attachment 247751
Updated patch

Check for 2.49.91 version instead of 2.50 and bump the libsoup version in jhbuild.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1073633</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-03-02 23:54:01 -0800</bug_when>
    <thetext>Attachment 247751 did not pass style-queue:


ERROR: Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestResources.cpp:709:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestResources.cpp:711:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestResources.cpp:820:  This { should be at the end of the previous line  [whitespace/braces] [4]
Total errors found: 3 in 5 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1073638</commentid>
    <comment_count>9</comment_count>
      <attachid>247751</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2015-03-03 01:00:35 -0800</bug_when>
    <thetext>Comment on attachment 247751
Updated patch

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

Nice!

&gt; Source/WebCore/ChangeLog:10
&gt; +        connections allowed if the soup version is recent enough.

Perhaps we should explain here why the increase/decrease was not a good idea sometimes.

&gt; Source/WebCore/platform/network/soup/ResourceHandleSoup.cpp:935
&gt; +    // Ignore the connection limits in synchronous loads to avoid freezing the networking process.

This comment doesn&apos;t add much as the code bellow is really explicit. I&apos;d better include a link to the bug or a more detailed description of the issue. I&apos;d prefer the former.

&gt; Source/WebCore/platform/network/soup/ResourceHandleSoup.cpp:942
&gt;      g_signal_connect(d-&gt;m_soupMessage.get(), &quot;network-event&quot;, G_CALLBACK(networkEventCallback), handle);

As you&apos;re fixing some other stuff like override,final, etc... I think we could use this bug to also store the SoupMessage in a local variable and use it all along this method which is full of the ugly d-&gt;m_soupMessage.get().

&gt; Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestResources.cpp:704
&gt; +        GUniquePtr&lt;char&gt; xhr(g_strdup_printf(&quot;xhr = new XMLHttpRequest; xhr.open(&apos;GET&apos;, &apos;/sync-request-on-max-conns-xhr%u&apos;, false); xhr.send();&quot;, i));

If it were me I&apos;d have stored this string in a static variable putting each instruction in a different line for better readability. But since this is a unit test I could live with it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1073639</commentid>
    <comment_count>10</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-03-03 01:17:53 -0800</bug_when>
    <thetext>Committed r180927: &lt;http://trac.webkit.org/changeset/180927&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1073640</commentid>
    <comment_count>11</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-03-03 01:19:24 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; Comment on attachment 247751 [details]
&gt; Updated patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=247751&amp;action=review
&gt; 
&gt; Nice!

Thanks for the review.
 
&gt; &gt; Source/WebCore/ChangeLog:10
&gt; &gt; +        connections allowed if the soup version is recent enough.
&gt; 
&gt; Perhaps we should explain here why the increase/decrease was not a good idea
&gt; sometimes.

Added more explanation there.

&gt; &gt; Source/WebCore/platform/network/soup/ResourceHandleSoup.cpp:935
&gt; &gt; +    // Ignore the connection limits in synchronous loads to avoid freezing the networking process.
&gt; 
&gt; This comment doesn&apos;t add much as the code bellow is really explicit. I&apos;d
&gt; better include a link to the bug or a more detailed description of the
&gt; issue. I&apos;d prefer the former.

Added the bug URL.

&gt; &gt; Source/WebCore/platform/network/soup/ResourceHandleSoup.cpp:942
&gt; &gt;      g_signal_connect(d-&gt;m_soupMessage.get(), &quot;network-event&quot;, G_CALLBACK(networkEventCallback), handle);
&gt; 
&gt; As you&apos;re fixing some other stuff like override,final, etc... I think we
&gt; could use this bug to also store the SoupMessage in a local variable and use
&gt; it all along this method which is full of the ugly d-&gt;m_soupMessage.get().

Fixed the sync loader because I was changing that, but for more general cleanups I prefer to use a separate bug.

&gt; &gt; Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestResources.cpp:704
&gt; &gt; +        GUniquePtr&lt;char&gt; xhr(g_strdup_printf(&quot;xhr = new XMLHttpRequest; xhr.open(&apos;GET&apos;, &apos;/sync-request-on-max-conns-xhr%u&apos;, false); xhr.send();&quot;, i));
&gt; 
&gt; If it were me I&apos;d have stored this string in a static variable putting each
&gt; instruction in a different line for better readability. But since this is a
&gt; unit test I could live with it.

:-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1073641</commentid>
    <comment_count>12</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-03-03 02:15:46 -0800</bug_when>
    <thetext>It seems libsoup 2.49.91 doesn&apos;t build in 32 bit, so the 32 bit bot is currently broken. I&apos;ve filed a bug https://bugzilla.gnome.org/show_bug.cgi?id=745509. Once it&apos;s fixed we can just land a follow up patch to use the new revision in our jhbuild.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>247661</attachid>
            <date>2015-03-02 05:31:22 -0800</date>
            <delta_ts>2015-03-02 23:52:33 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>wk2-sync-xhr.diff</filename>
            <type>text/plain</type>
            <size>11964</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA4MzdhYTA5Li43YjExNzM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjgg
QEAKKzIwMTUtMDMtMDIgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtTT1VQXSBTeW5jaHJvbm91cyBYTUxIdHRwUmVxdWVzdHMgY2FuIHRpbWUg
b3V0IHdoZW4gd2UgcmVhY2ggdGhlIG1heCBjb25uZWN0aW9ucyBsaW1pdAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxNTA4CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXNlIFNPVVBfTUVTU0FHRV9JR05P
UkVfQ09OTkVDVElPTl9MSU1JVFMgZmxhZyB3aGVuIGxvYWRpbmcgYQorICAgICAgICBzeW5jaHJv
bm91cyBtZXNzYWdlIGluc3RlYWQgb2YgaW5jcmVhc2luZyB0aGUgbWF4aW11bSBudW1iZXIgb2YK
KyAgICAgICAgY29ubmVjdGlvbnMgYWxsb3dlZCBpZiB0aGUgc291cCB2ZXJzaW9uIGlzIHJlY2Vu
dCBlbm91Z2guCisgICAgICAgIEFsc28gbWFya2VkIFdlYkNvcmVTeW5jaHJvbm91c0xvYWRlciBj
bGFzcyBhcyBmaW5hbCwgdGhlIHZpcnR1YWwKKyAgICAgICAgbWV0aG9kcyBhcyBvdmVycmlkZSBh
bmQgcmVtb3ZlZCB0aGUgdW5zdXNlZCBtZXRob2QgaXNTeW5jaHJvbm91c0NsaWVudC4KKworICAg
ICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUhhbmRsZVNvdXAuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Y3JlYXRlU291cE1lc3NhZ2VGb3JIYW5kbGVBbmRSZXF1ZXN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OldlYkNvcmVTeW5jaHJvbm91c0xvYWRlcjo6V2ViQ29yZVN5bmNocm9u
b3VzTG9hZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkNvcmVTeW5jaHJvbm91c0xvYWRlcjo6
aXNTeW5jaHJvbm91c0NsaWVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJDb3Jl
U3luY2hyb25vdXNMb2FkZXI6OmRpZFJlY2VpdmVSZXNwb25zZSk6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJDb3JlU3luY2hyb25vdXNMb2FkZXI6OmRpZFJlY2VpdmVEYXRhKToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkNvcmVTeW5jaHJvbm91c0xvYWRlcjo6ZGlkUmVjZWl2ZUJ1ZmZlcik6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJDb3JlU3luY2hyb25vdXNMb2FkZXI6OmRpZEZpbmlzaExvYWRpbmcp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViQ29yZVN5bmNocm9ub3VzTG9hZGVyOjpkaWRGYWlsKToK
KyAgICAgICAgKFdlYkNvcmU6OldlYkNvcmVTeW5jaHJvbm91c0xvYWRlcjo6ZGlkUmVjZWl2ZUF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkNvcmVTeW5jaHJv
bm91c0xvYWRlcjo6c2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UpOgorCiAyMDE1LTAzLTAxICBT
aW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIE1ha2UgY2xp
cC1wYXRoIHdvcmsgb24gPHZpZGVvPiwgPGNhbnZhcz4gZXRjLgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlSGFuZGxlU291cC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VIYW5kbGVTb3VwLmNw
cAppbmRleCBmYTIxOWZjLi5hMzhmODVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VIYW5kbGVTb3VwLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VIYW5kbGVTb3VwLmNwcApAQCAtNzUs
NyArNzUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBzdGF0aWMgYm9vbCBsb2FkaW5nU3luY2hy
b25vdXNSZXF1ZXN0ID0gZmFsc2U7CiBzdGF0aWMgY29uc3Qgc2l6ZV90IGdEZWZhdWx0UmVhZEJ1
ZmZlclNpemUgPSA4MTkyOwogCi1jbGFzcyBXZWJDb3JlU3luY2hyb25vdXNMb2FkZXIgOiBwdWJs
aWMgUmVzb3VyY2VIYW5kbGVDbGllbnQgeworY2xhc3MgV2ViQ29yZVN5bmNocm9ub3VzTG9hZGVy
IGZpbmFsIDogcHVibGljIFJlc291cmNlSGFuZGxlQ2xpZW50IHsKICAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShXZWJDb3JlU3luY2hyb25vdXNMb2FkZXIpOwogcHVibGljOgogCkBAIC04Niw3ICs4
Niw2IEBAIHB1YmxpYzoKICAgICAgICAgLCBtX2RhdGEoZGF0YSkKICAgICAgICAgLCBtX2Zpbmlz
aGVkKGZhbHNlKQogICAgICAgICAsIG1fc3RvcmVkQ3JlZGVudGlhbHMoc3RvcmVkQ3JlZGVudGlh
bHMpCi0gICAgICAgIAogICAgIHsKICAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCBhbnkgdGltZXJz
IHRvIGZpcmUgd2hpbGUgd2UgYXJlIGRvaW5nIG91ciBzeW5jaHJvbm91cyBsb2FkCiAgICAgICAg
IC8vIHNvIHdlIHJlcGxhY2UgdGhlIHRocmVhZCBkZWZhdWx0IG1haW4gY29udGV4dC4gVGhlIG1h
aW4gbG9vcCBpdGVyYXRpb25zCkBAIC05NiwxMiArOTUsMTYgQEAgcHVibGljOgogICAgICAgICBn
X21haW5fY29udGV4dF9wdXNoX3RocmVhZF9kZWZhdWx0KGlubmVyTWFpbkNvbnRleHQuZ2V0KCkp
OwogICAgICAgICBtX21haW5Mb29wID0gYWRvcHRHUmVmKGdfbWFpbl9sb29wX25ldyhpbm5lck1h
aW5Db250ZXh0LmdldCgpLCBmYWxzZSkpOwogCisjaWYgIVNPVVBfQ0hFQ0tfVkVSU0lPTigyLCA1
MCwgMCkKICAgICAgICAgYWRqdXN0TWF4Q29ubmVjdGlvbnMoMSk7CisjZW5kaWYKICAgICB9CiAK
ICAgICB+V2ViQ29yZVN5bmNocm9ub3VzTG9hZGVyKCkKICAgICB7CisjaWYgIVNPVVBfQ0hFQ0tf
VkVSU0lPTigyLCA1MCwgMCkKICAgICAgICAgYWRqdXN0TWF4Q29ubmVjdGlvbnMoLTEpOworI2Vu
ZGlmCiAKICAgICAgICAgR01haW5Db250ZXh0KiBjb250ZXh0ID0gZ19tYWluX2NvbnRleHRfZ2V0
X3RocmVhZF9kZWZhdWx0KCk7CiAgICAgICAgIHdoaWxlIChnX21haW5fY29udGV4dF9wZW5kaW5n
KGNvbnRleHQpKQpAQCAtMTExLDYgKzExNCw3IEBAIHB1YmxpYzoKICAgICAgICAgbG9hZGluZ1N5
bmNocm9ub3VzUmVxdWVzdCA9IGZhbHNlOwogICAgIH0KIAorI2lmICFTT1VQX0NIRUNLX1ZFUlNJ
T04oMiwgNTAsIDApCiAgICAgdm9pZCBhZGp1c3RNYXhDb25uZWN0aW9ucyhpbnQgYWRqdXN0bWVu
dCkKICAgICB7CiAgICAgICAgIGludCBtYXhDb25uZWN0aW9ucywgbWF4Q29ubmVjdGlvbnNQZXJI
b3N0OwpAQCAtMTI2LDIzICsxMzAsMTkgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAg
TlVMTCk7CiAKICAgICB9CisjZW5kaWYgLy8gU09VUF9DSEVDS19WRVJTSU9OKDIsIDUwLCAwKQog
Ci0gICAgdmlydHVhbCBib29sIGlzU3luY2hyb25vdXNDbGllbnQoKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVSZXNwb25z
ZShSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQorICAg
IHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBS
ZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkgb3ZlcnJpZGUKICAgICB7CiAgICAgICAgIG1fcmVz
cG9uc2UgPSByZXNwb25zZTsKICAgICB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZURh
dGEoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBjaGFyKiAvKiBkYXRhICovLCB1bnNpZ25lZCAvKiBs
ZW5ndGggKi8sIGludCkKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZURhdGEoUmVzb3VyY2VI
YW5kbGUqLCBjb25zdCBjaGFyKiAvKiBkYXRhICovLCB1bnNpZ25lZCAvKiBsZW5ndGggKi8sIGlu
dCkgb3ZlcnJpZGUKICAgICB7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0K
IAotICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlQnVmZmVyKFJlc291cmNlSGFuZGxlKiwgUGFz
c1JlZlB0cjxTaGFyZWRCdWZmZXI+IGJ1ZmZlciwgaW50IC8qIGVuY29kZWRMZW5ndGggKi8pCisg
ICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVCdWZmZXIoUmVzb3VyY2VIYW5kbGUqLCBQYXNzUmVm
UHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyLCBpbnQgLyogZW5jb2RlZExlbmd0aCAqLykgb3ZlcnJp
ZGUKICAgICB7CiAgICAgICAgIC8vIFRoaXMgcGF0dGVybiBpcyBzdWdnZXN0ZWQgYnkgU2hhcmVk
QnVmZmVyLmguCiAgICAgICAgIGNvbnN0IGNoYXIqIHNlZ21lbnQ7CkBAIC0xNTMsMjYgKzE1Mywy
NiBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgZGlkRmlu
aXNoTG9hZGluZyhSZXNvdXJjZUhhbmRsZSosIGRvdWJsZSkKKyAgICB2aXJ0dWFsIHZvaWQgZGlk
RmluaXNoTG9hZGluZyhSZXNvdXJjZUhhbmRsZSosIGRvdWJsZSkgb3ZlcnJpZGUKICAgICB7CiAg
ICAgICAgIGlmIChnX21haW5fbG9vcF9pc19ydW5uaW5nKG1fbWFpbkxvb3AuZ2V0KCkpKQogICAg
ICAgICAgICAgZ19tYWluX2xvb3BfcXVpdChtX21haW5Mb29wLmdldCgpKTsKICAgICAgICAgbV9m
aW5pc2hlZCA9IHRydWU7CiAgICAgfQogCi0gICAgdmlydHVhbCB2b2lkIGRpZEZhaWwoUmVzb3Vy
Y2VIYW5kbGUqIGhhbmRsZSwgY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCisgICAgdmlydHVh
bCB2b2lkIGRpZEZhaWwoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgY29uc3QgUmVzb3VyY2VFcnJv
ciYgZXJyb3IpIG92ZXJyaWRlCiAgICAgewogICAgICAgICBtX2Vycm9yID0gZXJyb3I7CiAgICAg
ICAgIGRpZEZpbmlzaExvYWRpbmcoaGFuZGxlLCAwKTsKICAgICB9CiAKLSAgICB2aXJ0dWFsIHZv
aWQgZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKFJlc291cmNlSGFuZGxlKiwgY29u
c3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmIGNoYWxsZW5nZSkKKyAgICB2aXJ0dWFsIHZvaWQg
ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKFJlc291cmNlSGFuZGxlKiwgY29uc3Qg
QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmIGNoYWxsZW5nZSkgb3ZlcnJpZGUKICAgICB7CiAgICAg
ICAgIC8vIFdlIGRvIG5vdCBoYW5kbGUgYXV0aGVudGljYXRpb24gZm9yIHN5bmNocm9ub3VzIFhN
TEh0dHBSZXF1ZXN0cy4KICAgICAgICAgY2hhbGxlbmdlLmF1dGhlbnRpY2F0aW9uQ2xpZW50KCkt
PnJlY2VpdmVkUmVxdWVzdFRvQ29udGludWVXaXRob3V0Q3JlZGVudGlhbChjaGFsbGVuZ2UpOwog
ICAgIH0KIAotICAgIHZpcnR1YWwgYm9vbCBzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZShSZXNv
dXJjZUhhbmRsZSopCisgICAgdmlydHVhbCBib29sIHNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdl
KFJlc291cmNlSGFuZGxlKikgb3ZlcnJpZGUKICAgICB7CiAgICAgICAgIHJldHVybiBtX3N0b3Jl
ZENyZWRlbnRpYWxzID09IEFsbG93U3RvcmVkQ3JlZGVudGlhbHM7CiAgICAgfQpAQCAtOTMwLDcg
KzkzMCwxMyBAQCBzdGF0aWMgYm9vbCBjcmVhdGVTb3VwTWVzc2FnZUZvckhhbmRsZUFuZFJlcXVl
c3QoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgY29uc3QgUgogICAgIGdfc2lnbmFsX2Nvbm5lY3Qo
ZC0+bV9zb3VwTWVzc2FnZS5nZXQoKSwgImdvdC1oZWFkZXJzIiwgR19DQUxMQkFDSyhnb3RIZWFk
ZXJzQ2FsbGJhY2spLCBoYW5kbGUpOwogICAgIGdfc2lnbmFsX2Nvbm5lY3QoZC0+bV9zb3VwTWVz
c2FnZS5nZXQoKSwgIndyb3RlLWJvZHktZGF0YSIsIEdfQ0FMTEJBQ0sod3JvdGVCb2R5RGF0YUNh
bGxiYWNrKSwgaGFuZGxlKTsKIAotICAgIHNvdXBfbWVzc2FnZV9zZXRfZmxhZ3MoZC0+bV9zb3Vw
TWVzc2FnZS5nZXQoKSwgc3RhdGljX2Nhc3Q8U291cE1lc3NhZ2VGbGFncz4oc291cF9tZXNzYWdl
X2dldF9mbGFncyhkLT5tX3NvdXBNZXNzYWdlLmdldCgpKSB8IFNPVVBfTUVTU0FHRV9OT19SRURJ
UkVDVCkpOworICAgIHVuc2lnbmVkIGZsYWdzID0gU09VUF9NRVNTQUdFX05PX1JFRElSRUNUOwor
I2lmIFNPVVBfQ0hFQ0tfVkVSU0lPTigyLCA1MCwgMCkKKyAgICAvLyBJZ25vcmUgdGhlIGNvbm5l
Y3Rpb24gbGltaXRzIGluIHN5bmNocm9ub3VzIGxvYWRzIHRvIGF2b2lkIGZyZWV6aW5nIHRoZSBu
ZXR3b3JraW5nIHByb2Nlc3MuCisgICAgaWYgKGxvYWRpbmdTeW5jaHJvbm91c1JlcXVlc3QpCisg
ICAgICAgIGZsYWdzIHw9IFNPVVBfTUVTU0FHRV9JR05PUkVfQ09OTkVDVElPTl9MSU1JVFM7Cisj
ZW5kaWYKKyAgICBzb3VwX21lc3NhZ2Vfc2V0X2ZsYWdzKGQtPm1fc291cE1lc3NhZ2UuZ2V0KCks
IHN0YXRpY19jYXN0PFNvdXBNZXNzYWdlRmxhZ3M+KHNvdXBfbWVzc2FnZV9nZXRfZmxhZ3MoZC0+
bV9zb3VwTWVzc2FnZS5nZXQoKSkgfCBmbGFncykpOwogCiAjaWYgRU5BQkxFKFdFQl9USU1JTkcp
CiAgICAgZ19zaWduYWxfY29ubmVjdChkLT5tX3NvdXBNZXNzYWdlLmdldCgpLCAibmV0d29yay1l
dmVudCIsIEdfQ0FMTEJBQ0sobmV0d29ya0V2ZW50Q2FsbGJhY2spLCBoYW5kbGUpOwpkaWZmIC0t
Z2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDFmZGUwNTcuLjFk
YmU2ODIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxOCBAQAorMjAxNS0wMy0wMiAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2Fy
Y2lhQGlnYWxpYS5jb20+CisKKyAgICAgICAgW1NPVVBdIFN5bmNocm9ub3VzIFhNTEh0dHBSZXF1
ZXN0cyBjYW4gdGltZSBvdXQgd2hlbiB3ZSByZWFjaCB0aGUgbWF4IGNvbm5lY3Rpb25zIGxpbWl0
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDE1MDgK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgYSB1
bml0IHRlc3QgdG8gY2hlY2sgdGhhdCBzeW5jaHJvbm91cyBYSFJzIGxvYWQgZXZlbiBpZiB0aGUK
KyAgICAgICAgbWF4aW11bSBjb25uZWN0aW9uIGxpbWl0cyBhcmUgcmVhY2hlZC4KKworICAgICAg
ICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0UmVzb3VyY2VzLmNwcDoKKyAg
ICAgICAgKHRlc3RXZWJWaWV3U3luY1JlcXVlc3RPbk1heENvbm5zKToKKyAgICAgICAgKHNlcnZl
ckNhbGxiYWNrKToKKyAgICAgICAgKGJlZm9yZUFsbCk6CisKIDIwMTUtMDMtMDEgIERhdmlkIEtp
bHplciAgPGRka2lsemVyQGFwcGxlLmNvbT4KIAogICAgICAgICBMYXlvdXRUZXN0UmVhbHk6IFBy
ZXBlbmQgX19YUENfIHRvIHRoZSBrZXksIG5vdCB0aGUgdmFsdWUhCmRpZmYgLS1naXQgYS9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFJlc291cmNlcy5jcHAgYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFJlc291cmNlcy5jcHAKaW5kZXgg
MzlhN2RkMC4uMjViODZlZCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXQyR3RrL1Rlc3RSZXNvdXJjZXMuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Mkd0ay9UZXN0UmVzb3VyY2VzLmNwcApAQCAtMjIsNiArMjIsOCBAQAogI2luY2x1
ZGUgIldlYktpdFRlc3RTZXJ2ZXIuaCIKICNpbmNsdWRlICJXZWJWaWV3VGVzdC5oIgogI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HTWFpbkxvb3BTb3VyY2Uu
aD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HTXV0ZXhMb2NrZXIuaD4KICNpbmNsdWRlIDx3dGYv
Z29iamVjdC9HUmVmUHRyLmg+CiAKIHN0YXRpYyBXZWJLaXRUZXN0U2VydmVyKiBrU2VydmVyOwpA
QCAtNjY3LDYgKzY2OSw0OSBAQCBzdGF0aWMgdm9pZCB0ZXN0V2ViUmVzb3VyY2VTZW5kUmVxdWVz
dChTZW5kUmVxdWVzdFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCiAgICAgZXZlbnRzLmNsZWFy
KCk7CiB9CiAKK3N0YXRpYyBHTXV0ZXggc19zZXJ2ZXJNdXRleDsKK3N0YXRpYyBjb25zdCB1bnNp
Z25lZCBzX21heENvbm5lY3Rpb25zUGVySG9zdCA9IDY7CisKK2NsYXNzIFN5bmNSZXF1ZXN0T25N
YXhDb25uc1Rlc3Q6IHB1YmxpYyBSZXNvdXJjZXNUZXN0IHsKK3B1YmxpYzoKKyAgICBNQUtFX0dM
SUJfVEVTVF9GSVhUVVJFKFN5bmNSZXF1ZXN0T25NYXhDb25uc1Rlc3QpOworCisgICAgdm9pZCBy
ZXNvdXJjZUxvYWRTdGFydGVkKFdlYktpdFdlYlJlc291cmNlKiwgV2ViS2l0VVJJUmVxdWVzdCop
IG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoIW1fcmVzb3VyY2VzVG9TdGFydFBlbmRpbmcp
CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKCEtLW1fcmVzb3VyY2VzVG9TdGFy
dFBlbmRpbmcpCisgICAgICAgICAgICBnX21haW5fbG9vcF9xdWl0KG1fbWFpbkxvb3ApOworICAg
IH0KKworICAgIHZvaWQgd2FpdFVudGlsUmVzb3VyY2VzU3RhcnRlZCh1bnNpZ25lZCByZXF1ZXN0
Q291bnQpCisgICAgeworICAgICAgICBtX3Jlc291cmNlc1RvU3RhcnRQZW5kaW5nID0gcmVxdWVz
dENvdW50OworICAgICAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7CisgICAgfQorCisg
ICAgdW5zaWduZWQgbV9yZXNvdXJjZXNUb1N0YXJ0UGVuZGluZzsKK307CisKK3N0YXRpYyB2b2lk
IHRlc3RXZWJWaWV3U3luY1JlcXVlc3RPbk1heENvbm5zKFN5bmNSZXF1ZXN0T25NYXhDb25uc1Rl
c3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgV1RGOjpHTXV0ZXhMb2NrZXI8R011dGV4
PiBsb2NrKHNfc2VydmVyTXV0ZXgpOworICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJ
Rm9yUGF0aCgiL3N5bmMtcmVxdWVzdC1vbi1tYXgtY29ubnMtMCIpLmRhdGEoKSk7CisgICAgdGVz
dC0+d2FpdFVudGlsUmVzb3VyY2VzU3RhcnRlZChzX21heENvbm5lY3Rpb25zUGVySG9zdCArIDEp
OyAvLyBzX21heENvbm5lY3Rpb25zUGVySG9zdCByZXNvdXJjZSArIG1haW4gcmVzb3VyY2UuCisK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMjsgKytpKSB7CisgICAgICAgIEdVbmlxdWVQ
dHI8Y2hhcj4geGhyKGdfc3RyZHVwX3ByaW50ZigieGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0OyB4
aHIub3BlbignR0VUJywgJy9zeW5jLXJlcXVlc3Qtb24tbWF4LWNvbm5zLXhociV1JywgZmFsc2Up
OyB4aHIuc2VuZCgpOyIsIGkpKTsKKyAgICAgICAgd2Via2l0X3dlYl92aWV3X3J1bl9qYXZhc2Ny
aXB0KHRlc3QtPm1fd2ViVmlldywgeGhyLmdldCgpLCBudWxscHRyLCBudWxscHRyLCBudWxscHRy
KTsKKyAgICB9CisKKyAgICAvLyBCeSBkZWZhdWx0IHN5bmMgWEhScyBoYXZlIGEgMTAgc2Vjb25k
cyB0aW1lb3V0LCB3ZSBkb24ndCB3YW50IHRvIHdhaXQgYWxsIHRoYXQgc28gdXNlIG91ciBvd24g
dGltZW91dC4KKyAgICBHTWFpbkxvb3BTb3VyY2U6OnNjaGVkdWxlQWZ0ZXJEZWxheUFuZERlbGV0
ZU9uRGVzdHJveSgiVGltZW91dCIsIFtdIHsgZ19hc3NlcnRfbm90X3JlYWNoZWQoKTsgfSwgc3Rk
OjpjaHJvbm86OnNlY29uZHMoMSkpOworCisgICAgR01haW5Mb29wU291cmNlOjpzY2hlZHVsZUFu
ZERlbGV0ZU9uRGVzdHJveSgiVW5sb2NrIFNlcnZlciBJZGxlIiwgWyZsb2NrXSB7IGxvY2sudW5s
b2NrKCk7IH0pOworICAgIHRlc3QtPndhaXRVbnRpbFJlc291cmNlc0xvYWRlZChzX21heENvbm5l
Y3Rpb25zUGVySG9zdCArIDMpOyAvLyBzX21heENvbm5lY3Rpb25zUGVySG9zdCByZXNvdXJjZSAr
IG1haW4gcmVzb3VyY2UgKyAyIFhIUi4KK30KKwogc3RhdGljIHZvaWQgYWRkQ2FjaGVIVFRQSGVh
ZGVyc1RvUmVzcG9uc2UoU291cE1lc3NhZ2UqIG1lc3NhZ2UpCiB7CiAgICAgLy8gVGhlIGFjdHVh
bCBkYXRlIGRvZXNuJ3QgcmVhbGx5IG1hdHRlci4KQEAgLTc2MCw3ICs4MDUsMjggQEAgc3RhdGlj
IHZvaWQgc2VydmVyQ2FsbGJhY2soU291cFNlcnZlciogc2VydmVyLCBTb3VwTWVzc2FnZSogbWVz
c2FnZSwgY29uc3QgY2hhcioKICAgICAgICAgc291cF9tZXNzYWdlX2hlYWRlcnNfYXBwZW5kKG1l
c3NhZ2UtPnJlc3BvbnNlX2hlYWRlcnMsICJMb2NhdGlvbiIsICIvY2FuY2VsLXRoaXMuanMiKTsK
ICAgICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvaW52YWxpZC5jc3MiKSkKICAgICAg
ICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfQ0FOVF9DT05O
RUNUKTsKLSAgICBlbHNlCisgICAgZWxzZSBpZiAoZ19zdHJfaGFzX3ByZWZpeChwYXRoLCAiL3N5
bmMtcmVxdWVzdC1vbi1tYXgtY29ubnMtIikpIHsKKyAgICAgICAgY2hhciogY29udGVudHM7Cisg
ICAgICAgIGdzaXplIGNvbnRlbnRzTGVuZ3RoOworICAgICAgICBpZiAoZ19zdHJfZXF1YWwocGF0
aCwgIi9zeW5jLXJlcXVlc3Qtb24tbWF4LWNvbm5zLTAiKSkgeworICAgICAgICAgICAgR1N0cmlu
ZyogaW1hZ2VzSFRNTCA9IGdfc3RyaW5nX25ldygiPGh0bWw+PGJvZHk+Iik7CisgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDw9IHNfbWF4Q29ubmVjdGlvbnNQZXJIb3N0OyArK2kp
CisgICAgICAgICAgICAgICAgZ19zdHJpbmdfYXBwZW5kX3ByaW50ZihpbWFnZXNIVE1MLCAiPGlt
ZyBzcmM9Jy9zeW5jLXJlcXVlc3Qtb24tbWF4LWNvbm5zLSV1Jz4iLCBpKTsKKyAgICAgICAgICAg
IGdfc3RyaW5nX2FwcGVuZChpbWFnZXNIVE1MLCAiPC9ib2R5PjwvaHRtbD4iKTsKKworICAgICAg
ICAgICAgY29udGVudHNMZW5ndGggPSBpbWFnZXNIVE1MLT5sZW47CisgICAgICAgICAgICBjb250
ZW50cyA9IGdfc3RyaW5nX2ZyZWUoaW1hZ2VzSFRNTCwgRkFMU0UpOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIFdlIGRvbid0IGFjdHVhbGx5IG5l
ZWQgdG8ga2VlcCB0aGUgbXV0ZXgsIHNvIHdlIHJlbGVhc2UgaXQgYXMgc29vbiBhcyB3ZSBnZXQg
aXQuCisgICAgICAgICAgICAgICAgV1RGOjpHTXV0ZXhMb2NrZXI8R011dGV4PiBsb2NrKHNfc2Vy
dmVyTXV0ZXgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBHVW5pcXVlUHRyPGNoYXI+
IGZpbGVQYXRoKGdfYnVpbGRfZmlsZW5hbWUoVGVzdDo6Z2V0UmVzb3VyY2VzRGlyKCkuZGF0YSgp
LCAiYmxhbmsuaWNvIiwgbnVsbHB0cikpOworICAgICAgICAgICAgZ19maWxlX2dldF9jb250ZW50
cyhmaWxlUGF0aC5nZXQoKSwgJmNvbnRlbnRzLCAmY29udGVudHNMZW5ndGgsIDApOworICAgICAg
ICB9CisgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9i
b2R5LCBTT1VQX01FTU9SWV9UQUtFLCBjb250ZW50cywgY29udGVudHNMZW5ndGgpOworICAgIH0g
ZWxzZQogICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRV
U19OT1RfRk9VTkQpOwogICAgIHNvdXBfbWVzc2FnZV9ib2R5X2NvbXBsZXRlKG1lc3NhZ2UtPnJl
c3BvbnNlX2JvZHkpOwogfQpAQCAtNzc5LDYgKzg0NSw5IEBAIHZvaWQgYmVmb3JlQWxsKCkKICAg
ICBSZXNvdXJjZXNUZXN0OjphZGQoIldlYktpdFdlYlJlc291cmNlIiwgImdldC1kYXRhIiwgdGVz
dFdlYlJlc291cmNlR2V0RGF0YSk7CiAgICAgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6YWRkKCJX
ZWJLaXRXZWJWaWV3IiwgImhpc3RvcnktY2FjaGUiLCB0ZXN0V2ViVmlld1Jlc291cmNlc0hpc3Rv
cnlDYWNoZSk7CiAgICAgU2VuZFJlcXVlc3RUZXN0OjphZGQoIldlYktpdFdlYlBhZ2UiLCAic2Vu
ZC1yZXF1ZXN0IiwgdGVzdFdlYlJlc291cmNlU2VuZFJlcXVlc3QpOworI2lmIFNPVVBfQ0hFQ0tf
VkVSU0lPTigyLCA1MCwgMCkKKyAgICBTeW5jUmVxdWVzdE9uTWF4Q29ubnNUZXN0OjphZGQoIldl
YktpdFdlYlZpZXciLCAic3luYy1yZXF1ZXN0LW9uLW1heC1jb25ucyIsIHRlc3RXZWJWaWV3U3lu
Y1JlcXVlc3RPbk1heENvbm5zKTsKKyNlbmRpZgogfQogCiB2b2lkIGFmdGVyQWxsKCkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>247751</attachid>
            <date>2015-03-02 23:52:33 -0800</date>
            <delta_ts>2015-03-03 01:00:35 -0800</delta_ts>
            <desc>Updated patch</desc>
            <filename>wk-sync-xhr.diff</filename>
            <type>text/plain</type>
            <size>12600</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA4MzdhYTA5Li43YjExNzM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjgg
QEAKKzIwMTUtMDMtMDIgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtTT1VQXSBTeW5jaHJvbm91cyBYTUxIdHRwUmVxdWVzdHMgY2FuIHRpbWUg
b3V0IHdoZW4gd2UgcmVhY2ggdGhlIG1heCBjb25uZWN0aW9ucyBsaW1pdAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxNTA4CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXNlIFNPVVBfTUVTU0FHRV9JR05P
UkVfQ09OTkVDVElPTl9MSU1JVFMgZmxhZyB3aGVuIGxvYWRpbmcgYQorICAgICAgICBzeW5jaHJv
bm91cyBtZXNzYWdlIGluc3RlYWQgb2YgaW5jcmVhc2luZyB0aGUgbWF4aW11bSBudW1iZXIgb2YK
KyAgICAgICAgY29ubmVjdGlvbnMgYWxsb3dlZCBpZiB0aGUgc291cCB2ZXJzaW9uIGlzIHJlY2Vu
dCBlbm91Z2guCisgICAgICAgIEFsc28gbWFya2VkIFdlYkNvcmVTeW5jaHJvbm91c0xvYWRlciBj
bGFzcyBhcyBmaW5hbCwgdGhlIHZpcnR1YWwKKyAgICAgICAgbWV0aG9kcyBhcyBvdmVycmlkZSBh
bmQgcmVtb3ZlZCB0aGUgdW5zdXNlZCBtZXRob2QgaXNTeW5jaHJvbm91c0NsaWVudC4KKworICAg
ICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUhhbmRsZVNvdXAuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Y3JlYXRlU291cE1lc3NhZ2VGb3JIYW5kbGVBbmRSZXF1ZXN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OldlYkNvcmVTeW5jaHJvbm91c0xvYWRlcjo6V2ViQ29yZVN5bmNocm9u
b3VzTG9hZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkNvcmVTeW5jaHJvbm91c0xvYWRlcjo6
aXNTeW5jaHJvbm91c0NsaWVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJDb3Jl
U3luY2hyb25vdXNMb2FkZXI6OmRpZFJlY2VpdmVSZXNwb25zZSk6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJDb3JlU3luY2hyb25vdXNMb2FkZXI6OmRpZFJlY2VpdmVEYXRhKToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkNvcmVTeW5jaHJvbm91c0xvYWRlcjo6ZGlkUmVjZWl2ZUJ1ZmZlcik6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJDb3JlU3luY2hyb25vdXNMb2FkZXI6OmRpZEZpbmlzaExvYWRpbmcp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViQ29yZVN5bmNocm9ub3VzTG9hZGVyOjpkaWRGYWlsKToK
KyAgICAgICAgKFdlYkNvcmU6OldlYkNvcmVTeW5jaHJvbm91c0xvYWRlcjo6ZGlkUmVjZWl2ZUF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkNvcmVTeW5jaHJv
bm91c0xvYWRlcjo6c2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UpOgorCiAyMDE1LTAzLTAxICBT
aW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIE1ha2UgY2xp
cC1wYXRoIHdvcmsgb24gPHZpZGVvPiwgPGNhbnZhcz4gZXRjLgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlSGFuZGxlU291cC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VIYW5kbGVTb3VwLmNw
cAppbmRleCBmYTIxOWZjLi4yMzEzMTA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VIYW5kbGVTb3VwLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VIYW5kbGVTb3VwLmNwcApAQCAtNzUs
NyArNzUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBzdGF0aWMgYm9vbCBsb2FkaW5nU3luY2hy
b25vdXNSZXF1ZXN0ID0gZmFsc2U7CiBzdGF0aWMgY29uc3Qgc2l6ZV90IGdEZWZhdWx0UmVhZEJ1
ZmZlclNpemUgPSA4MTkyOwogCi1jbGFzcyBXZWJDb3JlU3luY2hyb25vdXNMb2FkZXIgOiBwdWJs
aWMgUmVzb3VyY2VIYW5kbGVDbGllbnQgeworY2xhc3MgV2ViQ29yZVN5bmNocm9ub3VzTG9hZGVy
IGZpbmFsIDogcHVibGljIFJlc291cmNlSGFuZGxlQ2xpZW50IHsKICAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShXZWJDb3JlU3luY2hyb25vdXNMb2FkZXIpOwogcHVibGljOgogCkBAIC04Niw3ICs4
Niw2IEBAIHB1YmxpYzoKICAgICAgICAgLCBtX2RhdGEoZGF0YSkKICAgICAgICAgLCBtX2Zpbmlz
aGVkKGZhbHNlKQogICAgICAgICAsIG1fc3RvcmVkQ3JlZGVudGlhbHMoc3RvcmVkQ3JlZGVudGlh
bHMpCi0gICAgICAgIAogICAgIHsKICAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCBhbnkgdGltZXJz
IHRvIGZpcmUgd2hpbGUgd2UgYXJlIGRvaW5nIG91ciBzeW5jaHJvbm91cyBsb2FkCiAgICAgICAg
IC8vIHNvIHdlIHJlcGxhY2UgdGhlIHRocmVhZCBkZWZhdWx0IG1haW4gY29udGV4dC4gVGhlIG1h
aW4gbG9vcCBpdGVyYXRpb25zCkBAIC05NiwxMiArOTUsMTYgQEAgcHVibGljOgogICAgICAgICBn
X21haW5fY29udGV4dF9wdXNoX3RocmVhZF9kZWZhdWx0KGlubmVyTWFpbkNvbnRleHQuZ2V0KCkp
OwogICAgICAgICBtX21haW5Mb29wID0gYWRvcHRHUmVmKGdfbWFpbl9sb29wX25ldyhpbm5lck1h
aW5Db250ZXh0LmdldCgpLCBmYWxzZSkpOwogCisjaWYgIVNPVVBfQ0hFQ0tfVkVSU0lPTigyLCA0
OSwgOTEpCiAgICAgICAgIGFkanVzdE1heENvbm5lY3Rpb25zKDEpOworI2VuZGlmCiAgICAgfQog
CiAgICAgfldlYkNvcmVTeW5jaHJvbm91c0xvYWRlcigpCiAgICAgeworI2lmICFTT1VQX0NIRUNL
X1ZFUlNJT04oMiwgNDksIDkxKQogICAgICAgICBhZGp1c3RNYXhDb25uZWN0aW9ucygtMSk7Cisj
ZW5kaWYKIAogICAgICAgICBHTWFpbkNvbnRleHQqIGNvbnRleHQgPSBnX21haW5fY29udGV4dF9n
ZXRfdGhyZWFkX2RlZmF1bHQoKTsKICAgICAgICAgd2hpbGUgKGdfbWFpbl9jb250ZXh0X3BlbmRp
bmcoY29udGV4dCkpCkBAIC0xMTEsNiArMTE0LDcgQEAgcHVibGljOgogICAgICAgICBsb2FkaW5n
U3luY2hyb25vdXNSZXF1ZXN0ID0gZmFsc2U7CiAgICAgfQogCisjaWYgIVNPVVBfQ0hFQ0tfVkVS
U0lPTigyLCA0OSwgOTEpCiAgICAgdm9pZCBhZGp1c3RNYXhDb25uZWN0aW9ucyhpbnQgYWRqdXN0
bWVudCkKICAgICB7CiAgICAgICAgIGludCBtYXhDb25uZWN0aW9ucywgbWF4Q29ubmVjdGlvbnNQ
ZXJIb3N0OwpAQCAtMTI2LDIzICsxMzAsMTkgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAg
ICAgTlVMTCk7CiAKICAgICB9CisjZW5kaWYgLy8gU09VUF9DSEVDS19WRVJTSU9OKDIsIDQ5LCA5
MSkKIAotICAgIHZpcnR1YWwgYm9vbCBpc1N5bmNocm9ub3VzQ2xpZW50KCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlUmVz
cG9uc2UoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkK
KyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKFJlc291cmNlSGFuZGxlKiwgY29u
c3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpIG92ZXJyaWRlCiAgICAgewogICAgICAgICBt
X3Jlc3BvbnNlID0gcmVzcG9uc2U7CiAgICAgfQogCi0gICAgdmlydHVhbCB2b2lkIGRpZFJlY2Vp
dmVEYXRhKFJlc291cmNlSGFuZGxlKiwgY29uc3QgY2hhciogLyogZGF0YSAqLywgdW5zaWduZWQg
LyogbGVuZ3RoICovLCBpbnQpCisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVEYXRhKFJlc291
cmNlSGFuZGxlKiwgY29uc3QgY2hhciogLyogZGF0YSAqLywgdW5zaWduZWQgLyogbGVuZ3RoICov
LCBpbnQpIG92ZXJyaWRlCiAgICAgewogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAg
ICB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUJ1ZmZlcihSZXNvdXJjZUhhbmRsZSos
IFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBidWZmZXIsIGludCAvKiBlbmNvZGVkTGVuZ3RoICov
KQorICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlQnVmZmVyKFJlc291cmNlSGFuZGxlKiwgUGFz
c1JlZlB0cjxTaGFyZWRCdWZmZXI+IGJ1ZmZlciwgaW50IC8qIGVuY29kZWRMZW5ndGggKi8pIG92
ZXJyaWRlCiAgICAgewogICAgICAgICAvLyBUaGlzIHBhdHRlcm4gaXMgc3VnZ2VzdGVkIGJ5IFNo
YXJlZEJ1ZmZlci5oLgogICAgICAgICBjb25zdCBjaGFyKiBzZWdtZW50OwpAQCAtMTUzLDI2ICsx
NTMsMjYgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgfQogCi0gICAgdmlydHVhbCB2b2lkIGRp
ZEZpbmlzaExvYWRpbmcoUmVzb3VyY2VIYW5kbGUqLCBkb3VibGUpCisgICAgdmlydHVhbCB2b2lk
IGRpZEZpbmlzaExvYWRpbmcoUmVzb3VyY2VIYW5kbGUqLCBkb3VibGUpIG92ZXJyaWRlCiAgICAg
ewogICAgICAgICBpZiAoZ19tYWluX2xvb3BfaXNfcnVubmluZyhtX21haW5Mb29wLmdldCgpKSkK
ICAgICAgICAgICAgIGdfbWFpbl9sb29wX3F1aXQobV9tYWluTG9vcC5nZXQoKSk7CiAgICAgICAg
IG1fZmluaXNoZWQgPSB0cnVlOwogICAgIH0KIAotICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsKFJl
c291cmNlSGFuZGxlKiBoYW5kbGUsIGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQorICAgIHZp
cnR1YWwgdm9pZCBkaWRGYWlsKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIGNvbnN0IFJlc291cmNl
RXJyb3ImIGVycm9yKSBvdmVycmlkZQogICAgIHsKICAgICAgICAgbV9lcnJvciA9IGVycm9yOwog
ICAgICAgICBkaWRGaW5pc2hMb2FkaW5nKGhhbmRsZSwgMCk7CiAgICAgfQogCi0gICAgdmlydHVh
bCB2b2lkIGRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShSZXNvdXJjZUhhbmRsZSos
IGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiBjaGFsbGVuZ2UpCisgICAgdmlydHVhbCB2
b2lkIGRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShSZXNvdXJjZUhhbmRsZSosIGNv
bnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiBjaGFsbGVuZ2UpIG92ZXJyaWRlCiAgICAgewog
ICAgICAgICAvLyBXZSBkbyBub3QgaGFuZGxlIGF1dGhlbnRpY2F0aW9uIGZvciBzeW5jaHJvbm91
cyBYTUxIdHRwUmVxdWVzdHMuCiAgICAgICAgIGNoYWxsZW5nZS5hdXRoZW50aWNhdGlvbkNsaWVu
dCgpLT5yZWNlaXZlZFJlcXVlc3RUb0NvbnRpbnVlV2l0aG91dENyZWRlbnRpYWwoY2hhbGxlbmdl
KTsKICAgICB9CiAKLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2Uo
UmVzb3VyY2VIYW5kbGUqKQorICAgIHZpcnR1YWwgYm9vbCBzaG91bGRVc2VDcmVkZW50aWFsU3Rv
cmFnZShSZXNvdXJjZUhhbmRsZSopIG92ZXJyaWRlCiAgICAgewogICAgICAgICByZXR1cm4gbV9z
dG9yZWRDcmVkZW50aWFscyA9PSBBbGxvd1N0b3JlZENyZWRlbnRpYWxzOwogICAgIH0KQEAgLTkz
MCw3ICs5MzAsMTMgQEAgc3RhdGljIGJvb2wgY3JlYXRlU291cE1lc3NhZ2VGb3JIYW5kbGVBbmRS
ZXF1ZXN0KFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIGNvbnN0IFIKICAgICBnX3NpZ25hbF9jb25u
ZWN0KGQtPm1fc291cE1lc3NhZ2UuZ2V0KCksICJnb3QtaGVhZGVycyIsIEdfQ0FMTEJBQ0soZ290
SGVhZGVyc0NhbGxiYWNrKSwgaGFuZGxlKTsKICAgICBnX3NpZ25hbF9jb25uZWN0KGQtPm1fc291
cE1lc3NhZ2UuZ2V0KCksICJ3cm90ZS1ib2R5LWRhdGEiLCBHX0NBTExCQUNLKHdyb3RlQm9keURh
dGFDYWxsYmFjayksIGhhbmRsZSk7CiAKLSAgICBzb3VwX21lc3NhZ2Vfc2V0X2ZsYWdzKGQtPm1f
c291cE1lc3NhZ2UuZ2V0KCksIHN0YXRpY19jYXN0PFNvdXBNZXNzYWdlRmxhZ3M+KHNvdXBfbWVz
c2FnZV9nZXRfZmxhZ3MoZC0+bV9zb3VwTWVzc2FnZS5nZXQoKSkgfCBTT1VQX01FU1NBR0VfTk9f
UkVESVJFQ1QpKTsKKyAgICB1bnNpZ25lZCBmbGFncyA9IFNPVVBfTUVTU0FHRV9OT19SRURJUkVD
VDsKKyNpZiBTT1VQX0NIRUNLX1ZFUlNJT04oMiwgNDksIDkxKQorICAgIC8vIElnbm9yZSB0aGUg
Y29ubmVjdGlvbiBsaW1pdHMgaW4gc3luY2hyb25vdXMgbG9hZHMgdG8gYXZvaWQgZnJlZXppbmcg
dGhlIG5ldHdvcmtpbmcgcHJvY2Vzcy4KKyAgICBpZiAobG9hZGluZ1N5bmNocm9ub3VzUmVxdWVz
dCkKKyAgICAgICAgZmxhZ3MgfD0gU09VUF9NRVNTQUdFX0lHTk9SRV9DT05ORUNUSU9OX0xJTUlU
UzsKKyNlbmRpZgorICAgIHNvdXBfbWVzc2FnZV9zZXRfZmxhZ3MoZC0+bV9zb3VwTWVzc2FnZS5n
ZXQoKSwgc3RhdGljX2Nhc3Q8U291cE1lc3NhZ2VGbGFncz4oc291cF9tZXNzYWdlX2dldF9mbGFn
cyhkLT5tX3NvdXBNZXNzYWdlLmdldCgpKSB8IGZsYWdzKSk7CiAKICNpZiBFTkFCTEUoV0VCX1RJ
TUlORykKICAgICBnX3NpZ25hbF9jb25uZWN0KGQtPm1fc291cE1lc3NhZ2UuZ2V0KCksICJuZXR3
b3JrLWV2ZW50IiwgR19DQUxMQkFDSyhuZXR3b3JrRXZlbnRDYWxsYmFjayksIGhhbmRsZSk7CmRp
ZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMWZkZTA1
Ny4uNWQ4ZTI5MiAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDE1LTAzLTAyICBDYXJsb3MgR2FyY2lhIENhbXBvcyAg
PGNnYXJjaWFAaWdhbGlhLmNvbT4KKworICAgICAgICBbU09VUF0gU3luY2hyb25vdXMgWE1MSHR0
cFJlcXVlc3RzIGNhbiB0aW1lIG91dCB3aGVuIHdlIHJlYWNoIHRoZSBtYXggY29ubmVjdGlvbnMg
bGltaXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0
MTUwOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFk
ZCBhIHVuaXQgdGVzdCB0byBjaGVjayB0aGF0IHN5bmNocm9ub3VzIFhIUnMgbG9hZCBldmVuIGlm
IHRoZQorICAgICAgICBtYXhpbXVtIGNvbm5lY3Rpb24gbGltaXRzIGFyZSByZWFjaGVkLgorCisg
ICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RSZXNvdXJjZXMuY3Bw
OgorICAgICAgICAodGVzdFdlYlZpZXdTeW5jUmVxdWVzdE9uTWF4Q29ubnMpOgorICAgICAgICAo
c2VydmVyQ2FsbGJhY2spOgorICAgICAgICAoYmVmb3JlQWxsKToKKyAgICAgICAgKiBndGsvamhi
dWlsZC5tb2R1bGVzOiBCdW1wIGxpYnNvdXAgdmVyc2lvbiB0byAyLjQ5LjkxLgorCiAyMDE1LTAz
LTAxICBEYXZpZCBLaWx6ZXIgIDxkZGtpbHplckBhcHBsZS5jb20+CiAKICAgICAgICAgTGF5b3V0
VGVzdFJlYWx5OiBQcmVwZW5kIF9fWFBDXyB0byB0aGUga2V5LCBub3QgdGhlIHZhbHVlIQpkaWZm
IC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RSZXNvdXJj
ZXMuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RSZXNvdXJj
ZXMuY3BwCmluZGV4IDM5YTdkZDAuLmRiYjg4ZDYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0UmVzb3VyY2VzLmNwcAorKysgYi9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFJlc291cmNlcy5jcHAKQEAgLTIyLDYgKzIy
LDggQEAKICNpbmNsdWRlICJXZWJLaXRUZXN0U2VydmVyLmgiCiAjaW5jbHVkZSAiV2ViVmlld1Rl
c3QuaCIKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR01h
aW5Mb29wU291cmNlLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR011dGV4TG9ja2VyLmg+CiAj
aW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgogCiBzdGF0aWMgV2ViS2l0VGVzdFNlcnZl
cioga1NlcnZlcjsKQEAgLTY2Nyw2ICs2NjksNDkgQEAgc3RhdGljIHZvaWQgdGVzdFdlYlJlc291
cmNlU2VuZFJlcXVlc3QoU2VuZFJlcXVlc3RUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQogICAg
IGV2ZW50cy5jbGVhcigpOwogfQogCitzdGF0aWMgR011dGV4IHNfc2VydmVyTXV0ZXg7CitzdGF0
aWMgY29uc3QgdW5zaWduZWQgc19tYXhDb25uZWN0aW9uc1Blckhvc3QgPSA2OworCitjbGFzcyBT
eW5jUmVxdWVzdE9uTWF4Q29ubnNUZXN0OiBwdWJsaWMgUmVzb3VyY2VzVGVzdCB7CitwdWJsaWM6
CisgICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShTeW5jUmVxdWVzdE9uTWF4Q29ubnNUZXN0KTsK
KworICAgIHZvaWQgcmVzb3VyY2VMb2FkU3RhcnRlZChXZWJLaXRXZWJSZXNvdXJjZSosIFdlYktp
dFVSSVJlcXVlc3QqKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKCFtX3Jlc291cmNlc1Rv
U3RhcnRQZW5kaW5nKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmICghLS1tX3Jl
c291cmNlc1RvU3RhcnRQZW5kaW5nKQorICAgICAgICAgICAgZ19tYWluX2xvb3BfcXVpdChtX21h
aW5Mb29wKTsKKyAgICB9CisKKyAgICB2b2lkIHdhaXRVbnRpbFJlc291cmNlc1N0YXJ0ZWQodW5z
aWduZWQgcmVxdWVzdENvdW50KQorICAgIHsKKyAgICAgICAgbV9yZXNvdXJjZXNUb1N0YXJ0UGVu
ZGluZyA9IHJlcXVlc3RDb3VudDsKKyAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3Ap
OworICAgIH0KKworICAgIHVuc2lnbmVkIG1fcmVzb3VyY2VzVG9TdGFydFBlbmRpbmc7Cit9Owor
CitzdGF0aWMgdm9pZCB0ZXN0V2ViVmlld1N5bmNSZXF1ZXN0T25NYXhDb25ucyhTeW5jUmVxdWVz
dE9uTWF4Q29ubnNUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIFdURjo6R011dGV4
TG9ja2VyPEdNdXRleD4gbG9jayhzX3NlcnZlck11dGV4KTsKKyAgICB0ZXN0LT5sb2FkVVJJKGtT
ZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9zeW5jLXJlcXVlc3Qtb24tbWF4LWNvbm5zLTAiKS5kYXRh
KCkpOworICAgIHRlc3QtPndhaXRVbnRpbFJlc291cmNlc1N0YXJ0ZWQoc19tYXhDb25uZWN0aW9u
c1Blckhvc3QgKyAxKTsgLy8gc19tYXhDb25uZWN0aW9uc1Blckhvc3QgcmVzb3VyY2UgKyBtYWlu
IHJlc291cmNlLgorCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDI7ICsraSkgeworICAg
ICAgICBHVW5pcXVlUHRyPGNoYXI+IHhocihnX3N0cmR1cF9wcmludGYoInhociA9IG5ldyBYTUxI
dHRwUmVxdWVzdDsgeGhyLm9wZW4oJ0dFVCcsICcvc3luYy1yZXF1ZXN0LW9uLW1heC1jb25ucy14
aHIldScsIGZhbHNlKTsgeGhyLnNlbmQoKTsiLCBpKSk7CisgICAgICAgIHdlYmtpdF93ZWJfdmll
d19ydW5famF2YXNjcmlwdCh0ZXN0LT5tX3dlYlZpZXcsIHhoci5nZXQoKSwgbnVsbHB0ciwgbnVs
bHB0ciwgbnVsbHB0cik7CisgICAgfQorCisgICAgLy8gQnkgZGVmYXVsdCBzeW5jIFhIUnMgaGF2
ZSBhIDEwIHNlY29uZHMgdGltZW91dCwgd2UgZG9uJ3Qgd2FudCB0byB3YWl0IGFsbCB0aGF0IHNv
IHVzZSBvdXIgb3duIHRpbWVvdXQuCisgICAgR01haW5Mb29wU291cmNlOjpzY2hlZHVsZUFmdGVy
RGVsYXlBbmREZWxldGVPbkRlc3Ryb3koIlRpbWVvdXQiLCBbXSB7IGdfYXNzZXJ0X25vdF9yZWFj
aGVkKCk7IH0sIHN0ZDo6Y2hyb25vOjpzZWNvbmRzKDEpKTsKKworICAgIEdNYWluTG9vcFNvdXJj
ZTo6c2NoZWR1bGVBbmREZWxldGVPbkRlc3Ryb3koIlVubG9jayBTZXJ2ZXIgSWRsZSIsIFsmbG9j
a10geyBsb2NrLnVubG9jaygpOyB9KTsKKyAgICB0ZXN0LT53YWl0VW50aWxSZXNvdXJjZXNMb2Fk
ZWQoc19tYXhDb25uZWN0aW9uc1Blckhvc3QgKyAzKTsgLy8gc19tYXhDb25uZWN0aW9uc1Blckhv
c3QgcmVzb3VyY2UgKyBtYWluIHJlc291cmNlICsgMiBYSFIuCit9CisKIHN0YXRpYyB2b2lkIGFk
ZENhY2hlSFRUUEhlYWRlcnNUb1Jlc3BvbnNlKFNvdXBNZXNzYWdlKiBtZXNzYWdlKQogewogICAg
IC8vIFRoZSBhY3R1YWwgZGF0ZSBkb2Vzbid0IHJlYWxseSBtYXR0ZXIuCkBAIC03NjAsNyArODA1
LDI4IEBAIHN0YXRpYyB2b2lkIHNlcnZlckNhbGxiYWNrKFNvdXBTZXJ2ZXIqIHNlcnZlciwgU291
cE1lc3NhZ2UqIG1lc3NhZ2UsIGNvbnN0IGNoYXIqCiAgICAgICAgIHNvdXBfbWVzc2FnZV9oZWFk
ZXJzX2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9oZWFkZXJzLCAiTG9jYXRpb24iLCAiL2NhbmNl
bC10aGlzLmpzIik7CiAgICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL2ludmFsaWQu
Y3NzIikpCiAgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RB
VFVTX0NBTlRfQ09OTkVDVCk7Ci0gICAgZWxzZQorICAgIGVsc2UgaWYgKGdfc3RyX2hhc19wcmVm
aXgocGF0aCwgIi9zeW5jLXJlcXVlc3Qtb24tbWF4LWNvbm5zLSIpKSB7CisgICAgICAgIGNoYXIq
IGNvbnRlbnRzOworICAgICAgICBnc2l6ZSBjb250ZW50c0xlbmd0aDsKKyAgICAgICAgaWYgKGdf
c3RyX2VxdWFsKHBhdGgsICIvc3luYy1yZXF1ZXN0LW9uLW1heC1jb25ucy0wIikpIHsKKyAgICAg
ICAgICAgIEdTdHJpbmcqIGltYWdlc0hUTUwgPSBnX3N0cmluZ19uZXcoIjxodG1sPjxib2R5PiIp
OworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8PSBzX21heENvbm5lY3Rpb25z
UGVySG9zdDsgKytpKQorICAgICAgICAgICAgICAgIGdfc3RyaW5nX2FwcGVuZF9wcmludGYoaW1h
Z2VzSFRNTCwgIjxpbWcgc3JjPScvc3luYy1yZXF1ZXN0LW9uLW1heC1jb25ucy0ldSc+IiwgaSk7
CisgICAgICAgICAgICBnX3N0cmluZ19hcHBlbmQoaW1hZ2VzSFRNTCwgIjwvYm9keT48L2h0bWw+
Iik7CisKKyAgICAgICAgICAgIGNvbnRlbnRzTGVuZ3RoID0gaW1hZ2VzSFRNTC0+bGVuOworICAg
ICAgICAgICAgY29udGVudHMgPSBnX3N0cmluZ19mcmVlKGltYWdlc0hUTUwsIEZBTFNFKTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBXZSBkb24n
dCBhY3R1YWxseSBuZWVkIHRvIGtlZXAgdGhlIG11dGV4LCBzbyB3ZSByZWxlYXNlIGl0IGFzIHNv
b24gYXMgd2UgZ2V0IGl0LgorICAgICAgICAgICAgICAgIFdURjo6R011dGV4TG9ja2VyPEdNdXRl
eD4gbG9jayhzX3NlcnZlck11dGV4KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgR1Vu
aXF1ZVB0cjxjaGFyPiBmaWxlUGF0aChnX2J1aWxkX2ZpbGVuYW1lKFRlc3Q6OmdldFJlc291cmNl
c0RpcigpLmRhdGEoKSwgImJsYW5rLmljbyIsIG51bGxwdHIpKTsKKyAgICAgICAgICAgIGdfZmls
ZV9nZXRfY29udGVudHMoZmlsZVBhdGguZ2V0KCksICZjb250ZW50cywgJmNvbnRlbnRzTGVuZ3Ro
LCAwKTsKKyAgICAgICAgfQorICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobWVzc2Fn
ZS0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfVEFLRSwgY29udGVudHMsIGNvbnRlbnRzTGVu
Z3RoKTsKKyAgICB9IGVsc2UKICAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2Fn
ZSwgU09VUF9TVEFUVVNfTk9UX0ZPVU5EKTsKICAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0
ZShtZXNzYWdlLT5yZXNwb25zZV9ib2R5KTsKIH0KQEAgLTc3OSw2ICs4NDUsOSBAQCB2b2lkIGJl
Zm9yZUFsbCgpCiAgICAgUmVzb3VyY2VzVGVzdDo6YWRkKCJXZWJLaXRXZWJSZXNvdXJjZSIsICJn
ZXQtZGF0YSIsIHRlc3RXZWJSZXNvdXJjZUdldERhdGEpOwogICAgIFNpbmdsZVJlc291cmNlTG9h
ZFRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJoaXN0b3J5LWNhY2hlIiwgdGVzdFdlYlZpZXdS
ZXNvdXJjZXNIaXN0b3J5Q2FjaGUpOwogICAgIFNlbmRSZXF1ZXN0VGVzdDo6YWRkKCJXZWJLaXRX
ZWJQYWdlIiwgInNlbmQtcmVxdWVzdCIsIHRlc3RXZWJSZXNvdXJjZVNlbmRSZXF1ZXN0KTsKKyNp
ZiBTT1VQX0NIRUNLX1ZFUlNJT04oMiwgNDksIDkxKQorICAgIFN5bmNSZXF1ZXN0T25NYXhDb25u
c1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJzeW5jLXJlcXVlc3Qtb24tbWF4LWNvbm5zIiwg
dGVzdFdlYlZpZXdTeW5jUmVxdWVzdE9uTWF4Q29ubnMpOworI2VuZGlmCiB9CiAKIHZvaWQgYWZ0
ZXJBbGwoKQpkaWZmIC0tZ2l0IGEvVG9vbHMvZ3RrL2poYnVpbGQubW9kdWxlcyBiL1Rvb2xzL2d0
ay9qaGJ1aWxkLm1vZHVsZXMKaW5kZXggOTM4MGNhMy4uMGJhZDM3YSAxMDA2NDQKLS0tIGEvVG9v
bHMvZ3RrL2poYnVpbGQubW9kdWxlcworKysgYi9Ub29scy9ndGsvamhidWlsZC5tb2R1bGVzCkBA
IC0xODIsOSArMTgyLDkgQEAKICAgICA8ZGVwZW5kZW5jaWVzPgogICAgICAgPGRlcCBwYWNrYWdl
PSJnbGliLW5ldHdvcmtpbmciLz4KICAgICA8L2RlcGVuZGVuY2llcz4KLSAgICA8YnJhbmNoIG1v
ZHVsZT0ibGlic291cCIgdmVyc2lvbj0iMi40My45MCIKKyAgICA8YnJhbmNoIG1vZHVsZT0ibGli
c291cCIgdmVyc2lvbj0iMi40OS45MSIKICAgICAgICAgICAgIHJlcG89ImdpdC5nbm9tZS5vcmci
Ci0gICAgICAgICAgICB0YWc9IjBlYTg2ZjU2NmI3ZDUyNmM4MzI4YzdjNjAyYWUxYmU4Y2RhOGRk
NjgiLz4KKyAgICAgICAgICAgIHRhZz0iOTMzZGUzMDRmZmRlMDI1N2IxOGYwNGJmMzRhNjUzZmNj
MzU2ODMzYyIvPgogICA8L2F1dG90b29scz4KIAogICA8YXV0b3Rvb2xzIGlkPSJmb250Y29uZmln
IiAK
</data>
<flag name="review"
          id="272659"
          type_id="1"
          status="+"
          setter="svillar"
    />
          </attachment>
      

    </bug>

</bugzilla>