<?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>195396</bug_id>
          
          <creation_ts>2019-03-06 20:48:21 -0800</creation_ts>
          <short_desc>[iOS WK] REGRESSION (r242132): Fixed position banners flicker and move when scrolling (Apple, Tesla, YouTube, Reddit)</short_desc>
          <delta_ts>2019-03-07 10:03:49 -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>New Bugs</component>
          <version>WebKit 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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Simon Fraser (smfr)">simon.fraser</reporter>
          <assigned_to name="Simon Fraser (smfr)">simon.fraser</assigned_to>
          <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fred.wang</cc>
    
    <cc>jamesr</cc>
    
    <cc>koivisto</cc>
    
    <cc>luiz</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1513374</commentid>
    <comment_count>0</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2019-03-06 20:48:21 -0800</bug_when>
    <thetext>[iOS WK] REGRESSION (r242132): Fixed position banners flicker and move when scrolling (Apple, Tesla, YouTube, Reddit)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1513377</commentid>
    <comment_count>1</comment_count>
      <attachid>363839</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2019-03-06 20:53:39 -0800</bug_when>
    <thetext>Created attachment 363839
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1513378</commentid>
    <comment_count>2</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2019-03-06 20:53:42 -0800</bug_when>
    <thetext>&lt;rdar://problem/48518959&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1513446</commentid>
    <comment_count>3</comment_count>
      <attachid>363839</attachid>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2019-03-07 00:50:46 -0800</bug_when>
    <thetext>Comment on attachment 363839
Patch

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

&gt; Source/WebCore/page/scrolling/ScrollingTreeScrollingNode.cpp:187
&gt; +    bool scrollingStateChanged = scrollPositionAndLayoutViewportMatch(position, overrideLayoutViewport);

Can we have both scroll position change and state change happening?
Maybe this should be renamed scrollingStateChangeOnly or scrollPositionOrLayoutViewportChange?

&gt; Source/WebCore/page/scrolling/ScrollingTreeScrollingNode.cpp:197
&gt; +        scrollingTree().scrollingTreeNodeDidScroll(*this);

I don&apos;t understand this. Shoudn&apos;t it be !scrollingStateChanged? When position != m_currentScrollPosition, we are no longer doing this call compared to the former code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1513478</commentid>
    <comment_count>4</comment_count>
      <attachid>363839</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-03-07 05:02:35 -0800</bug_when>
    <thetext>Comment on attachment 363839
Patch

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

&gt; Source/WebCore/ChangeLog:19
&gt; +        First, ScrollingTreeScrollingNode::wasScrolledByDelegatedScrolling() would early return if the scroll position
&gt; +        hadn&apos;t changed. It also needs to check the supplied layoutViewport (if any), but in some cases running the
&gt; +        notifyRelatedNodesAfterScrollPositionChange() code is necessary even without a scroll position change:
&gt; +        if the web process has committed new scrolling tree state (e.g. with new fixed constraints) since
&gt; +        the last call, we have to run the layer positioning code to have fixed layers re-adjust their position relative
&gt; +        to the root. This was the primary bug fix.
&gt; +
&gt; +        Secondly, a layer tree commit can give ScrollingTreeFrameScrollingNode a new layout viewport, but we need to
&gt; +        adjust this by the scrolling tree&apos;s current scroll position in case it gets used before the next scroll.

Architectural fix for these sort of issues is to stop using web process supplied scroll positions for anything. Not having them in scrolling tree in the first place is the most robust way to achieve that.

&gt;&gt; Source/WebCore/page/scrolling/ScrollingTreeScrollingNode.cpp:187
&gt;&gt; +    bool scrollingStateChanged = scrollPositionAndLayoutViewportMatch(position, overrideLayoutViewport);
&gt; 
&gt; Can we have both scroll position change and state change happening?
&gt; Maybe this should be renamed scrollingStateChangeOnly or scrollPositionOrLayoutViewportChange?

