<?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>191328</bug_id>
          
          <creation_ts>2018-11-06 13:38:16 -0800</creation_ts>
          <short_desc>Web Inspector: Table should recalculate scrollable height when resized</short_desc>
          <delta_ts>2018-11-14 14:54:29 -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>Web Inspector</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P3</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Matt Baker">mattbaker</reporter>
          <assigned_to name="Matt Baker">mattbaker</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>hi</cc>
    
    <cc>inspector-bugzilla-changes</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1475666</commentid>
    <comment_count>0</comment_count>
    <who name="Matt Baker">mattbaker</who>
    <bug_when>2018-11-06 13:38:16 -0800</bug_when>
    <thetext>Table.prototype._cachedScrollableHeight is the height of the scroll container, and determines the number of visible rows. It should be recalculated whenever the table is resized.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1475667</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-11-06 13:38:32 -0800</bug_when>
    <thetext>&lt;rdar://problem/45854412&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1475668</commentid>
    <comment_count>2</comment_count>
      <attachid>353997</attachid>
    <who name="Matt Baker">mattbaker</who>
    <bug_when>2018-11-06 13:39:26 -0800</bug_when>
    <thetext>Created attachment 353997
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1475683</commentid>
    <comment_count>3</comment_count>
      <attachid>353997</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2018-11-06 13:55:09 -0800</bug_when>
    <thetext>Comment on attachment 353997
Patch

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

&gt; Source/WebInspectorUI/UserInterface/Views/Table.js:625
&gt; +            this._cachedScrollableHeight = NaN;

`_cachedScrollableHeight` is updated inside `_updateVisibleRows`.  Should we move this if-else to the top of `layout` and do any resetting there?

Also, would we want to reset this value inside `resize`, similar to `_cachedWidth` and `_cachedHeight`?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1475719</commentid>
    <comment_count>4</comment_count>
      <attachid>353997</attachid>
    <who name="Matt Baker">mattbaker</who>
    <bug_when>2018-11-06 15:05:49 -0800</bug_when>
    <thetext>Comment on attachment 353997
Patch

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

&gt;&gt; Source/WebInspectorUI/UserInterface/Views/Table.js:625
&gt;&gt; +            this._cachedScrollableHeight = NaN;
&gt; 
&gt; `_cachedScrollableHeight` is updated inside `_updateVisibleRows`.  Should we move this if-else to the top of `layout` and do any resetting there?
&gt; 
&gt; Also, would we want to reset this value inside `resize`, similar to `_cachedWidth` and `_cachedHeight`?

Doh! This should absolutely go above this._updateVisibleRows. That&apos;s where I had it originally, I don&apos;t know why I moved it. Your comment made consider this change in more detail:

1) Table should override View.prototype.sizeDidChange and clear cached values there. This is guaranteed to be called before View.prototype.layout.
2) _cachedScrollableHeight and _cachedHeight refer to the same value. I&apos;ll try to simplify this.
3) There is a bug on in Table.prototype._resizeColumnsAndFiller (Table.js:864):

if (this._columnWidths &amp;&amp; availableWidth === oldWidth &amp;&amp; availableWidth === oldHeight &amp;&amp; numberOfRows === oldNumberOfRows) {

Should be:

if (this._columnWidths &amp;&amp; availableWidth === oldWidth &amp;&amp; availableHeight === oldHeight &amp;&amp; numberOfRows === oldNumberOfRows) {</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1475732</commentid>
    <comment_count>5</comment_count>
    <who name="Matt Baker">mattbaker</who>
    <bug_when>2018-11-06 15:27:29 -0800</bug_when>
    <thetext>I noticed a few more issues with _resizeColumnsAndFiller:

1) oldWidth and _cachedWidth will always be equal. Seems like this needs to be fixed; we need an _oldCachedWidth that gets updated in sizeDidChange for this to work as originally intended.
2) oldHeight isn&apos;t needed. By the time the value is tested, the filler height has been updated, and whether we resize columns doesn&apos;t depend on the height.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1475739</commentid>
    <comment_count>6</comment_count>
    <who name="Matt Baker">mattbaker</who>
    <bug_when>2018-11-06 15:40:23 -0800</bug_when>
    <thetext>(In reply to Matt Baker from comment #5)
&gt; I noticed a few more issues with _resizeColumnsAndFiller:
&gt; 
&gt; 1) oldWidth and _cachedWidth will always be equal. Seems like this needs to
&gt; be fixed; we need an _oldCachedWidth that gets updated in sizeDidChange for
&gt; this to work as originally intended.

Correction: as Devin pointed out, this isn&apos;t true. oldWidth will either be equal to _cachedWidth, or NaN.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1475757</commentid>
    <comment_count>7</comment_count>
      <attachid>354023</attachid>
    <who name="Matt Baker">mattbaker</who>
    <bug_when>2018-11-06 16:22:54 -0800</bug_when>
    <thetext>Created attachment 354023
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1476815</commentid>
    <comment_count>8</comment_count>
      <attachid>354023</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2018-11-08 23:12:46 -0800</bug_when>
    <thetext>Comment on attachment 354023
Patch

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

r-, see comments below

&gt; Source/WebInspectorUI/UserInterface/Views/Table.js:534
&gt; +        this._resizeColumnsAndFiller();

I think this will have a different effect than what was there before.  Calling `resize` guaranteed that `_cachedWidth` was recalculated, whereas just calling `_resizeColumnsAndFiller` doesn&apos;t.  Setting `_columnWidths` to `null` does ensure that it is recalculated, but it doesn&apos;t affect `_cachedWidth`.