State changed if position and viewport matches? This makes no logical sense.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1513511</commentid>
    <comment_count>5</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2019-03-07 08:44:34 -0800</bug_when>
    <thetext>(In reply to Antti Koivisto from comment #4)
&gt; Comment on attachment 363839 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=363839&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:19
&gt; &gt; +        First, ScrollingTreeScrollingNode::wasScrolledByDelegatedScrolling() would early return if the scroll position
&gt; &gt; +        hadn&apos;t changed. It also needs to check the supplied layoutViewport (if any), but in some cases running the
&gt; &gt; +        notifyRelatedNodesAfterScrollPositionChange() code is necessary even without a scroll position change:
&gt; &gt; +        if the web process has committed new scrolling tree state (e.g. with new fixed constraints) since
&gt; &gt; +        the last call, we have to run the layer positioning code to have fixed layers re-adjust their position relative
&gt; &gt; +        to the root. This was the primary bug fix.
&gt; &gt; +
&gt; &gt; +        Secondly, a layer tree commit can give ScrollingTreeFrameScrollingNode a new layout viewport, but we need to
&gt; &gt; +        adjust this by the scrolling tree&apos;s current scroll position in case it gets used before the next scroll.
&gt; 
&gt; Architectural fix for these sort of issues is to stop using web process
&gt; supplied scroll positions for anything. Not having them in scrolling tree in
&gt; the first place is the most robust way to achieve that.

Web process viewport layout rect is baked into FixedPositionViewportConstraints.

The geometry of fixed layers is based on the geometry of layers in the z-order ancestor chain (because the layer tree is unavoidably in z-order, because that&apos;s the only way to have CA do the right back-to-front ordering. That means that a fixed layer can be deeply nested in the z-order tree; even though its containing block is trivially the RenderView, we must compute the position for that fixed layer relative to its parent in z-order, which can be some arbitrary layer, even inside of overflow:scroll.

That, in turn, means that layout information is baked into FixedPositionViewportConstraints::m_layerPositionAtLastLayout, and we need pass m_viewportRectAtLastLayout in order to compute deltas in the scrolling tree.

What this means is that I don&apos;t think bug 194289 is achievable with our current architecture, where layer positions, and layer z-order have to be in the same hierarchy. Hence the need for patches like this. 

&gt; &gt;&gt; Source/WebCore/page/scrolling/ScrollingTreeScrollingNode.cpp:187
&gt; &gt;&gt; +    bool scrollingStateChanged = scrollPositionAndLayoutViewportMatch(position, overrideLayoutViewport);
&gt; &gt; 
&gt; &gt; Can we have both scroll position change and state change happening?
&gt; &gt; Maybe this should be renamed scrollingStateChangeOnly or scrollPositionOrLayoutViewportChange?
&gt; 
&gt; State changed if position and viewport matches? This makes no logical sense.

scrollingStateChanged was mis-named. It should be scrollingStateUnchanged.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1513514</commentid>
    <comment_count>6</comment_count>
      <attachid>363877</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2019-03-07 08:50:29 -0800</bug_when>
    <thetext>Created attachment 363877
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1513523</commentid>
    <comment_count>7</comment_count>
      <attachid>363877</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-03-07 09:11:09 -0800</bug_when>
    <thetext>Comment on attachment 363877
Patch

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

Ok but please test well before landing.

&gt; Source/WebCore/page/scrolling/ScrollingTreeScrollingNode.cpp:187
&gt; +    bool scrollPositionChanged = !scrollPositionAndLayoutViewportMatch(position, overrideLayoutViewport);

This is not just a rename, you invert the logic from the previous patch. This raises questions about testing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1513549</commentid>
    <comment_count>8</comment_count>
      <attachid>363877</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2019-03-07 09:36:32 -0800</bug_when>
    <thetext>Comment on attachment 363877
Patch

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

&gt;&gt; Source/WebCore/page/scrolling/ScrollingTreeScrollingNode.cpp:187
&gt;&gt; +    bool scrollPositionChanged = !scrollPositionAndLayoutViewportMatch(position, overrideLayoutViewport);
&gt; 
&gt; This is not just a rename, you invert the logic from the previous patch. This raises questions about testing.

I&apos;ll check what scrollingTreeNodeDidScroll() does if you all it when nothing really changed, but it might be a no-op. I tested this patch on sim and hardware.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1513561</commentid>
    <comment_count>9</comment_count>
      <attachid>363877</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-03-07 10:03:47 -0800</bug_when>
    <thetext>Comment on attachment 363877
Patch

Clearing flags on attachment: 363877

Committed r242601: &lt;https://trac.webkit.org/changeset/242601&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1513562</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-03-07 10:03:49 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>363839</attachid>
            <date>2019-03-06 20:53:39 -0800</date>
            <delta_ts>2019-03-07 08:50:26 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-195396-20190306205339.patch</filename>
            <type>text/plain</type>
            <size>7665</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQyMzY1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDFiMzNlNjEzZDY2MDdk
MDZlZjViMDJlNjE3MTg1YWIyMDhiYzc1MC4uNWQxNDFjMmU1NjI3ZTAyODUzYTY4ZTBjNTY4NzIz
YjNlYmFhYTU2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM0IEBACisyMDE5LTAzLTA2ICBTaW1v
biBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgorCisgICAgICAgIFtpT1MgV0tdIFJF
R1JFU1NJT04gKHIyNDIxMzIpOiBGaXhlZCBwb3NpdGlvbiBiYW5uZXJzIGZsaWNrZXIgYW5kIG1v
dmUgd2hlbiBzY3JvbGxpbmcgKEFwcGxlLCBUZXNsYSwgWW91VHViZSwgUmVkZGl0KQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk1Mzk2CisgICAgICAg
IHJkYXI6Ly9wcm9ibGVtLzQ4NTE4OTU5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisgICAgICAgIAorICAgICAgICByMjQyMTMyIGludHJvZHVjZWQgdHdvIGlzc3VlcyB0
aGF0IGNvbnRyaWJ1dGVkIHRvIGp1bXBpbmVzcyBvZiBwb3NpdGlvbjpmaXhlZCBsYXllcnMgd2hl
biBzY3JvbGxpbmcuCisgICAgICAgIAorICAgICAgICBGaXJzdCwgU2Nyb2xsaW5nVHJlZVNjcm9s
bGluZ05vZGU6Ondhc1Njcm9sbGVkQnlEZWxlZ2F0ZWRTY3JvbGxpbmcoKSB3b3VsZCBlYXJseSBy
ZXR1cm4gaWYgdGhlIHNjcm9sbCBwb3NpdGlvbgorICAgICAgICBoYWRuJ3QgY2hhbmdlZC4gSXQg
YWxzbyBuZWVkcyB0byBjaGVjayB0aGUgc3VwcGxpZWQgbGF5b3V0Vmlld3BvcnQgKGlmIGFueSks
IGJ1dCBpbiBzb21lIGNhc2VzIHJ1bm5pbmcgdGhlCisgICAgICAgIG5vdGlmeVJlbGF0ZWROb2Rl
c0FmdGVyU2Nyb2xsUG9zaXRpb25DaGFuZ2UoKSBjb2RlIGlzIG5lY2Vzc2FyeSBldmVuIHdpdGhv
dXQgYSBzY3JvbGwgcG9zaXRpb24gY2hhbmdlOgorICAgICAgICBpZiB0aGUgd2ViIHByb2Nlc3Mg
aGFzIGNvbW1pdHRlZCBuZXcgc2Nyb2xsaW5nIHRyZWUgc3RhdGUgKGUuZy4gd2l0aCBuZXcgZml4
ZWQgY29uc3RyYWludHMpIHNpbmNlCisgICAgICAgIHRoZSBsYXN0IGNhbGwsIHdlIGhhdmUgdG8g
cnVuIHRoZSBsYXllciBwb3NpdGlvbmluZyBjb2RlIHRvIGhhdmUgZml4ZWQgbGF5ZXJzIHJlLWFk
anVzdCB0aGVpciBwb3NpdGlvbiByZWxhdGl2ZQorICAgICAgICB0byB0aGUgcm9vdC4gVGhpcyB3
YXMgdGhlIHByaW1hcnkgYnVnIGZpeC4KKworICAgICAgICBTZWNvbmRseSwgYSBsYXllciB0cmVl
IGNvbW1pdCBjYW4gZ2l2ZSBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlIGEgbmV3IGxh
eW91dCB2aWV3cG9ydCwgYnV0IHdlIG5lZWQgdG8KKyAgICAgICAgYWRqdXN0IHRoaXMgYnkgdGhl
IHNjcm9sbGluZyB0cmVlJ3MgY3VycmVudCBzY3JvbGwgcG9zaXRpb24gaW4gY2FzZSBpdCBnZXRz
IHVzZWQgYmVmb3JlIHRoZSBuZXh0IHNjcm9sbC4KKworICAgICAgICBDdXJyZW50bHkgbm8gd2F5
IHRvIHRlc3QgdGhpcywgYXMgaXQncyB2ZXJ5IHRpbWluZy1kZXBlbmRlbnQuCisKKyAgICAgICAg
KiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGU6OmNvbW1pdFN0
YXRlQmVmb3JlQ2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZUZyYW1l
U2Nyb2xsaW5nTm9kZTo6c2Nyb2xsUG9zaXRpb25BbmRMYXlvdXRWaWV3cG9ydE1hdGNoKToKKyAg
ICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlLmg6
CisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGU6OnNjcm9sbFBv
c2l0aW9uQW5kTGF5b3V0Vmlld3BvcnRNYXRjaCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxp
bmdUcmVlU2Nyb2xsaW5nTm9kZTo6d2FzU2Nyb2xsZWRCeURlbGVnYXRlZFNjcm9sbGluZyk6Cisg
ICAgICAgICogcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUuaDoKKwog
MjAxOS0wMy0wNCAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29tPgogCiAgICAgICAg
IFtKU0NdIE9mZmVyIEBtYWtlVHlwZUVycm9yIGluc3RlYWQgb2YgZXhwb3NpbmcgQFR5cGVFcnJv
cgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJl
ZUZyYW1lU2Nyb2xsaW5nTm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9T
Y3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlLmNwcAppbmRleCA0YjI1ODFkMTYyNzc2MmIx
ZmMyOTA5MmZmYmY2NzE2YTlhYjExYWYwLi5iYWRlMDFkODgwYjVhZmEzYjIxNzU4MTc0MzZmZTcw
NTFlYjlhYjdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3Jv
bGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlLmNwcApAQCAtNzIsOCAr
NzIsMTAgQEAgdm9pZCBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlOjpjb21taXRTdGF0
ZUJlZm9yZUNoaWxkcmVuKGNvbnN0IFNjcm9sbGluZ1MKICAgICBpZiAoc3RhdGUuaGFzQ2hhbmdl
ZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlRnJhbWVTY3JvbGxpbmdOb2RlOjpGaXhlZEVsZW1lbnRz
TGF5b3V0UmVsYXRpdmVUb0ZyYW1lKSkKICAgICAgICAgbV9maXhlZEVsZW1lbnRzTGF5b3V0UmVs
YXRpdmVUb0ZyYW1lID0gc3RhdGUuZml4ZWRFbGVtZW50c0xheW91dFJlbGF0aXZlVG9GcmFtZSgp
OwogCi0gICAgaWYgKHN0YXRlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZUZyYW1l
U2Nyb2xsaW5nTm9kZTo6TGF5b3V0Vmlld3BvcnQpKQorICAgIGlmIChzdGF0ZS5oYXNDaGFuZ2Vk
UHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVGcmFtZVNjcm9sbGluZ05vZGU6OkxheW91dFZpZXdwb3J0
KSkgewogICAgICAgICBtX2xheW91dFZpZXdwb3J0ID0gc3RhdGUubGF5b3V0Vmlld3BvcnQoKTsK
KyAgICAgICAgdXBkYXRlVmlld3BvcnRGb3JDdXJyZW50U2Nyb2xsUG9zaXRpb24oeyB9KTsKKyAg
ICB9CiAKICAgICBpZiAoc3RhdGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRlRnJh
bWVTY3JvbGxpbmdOb2RlOjpNaW5MYXlvdXRWaWV3cG9ydE9yaWdpbikpCiAgICAgICAgIG1fbWlu
TGF5b3V0Vmlld3BvcnRPcmlnaW4gPSBzdGF0ZS5taW5MYXlvdXRWaWV3cG9ydE9yaWdpbigpOwpA
QCAtODIsNiArODQsMTEgQEAgdm9pZCBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlOjpj
b21taXRTdGF0ZUJlZm9yZUNoaWxkcmVuKGNvbnN0IFNjcm9sbGluZ1MKICAgICAgICAgbV9tYXhM
YXlvdXRWaWV3cG9ydE9yaWdpbiA9IHN0YXRlLm1heExheW91dFZpZXdwb3J0T3JpZ2luKCk7CiB9
CiAKK2Jvb2wgU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZTo6c2Nyb2xsUG9zaXRpb25B
bmRMYXlvdXRWaWV3cG9ydE1hdGNoKGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uLCBPcHRpb25h
bDxGbG9hdFJlY3Q+IG92ZXJyaWRlTGF5b3V0Vmlld3BvcnQpCit7CisgICAgcmV0dXJuIHBvc2l0
aW9uID09IGN1cnJlbnRTY3JvbGxQb3NpdGlvbigpICYmICghb3ZlcnJpZGVMYXlvdXRWaWV3cG9y
dCB8fCBvdmVycmlkZUxheW91dFZpZXdwb3J0LnZhbHVlKCkgPT0gbV9sYXlvdXRWaWV3cG9ydCk7
Cit9CisKIEZsb2F0UmVjdCBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlOjpsYXlvdXRW
aWV3cG9ydEZvclNjcm9sbFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHZpc2libGVDb250ZW50
T3JpZ2luLCBmbG9hdCBzY2FsZSkgY29uc3QKIHsKICAgICBGbG9hdFJlY3QgdmlzaWJsZUNvbnRl
bnRSZWN0KHZpc2libGVDb250ZW50T3JpZ2luLCBzY3JvbGxhYmxlQXJlYVNpemUoKSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlRnJhbWVT
Y3JvbGxpbmdOb2RlLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdU
cmVlRnJhbWVTY3JvbGxpbmdOb2RlLmgKaW5kZXggOGYwODBlMTI2NmUzYzE5Yzc0MGM0OGQwNTQ1
Njg3MmFkZjYyMGM1Zi4uNTljYTJmNjUwZDE4ODIwNGYxMWEwYjgzYzkxYzczZGEwM2Q2YzA1YSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZUZy
YW1lU2Nyb2xsaW5nTm9kZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Nj
cm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGUuaApAQCAtNzAsNiArNzAsNyBAQCBwcml2YXRl
OgogICAgIExheW91dFBvaW50IGxvY2FsVG9Db250ZW50c1BvaW50KExheW91dFBvaW50KSBjb25z
dCBmaW5hbDsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgdXBkYXRlVmlld3BvcnRGb3JDdXJy
ZW50U2Nyb2xsUG9zaXRpb24oT3B0aW9uYWw8RmxvYXRSZWN0Pikgb3ZlcnJpZGU7CisgICAgYm9v
bCBzY3JvbGxQb3NpdGlvbkFuZExheW91dFZpZXdwb3J0TWF0Y2goY29uc3QgRmxvYXRQb2ludCYg
cG9zaXRpb24sIE9wdGlvbmFsPEZsb2F0UmVjdD4gb3ZlcnJpZGVMYXlvdXRWaWV3cG9ydCkgb3Zl
cnJpZGU7CiAKICAgICB2b2lkIGR1bXBQcm9wZXJ0aWVzKFdURjo6VGV4dFN0cmVhbSYsIFNjcm9s
bGluZ1N0YXRlVHJlZUFzVGV4dEJlaGF2aW9yKSBjb25zdCBvdmVycmlkZTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05v
ZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZVNjcm9s
bGluZ05vZGUuY3BwCmluZGV4IDMyNTc5ZTMxMWEyZTQwMmJjOTI3NjljYjA3ZWZlN2RhZTJkMDAx
YmYuLjM3MTc0MDczM2Y2ZmMyMGFiNmM1Yzc1YWM0MjNhYTIzNDg1YTUyMjMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2Rl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlU2Ny
b2xsaW5nTm9kZS5jcHAKQEAgLTE3NCwxMCArMTc0LDE3IEBAIHZvaWQgU2Nyb2xsaW5nVHJlZVNj
cm9sbGluZ05vZGU6OmN1cnJlbnRTY3JvbGxQb3NpdGlvbkNoYW5nZWQoKQogICAgIHNjcm9sbGlu
Z1RyZWUoKS5zY3JvbGxpbmdUcmVlTm9kZURpZFNjcm9sbCgqdGhpcyk7CiB9CiAKK2Jvb2wgU2Ny
b2xsaW5nVHJlZVNjcm9sbGluZ05vZGU6OnNjcm9sbFBvc2l0aW9uQW5kTGF5b3V0Vmlld3BvcnRN
YXRjaChjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvbiwgT3B0aW9uYWw8RmxvYXRSZWN0PikKK3sK
KyAgICByZXR1cm4gcG9zaXRpb24gPT0gbV9jdXJyZW50U2Nyb2xsUG9zaXRpb247Cit9CisKIHZv
aWQgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGU6Ondhc1Njcm9sbGVkQnlEZWxlZ2F0ZWRTY3Jv
bGxpbmcoY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb24sIE9wdGlvbmFsPEZsb2F0UmVjdD4gb3Zl
cnJpZGVMYXlvdXRWaWV3cG9ydCkKIHsKLSAgICBpZiAocG9zaXRpb24gPT0gbV9jdXJyZW50U2Ny
b2xsUG9zaXRpb24pCi0gICAgICAgIHJldHVybjsKKyAgICAvLyBFdmVuIGlmIHBvc2l0aW9uIGFu
ZCBvdmVycmlkZUxheW91dFZpZXdwb3J0IGhhdmVuJ3QgY2hhbmdlZCBmb3IgdGhpcyBub2RlLCBv
dGhlciBub2RlcyBtYXkgaGF2ZSByZWNlaXZlZCBuZXcgY29uc3RyYWludCBkYXRhCisgICAgLy8g
dmlhIGEgY29tbWl0LCBzbyB0aGUgY2FsbCB0byBub3RpZnlSZWxhdGVkTm9kZXNBZnRlclNjcm9s
bFBvc2l0aW9uQ2hhbmdlKCkgaXMgbmVjZXNzYXJ5LiBXZSBjb3VsZCBhdm9pZCB0aGlzIGlmIHdl
IGtuZXcgdGhhdAorICAgIC8vIG5vIGNvbW1pdHMgaGFkIGhhcHBlbmVkLgorICAgIGJvb2wgc2Ny
b2xsaW5nU3RhdGVDaGFuZ2VkID0gc2Nyb2xsUG9zaXRpb25BbmRMYXlvdXRWaWV3cG9ydE1hdGNo
KHBvc2l0aW9uLCBvdmVycmlkZUxheW91dFZpZXdwb3J0KTsKIAogICAgIG1fY3VycmVudFNjcm9s
bFBvc2l0aW9uID0gYWRqdXN0ZWRTY3JvbGxQb3NpdGlvbihwb3NpdGlvbiwgU2Nyb2xsUG9zaXRp
b25DbGFtcDo6Tm9uZSk7CiAgICAgdXBkYXRlVmlld3BvcnRGb3JDdXJyZW50U2Nyb2xsUG9zaXRp
b24ob3ZlcnJpZGVMYXlvdXRWaWV3cG9ydCk7CkBAIC0xODUsNyArMTkyLDkgQEAgdm9pZCBTY3Jv
bGxpbmdUcmVlU2Nyb2xsaW5nTm9kZTo6d2FzU2Nyb2xsZWRCeURlbGVnYXRlZFNjcm9sbGluZyhj
b25zdCBGbG9hdFBvaW4KICAgICByZXBvc2l0aW9uUmVsYXRlZExheWVycygpOwogCiAgICAgc2Ny
b2xsaW5nVHJlZSgpLm5vdGlmeVJlbGF0ZWROb2Rlc0FmdGVyU2Nyb2xsUG9zaXRpb25DaGFuZ2Uo
KnRoaXMpOwotICAgIHNjcm9sbGluZ1RyZWUoKS5zY3JvbGxpbmdUcmVlTm9kZURpZFNjcm9sbCgq
dGhpcyk7CisgICAgCisgICAgaWYgKHNjcm9sbGluZ1N0YXRlQ2hhbmdlZCkKKyAgICAgICAgc2Ny
b2xsaW5nVHJlZSgpLnNjcm9sbGluZ1RyZWVOb2RlRGlkU2Nyb2xsKCp0aGlzKTsKIH0KIAogTGF5
b3V0UG9pbnQgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGU6OnBhcmVudFRvTG9jYWxQb2ludChM
YXlvdXRQb2ludCBwb2ludCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
c2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlLmggYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZS5oCmluZGV4IGMxMGNmZjY4
MzcyNmYwOWIzMTJkM2FlNjYzN2I5NzkxN2M3ZTg3OTYuLjJhMTk4MzZjZmRkYTlkYmNhYjJkNDAy
NjUwYTc0N2RmOTAwMTcwNzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xs
aW5nL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUuaApAQCAtOTMsNiArOTMsNyBA
QCBwcm90ZWN0ZWQ6CiAKICAgICB2aXJ0dWFsIHZvaWQgY3VycmVudFNjcm9sbFBvc2l0aW9uQ2hh
bmdlZCgpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCB1cGRhdGVWaWV3cG9ydEZv
ckN1cnJlbnRTY3JvbGxQb3NpdGlvbihPcHRpb25hbDxGbG9hdFJlY3Q+ID0geyB9KSB7IH0KKyAg
ICB2aXJ0dWFsIGJvb2wgc2Nyb2xsUG9zaXRpb25BbmRMYXlvdXRWaWV3cG9ydE1hdGNoKGNvbnN0
IEZsb2F0UG9pbnQmIHBvc2l0aW9uLCBPcHRpb25hbDxGbG9hdFJlY3Q+IG92ZXJyaWRlTGF5b3V0
Vmlld3BvcnQpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHJlcG9zaXRpb25T
Y3JvbGxpbmdMYXllcnMoKSB7IH0KICAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgcmVw
b3NpdGlvblJlbGF0ZWRMYXllcnMoKSB7IH0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>363877</attachid>
            <date>2019-03-07 08:50:29 -0800</date>
            <delta_ts>2019-03-07 10:03:47 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-195396-20190307085028.patch</filename>
            <type>text/plain</type>
            <size>7643</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQyNTk2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDFlZTY1NTQzZjM2M2M5
NWU3YWU4Y2I3ZDllNDYyM2JjM2ViMDA1Yy4uZjFjOWVlY2U0NWYwMjk3ZTg3OWE3ZTI4ZDFmYmY3
MjYwODU2MjY2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM0IEBACisyMDE5LTAzLTA3ICBTaW1v
biBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgorCisgICAgICAgIFtpT1MgV0tdIFJF
R1JFU1NJT04gKHIyNDIxMzIpOiBGaXhlZCBwb3NpdGlvbiBiYW5uZXJzIGZsaWNrZXIgYW5kIG1v
dmUgd2hlbiBzY3JvbGxpbmcgKEFwcGxlLCBUZXNsYSwgWW91VHViZSwgUmVkZGl0KQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk1Mzk2CisgICAgICAg
IHJkYXI6Ly9wcm9ibGVtLzQ4NTE4OTU5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisgICAgICAgIAorICAgICAgICByMjQyMTMyIGludHJvZHVjZWQgdHdvIGlzc3VlcyB0
aGF0IGNvbnRyaWJ1dGVkIHRvIGp1bXBpbmVzcyBvZiBwb3NpdGlvbjpmaXhlZCBsYXllcnMgd2hl
biBzY3JvbGxpbmcuCisgICAgICAgIAorICAgICAgICBGaXJzdCwgU2Nyb2xsaW5nVHJlZVNjcm9s
bGluZ05vZGU6Ondhc1Njcm9sbGVkQnlEZWxlZ2F0ZWRTY3JvbGxpbmcoKSB3b3VsZCBlYXJseSBy
ZXR1cm4gaWYgdGhlIHNjcm9sbCBwb3NpdGlvbgorICAgICAgICBoYWRuJ3QgY2hhbmdlZC4gSXQg
YWxzbyBuZWVkcyB0byBjaGVjayB0aGUgc3VwcGxpZWQgbGF5b3V0Vmlld3BvcnQgKGlmIGFueSks
IGJ1dCBpbiBzb21lIGNhc2VzIHJ1bm5pbmcgdGhlCisgICAgICAgIG5vdGlmeVJlbGF0ZWROb2Rl
c0FmdGVyU2Nyb2xsUG9zaXRpb25DaGFuZ2UoKSBjb2RlIGlzIG5lY2Vzc2FyeSBldmVuIHdpdGhv
dXQgYSBzY3JvbGwgcG9zaXRpb24gY2hhbmdlOgorICAgICAgICBpZiB0aGUgd2ViIHByb2Nlc3Mg
aGFzIGNvbW1pdHRlZCBuZXcgc2Nyb2xsaW5nIHRyZWUgc3RhdGUgKGUuZy4gd2l0aCBuZXcgZml4
ZWQgY29uc3RyYWludHMpIHNpbmNlCisgICAgICAgIHRoZSBsYXN0IGNhbGwsIHdlIGhhdmUgdG8g
cnVuIHRoZSBsYXllciBwb3NpdGlvbmluZyBjb2RlIHRvIGhhdmUgZml4ZWQgbGF5ZXJzIHJlLWFk
anVzdCB0aGVpciBwb3NpdGlvbiByZWxhdGl2ZQorICAgICAgICB0byB0aGUgcm9vdC4gVGhpcyB3
YXMgdGhlIHByaW1hcnkgYnVnIGZpeC4KKworICAgICAgICBTZWNvbmRseSwgYSBsYXllciB0cmVl
IGNvbW1pdCBjYW4gZ2l2ZSBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlIGEgbmV3IGxh
eW91dCB2aWV3cG9ydCwgYnV0IHdlIG5lZWQgdG8KKyAgICAgICAgYWRqdXN0IHRoaXMgYnkgdGhl
IHNjcm9sbGluZyB0cmVlJ3MgY3VycmVudCBzY3JvbGwgcG9zaXRpb24gaW4gY2FzZSBpdCBnZXRz
IHVzZWQgYmVmb3JlIHRoZSBuZXh0IHNjcm9sbC4KKworICAgICAgICBDdXJyZW50bHkgbm8gd2F5
IHRvIHRlc3QgdGhpcywgYXMgaXQncyB2ZXJ5IHRpbWluZy1kZXBlbmRlbnQuCisKKyAgICAgICAg
KiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGU6OmNvbW1pdFN0
YXRlQmVmb3JlQ2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZUZyYW1l
U2Nyb2xsaW5nTm9kZTo6c2Nyb2xsUG9zaXRpb25BbmRMYXlvdXRWaWV3cG9ydE1hdGNoKToKKyAg
ICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlLmg6
CisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGU6OnNjcm9sbFBv
c2l0aW9uQW5kTGF5b3V0Vmlld3BvcnRNYXRjaCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxp
bmdUcmVlU2Nyb2xsaW5nTm9kZTo6d2FzU2Nyb2xsZWRCeURlbGVnYXRlZFNjcm9sbGluZyk6Cisg
ICAgICAgICogcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUuaDoKKwog
MjAxOS0wMy0wNiAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAgRXhj
ZXB0aW9uIGlzIGEgSlNDZWxsLCBub3QgYSBKU09iamVjdC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xs
aW5nTm9kZS5jcHAKaW5kZXggNGIyNTgxZDE2Mjc3NjJiMWZjMjkwOTJmZmJmNjcxNmE5YWIxMWFm
MC4uYmFkZTAxZDg4MGI1YWZhM2IyMTc1ODE3NDM2ZmU3MDUxZWI5YWI3ZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5n
Tm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJl
ZUZyYW1lU2Nyb2xsaW5nTm9kZS5jcHAKQEAgLTcyLDggKzcyLDEwIEBAIHZvaWQgU2Nyb2xsaW5n
VHJlZUZyYW1lU2Nyb2xsaW5nTm9kZTo6Y29tbWl0U3RhdGVCZWZvcmVDaGlsZHJlbihjb25zdCBT
Y3JvbGxpbmdTCiAgICAgaWYgKHN0YXRlLmhhc0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0
ZUZyYW1lU2Nyb2xsaW5nTm9kZTo6Rml4ZWRFbGVtZW50c0xheW91dFJlbGF0aXZlVG9GcmFtZSkp
CiAgICAgICAgIG1fZml4ZWRFbGVtZW50c0xheW91dFJlbGF0aXZlVG9GcmFtZSA9IHN0YXRlLmZp
eGVkRWxlbWVudHNMYXlvdXRSZWxhdGl2ZVRvRnJhbWUoKTsKIAotICAgIGlmIChzdGF0ZS5oYXND
aGFuZ2VkUHJvcGVydHkoU2Nyb2xsaW5nU3RhdGVGcmFtZVNjcm9sbGluZ05vZGU6OkxheW91dFZp
ZXdwb3J0KSkKKyAgICBpZiAoc3RhdGUuaGFzQ2hhbmdlZFByb3BlcnR5KFNjcm9sbGluZ1N0YXRl
RnJhbWVTY3JvbGxpbmdOb2RlOjpMYXlvdXRWaWV3cG9ydCkpIHsKICAgICAgICAgbV9sYXlvdXRW
aWV3cG9ydCA9IHN0YXRlLmxheW91dFZpZXdwb3J0KCk7CisgICAgICAgIHVwZGF0ZVZpZXdwb3J0
Rm9yQ3VycmVudFNjcm9sbFBvc2l0aW9uKHsgfSk7CisgICAgfQogCiAgICAgaWYgKHN0YXRlLmhh
c0NoYW5nZWRQcm9wZXJ0eShTY3JvbGxpbmdTdGF0ZUZyYW1lU2Nyb2xsaW5nTm9kZTo6TWluTGF5
b3V0Vmlld3BvcnRPcmlnaW4pKQogICAgICAgICBtX21pbkxheW91dFZpZXdwb3J0T3JpZ2luID0g
c3RhdGUubWluTGF5b3V0Vmlld3BvcnRPcmlnaW4oKTsKQEAgLTgyLDYgKzg0LDExIEBAIHZvaWQg
U2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZTo6Y29tbWl0U3RhdGVCZWZvcmVDaGlsZHJl
bihjb25zdCBTY3JvbGxpbmdTCiAgICAgICAgIG1fbWF4TGF5b3V0Vmlld3BvcnRPcmlnaW4gPSBz
dGF0ZS5tYXhMYXlvdXRWaWV3cG9ydE9yaWdpbigpOwogfQogCitib29sIFNjcm9sbGluZ1RyZWVG
cmFtZVNjcm9sbGluZ05vZGU6OnNjcm9sbFBvc2l0aW9uQW5kTGF5b3V0Vmlld3BvcnRNYXRjaChj
b25zdCBGbG9hdFBvaW50JiBwb3NpdGlvbiwgT3B0aW9uYWw8RmxvYXRSZWN0PiBvdmVycmlkZUxh
eW91dFZpZXdwb3J0KQoreworICAgIHJldHVybiBwb3NpdGlvbiA9PSBjdXJyZW50U2Nyb2xsUG9z
aXRpb24oKSAmJiAoIW92ZXJyaWRlTGF5b3V0Vmlld3BvcnQgfHwgb3ZlcnJpZGVMYXlvdXRWaWV3
cG9ydC52YWx1ZSgpID09IG1fbGF5b3V0Vmlld3BvcnQpOworfQorCiBGbG9hdFJlY3QgU2Nyb2xs
aW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZTo6bGF5b3V0Vmlld3BvcnRGb3JTY3JvbGxQb3NpdGlv
bihjb25zdCBGbG9hdFBvaW50JiB2aXNpYmxlQ29udGVudE9yaWdpbiwgZmxvYXQgc2NhbGUpIGNv
bnN0CiB7CiAgICAgRmxvYXRSZWN0IHZpc2libGVDb250ZW50UmVjdCh2aXNpYmxlQ29udGVudE9y
aWdpbiwgc2Nyb2xsYWJsZUFyZWFTaXplKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZS5oIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZS5o
CmluZGV4IDhmMDgwZTEyNjZlM2MxOWM3NDBjNDhkMDU0NTY4NzJhZGY2MjBjNWYuLjU5Y2EyZjY1
MGQxODgyMDRmMTFhMGI4M2M5MWM3M2RhMDNkNmMwNWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGUuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxp
bmdOb2RlLmgKQEAgLTcwLDYgKzcwLDcgQEAgcHJpdmF0ZToKICAgICBMYXlvdXRQb2ludCBsb2Nh
bFRvQ29udGVudHNQb2ludChMYXlvdXRQb2ludCkgY29uc3QgZmluYWw7CiAKICAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIHVwZGF0ZVZpZXdwb3J0Rm9yQ3VycmVudFNjcm9sbFBvc2l0aW9uKE9wdGlv
bmFsPEZsb2F0UmVjdD4pIG92ZXJyaWRlOworICAgIGJvb2wgc2Nyb2xsUG9zaXRpb25BbmRMYXlv
dXRWaWV3cG9ydE1hdGNoKGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uLCBPcHRpb25hbDxGbG9h
dFJlY3Q+IG92ZXJyaWRlTGF5b3V0Vmlld3BvcnQpIG92ZXJyaWRlOwogCiAgICAgdm9pZCBkdW1w
UHJvcGVydGllcyhXVEY6OlRleHRTdHJlYW0mLCBTY3JvbGxpbmdTdGF0ZVRyZWVBc1RleHRCZWhh
dmlvcikgY29uc3Qgb3ZlcnJpZGU7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
c2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlLmNwcAppbmRleCAzMjU3
OWUzMTFhMmU0MDJiYzkyNzY5Y2IwN2VmZTdkYWUyZDAwMWJmLi41YmQ3ZTI1Njg1YmZkMzY4ZTZi
ZjQ2YzBjNDU2YmQ5Y2RlNWQxZDc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Nj
cm9sbGluZy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUuY3BwCkBAIC0xNzQs
MTAgKzE3NCwxNyBAQCB2b2lkIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlOjpjdXJyZW50U2Ny
b2xsUG9zaXRpb25DaGFuZ2VkKCkKICAgICBzY3JvbGxpbmdUcmVlKCkuc2Nyb2xsaW5nVHJlZU5v
ZGVEaWRTY3JvbGwoKnRoaXMpOwogfQogCitib29sIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2Rl
OjpzY3JvbGxQb3NpdGlvbkFuZExheW91dFZpZXdwb3J0TWF0Y2goY29uc3QgRmxvYXRQb2ludCYg
cG9zaXRpb24sIE9wdGlvbmFsPEZsb2F0UmVjdD4pCit7CisgICAgcmV0dXJuIHBvc2l0aW9uID09
IG1fY3VycmVudFNjcm9sbFBvc2l0aW9uOworfQorCiB2b2lkIFNjcm9sbGluZ1RyZWVTY3JvbGxp
bmdOb2RlOjp3YXNTY3JvbGxlZEJ5RGVsZWdhdGVkU2Nyb2xsaW5nKGNvbnN0IEZsb2F0UG9pbnQm
IHBvc2l0aW9uLCBPcHRpb25hbDxGbG9hdFJlY3Q+IG92ZXJyaWRlTGF5b3V0Vmlld3BvcnQpCiB7
Ci0gICAgaWYgKHBvc2l0aW9uID09IG1fY3VycmVudFNjcm9sbFBvc2l0aW9uKQotICAgICAgICBy
ZXR1cm47CisgICAgLy8gRXZlbiBpZiBwb3NpdGlvbiBhbmQgb3ZlcnJpZGVMYXlvdXRWaWV3cG9y
dCBoYXZlbid0IGNoYW5nZWQgZm9yIHRoaXMgbm9kZSwgb3RoZXIgbm9kZXMgbWF5IGhhdmUgcmVj
ZWl2ZWQgbmV3IGNvbnN0cmFpbnQgZGF0YQorICAgIC8vIHZpYSBhIGNvbW1pdCwgc28gdGhlIGNh
bGwgdG8gbm90aWZ5UmVsYXRlZE5vZGVzQWZ0ZXJTY3JvbGxQb3NpdGlvbkNoYW5nZSgpIGlzIG5l
Y2Vzc2FyeS4gV2UgY291bGQgYXZvaWQgdGhpcyBpZiB3ZSBrbmV3IHRoYXQKKyAgICAvLyBubyBj
b21taXRzIGhhZCBoYXBwZW5lZC4KKyAgICBib29sIHNjcm9sbFBvc2l0aW9uQ2hhbmdlZCA9ICFz
Y3JvbGxQb3NpdGlvbkFuZExheW91dFZpZXdwb3J0TWF0Y2gocG9zaXRpb24sIG92ZXJyaWRlTGF5
b3V0Vmlld3BvcnQpOwogCiAgICAgbV9jdXJyZW50U2Nyb2xsUG9zaXRpb24gPSBhZGp1c3RlZFNj
cm9sbFBvc2l0aW9uKHBvc2l0aW9uLCBTY3JvbGxQb3NpdGlvbkNsYW1wOjpOb25lKTsKICAgICB1
cGRhdGVWaWV3cG9ydEZvckN1cnJlbnRTY3JvbGxQb3NpdGlvbihvdmVycmlkZUxheW91dFZpZXdw
b3J0KTsKQEAgLTE4NSw3ICsxOTIsOSBAQCB2b2lkIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2Rl
Ojp3YXNTY3JvbGxlZEJ5RGVsZWdhdGVkU2Nyb2xsaW5nKGNvbnN0IEZsb2F0UG9pbgogICAgIHJl
cG9zaXRpb25SZWxhdGVkTGF5ZXJzKCk7CiAKICAgICBzY3JvbGxpbmdUcmVlKCkubm90aWZ5UmVs
YXRlZE5vZGVzQWZ0ZXJTY3JvbGxQb3NpdGlvbkNoYW5nZSgqdGhpcyk7Ci0gICAgc2Nyb2xsaW5n
VHJlZSgpLnNjcm9sbGluZ1RyZWVOb2RlRGlkU2Nyb2xsKCp0aGlzKTsKKyAgICAKKyAgICBpZiAo
c2Nyb2xsUG9zaXRpb25DaGFuZ2VkKQorICAgICAgICBzY3JvbGxpbmdUcmVlKCkuc2Nyb2xsaW5n
VHJlZU5vZGVEaWRTY3JvbGwoKnRoaXMpOwogfQogCiBMYXlvdXRQb2ludCBTY3JvbGxpbmdUcmVl
U2Nyb2xsaW5nTm9kZTo6cGFyZW50VG9Mb2NhbFBvaW50KExheW91dFBvaW50IHBvaW50KSBjb25z
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJl
ZVNjcm9sbGluZ05vZGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGlu
Z1RyZWVTY3JvbGxpbmdOb2RlLmgKaW5kZXggYzEwY2ZmNjgzNzI2ZjA5YjMxMmQzYWU2NjM3Yjk3
OTE3YzdlODc5Ni4uMmExOTgzNmNmZGRhOWRiY2FiMmQ0MDI2NTBhNzQ3ZGY5MDAxNzA3NyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZVNjcm9s
bGluZ05vZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdU
cmVlU2Nyb2xsaW5nTm9kZS5oCkBAIC05Myw2ICs5Myw3IEBAIHByb3RlY3RlZDoKIAogICAgIHZp
cnR1YWwgdm9pZCBjdXJyZW50U2Nyb2xsUG9zaXRpb25DaGFuZ2VkKCk7CiAgICAgV0VCQ09SRV9F
WFBPUlQgdmlydHVhbCB2b2lkIHVwZGF0ZVZpZXdwb3J0Rm9yQ3VycmVudFNjcm9sbFBvc2l0aW9u
KE9wdGlvbmFsPEZsb2F0UmVjdD4gPSB7IH0pIHsgfQorICAgIHZpcnR1YWwgYm9vbCBzY3JvbGxQ
b3NpdGlvbkFuZExheW91dFZpZXdwb3J0TWF0Y2goY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb24s
IE9wdGlvbmFsPEZsb2F0UmVjdD4gb3ZlcnJpZGVMYXlvdXRWaWV3cG9ydCk7CiAKICAgICBXRUJD
T1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgcmVwb3NpdGlvblNjcm9sbGluZ0xheWVycygpIHsgfQog
ICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCByZXBvc2l0aW9uUmVsYXRlZExheWVycygp
IHsgfQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>