&gt; Source/WebInspectorUI/UserInterface/Views/Table.js:844
&gt; +        if (this._columnWidths &amp;&amp; this._cachedWidth === this._previousCachedWidth) {

You should update `_previousCachedWidth` after this so that the next time this is called it will be equal.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1476956</commentid>
    <comment_count>9</comment_count>
      <attachid>354023</attachid>
    <who name="Matt Baker">mattbaker</who>
    <bug_when>2018-11-09 09:52:38 -0800</bug_when>
    <thetext>Comment on attachment 354023
Patch

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

&gt;&gt; Source/WebInspectorUI/UserInterface/Views/Table.js:534
&gt;&gt; +        this._resizeColumnsAndFiller();
&gt; 
&gt; I think this will have a different effect than what was there before.  Calling `resize` guaranteed that `_cachedWidth` was recalculated, whereas just calling `_resizeColumnsAndFiller` doesn&apos;t.  Setting `_columnWidths` to `null` does ensure that it is recalculated, but it doesn&apos;t affect `_cachedWidth`.

The effect should be the same, let&apos;s walk through it to make I didn&apos;t break things. Previously we had:

layout()
{
    this._updateVisibleRows();

    if (this.layoutReason === WI.View.LayoutReason.Resize)
        this.resize();
    else
        this._resizeColumnsAndFiller();
}

Which was equivalent to:

layout()
{
    this._updateVisibleRows();

    if (this.layoutReason === WI.View.LayoutReason.Resize) {
        this._cachedWidth = NaN;
        this._heightWidth = NaN;
    }

    this._resizeColumnsAndFiller();
}

I broke out the resize logic, which runs before `layout`, so now we have:

sizeDidChange()
{
    this._cachedWidth = NaN;
    this._heightWidth = NaN;
}

layout()
{
    this._updateVisibleRows();
    this._resizeColumnsAndFiller();
}

During a resize, the logic is different from what we had previously; the cached values are cleared before `_updateVisibleRows` is called. That should be an improvement, since that method will recompute `_cachedHeight` instead of using a stale value. Since `_resizeColumnsAndFiller` only refers to `_cachedWidth` the change should not be visible to that method.

&gt;&gt; Source/WebInspectorUI/UserInterface/Views/Table.js:844
&gt;&gt; +        if (this._columnWidths &amp;&amp; this._cachedWidth === this._previousCachedWidth) {
&gt; 
&gt; You should update `_previousCachedWidth` after this so that the next time this is called it will be equal.

Good catch!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1476957</commentid>
    <comment_count>10</comment_count>
      <attachid>354353</attachid>
    <who name="Matt Baker">mattbaker</who>
    <bug_when>2018-11-09 09:54:06 -0800</bug_when>
    <thetext>Created attachment 354353
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1476962</commentid>
    <comment_count>11</comment_count>
      <attachid>354023</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2018-11-09 10:02:10 -0800</bug_when>
    <thetext>Comment on attachment 354023
Patch

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

&gt;&gt;&gt; Source/WebInspectorUI/UserInterface/Views/Table.js:534
&gt;&gt;&gt; +        this._resizeColumnsAndFiller();
&gt;&gt; 
&gt;&gt; I think this will have a different effect than what was there before.  Calling `resize` guaranteed that `_cachedWidth` was recalculated, whereas just calling `_resizeColumnsAndFiller` doesn&apos;t.  Setting `_columnWidths` to `null` does ensure that it is recalculated, but it doesn&apos;t affect `_cachedWidth`.
&gt; 
&gt; The effect should be the same, let&apos;s walk through it to make I didn&apos;t break things. Previously we had:
&gt; 
&gt; layout()
&gt; {
&gt;     this._updateVisibleRows();
&gt; 
&gt;     if (this.layoutReason === WI.View.LayoutReason.Resize)
&gt;         this.resize();
&gt;     else
&gt;         this._resizeColumnsAndFiller();
&gt; }
&gt; 
&gt; Which was equivalent to:
&gt; 
&gt; layout()
&gt; {
&gt;     this._updateVisibleRows();
&gt; 
&gt;     if (this.layoutReason === WI.View.LayoutReason.Resize) {
&gt;         this._cachedWidth = NaN;
&gt;         this._heightWidth = NaN;
&gt;     }
&gt; 
&gt;     this._resizeColumnsAndFiller();
&gt; }
&gt; 
&gt; I broke out the resize logic, which runs before `layout`, so now we have:
&gt; 
&gt; sizeDidChange()
&gt; {
&gt;     this._cachedWidth = NaN;
&gt;     this._heightWidth = NaN;
&gt; }
&gt; 
&gt; layout()
&gt; {
&gt;     this._updateVisibleRows();
&gt;     this._resizeColumnsAndFiller();
&gt; }
&gt; 
&gt; During a resize, the logic is different from what we had previously; the cached values are cleared before `_updateVisibleRows` is called. That should be an improvement, since that method will recompute `_cachedHeight` instead of using a stale value. Since `_resizeColumnsAndFiller` only refers to `_cachedWidth` the change should not be visible to that method.

The issue I&apos;m referring to has nothing to do with `layout` or `sizeDidChange`.  The previous implementation of `resize` cleared `_cachedWidth`, which you no longer do in this function.  I&apos;d expect the `_cachedWidth` to update whenever a new column is shown via `showColumn`, so you either need to call `this.needsLayout(WI.View.LayoutReason.Resize)` or set `_cachedWidth` to `NaN` here (async vs sync).

Another thing I just noticed is that the same is true for `hideColumn` as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1476992</commentid>
    <comment_count>12</comment_count>
      <attachid>354023</attachid>
    <who name="Matt Baker">mattbaker</who>
    <bug_when>2018-11-09 10:52:58 -0800</bug_when>
    <thetext>Comment on attachment 354023
Patch

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

&gt;&gt;&gt;&gt; Source/WebInspectorUI/UserInterface/Views/Table.js:534
&gt;&gt;&gt;&gt; +        this._resizeColumnsAndFiller();
&gt;&gt;&gt; 
&gt;&gt;&gt; I think this will have a different effect than what was there before.  Calling `resize` guaranteed that `_cachedWidth` was recalculated, whereas just calling `_resizeColumnsAndFiller` doesn&apos;t.  Setting `_columnWidths` to `null` does ensure that it is recalculated, but it doesn&apos;t affect `_cachedWidth`.
&gt;&gt; 
&gt;&gt; The effect should be the same, let&apos;s walk through it to make I didn&apos;t break things. Previously we had:
&gt;&gt; 
&gt;&gt; layout()
&gt;&gt; {
&gt;&gt;     this._updateVisibleRows();
&gt;&gt; 
&gt;&gt;     if (this.layoutReason === WI.View.LayoutReason.Resize)
&gt;&gt;         this.resize();
&gt;&gt;     else
&gt;&gt;         this._resizeColumnsAndFiller();
&gt;&gt; }
&gt;&gt; 
&gt;&gt; Which was equivalent to:
&gt;&gt; 
&gt;&gt; layout()
&gt;&gt; {
&gt;&gt;     this._updateVisibleRows();
&gt;&gt; 
&gt;&gt;     if (this.layoutReason === WI.View.LayoutReason.Resize) {
&gt;&gt;         this._cachedWidth = NaN;
&gt;&gt;         this._heightWidth = NaN;
&gt;&gt;     }
&gt;&gt; 
&gt;&gt;     this._resizeColumnsAndFiller();
&gt;&gt; }
&gt;&gt; 
&gt;&gt; I broke out the resize logic, which runs before `layout`, so now we have:
&gt;&gt; 
&gt;&gt; sizeDidChange()
&gt;&gt; {
&gt;&gt;     this._cachedWidth = NaN;
&gt;&gt;     this._heightWidth = NaN;
&gt;&gt; }
&gt;&gt; 
&gt;&gt; layout()
&gt;&gt; {
&gt;&gt;     this._updateVisibleRows();
&gt;&gt;     this._resizeColumnsAndFiller();
&gt;&gt; }
&gt;&gt; 
&gt;&gt; During a resize, the logic is different from what we had previously; the cached values are cleared before `_updateVisibleRows` is called. That should be an improvement, since that method will recompute `_cachedHeight` instead of using a stale value. Since `_resizeColumnsAndFiller` only refers to `_cachedWidth` the change should not be visible to that method.
&gt; 
&gt; The issue I&apos;m referring to has nothing to do with `layout` or `sizeDidChange`.  The previous implementation of `resize` cleared `_cachedWidth`, which you no longer do in this function.  I&apos;d expect the `_cachedWidth` to update whenever a new column is shown via `showColumn`, so you either need to call `this.needsLayout(WI.View.LayoutReason.Resize)` or set `_cachedWidth` to `NaN` here (async vs sync).
&gt; 
&gt; Another thing I just noticed is that the same is true for `hideColumn` as well.

Why does `_cachedWidth` need to be updated every time a column is hidden/shown? The width of the Table isn&apos;t changing, so using the existing `_cachedWidth` makes sense (and if it&apos;s NaN it will be computed).

Interestingly, `showColumn` used to call `resize` but `hideColumn` just triggered a (non-resize) layout instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1478542</commentid>
    <comment_count>13</comment_count>
      <attachid>354023</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2018-11-14 11:24:15 -0800</bug_when>
    <thetext>Comment on attachment 354023
Patch

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

&gt;&gt;&gt;&gt;&gt; Source/WebInspectorUI/UserInterface/Views/Table.js:534
&gt;&gt;&gt;&gt;&gt; +        this._resizeColumnsAndFiller();
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; I think this will have a different effect than what was there before.  Calling `resize` guaranteed that `_cachedWidth` was recalculated, whereas just calling `_resizeColumnsAndFiller` doesn&apos;t.  Setting `_columnWidths` to `null` does ensure that it is recalculated, but it doesn&apos;t affect `_cachedWidth`.
&gt;&gt;&gt; 
&gt;&gt;&gt; The effect should be the same, let&apos;s walk through it to make I didn&apos;t break things. Previously we had:
&gt;&gt;&gt; 
&gt;&gt;&gt; layout()
&gt;&gt;&gt; {
&gt;&gt;&gt;     this._updateVisibleRows();
&gt;&gt;&gt; 
&gt;&gt;&gt;     if (this.layoutReason === WI.View.LayoutReason.Resize)
&gt;&gt;&gt;         this.resize();
&gt;&gt;&gt;     else
&gt;&gt;&gt;         this._resizeColumnsAndFiller();
&gt;&gt;&gt; }
&gt;&gt;&gt; 
&gt;&gt;&gt; Which was equivalent to:
&gt;&gt;&gt; 
&gt;&gt;&gt; layout()
&gt;&gt;&gt; {
&gt;&gt;&gt;     this._updateVisibleRows();
&gt;&gt;&gt; 
&gt;&gt;&gt;     if (this.layoutReason === WI.View.LayoutReason.Resize) {
&gt;&gt;&gt;         this._cachedWidth = NaN;
&gt;&gt;&gt;         this._heightWidth = NaN;
&gt;&gt;&gt;     }
&gt;&gt;&gt; 
&gt;&gt;&gt;     this._resizeColumnsAndFiller();
&gt;&gt;&gt; }
&gt;&gt;&gt; 
&gt;&gt;&gt; I broke out the resize logic, which runs before `layout`, so now we have:
&gt;&gt;&gt; 
&gt;&gt;&gt; sizeDidChange()
&gt;&gt;&gt; {
&gt;&gt;&gt;     this._cachedWidth = NaN;
&gt;&gt;&gt;     this._heightWidth = NaN;
&gt;&gt;&gt; }
&gt;&gt;&gt; 
&gt;&gt;&gt; layout()
&gt;&gt;&gt; {
&gt;&gt;&gt;     this._updateVisibleRows();
&gt;&gt;&gt;     this._resizeColumnsAndFiller();
&gt;&gt;&gt; }
&gt;&gt;&gt; 
&gt;&gt;&gt; During a resize, the logic is different from what we had previously; the cached values are cleared before `_updateVisibleRows` is called. That should be an improvement, since that method will recompute `_cachedHeight` instead of using a stale value. Since `_resizeColumnsAndFiller` only refers to `_cachedWidth` the change should not be visible to that method.
&gt;&gt; 
&gt;&gt; The issue I&apos;m referring to has nothing to do with `layout` or `sizeDidChange`.  The previous implementation of `resize` cleared `_cachedWidth`, which you no longer do in this function.  I&apos;d expect the `_cachedWidth` to update whenever a new column is shown via `showColumn`, so you either need to call `this.needsLayout(WI.View.LayoutReason.Resize)` or set `_cachedWidth` to `NaN` here (async vs sync).
&gt;&gt; 
&gt;&gt; Another thing I just noticed is that the same is true for `hideColumn` as well.
&gt; 
&gt; Why does `_cachedWidth` need to be updated every time a column is hidden/shown? The width of the Table isn&apos;t changing, so using the existing `_cachedWidth` makes sense (and if it&apos;s NaN it will be computed).
&gt; 
&gt; Interestingly, `showColumn` used to call `resize` but `hideColumn` just triggered a (non-resize) layout instead.

Oh good point.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1478548</commentid>
    <comment_count>14</comment_count>
      <attachid>354353</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2018-11-14 11:34:30 -0800</bug_when>
    <thetext>Comment on attachment 354353
Patch

r=me, nicely done :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1478640</commentid>
    <comment_count>15</comment_count>
      <attachid>354353</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-11-14 14:54:28 -0800</bug_when>
    <thetext>Comment on attachment 354353
Patch

Clearing flags on attachment: 354353

Committed r238203: &lt;https://trac.webkit.org/changeset/238203&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1478641</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-11-14 14:54:29 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>353997</attachid>
            <date>2018-11-06 13:39:26 -0800</date>
            <delta_ts>2018-11-06 16:22:53 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-191328-20181106133925.patch</filename>
            <type>text/plain</type>
            <size>1490</size>
            <attacher name="Matt Baker">mattbaker</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM3ODM3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZwppbmRleCA2
MWRhYTUwMjdhNjhhYWNiMmU1ZDgzYzI4OGRmODhhNWE1NDk0YmIwLi4wODZjZjQ0ZDcyYWUzNjkw
OGJlZjE1OTEzNzgwYWRmNDkyMjZiM2I5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNCBAQAorMjAxOC0xMS0wNiAgTWF0dCBCYWtlciAgPG1hdHRiYWtlckBhcHBsZS5jb20+
CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogVGFibGUgc2hvdWxkIHJlY2FsY3VsYXRlIHNjcm9s
bGFibGUgaGVpZ2h0IHdoZW4gcmVzaXplZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTkxMzI4CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS80NTg1NDQx
Mj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFVz
ZXJJbnRlcmZhY2UvVmlld3MvVGFibGUuanM6CisgICAgICAgIChXSS5UYWJsZS5wcm90b3R5cGUu
bGF5b3V0KToKKwogMjAxOC0xMS0wNSAgRGV2aW4gUm91c3NvICA8ZHJvdXNzb0BhcHBsZS5jb20+
CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogQXVkaXQ6IHR1cm4gb2ZmIFN0YXJ0IGJ1dHRvbiB3
aGVuIGFsbCB0ZXN0cyBhcmUgcmVtb3ZlZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3Rv
clVJL1VzZXJJbnRlcmZhY2UvVmlld3MvVGFibGUuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkv
VXNlckludGVyZmFjZS9WaWV3cy9UYWJsZS5qcwppbmRleCBmNzUzZDlmNzZjNDg4ZDIwMjc4ZGUw
ZDFhYjRiMDllZmVmY2FmYTA0Li4yM2ViMWYzODdhYzM3N2JhNjIyMGQ4NjFjZjU4YjFkNzdmMmI3
ZGVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3
cy9UYWJsZS5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3
cy9UYWJsZS5qcwpAQCAtNjIxLDkgKzYyMSwxMCBAQCBXSS5UYWJsZSA9IGNsYXNzIFRhYmxlIGV4
dGVuZHMgV0kuVmlldwogICAgIHsKICAgICAgICAgdGhpcy5fdXBkYXRlVmlzaWJsZVJvd3MoKTsK
IAotICAgICAgICBpZiAodGhpcy5sYXlvdXRSZWFzb24gPT09IFdJLlZpZXcuTGF5b3V0UmVhc29u
LlJlc2l6ZSkKKyAgICAgICAgaWYgKHRoaXMubGF5b3V0UmVhc29uID09PSBXSS5WaWV3LkxheW91
dFJlYXNvbi5SZXNpemUpIHsKKyAgICAgICAgICAgIHRoaXMuX2NhY2hlZFNjcm9sbGFibGVIZWln
aHQgPSBOYU47CiAgICAgICAgICAgICB0aGlzLnJlc2l6ZSgpOwotICAgICAgICBlbHNlCisgICAg
ICAgIH0gZWxzZQogICAgICAgICAgICAgdGhpcy5fcmVzaXplQ29sdW1uc0FuZEZpbGxlcigpOwog
ICAgIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>354023</attachid>
            <date>2018-11-06 16:22:54 -0800</date>
            <delta_ts>2018-11-09 09:54:04 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-191328-20181106162254.patch</filename>
            <type>text/plain</type>
            <size>7324</size>
            <attacher name="Matt Baker">mattbaker</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM3ODgzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZwppbmRleCA3
ZTYxNmE0M2QxMmE0ZGZmYmFiMjlkZGNiMTA1NWI2MDMzYzkyNjQ5Li5mYTY2MmU3OWYzOWQxMWFm
NTRjZjc2NWM4MjBhOTdiNTQwZDE3YTE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzOSBAQAorMjAxOC0xMS0wNiAgTWF0dCBCYWtlciAgPG1hdHRiYWtlckBhcHBsZS5jb20+
CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogVGFibGUgc2hvdWxkIHJlY2FsY3VsYXRlIHNjcm9s
bGFibGUgaGVpZ2h0IHdoZW4gcmVzaXplZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTkxMzI4CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS80NTg1NDQx
Mj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFVz
ZXJJbnRlcmZhY2UvVmlld3MvTmV0d29ya1RhYmxlQ29udGVudFZpZXcuanM6CisgICAgICAgIChX
SS5OZXR3b3JrVGFibGVDb250ZW50Vmlldy5wcm90b3R5cGUuX2hpZGVEZXRhaWxWaWV3KToKKyAg
ICAgICAgRm9yY2UgdGFibGUgY29sdW1ucyB0byBsYXlvdXQgYWZ0ZXIgaGlkaW5nIHRoZSBkZXRh
aWwgdmlldy4KKworICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVmlld3MvVGFibGUuanM6CisgICAg
ICAgIChXSS5UYWJsZSk6CisgICAgICAgIChXSS5UYWJsZS5wcm90b3R5cGUuc2hvd0NvbHVtbik6
CisgICAgICAgIENhbGwgYF9yZXNpemVDb2x1bW5zQW5kRmlsbGVyYCBpbnN0ZWFkIG9mIGByZXNp
emVgLiBUaGUgbGF0dGVyIGFsc28gY2xlYXJlZAorICAgICAgICBgX2NhY2hlZFdpZHRoYCwgd2hp
Y2ggaXNuJ3QgdW5uZWNlc3Nhcnkgc2luY2UgdGhlIHdpZHRoIGhhc24ndCBjaGFuZ2VkLgorCisg
ICAgICAgIChXSS5UYWJsZS5wcm90b3R5cGUubGF5b3V0KToKKyAgICAgICAgcHJldmlvdXNseSBg
X3Jlc2l6ZUNvbHVtbnNBbmRGaWxsZXJgIGFsd2F5cyBvY2N1cnJlZCBhZnRlciBgX3VwZGF0ZVZp
c2libGVSb3dzYCwKKyAgICAgICAgaXQgd2FzIGp1c3QgYSBtYXR0ZXIgb2Ygd2hldGhlciB0aGUg
Y2FjaGVkIHdpZHRoIGFuZCBoZWlnaHQgd2VyZSBjbGVhcmVkIGZpcnN0LgorICAgICAgICBUaGF0
IG5vdyBoYXBwZW5zIGluIGBzaXplRGlkQ2hhbmdlYC4KKworICAgICAgICAoV0kuVGFibGUucHJv
dG90eXBlLnNpemVEaWRDaGFuZ2UpOgorICAgICAgICAoV0kuVGFibGUucHJvdG90eXBlLl91cGRh
dGVWaXNpYmxlUm93cyk6CisgICAgICAgIChXSS5UYWJsZS5wcm90b3R5cGUucmVzaXplKTogRGVs
ZXRlZC4KKyAgICAgICAgSW50ZXJuYWxseSB0aGlzIGNsZWFyZWQgdGhlIGNhY2hlZCB3aWR0aCBh
bmQgaGVpZ2h0LCB3aGljaCBtb3ZlZCB0byBgc2l6ZURpZENoYW5nZWAuCisgICAgICAgIEV4dGVy
bmFsbHkgdGhpcyB3YXMgdXNlZCBieSBOZXR3b3JrVGFibGVDb250ZW50VmlldyB0byBmb3JjZSBj
b2x1bW5zIHRvCisgICAgICAgIGxheW91dCBhZnRlciBoaWRpbmcgdGhlIGRldGFpbHMgdmlldy4g
Q2FsbGluZyBgdXBkYXRlTGF5b3V0YCBvbiB0aGUgdGFibGUKKyAgICAgICAgYWNjb21wbGlzaGVz
IHRoZSBzYW1lIHRoaW5nIHVzaW5nIHRoZSBzdGFuZGFyZCBWaWV3IEFQSS4KKworICAgICAgICAo
V0kuVGFibGUucHJvdG90eXBlLl9yZXNpemVDb2x1bW5zQW5kRmlsbGVyKToKKyAgICAgICAgT25s
eSB1cGRhdGUgdGhlIGNhY2hlZCB3aWR0aCwgc2luY2UgdGhlIGhlaWdodCB3aWxsIGFscmVhZHkg
aGF2ZSBiZWVuCisgICAgICAgIHVwZGF0ZWQuIFRoZSBudW1iZXIgb2Ygcm93cyBkb2Vzbid0IGNo
YW5nZSBkdXJpbmcgdGhpcyBtZXRob2QsIHNvIHRoYXQKKyAgICAgICAgY2hlY2sgd2FzIHJlbW92
ZWQuCisKIDIwMTgtMTEtMDYgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4K
IAogICAgICAgICBSRUdSRVNTSU9OOiBXZWIgSW5zcGVjdG9yOiBQb3BvdmVycyBkcmF3aW5nIGlu
Y29ycmVjdGx5IGluIE5ldHdvcmsgVGFiIChjbGlja2luZyBiZXR3ZWVuIGEgZmV3IGl0ZW1zKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvTmV0
d29ya1RhYmxlQ29udGVudFZpZXcuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVy
ZmFjZS9WaWV3cy9OZXR3b3JrVGFibGVDb250ZW50Vmlldy5qcwppbmRleCA4ZDlkY2JlNTNhZjU2
MTliODkzZWUzOTQ1MjZjM2VmZDdkMTUyNTVhLi4yY2M5MmY2MjgxMWFiMTYxMjJlNjhhNzliNDJh
N2MwOWIxYjlkZmE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVy
ZmFjZS9WaWV3cy9OZXR3b3JrVGFibGVDb250ZW50Vmlldy5qcworKysgYi9Tb3VyY2UvV2ViSW5z
cGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9OZXR3b3JrVGFibGVDb250ZW50Vmlldy5qcwpA
QCAtMTI3OSw3ICsxMjc5LDcgQEAgV0kuTmV0d29ya1RhYmxlQ29udGVudFZpZXcgPSBjbGFzcyBO
ZXR3b3JrVGFibGVDb250ZW50VmlldyBleHRlbmRzIFdJLkNvbnRlbnRWaWUKICAgICAgICAgdGhp
cy5fZGV0YWlsVmlldy5oaWRkZW4oKTsKICAgICAgICAgdGhpcy5fZGV0YWlsVmlldyA9IG51bGw7
CiAKLSAgICAgICAgdGhpcy5fdGFibGUucmVzaXplKCk7CisgICAgICAgIHRoaXMuX3RhYmxlLnVw
ZGF0ZUxheW91dChXSS5WaWV3LkxheW91dFJlYXNvbi5SZXNpemUpOwogICAgICAgICB0aGlzLl90
YWJsZS5yZWxvYWRWaXNpYmxlQ29sdW1uQ2VsbHModGhpcy5fd2F0ZXJmYWxsQ29sdW1uKTsKICAg
ICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1Zp
ZXdzL1RhYmxlLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3Mv
VGFibGUuanMKaW5kZXggZjc1M2Q5Zjc2YzQ4OGQyMDI3OGRlMGQxYWI0YjA5ZWZlZmNhZmEwNC4u
ZjdlMTdhOWM5YzRhZDY1YzE0MWIyMjVlMzVmMjZlMzUwNTkzODFiOSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvVGFibGUuanMKKysrIGIvU291
cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvVGFibGUuanMKQEAgLTEwOCw3
ICsxMDgsNyBAQCBXSS5UYWJsZSA9IGNsYXNzIFRhYmxlIGV4dGVuZHMgV0kuVmlldwogICAgICAg
ICB0aGlzLl9jYWNoZWRXaWR0aCA9IE5hTjsKICAgICAgICAgdGhpcy5fY2FjaGVkSGVpZ2h0ID0g
TmFOOwogICAgICAgICB0aGlzLl9jYWNoZWRTY3JvbGxUb3AgPSBOYU47Ci0gICAgICAgIHRoaXMu
X2NhY2hlZFNjcm9sbGFibGVIZWlnaHQgPSBOYU47CisgICAgICAgIHRoaXMuX3ByZXZpb3VzQ2Fj
aGVkV2lkdGggPSBOYU47CiAgICAgICAgIHRoaXMuX3ByZXZpb3VzUmV2ZWFsZWRSb3dDb3VudCA9
IE5hTjsKICAgICAgICAgdGhpcy5fdG9wU3BhY2VySGVpZ2h0ID0gTmFOOwogICAgICAgICB0aGlz
Ll9ib3R0b21TcGFjZXJIZWlnaHQgPSBOYU47CkBAIC0yNDAsMTQgKzI0MCw2IEBAIFdJLlRhYmxl
ID0gY2xhc3MgVGFibGUgZXh0ZW5kcyBXSS5WaWV3CiAgICAgICAgIHJldHVybiB0aGlzLl9zZWxl
Y3RlZFJvd3MuaGFzKHJvd0luZGV4KTsKICAgICB9CiAKLSAgICByZXNpemUoKQotICAgIHsKLSAg
ICAgICAgdGhpcy5fY2FjaGVkV2lkdGggPSBOYU47Ci0gICAgICAgIHRoaXMuX2NhY2hlZEhlaWdo
dCA9IE5hTjsKLQotICAgICAgICB0aGlzLl9yZXNpemVDb2x1bW5zQW5kRmlsbGVyKCk7Ci0gICAg
fQotCiAgICAgcmVsb2FkRGF0YSgpCiAgICAgewogICAgICAgICB0aGlzLl9jYWNoZWRSb3dzLmNs
ZWFyKCk7CkBAIC01MzksNyArNTMxLDcgQEAgV0kuVGFibGUgPSBjbGFzcyBUYWJsZSBleHRlbmRz
IFdJLlZpZXcKIAogICAgICAgICAvLyBSZS1sYXlvdXQgYWxsIGNvbHVtbnMgdG8gbWFrZSBzcGFj
ZS4KICAgICAgICAgdGhpcy5fY29sdW1uV2lkdGhzID0gbnVsbDsKLSAgICAgICAgdGhpcy5yZXNp
emUoKTsKKyAgICAgICAgdGhpcy5fcmVzaXplQ29sdW1uc0FuZEZpbGxlcigpOwogCiAgICAgICAg
IC8vIE5vdyBwb3B1bGF0ZSBvbmx5IHRoZSBuZXcgY2VsbHMgZm9yIHRoaXMgY29sdW1uLgogICAg
ICAgICBmb3IgKGxldCBjZWxsIG9mIGNlbGxzVG9Qb3B1bGF0ZSkKQEAgLTYyMCwxMSArNjEyLDE2
IEBAIFdJLlRhYmxlID0gY2xhc3MgVGFibGUgZXh0ZW5kcyBXSS5WaWV3CiAgICAgbGF5b3V0KCkK
ICAgICB7CiAgICAgICAgIHRoaXMuX3VwZGF0ZVZpc2libGVSb3dzKCk7CisgICAgICAgIHRoaXMu
X3Jlc2l6ZUNvbHVtbnNBbmRGaWxsZXIoKTsKKyAgICB9CiAKLSAgICAgICAgaWYgKHRoaXMubGF5
b3V0UmVhc29uID09PSBXSS5WaWV3LkxheW91dFJlYXNvbi5SZXNpemUpCi0gICAgICAgICAgICB0
aGlzLnJlc2l6ZSgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB0aGlzLl9yZXNpemVDb2x1
bW5zQW5kRmlsbGVyKCk7CisgICAgc2l6ZURpZENoYW5nZSgpCisgICAgeworICAgICAgICBzdXBl
ci5zaXplRGlkQ2hhbmdlKCk7CisKKyAgICAgICAgdGhpcy5fcHJldmlvdXNDYWNoZWRXaWR0aCA9
IHRoaXMuX2NhY2hlZFdpZHRoOworICAgICAgICB0aGlzLl9jYWNoZWRXaWR0aCA9IE5hTjsKKyAg
ICAgICAgdGhpcy5fY2FjaGVkSGVpZ2h0ID0gTmFOOwogICAgIH0KIAogICAgIC8vIFJlc2l6ZXIg
ZGVsZWdhdGUKQEAgLTgzMCwxNSArODI3LDggQEAgV0kuVGFibGUgPSBjbGFzcyBUYWJsZSBleHRl
bmRzIFdJLlZpZXcKIAogICAgIF9yZXNpemVDb2x1bW5zQW5kRmlsbGVyKCkKICAgICB7Ci0gICAg
ICAgIGxldCBvbGRXaWR0aCA9IHRoaXMuX2NhY2hlZFdpZHRoOwotICAgICAgICBsZXQgb2xkSGVp
Z2h0ID0gdGhpcy5fY2FjaGVkSGVpZ2h0OwotICAgICAgICBsZXQgb2xkTnVtYmVyT2ZSb3dzID0g
dGhpcy5fY2FjaGVkTnVtYmVyT2ZSb3dzOwotCi0gICAgICAgIGlmIChpc05hTih0aGlzLl9jYWNo
ZWRXaWR0aCkpIHsKLSAgICAgICAgICAgIGxldCBib3VuZGluZ0NsaWVudFJlY3QgPSB0aGlzLl9z
Y3JvbGxDb250YWluZXJFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwotICAgICAgICAg
ICAgdGhpcy5fY2FjaGVkV2lkdGggPSBNYXRoLmZsb29yKGJvdW5kaW5nQ2xpZW50UmVjdC53aWR0
aCk7Ci0gICAgICAgICAgICB0aGlzLl9jYWNoZWRIZWlnaHQgPSBNYXRoLmZsb29yKGJvdW5kaW5n
Q2xpZW50UmVjdC5oZWlnaHQpOwotICAgICAgICB9CisgICAgICAgIGlmIChpc05hTih0aGlzLl9j
YWNoZWRXaWR0aCkgfHwgIXRoaXMuX2NhY2hlZFdpZHRoKQorICAgICAgICAgICAgdGhpcy5fY2Fj
aGVkV2lkdGggPSBNYXRoLmZsb29yKHRoaXMuX3Njcm9sbENvbnRhaW5lckVsZW1lbnQuZ2V0Qm91
bmRpbmdDbGllbnRSZWN0KCkud2lkdGgpOwogCiAgICAgICAgIC8vIE5vdCB2aXNpYmxlIHlldC4K
ICAgICAgICAgaWYgKCF0aGlzLl9jYWNoZWRXaWR0aCkKQEAgLTg0NywxNCArODM3LDExIEBAIFdJ
LlRhYmxlID0gY2xhc3MgVGFibGUgZXh0ZW5kcyBXSS5WaWV3CiAgICAgICAgIGxldCBhdmFpbGFi
bGVXaWR0aCA9IHRoaXMuX2NhY2hlZFdpZHRoOwogICAgICAgICBsZXQgYXZhaWxhYmxlSGVpZ2h0
ID0gdGhpcy5fY2FjaGVkSGVpZ2h0OwogCi0gICAgICAgIGxldCBudW1iZXJPZlJvd3MgPSB0aGlz
Lm51bWJlck9mUm93czsKLSAgICAgICAgdGhpcy5fY2FjaGVkTnVtYmVyT2ZSb3dzID0gbnVtYmVy
T2ZSb3dzOwotCi0gICAgICAgIGxldCBjb250ZW50SGVpZ2h0ID0gbnVtYmVyT2ZSb3dzICogdGhp
cy5fcm93SGVpZ2h0OworICAgICAgICBsZXQgY29udGVudEhlaWdodCA9IHRoaXMubnVtYmVyT2ZS
b3dzICogdGhpcy5fcm93SGVpZ2h0OwogICAgICAgICB0aGlzLl9maWxsZXJIZWlnaHQgPSBNYXRo
Lm1heChhdmFpbGFibGVIZWlnaHQgLSBjb250ZW50SGVpZ2h0LCAwKTsKIAogICAgICAgICAvLyBO
byBjaGFuZ2UgdG8gbGF5b3V0IG1ldHJpY3Mgc28gbm8gcmVzaXppbmcgaXMgbmVlZGVkLgotICAg
ICAgICBpZiAodGhpcy5fY29sdW1uV2lkdGhzICYmIGF2YWlsYWJsZVdpZHRoID09PSBvbGRXaWR0
aCAmJiBhdmFpbGFibGVXaWR0aCA9PT0gb2xkSGVpZ2h0ICYmIG51bWJlck9mUm93cyA9PT0gb2xk
TnVtYmVyT2ZSb3dzKSB7CisgICAgICAgIGlmICh0aGlzLl9jb2x1bW5XaWR0aHMgJiYgdGhpcy5f
Y2FjaGVkV2lkdGggPT09IHRoaXMuX3ByZXZpb3VzQ2FjaGVkV2lkdGgpIHsKICAgICAgICAgICAg
IHRoaXMuX3VwZGF0ZUZpbGxlclJvd1dpdGhOZXdIZWlnaHQoKTsKICAgICAgICAgICAgIHRoaXMu
X2FwcGx5Q29sdW1uV2lkdGhzVG9Db2x1bW5zSWZOZWVkZWQoKTsKICAgICAgICAgICAgIHJldHVy
bjsKQEAgLTEwNTEsMTEgKzEwMzgsMTEgQEAgV0kuVGFibGUgPSBjbGFzcyBUYWJsZSBleHRlbmRz
IFdJLlZpZXcKICAgICAgICAgaWYgKGlzTmFOKHRoaXMuX2NhY2hlZFNjcm9sbFRvcCkpCiAgICAg
ICAgICAgICB0aGlzLl9jYWNoZWRTY3JvbGxUb3AgPSB0aGlzLl9zY3JvbGxDb250YWluZXJFbGVt
ZW50LnNjcm9sbFRvcDsKIAotICAgICAgICBpZiAoaXNOYU4odGhpcy5fY2FjaGVkU2Nyb2xsYWJs
ZUhlaWdodCkgfHwgIXRoaXMuX2NhY2hlZFNjcm9sbGFibGVIZWlnaHQpCi0gICAgICAgICAgICB0
aGlzLl9jYWNoZWRTY3JvbGxhYmxlSGVpZ2h0ID0gdGhpcy5fc2Nyb2xsQ29udGFpbmVyRWxlbWVu
dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQ7CisgICAgICAgIGlmIChpc05hTih0aGlz
Ll9jYWNoZWRIZWlnaHQpIHx8ICF0aGlzLl9jYWNoZWRIZWlnaHQpCisgICAgICAgICAgICB0aGlz
Ll9jYWNoZWRIZWlnaHQgPSBNYXRoLmZsb29yKHRoaXMuX3Njcm9sbENvbnRhaW5lckVsZW1lbnQu
Z2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0KTsKIAogICAgICAgICBsZXQgc2Nyb2xsVG9w
ID0gdGhpcy5fY2FjaGVkU2Nyb2xsVG9wOwotICAgICAgICBsZXQgc2Nyb2xsYWJsZU9mZnNldEhl
aWdodCA9IHRoaXMuX2NhY2hlZFNjcm9sbGFibGVIZWlnaHQ7CisgICAgICAgIGxldCBzY3JvbGxh
YmxlT2Zmc2V0SGVpZ2h0ID0gdGhpcy5fY2FjaGVkSGVpZ2h0OwogCiAgICAgICAgIGxldCB2aXNp
YmxlUm93Q291bnQgPSBNYXRoLmNlaWwoKHNjcm9sbGFibGVPZmZzZXRIZWlnaHQgKyAob3ZlcmZs
b3dQYWRkaW5nICogMikpIC8gcm93SGVpZ2h0KTsKICAgICAgICAgbGV0IGN1cnJlbnRUb3BNYXJn
aW4gPSB0aGlzLl90b3BTcGFjZXJIZWlnaHQ7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>354353</attachid>
            <date>2018-11-09 09:54:06 -0800</date>
            <delta_ts>2018-11-14 14:54:28 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-191328-20181109095403.patch</filename>
            <type>text/plain</type>
            <size>7464</size>
            <attacher name="Matt Baker">mattbaker</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM4MDA1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZwppbmRleCAw
MzE3MWZjNGM5N2VhMDJmYTQyZTUxY2YyMmNhMzA5NGRiM2RlNzMxLi40M2RlZGJmMzg1ZjlhOGQ0
ZWMxZjVjYzFlOGE3ZDQyNmFlMTdjMjI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzOSBAQAorMjAxOC0xMS0wOSAgTWF0dCBCYWtlciAgPG1hdHRiYWtlckBhcHBsZS5jb20+
CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogVGFibGUgc2hvdWxkIHJlY2FsY3VsYXRlIHNjcm9s
bGFibGUgaGVpZ2h0IHdoZW4gcmVzaXplZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTkxMzI4CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS80NTg1NDQx
Mj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFVz
ZXJJbnRlcmZhY2UvVmlld3MvTmV0d29ya1RhYmxlQ29udGVudFZpZXcuanM6CisgICAgICAgIChX
SS5OZXR3b3JrVGFibGVDb250ZW50Vmlldy5wcm90b3R5cGUuX2hpZGVEZXRhaWxWaWV3KToKKyAg
ICAgICAgRm9yY2UgdGFibGUgY29sdW1ucyB0byBsYXlvdXQgYWZ0ZXIgaGlkaW5nIHRoZSBkZXRh
aWwgdmlldy4KKworICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVmlld3MvVGFibGUuanM6CisgICAg
ICAgIChXSS5UYWJsZSk6CisgICAgICAgIChXSS5UYWJsZS5wcm90b3R5cGUuc2hvd0NvbHVtbik6
CisgICAgICAgIENhbGwgYF9yZXNpemVDb2x1bW5zQW5kRmlsbGVyYCBpbnN0ZWFkIG9mIGByZXNp
emVgLiBUaGUgbGF0dGVyIGFsc28gY2xlYXJlZAorICAgICAgICBgX2NhY2hlZFdpZHRoYCwgd2hp
Y2ggaXNuJ3QgdW5uZWNlc3Nhcnkgc2luY2UgdGhlIHdpZHRoIGhhc24ndCBjaGFuZ2VkLgorCisg
ICAgICAgIChXSS5UYWJsZS5wcm90b3R5cGUubGF5b3V0KToKKyAgICAgICAgcHJldmlvdXNseSBg
X3Jlc2l6ZUNvbHVtbnNBbmRGaWxsZXJgIGFsd2F5cyBvY2N1cnJlZCBhZnRlciBgX3VwZGF0ZVZp
c2libGVSb3dzYCwKKyAgICAgICAgaXQgd2FzIGp1c3QgYSBtYXR0ZXIgb2Ygd2hldGhlciB0aGUg
Y2FjaGVkIHdpZHRoIGFuZCBoZWlnaHQgd2VyZSBjbGVhcmVkIGZpcnN0LgorICAgICAgICBUaGF0
IG5vdyBoYXBwZW5zIGluIGBzaXplRGlkQ2hhbmdlYC4KKworICAgICAgICAoV0kuVGFibGUucHJv
dG90eXBlLnNpemVEaWRDaGFuZ2UpOgorICAgICAgICAoV0kuVGFibGUucHJvdG90eXBlLl91cGRh
dGVWaXNpYmxlUm93cyk6CisgICAgICAgIChXSS5UYWJsZS5wcm90b3R5cGUucmVzaXplKTogRGVs
ZXRlZC4KKyAgICAgICAgSW50ZXJuYWxseSB0aGlzIGNsZWFyZWQgdGhlIGNhY2hlZCB3aWR0aCBh
bmQgaGVpZ2h0LCB3aGljaCBtb3ZlZCB0byBgc2l6ZURpZENoYW5nZWAuCisgICAgICAgIEV4dGVy
bmFsbHkgdGhpcyB3YXMgdXNlZCBieSBOZXR3b3JrVGFibGVDb250ZW50VmlldyB0byBmb3JjZSBj
b2x1bW5zIHRvCisgICAgICAgIGxheW91dCBhZnRlciBoaWRpbmcgdGhlIGRldGFpbHMgdmlldy4g
Q2FsbGluZyBgdXBkYXRlTGF5b3V0YCBvbiB0aGUgdGFibGUKKyAgICAgICAgYWNjb21wbGlzaGVz
IHRoZSBzYW1lIHRoaW5nIHVzaW5nIHRoZSBzdGFuZGFyZCBWaWV3IEFQSS4KKworICAgICAgICAo
V0kuVGFibGUucHJvdG90eXBlLl9yZXNpemVDb2x1bW5zQW5kRmlsbGVyKToKKyAgICAgICAgT25s
eSB1cGRhdGUgdGhlIGNhY2hlZCB3aWR0aCwgc2luY2UgdGhlIGhlaWdodCB3aWxsIGFscmVhZHkg
aGF2ZSBiZWVuCisgICAgICAgIHVwZGF0ZWQuIFRoZSBudW1iZXIgb2Ygcm93cyBkb2Vzbid0IGNo
YW5nZSBkdXJpbmcgdGhpcyBtZXRob2QsIHNvIHRoYXQKKyAgICAgICAgY2hlY2sgd2FzIHJlbW92
ZWQuCisKIDIwMTgtMTEtMDggIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4K
IAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBQb3RlbnRpYWwgZm9yIHdhdGNoIGV4cHJlc3Npb25z
IHRvIG5ldmVyIHNob3cgcmVzdWx0cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJ
L1VzZXJJbnRlcmZhY2UvVmlld3MvTmV0d29ya1RhYmxlQ29udGVudFZpZXcuanMgYi9Tb3VyY2Uv
V2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9OZXR3b3JrVGFibGVDb250ZW50Vmll
dy5qcwppbmRleCA4ZDlkY2JlNTNhZjU2MTliODkzZWUzOTQ1MjZjM2VmZDdkMTUyNTVhLi4yY2M5
MmY2MjgxMWFiMTYxMjJlNjhhNzliNDJhN2MwOWIxYjlkZmE5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9OZXR3b3JrVGFibGVDb250ZW50Vmll
dy5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9OZXR3
b3JrVGFibGVDb250ZW50Vmlldy5qcwpAQCAtMTI3OSw3ICsxMjc5LDcgQEAgV0kuTmV0d29ya1Rh
YmxlQ29udGVudFZpZXcgPSBjbGFzcyBOZXR3b3JrVGFibGVDb250ZW50VmlldyBleHRlbmRzIFdJ
LkNvbnRlbnRWaWUKICAgICAgICAgdGhpcy5fZGV0YWlsVmlldy5oaWRkZW4oKTsKICAgICAgICAg
dGhpcy5fZGV0YWlsVmlldyA9IG51bGw7CiAKLSAgICAgICAgdGhpcy5fdGFibGUucmVzaXplKCk7
CisgICAgICAgIHRoaXMuX3RhYmxlLnVwZGF0ZUxheW91dChXSS5WaWV3LkxheW91dFJlYXNvbi5S
ZXNpemUpOwogICAgICAgICB0aGlzLl90YWJsZS5yZWxvYWRWaXNpYmxlQ29sdW1uQ2VsbHModGhp
cy5fd2F0ZXJmYWxsQ29sdW1uKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNw
ZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1RhYmxlLmpzIGIvU291cmNlL1dlYkluc3BlY3Rv
clVJL1VzZXJJbnRlcmZhY2UvVmlld3MvVGFibGUuanMKaW5kZXggZjc1M2Q5Zjc2YzQ4OGQyMDI3
OGRlMGQxYWI0YjA5ZWZlZmNhZmEwNC4uYjE3NmU5NTIzZGZkZTQyMGM4MzRkOTJjNzk1NjQ2MDk2
NWJmYjIxYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2Uv
Vmlld3MvVGFibGUuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2Uv
Vmlld3MvVGFibGUuanMKQEAgLTEwOCw3ICsxMDgsNyBAQCBXSS5UYWJsZSA9IGNsYXNzIFRhYmxl
IGV4dGVuZHMgV0kuVmlldwogICAgICAgICB0aGlzLl9jYWNoZWRXaWR0aCA9IE5hTjsKICAgICAg
ICAgdGhpcy5fY2FjaGVkSGVpZ2h0ID0gTmFOOwogICAgICAgICB0aGlzLl9jYWNoZWRTY3JvbGxU
b3AgPSBOYU47Ci0gICAgICAgIHRoaXMuX2NhY2hlZFNjcm9sbGFibGVIZWlnaHQgPSBOYU47Cisg
ICAgICAgIHRoaXMuX3ByZXZpb3VzQ2FjaGVkV2lkdGggPSBOYU47CiAgICAgICAgIHRoaXMuX3By
ZXZpb3VzUmV2ZWFsZWRSb3dDb3VudCA9IE5hTjsKICAgICAgICAgdGhpcy5fdG9wU3BhY2VySGVp
Z2h0ID0gTmFOOwogICAgICAgICB0aGlzLl9ib3R0b21TcGFjZXJIZWlnaHQgPSBOYU47CkBAIC0y
NDAsMTQgKzI0MCw2IEBAIFdJLlRhYmxlID0gY2xhc3MgVGFibGUgZXh0ZW5kcyBXSS5WaWV3CiAg
ICAgICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZFJvd3MuaGFzKHJvd0luZGV4KTsKICAgICB9CiAK
LSAgICByZXNpemUoKQotICAgIHsKLSAgICAgICAgdGhpcy5fY2FjaGVkV2lkdGggPSBOYU47Ci0g
ICAgICAgIHRoaXMuX2NhY2hlZEhlaWdodCA9IE5hTjsKLQotICAgICAgICB0aGlzLl9yZXNpemVD
b2x1bW5zQW5kRmlsbGVyKCk7Ci0gICAgfQotCiAgICAgcmVsb2FkRGF0YSgpCiAgICAgewogICAg
ICAgICB0aGlzLl9jYWNoZWRSb3dzLmNsZWFyKCk7CkBAIC01MzksNyArNTMxLDcgQEAgV0kuVGFi
bGUgPSBjbGFzcyBUYWJsZSBleHRlbmRzIFdJLlZpZXcKIAogICAgICAgICAvLyBSZS1sYXlvdXQg
YWxsIGNvbHVtbnMgdG8gbWFrZSBzcGFjZS4KICAgICAgICAgdGhpcy5fY29sdW1uV2lkdGhzID0g
bnVsbDsKLSAgICAgICAgdGhpcy5yZXNpemUoKTsKKyAgICAgICAgdGhpcy5fcmVzaXplQ29sdW1u
c0FuZEZpbGxlcigpOwogCiAgICAgICAgIC8vIE5vdyBwb3B1bGF0ZSBvbmx5IHRoZSBuZXcgY2Vs
bHMgZm9yIHRoaXMgY29sdW1uLgogICAgICAgICBmb3IgKGxldCBjZWxsIG9mIGNlbGxzVG9Qb3B1
bGF0ZSkKQEAgLTYyMCwxMSArNjEyLDE2IEBAIFdJLlRhYmxlID0gY2xhc3MgVGFibGUgZXh0ZW5k
cyBXSS5WaWV3CiAgICAgbGF5b3V0KCkKICAgICB7CiAgICAgICAgIHRoaXMuX3VwZGF0ZVZpc2li
bGVSb3dzKCk7CisgICAgICAgIHRoaXMuX3Jlc2l6ZUNvbHVtbnNBbmRGaWxsZXIoKTsKKyAgICB9
CiAKLSAgICAgICAgaWYgKHRoaXMubGF5b3V0UmVhc29uID09PSBXSS5WaWV3LkxheW91dFJlYXNv
bi5SZXNpemUpCi0gICAgICAgICAgICB0aGlzLnJlc2l6ZSgpOwotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICB0aGlzLl9yZXNpemVDb2x1bW5zQW5kRmlsbGVyKCk7CisgICAgc2l6ZURpZENoYW5n
ZSgpCisgICAgeworICAgICAgICBzdXBlci5zaXplRGlkQ2hhbmdlKCk7CisKKyAgICAgICAgdGhp
cy5fcHJldmlvdXNDYWNoZWRXaWR0aCA9IHRoaXMuX2NhY2hlZFdpZHRoOworICAgICAgICB0aGlz
Ll9jYWNoZWRXaWR0aCA9IE5hTjsKKyAgICAgICAgdGhpcy5fY2FjaGVkSGVpZ2h0ID0gTmFOOwog
ICAgIH0KIAogICAgIC8vIFJlc2l6ZXIgZGVsZWdhdGUKQEAgLTgzMCwxNSArODI3LDggQEAgV0ku
VGFibGUgPSBjbGFzcyBUYWJsZSBleHRlbmRzIFdJLlZpZXcKIAogICAgIF9yZXNpemVDb2x1bW5z
QW5kRmlsbGVyKCkKICAgICB7Ci0gICAgICAgIGxldCBvbGRXaWR0aCA9IHRoaXMuX2NhY2hlZFdp
ZHRoOwotICAgICAgICBsZXQgb2xkSGVpZ2h0ID0gdGhpcy5fY2FjaGVkSGVpZ2h0OwotICAgICAg
ICBsZXQgb2xkTnVtYmVyT2ZSb3dzID0gdGhpcy5fY2FjaGVkTnVtYmVyT2ZSb3dzOwotCi0gICAg
ICAgIGlmIChpc05hTih0aGlzLl9jYWNoZWRXaWR0aCkpIHsKLSAgICAgICAgICAgIGxldCBib3Vu
ZGluZ0NsaWVudFJlY3QgPSB0aGlzLl9zY3JvbGxDb250YWluZXJFbGVtZW50LmdldEJvdW5kaW5n
Q2xpZW50UmVjdCgpOwotICAgICAgICAgICAgdGhpcy5fY2FjaGVkV2lkdGggPSBNYXRoLmZsb29y
KGJvdW5kaW5nQ2xpZW50UmVjdC53aWR0aCk7Ci0gICAgICAgICAgICB0aGlzLl9jYWNoZWRIZWln
aHQgPSBNYXRoLmZsb29yKGJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHQpOwotICAgICAgICB9Cisg
ICAgICAgIGlmIChpc05hTih0aGlzLl9jYWNoZWRXaWR0aCkgfHwgIXRoaXMuX2NhY2hlZFdpZHRo
KQorICAgICAgICAgICAgdGhpcy5fY2FjaGVkV2lkdGggPSBNYXRoLmZsb29yKHRoaXMuX3Njcm9s
bENvbnRhaW5lckVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGgpOwogCiAgICAg
ICAgIC8vIE5vdCB2aXNpYmxlIHlldC4KICAgICAgICAgaWYgKCF0aGlzLl9jYWNoZWRXaWR0aCkK
QEAgLTg0NywxOSArODM3LDE4IEBAIFdJLlRhYmxlID0gY2xhc3MgVGFibGUgZXh0ZW5kcyBXSS5W
aWV3CiAgICAgICAgIGxldCBhdmFpbGFibGVXaWR0aCA9IHRoaXMuX2NhY2hlZFdpZHRoOwogICAg
ICAgICBsZXQgYXZhaWxhYmxlSGVpZ2h0ID0gdGhpcy5fY2FjaGVkSGVpZ2h0OwogCi0gICAgICAg
IGxldCBudW1iZXJPZlJvd3MgPSB0aGlzLm51bWJlck9mUm93czsKLSAgICAgICAgdGhpcy5fY2Fj
aGVkTnVtYmVyT2ZSb3dzID0gbnVtYmVyT2ZSb3dzOwotCi0gICAgICAgIGxldCBjb250ZW50SGVp
Z2h0ID0gbnVtYmVyT2ZSb3dzICogdGhpcy5fcm93SGVpZ2h0OworICAgICAgICBsZXQgY29udGVu
dEhlaWdodCA9IHRoaXMubnVtYmVyT2ZSb3dzICogdGhpcy5fcm93SGVpZ2h0OwogICAgICAgICB0
aGlzLl9maWxsZXJIZWlnaHQgPSBNYXRoLm1heChhdmFpbGFibGVIZWlnaHQgLSBjb250ZW50SGVp
Z2h0LCAwKTsKIAogICAgICAgICAvLyBObyBjaGFuZ2UgdG8gbGF5b3V0IG1ldHJpY3Mgc28gbm8g
cmVzaXppbmcgaXMgbmVlZGVkLgotICAgICAgICBpZiAodGhpcy5fY29sdW1uV2lkdGhzICYmIGF2
YWlsYWJsZVdpZHRoID09PSBvbGRXaWR0aCAmJiBhdmFpbGFibGVXaWR0aCA9PT0gb2xkSGVpZ2h0
ICYmIG51bWJlck9mUm93cyA9PT0gb2xkTnVtYmVyT2ZSb3dzKSB7CisgICAgICAgIGlmICh0aGlz
Ll9jb2x1bW5XaWR0aHMgJiYgdGhpcy5fY2FjaGVkV2lkdGggPT09IHRoaXMuX3ByZXZpb3VzQ2Fj
aGVkV2lkdGgpIHsKICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUZpbGxlclJvd1dpdGhOZXdIZWln
aHQoKTsKICAgICAgICAgICAgIHRoaXMuX2FwcGx5Q29sdW1uV2lkdGhzVG9Db2x1bW5zSWZOZWVk
ZWQoKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCisgICAgICAgIHRoaXMuX3By
ZXZpb3VzQ2FjaGVkV2lkdGggPSB0aGlzLl9jYWNoZWRXaWR0aDsKKwogICAgICAgICBsZXQgbG9j
a2VkV2lkdGggPSAwOwogICAgICAgICBsZXQgbG9ja2VkQ29sdW1uQ291bnQgPSAwOwogICAgICAg
ICBsZXQgdG90YWxNaW5pbXVtV2lkdGggPSAwOwpAQCAtMTA1MSwxMSArMTA0MCwxMSBAQCBXSS5U
YWJsZSA9IGNsYXNzIFRhYmxlIGV4dGVuZHMgV0kuVmlldwogICAgICAgICBpZiAoaXNOYU4odGhp
cy5fY2FjaGVkU2Nyb2xsVG9wKSkKICAgICAgICAgICAgIHRoaXMuX2NhY2hlZFNjcm9sbFRvcCA9
IHRoaXMuX3Njcm9sbENvbnRhaW5lckVsZW1lbnQuc2Nyb2xsVG9wOwogCi0gICAgICAgIGlmIChp
c05hTih0aGlzLl9jYWNoZWRTY3JvbGxhYmxlSGVpZ2h0KSB8fCAhdGhpcy5fY2FjaGVkU2Nyb2xs
YWJsZUhlaWdodCkKLSAgICAgICAgICAgIHRoaXMuX2NhY2hlZFNjcm9sbGFibGVIZWlnaHQgPSB0
aGlzLl9zY3JvbGxDb250YWluZXJFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdo
dDsKKyAgICAgICAgaWYgKGlzTmFOKHRoaXMuX2NhY2hlZEhlaWdodCkgfHwgIXRoaXMuX2NhY2hl
ZEhlaWdodCkKKyAgICAgICAgICAgIHRoaXMuX2NhY2hlZEhlaWdodCA9IE1hdGguZmxvb3IodGhp
cy5fc2Nyb2xsQ29udGFpbmVyRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQp
OwogCiAgICAgICAgIGxldCBzY3JvbGxUb3AgPSB0aGlzLl9jYWNoZWRTY3JvbGxUb3A7Ci0gICAg
ICAgIGxldCBzY3JvbGxhYmxlT2Zmc2V0SGVpZ2h0ID0gdGhpcy5fY2FjaGVkU2Nyb2xsYWJsZUhl
aWdodDsKKyAgICAgICAgbGV0IHNjcm9sbGFibGVPZmZzZXRIZWlnaHQgPSB0aGlzLl9jYWNoZWRI
ZWlnaHQ7CiAKICAgICAgICAgbGV0IHZpc2libGVSb3dDb3VudCA9IE1hdGguY2VpbCgoc2Nyb2xs
YWJsZU9mZnNldEhlaWdodCArIChvdmVyZmxvd1BhZGRpbmcgKiAyKSkgLyByb3dIZWlnaHQpOwog
ICAgICAgICBsZXQgY3VycmVudFRvcE1hcmdpbiA9IHRoaXMuX3RvcFNwYWNlckhlaWdodDsK
</data>

          </attachment>
      

    </bug>

</bugzilla>