<?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>187864</bug_id>
          
          <creation_ts>2018-07-20 10:39:20 -0700</creation_ts>
          <short_desc>WTF::StringView::split should have an allowEmptyEntries flag</short_desc>
          <delta_ts>2018-07-24 10:35:59 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Template Framework</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=187963</see_also>
          <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>
          
          <blocked>187859</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Ross Kirsling">ross.kirsling</reporter>
          <assigned_to name="Ross Kirsling">ross.kirsling</assigned_to>
          <cc>annulen</cc>
    
    <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>dbates</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fujii</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1443819</commentid>
    <comment_count>0</comment_count>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2018-07-20 10:39:20 -0700</bug_when>
    <thetext>WTF::String::split takes an allowEmptyEntries flag -- StringView should follow suit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1443830</commentid>
    <comment_count>1</comment_count>
      <attachid>345461</attachid>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2018-07-20 10:54:34 -0700</bug_when>
    <thetext>Created attachment 345461
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1443841</commentid>
    <comment_count>2</comment_count>
    <who name="Konstantin Tokarev">annulen</who>
    <bug_when>2018-07-20 11:07:39 -0700</bug_when>
    <thetext>I think this is not the best API, because by looking at call site like

 a.split(&apos; &apos;, true)

you won&apos;t have a slightest idea what does it mean until you look up implementation. In Qt we call this &quot;boolean parameter trap&quot; [1]. It would be better to use enum value, or other kind of named and typed flag

[1] https://wiki.qt.io/API_Design_Principles#The_Boolean_Parameter_Trap</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1443846</commentid>
    <comment_count>3</comment_count>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2018-07-20 11:11:40 -0700</bug_when>
    <thetext>(In reply to Konstantin Tokarev from comment #2)
&gt; I think this is not the best API, because by looking at call site like
&gt; 
&gt;  a.split(&apos; &apos;, true)
&gt; 
&gt; you won&apos;t have a slightest idea what does it mean until you look up
&gt; implementation. In Qt we call this &quot;boolean parameter trap&quot; [1]. It would be
&gt; better to use enum value, or other kind of named and typed flag
&gt; 
&gt; [1] https://wiki.qt.io/API_Design_Principles#The_Boolean_Parameter_Trap

That&apos;s a fair point, but I was assuming we would want the API to align with String::split:
https://github.com/WebKit/webkit/blob/master/Source/WTF/wtf/text/WTFString.cpp#L705</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1443847</commentid>
    <comment_count>4</comment_count>
    <who name="Konstantin Tokarev">annulen</who>
    <bug_when>2018-07-20 11:14:39 -0700</bug_when>
    <thetext>I think it would be better to fix String::split as well, though the latter is a bit more readable: split(separator, result) vs split(separator, true, result)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1443898</commentid>
    <comment_count>5</comment_count>
      <attachid>345478</attachid>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2018-07-20 13:36:53 -0700</bug_when>
    <thetext>Created attachment 345478
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1444027</commentid>
    <comment_count>6</comment_count>
      <attachid>345504</attachid>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2018-07-20 21:56:19 -0700</bug_when>
    <thetext>Created attachment 345504
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1444225</commentid>
    <comment_count>7</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2018-07-22 23:04:23 -0700</bug_when>
    <thetext>Assertion fails in Debug build.

&gt; ASSERTION FAILED: m_position &lt; m_result.m_string.length()
&gt; c:\webkit\ga\webkitbuild\debug\derivedsources\forwardingheaders\wtf\text\stringview.h(946) : WTF::StringView::SplitResult::Iterator::operator *</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1444294</commentid>
    <comment_count>8</comment_count>
      <attachid>345579</attachid>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2018-07-23 10:07:38 -0700</bug_when>
    <thetext>Created attachment 345579
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1444295</commentid>
    <comment_count>9</comment_count>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2018-07-23 10:09:29 -0700</bug_when>
    <thetext>(In reply to Fujii Hironori from comment #7)
&gt; Assertion fails in Debug build.
&gt; 
&gt; &gt; ASSERTION FAILED: m_position &lt; m_result.m_string.length()
&gt; &gt; c:\webkit\ga\webkitbuild\debug\derivedsources\forwardingheaders\wtf\text\stringview.h(946) : WTF::StringView::SplitResult::Iterator::operator *

Whoops, thanks! Assertion updated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1444320</commentid>
    <comment_count>10</comment_count>
      <attachid>345579</attachid>
    <who name="Konstantin Tokarev">annulen</who>
    <bug_when>2018-07-23 10:59:59 -0700</bug_when>
    <thetext>Comment on attachment 345579
Patch

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

&gt; Source/WTF/wtf/text/StringView.h:953
&gt; +    return m_position == other.m_position &amp;&amp; m_isDone == other.m_isDone;

This looks suspicious to me. 2 iterators may have same position but differ in m_isDone value only if they have result.m_allowEmptyEntries

Shouldn&apos;t we compare that value instead of m_isDone? May iterators with different allowEmptyEntries be ever considered equal? What is the usage context of this operator?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1444323</commentid>
    <comment_count>11</comment_count>
      <attachid>345579</attachid>
    <who name="Konstantin Tokarev">annulen</who>
    <bug_when>2018-07-23 11:04:03 -0700</bug_when>
    <thetext>Comment on attachment 345579
Patch

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

&gt;&gt; Source/WTF/wtf/text/StringView.h:953
&gt;&gt; +    return m_position == other.m_position &amp;&amp; m_isDone == other.m_isDone;
&gt; 
&gt; This looks suspicious to me. 2 iterators may have same position but differ in m_isDone value only if they have result.m_allowEmptyEntries
&gt; 
&gt; Shouldn&apos;t we compare that value instead of m_isDone? May iterators with different allowEmptyEntries be ever considered equal? What is the usage context of this operator?

Actually, it seems that m_isDone affects control flow only when assers are enabled, this means that it should be guarded with #ifndef NDEBUG, and it should be excluded from operator==</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1444326</commentid>
    <comment_count>12</comment_count>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2018-07-23 11:16:40 -0700</bug_when>
    <thetext>(In reply to Konstantin Tokarev from comment #11)
&gt; Comment on attachment 345579 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=345579&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WTF/wtf/text/StringView.h:953
&gt; &gt;&gt; +    return m_position == other.m_position &amp;&amp; m_isDone == other.m_isDone;
&gt; &gt; 
&gt; &gt; This looks suspicious to me. 2 iterators may have same position but differ in m_isDone value only if they have result.m_allowEmptyEntries
&gt; &gt; 
&gt; &gt; Shouldn&apos;t we compare that value instead of m_isDone? May iterators with different allowEmptyEntries be ever considered equal? What is the usage context of this operator?
&gt; 
&gt; Actually, it seems that m_isDone affects control flow only when assers are
&gt; enabled, this means that it should be guarded with #ifndef NDEBUG, and it
&gt; should be excluded from operator==

No, the asserts are just asserts; I simply forgot to update them, as I was in Release...

m_isDone exists to prevent having begin() == end() one iteration too early when the input string is either empty or ends in a separator. That is, when we reach the point where m_position == length(), we still have one more empty entry that must be returned. Thus m_position alone cannot suffice as an end condition.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1444425</commentid>
    <comment_count>13</comment_count>
      <attachid>345579</attachid>
    <who name="Konstantin Tokarev">annulen</who>
    <bug_when>2018-07-23 14:57:13 -0700</bug_when>
    <thetext>Comment on attachment 345579
Patch

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

&gt;&gt;&gt;&gt; Source/WTF/wtf/text/StringView.h:953
&gt;&gt;&gt;&gt; +    return m_position == other.m_position &amp;&amp; m_isDone == other.m_isDone;
&gt;&gt;&gt; 
&gt;&gt;&gt; This looks suspicious to me. 2 iterators may have same position but differ in m_isDone value only if they have result.m_allowEmptyEntries
&gt;&gt;&gt; 
&gt;&gt;&gt; Shouldn&apos;t we compare that value instead of m_isDone? May iterators with different allowEmptyEntries be ever considered equal? What is the usage context of this operator?
&gt;&gt; 
&gt;&gt; Actually, it seems that m_isDone affects control flow only when assers are enabled, this means that it should be guarded with #ifndef NDEBUG, and it should be excluded from operator==
&gt; 
&gt; No, the asserts are just asserts; I simply forgot to update them, as I was in Release...
&gt; 
&gt; m_isDone exists to prevent having begin() == end() one iteration too early when the input string is either empty or ends in a separator. That is, when we reach the point where m_position == length(), we still have one more empty entry that must be returned. Thus m_position alone cannot suffice as an end condition.

Thanks for explanation, now I have better idea of what&apos;s going on here. However, I don&apos;t get why empty string (corresponding to result.m_string.isEmpty()) should produce any entries at all - it doesn&apos;t have any separators.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1444442</commentid>
    <comment_count>14</comment_count>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2018-07-23 15:31:02 -0700</bug_when>
    <thetext>(In reply to Konstantin Tokarev from comment #13)
&gt; Comment on attachment 345579 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=345579&amp;action=review
&gt; 
&gt; &gt;&gt;&gt;&gt; Source/WTF/wtf/text/StringView.h:953
&gt; &gt;&gt;&gt;&gt; +    return m_position == other.m_position &amp;&amp; m_isDone == other.m_isDone;
&gt; &gt;&gt;&gt; 
&gt; &gt;&gt;&gt; This looks suspicious to me. 2 iterators may have same position but differ in m_isDone value only if they have result.m_allowEmptyEntries
&gt; &gt;&gt;&gt; 
&gt; &gt;&gt;&gt; Shouldn&apos;t we compare that value instead of m_isDone? May iterators with different allowEmptyEntries be ever considered equal? What is the usage context of this operator?
&gt; &gt;&gt; 
&gt; &gt;&gt; Actually, it seems that m_isDone affects control flow only when assers are enabled, this means that it should be guarded with #ifndef NDEBUG, and it should be excluded from operator==
&gt; &gt; 
&gt; &gt; No, the asserts are just asserts; I simply forgot to update them, as I was in Release...
&gt; &gt; 
&gt; &gt; m_isDone exists to prevent having begin() == end() one iteration too early when the input string is either empty or ends in a separator. That is, when we reach the point where m_position == length(), we still have one more empty entry that must be returned. Thus m_position alone cannot suffice as an end condition.
&gt; 
&gt; Thanks for explanation, now I have better idea of what&apos;s going on here.
&gt; However, I don&apos;t get why empty string (corresponding to
&gt; result.m_string.isEmpty()) should produce any entries at all - it doesn&apos;t
&gt; have any separators.

I&apos;m just following the standard behavior of string split in every language I am aware of (including WTF::String::split and boost::algorithm::split).
The rationale is that we want &quot;abc&quot;.split(&apos;,&apos;) to return { &quot;abc&quot; } (just the original string), so that sort of implies that &quot;&quot;.split(&apos;,&apos;) should return { &quot;&quot; }.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1444491</commentid>
    <comment_count>15</comment_count>
      <attachid>345579</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-07-23 17:01:55 -0700</bug_when>
    <thetext>Comment on attachment 345579
Patch

Clearing flags on attachment: 345579

Committed r234122: &lt;https://trac.webkit.org/changeset/234122&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1444492</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-07-23 17:01:57 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1444493</commentid>
    <comment_count>17</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-07-23 17:02:46 -0700</bug_when>
    <thetext>&lt;rdar://problem/42521814&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1444506</commentid>
    <comment_count>18</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2018-07-23 17:38:02 -0700</bug_when>
    <thetext>I agree that using a boolean here is not good style and I am unhappy to see this pattern repeated from WTF::String rather than fixing it in both places.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1444508</commentid>
    <comment_count>19</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2018-07-23 17:39:28 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #18)
&gt; I agree that using a boolean here is not good style and I am unhappy to see
&gt; this pattern repeated from WTF::String rather than fixing it in both places.

Oh, I see, we used a named argument instead of a boolean -- better. However, I think we should simply have used a new function named splitAllowingEmptyEntries.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1444511</commentid>
    <comment_count>20</comment_count>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2018-07-23 17:43:15 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #19)
&gt; (In reply to Darin Adler from comment #18)
&gt; &gt; I agree that using a boolean here is not good style and I am unhappy to see
&gt; &gt; this pattern repeated from WTF::String rather than fixing it in both places.
&gt; 
&gt; Oh, I see, we used a named argument instead of a boolean -- better. However,
&gt; I think we should simply have used a new function named
&gt; splitAllowingEmptyEntries.

I&apos;d be happy to address this for String and StringView alike in a new ticket -- would that be okay?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1444739</commentid>
    <comment_count>21</comment_count>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2018-07-24 10:35:59 -0700</bug_when>
    <thetext>(In reply to Ross Kirsling from comment #20)
&gt; I&apos;d be happy to address this for String and StringView alike in a new ticket
&gt; -- would that be okay?

Created https://bugs.webkit.org/show_bug.cgi?id=187963 for this purpose.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>345461</attachid>
            <date>2018-07-20 10:54:34 -0700</date>
            <delta_ts>2018-07-20 13:36:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-187864-20180720105433.patch</filename>
            <type>text/plain</type>
            <size>7596</size>
            <attacher name="Ross Kirsling">ross.kirsling</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM0MDQxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDU1M2Y3NGU2M2EyYzE3NDU5ZWY3YTEy
NzY1ZTAxZWYxMDgwMzI4Y2MuLjUxOGQzYjAwNGQyYmM0MWFlZjkxM2FmNzRjMzBkYWNhN2Y5ZDA4
ZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTgtMDctMjAgIFJvc3MgS2lyc2xpbmcgIDxyb3Nz
LmtpcnNsaW5nQHNvbnkuY29tPgorCisgICAgICAgIFdURjo6U3RyaW5nVmlldzo6c3BsaXQgc2hv
dWxkIGhhdmUgYW4gYWxsb3dFbXB0eUVudHJpZXMgZmxhZworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg3ODY0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3dGYvdGV4dC9TdHJpbmdWaWV3LmNwcDoKKyAg
ICAgICAgKFdURjo6U3RyaW5nVmlldzo6U3BsaXRSZXN1bHQ6Okl0ZXJhdG9yOjpmaW5kTmV4dFN1
YnN0cmluZyk6CisgICAgICAgIChXVEY6OlN0cmluZ1ZpZXc6OlNwbGl0UmVzdWx0OjpJdGVyYXRv
cjo6b3BlcmF0b3IrKyk6CisgICAgICAgICogd3RmL3RleHQvU3RyaW5nVmlldy5oOgorICAgICAg
ICAoV1RGOjpTdHJpbmdWaWV3OjpzcGxpdCBjb25zdCk6CisgICAgICAgIChXVEY6OlN0cmluZ1Zp
ZXc6OlNwbGl0UmVzdWx0OjpTcGxpdFJlc3VsdCk6CisgICAgICAgIChXVEY6OlN0cmluZ1ZpZXc6
OlNwbGl0UmVzdWx0OjpJdGVyYXRvcjo6b3BlcmF0b3I9PSBjb25zdCk6CisgICAgICAgIFdlIGNh
bid0IG1pbWljIFN0cmluZzo6c3BsaXQgY29tcGxldGVseSwgYmVjYXVzZSB0aGlzIG9uZSdzIGl0
ZXJhdG9yLWJhc2VkIC0tCisgICAgICAgIGFjaGlldmUgZGVzaXJlZCBiZWhhdmlvciBieSBhZGRp
bmcgbV9hbGxvd0VtcHR5RW50cmllcyB0byBTcGxpdFJlc3VsdCBhbmQgbV9pc0RvbmUgdG8gaXRz
IEl0ZXJhdG9yLgorICAgICAgICAoVGhlIGxhdHRlciBrZWVwcyB1cyBmcm9tIGhpdHRpbmcgYmVn
aW4oKSA9PSBlbmQoKSBwcmVtYXR1cmVseSBvbiBhIGZpbmFsIGVtcHR5IGVudHJ5LikKKwogMjAx
OC0wNy0xOCAgTWljaGFlbCBDYXRhbnphcm8gIDxtY2F0YW56YXJvQGlnYWxpYS5jb20+CiAKICAg
ICAgICAgU3dpdGNoIENNYWtlIHBvcnRzIGJhY2sgdG8gQysrIDE0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL3d0Zi90ZXh0L1N0cmluZ1ZpZXcuY3BwIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJp
bmdWaWV3LmNwcAppbmRleCBkMWZkMjgzZmRkMjVjZTNjNDQyYjdmNTFmZjk0MmM5MWQwNDhjYjIy
Li4wYjdmYjU0MDhmNWZkMjQzYzdjYjU5MmYyMjkzNWU4YzRiMjFmMWRhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ1ZpZXcuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL3Rl
eHQvU3RyaW5nVmlldy5jcHAKQEAgLTEwNSwxMiArMTA1LDE0IEBAIHNpemVfdCBTdHJpbmdWaWV3
OjpmaW5kKFN0cmluZ1ZpZXcgbWF0Y2hTdHJpbmcsIHVuc2lnbmVkIHN0YXJ0KSBjb25zdAogdm9p
ZCBTdHJpbmdWaWV3OjpTcGxpdFJlc3VsdDo6SXRlcmF0b3I6OmZpbmROZXh0U3Vic3RyaW5nKCkK
IHsKICAgICBmb3IgKHNpemVfdCBzZXBhcmF0b3JQb3NpdGlvbjsgKHNlcGFyYXRvclBvc2l0aW9u
ID0gbV9yZXN1bHQubV9zdHJpbmcuZmluZChtX3Jlc3VsdC5tX3NlcGFyYXRvciwgbV9wb3NpdGlv
bikpICE9IG5vdEZvdW5kOyArK21fcG9zaXRpb24pIHsKLSAgICAgICAgaWYgKHNlcGFyYXRvclBv
c2l0aW9uID4gbV9wb3NpdGlvbikgeworICAgICAgICBpZiAobV9yZXN1bHQubV9hbGxvd0VtcHR5
RW50cmllcyB8fCBzZXBhcmF0b3JQb3NpdGlvbiA+IG1fcG9zaXRpb24pIHsKICAgICAgICAgICAg
IG1fbGVuZ3RoID0gc2VwYXJhdG9yUG9zaXRpb24gLSBtX3Bvc2l0aW9uOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CiAgICAgfQogICAgIG1fbGVuZ3RoID0gbV9yZXN1bHQubV9zdHJp
bmcubGVuZ3RoKCkgLSBtX3Bvc2l0aW9uOworICAgIGlmICghbV9sZW5ndGggJiYgIW1fcmVzdWx0
Lm1fYWxsb3dFbXB0eUVudHJpZXMpCisgICAgICAgIG1faXNEb25lID0gdHJ1ZTsKIH0KIAogYXV0
byBTdHJpbmdWaWV3OjpTcGxpdFJlc3VsdDo6SXRlcmF0b3I6Om9wZXJhdG9yKysoKSAtPiBJdGVy
YXRvciYKQEAgLTEyMCw3ICsxMjIsOCBAQCBhdXRvIFN0cmluZ1ZpZXc6OlNwbGl0UmVzdWx0OjpJ
dGVyYXRvcjo6b3BlcmF0b3IrKygpIC0+IEl0ZXJhdG9yJgogICAgIGlmIChtX3Bvc2l0aW9uIDwg
bV9yZXN1bHQubV9zdHJpbmcubGVuZ3RoKCkpIHsKICAgICAgICAgKyttX3Bvc2l0aW9uOwogICAg
ICAgICBmaW5kTmV4dFN1YnN0cmluZygpOwotICAgIH0KKyAgICB9IGVsc2UgaWYgKCFtX2lzRG9u
ZSkKKyAgICAgICAgbV9pc0RvbmUgPSB0cnVlOwogICAgIHJldHVybiAqdGhpczsKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdWaWV3LmggYi9Tb3VyY2UvV1RGL3d0
Zi90ZXh0L1N0cmluZ1ZpZXcuaAppbmRleCBiOGQ4MDhiMjk0YTYxZDFkZmZlMzkyY2YxZWQ1ODRm
ZGIxNmY2MWM3Li43YTExMTJmNzcxYmEwODY1OTY1NGUzOTQ1MjYzNzMwMmZjMzA3Y2I2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ1ZpZXcuaAorKysgYi9Tb3VyY2UvV1RG
L3d0Zi90ZXh0L1N0cmluZ1ZpZXcuaApAQCAtMTI1LDcgKzEyNSw3IEBAIHB1YmxpYzoKICAgICBT
dHJpbmdWaWV3IHN0cmlwTGVhZGluZ0FuZFRyYWlsaW5nTWF0Y2hlZENoYXJhY3RlcnMoY29uc3Qg
TWF0Y2hlZENoYXJhY3RlclByZWRpY2F0ZSYpOwogCiAgICAgY2xhc3MgU3BsaXRSZXN1bHQ7Ci0g
ICAgU3BsaXRSZXN1bHQgc3BsaXQoVUNoYXIpIGNvbnN0OworICAgIFNwbGl0UmVzdWx0IHNwbGl0
KFVDaGFyLCBib29sIGFsbG93RW1wdHlFbnRyaWVzID0gZmFsc2UpIGNvbnN0OwogCiAgICAgc2l6
ZV90IGZpbmQoVUNoYXIsIHVuc2lnbmVkIHN0YXJ0ID0gMCkgY29uc3Q7CiAgICAgc2l6ZV90IGZp
bmQoQ29kZVVuaXRNYXRjaEZ1bmN0aW9uLCB1bnNpZ25lZCBzdGFydCA9IDApIGNvbnN0OwpAQCAt
NjM1LDcgKzYzNSw3IEBAIGlubGluZSBib29sIGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoU3RyaW5n
VmlldyBhLCBjb25zdCBjaGFyKiBiKQogCiBjbGFzcyBTdHJpbmdWaWV3OjpTcGxpdFJlc3VsdCB7
CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgU3BsaXRSZXN1bHQoU3RyaW5nVmlldywgVUNoYXIgc2Vw
YXJhdG9yKTsKKyAgICBTcGxpdFJlc3VsdChTdHJpbmdWaWV3LCBVQ2hhciBzZXBhcmF0b3IsIGJv
b2wgYWxsb3dFbXB0eUVudHJpZXMpOwogCiAgICAgY2xhc3MgSXRlcmF0b3I7CiAgICAgSXRlcmF0
b3IgYmVnaW4oKSBjb25zdDsKQEAgLTY0NCw2ICs2NDQsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgog
ICAgIFN0cmluZ1ZpZXcgbV9zdHJpbmc7CiAgICAgVUNoYXIgbV9zZXBhcmF0b3I7CisgICAgYm9v
bCBtX2FsbG93RW1wdHlFbnRyaWVzOwogfTsKIAogY2xhc3MgU3RyaW5nVmlldzo6R3JhcGhlbWVD
bHVzdGVycyB7CkBAIC03MDMsNiArNzA0LDcgQEAgcHJpdmF0ZToKICAgICBjb25zdCBTcGxpdFJl
c3VsdCYgbV9yZXN1bHQ7CiAgICAgdW5zaWduZWQgbV9wb3NpdGlvbiB7IDAgfTsKICAgICB1bnNp
Z25lZCBtX2xlbmd0aDsKKyAgICBib29sIG1faXNEb25lOwogfTsKIAogY2xhc3MgU3RyaW5nVmll
dzo6R3JhcGhlbWVDbHVzdGVyczo6SXRlcmF0b3IgewpAQCAtODk1LDE0ICs4OTcsMTUgQEAgaW5s
aW5lIGF1dG8gU3RyaW5nVmlldzo6Q29kZVVuaXRzOjplbmQoKSBjb25zdCAtPiBJdGVyYXRvcgog
ICAgIHJldHVybiBJdGVyYXRvcihtX3N0cmluZ1ZpZXcsIG1fc3RyaW5nVmlldy5sZW5ndGgoKSk7
CiB9CiAKLWlubGluZSBhdXRvIFN0cmluZ1ZpZXc6OnNwbGl0KFVDaGFyIHNlcGFyYXRvcikgY29u
c3QgLT4gU3BsaXRSZXN1bHQKK2lubGluZSBhdXRvIFN0cmluZ1ZpZXc6OnNwbGl0KFVDaGFyIHNl
cGFyYXRvciwgYm9vbCBhbGxvd0VtcHR5RW50cmllcykgY29uc3QgLT4gU3BsaXRSZXN1bHQKIHsK
LSAgICByZXR1cm4gU3BsaXRSZXN1bHQgeyAqdGhpcywgc2VwYXJhdG9yIH07CisgICAgcmV0dXJu
IFNwbGl0UmVzdWx0IHsgKnRoaXMsIHNlcGFyYXRvciwgYWxsb3dFbXB0eUVudHJpZXMgfTsKIH0K
IAotaW5saW5lIFN0cmluZ1ZpZXc6OlNwbGl0UmVzdWx0OjpTcGxpdFJlc3VsdChTdHJpbmdWaWV3
IHN0cmluZ1ZpZXcsIFVDaGFyIHNlcGFyYXRvcikKK2lubGluZSBTdHJpbmdWaWV3OjpTcGxpdFJl
c3VsdDo6U3BsaXRSZXN1bHQoU3RyaW5nVmlldyBzdHJpbmdWaWV3LCBVQ2hhciBzZXBhcmF0b3Is
IGJvb2wgYWxsb3dFbXB0eUVudHJpZXMpCiAgICAgOiBtX3N0cmluZyB7IHN0cmluZ1ZpZXcgfQog
ICAgICwgbV9zZXBhcmF0b3IgeyBzZXBhcmF0b3IgfQorICAgICwgbV9hbGxvd0VtcHR5RW50cmll
cyB7IGFsbG93RW1wdHlFbnRyaWVzIH0KIHsKIH0KIApAQCAtOTE4LDYgKzkyMSw3IEBAIGlubGlu
ZSBhdXRvIFN0cmluZ1ZpZXc6OlNwbGl0UmVzdWx0OjplbmQoKSBjb25zdCAtPiBJdGVyYXRvcgog
CiBpbmxpbmUgU3RyaW5nVmlldzo6U3BsaXRSZXN1bHQ6Okl0ZXJhdG9yOjpJdGVyYXRvcihjb25z
dCBTcGxpdFJlc3VsdCYgcmVzdWx0KQogICAgIDogbV9yZXN1bHQgeyByZXN1bHQgfQorICAgICwg
bV9pc0RvbmUgeyByZXN1bHQubV9zdHJpbmcuaXNFbXB0eSgpICYmICFyZXN1bHQubV9hbGxvd0Vt
cHR5RW50cmllcyB9CiB7CiAgICAgZmluZE5leHRTdWJzdHJpbmcoKTsKIH0KQEAgLTkyNSw2ICs5
MjksNyBAQCBpbmxpbmUgU3RyaW5nVmlldzo6U3BsaXRSZXN1bHQ6Okl0ZXJhdG9yOjpJdGVyYXRv
cihjb25zdCBTcGxpdFJlc3VsdCYgcmVzdWx0KQogaW5saW5lIFN0cmluZ1ZpZXc6OlNwbGl0UmVz
dWx0OjpJdGVyYXRvcjo6SXRlcmF0b3IoY29uc3QgU3BsaXRSZXN1bHQmIHJlc3VsdCwgUG9zaXRp
b25UYWcpCiAgICAgOiBtX3Jlc3VsdCB7IHJlc3VsdCB9CiAgICAgLCBtX3Bvc2l0aW9uIHsgcmVz
dWx0Lm1fc3RyaW5nLmxlbmd0aCgpIH0KKyAgICAsIG1faXNEb25lIHsgdHJ1ZSB9CiB7CiB9CiAK
QEAgLTkzNyw3ICs5NDIsNyBAQCBpbmxpbmUgU3RyaW5nVmlldyBTdHJpbmdWaWV3OjpTcGxpdFJl
c3VsdDo6SXRlcmF0b3I6Om9wZXJhdG9yKigpIGNvbnN0CiBpbmxpbmUgYm9vbCBTdHJpbmdWaWV3
OjpTcGxpdFJlc3VsdDo6SXRlcmF0b3I6Om9wZXJhdG9yPT0oY29uc3QgSXRlcmF0b3ImIG90aGVy
KSBjb25zdAogewogICAgIEFTU0VSVCgmbV9yZXN1bHQgPT0gJm90aGVyLm1fcmVzdWx0KTsKLSAg
ICByZXR1cm4gbV9wb3NpdGlvbiA9PSBvdGhlci5tX3Bvc2l0aW9uOworICAgIHJldHVybiBtX3Bv
c2l0aW9uID09IG90aGVyLm1fcG9zaXRpb24gJiYgbV9pc0RvbmUgPT0gb3RoZXIubV9pc0RvbmU7
CiB9CiAKIGlubGluZSBib29sIFN0cmluZ1ZpZXc6OlNwbGl0UmVzdWx0OjpJdGVyYXRvcjo6b3Bl
cmF0b3IhPShjb25zdCBJdGVyYXRvciYgb3RoZXIpIGNvbnN0CmRpZmYgLS1naXQgYS9Ub29scy9D
aGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNDgwODE3ZjM2ODk1NGYwZTBiMWFlN2M2
NjUxZThiZGE0ZmE5MTAzOC4uODVjN2E1ZjAyMzQxOTk1YTJmMzc3NzgwMjcwZWVlZTBiZjY3YTUy
OCAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDEyIEBACisyMDE4LTA3LTIwICBSb3NzIEtpcnNsaW5nICA8cm9zcy5raXJzbGluZ0Bz
b255LmNvbT4KKworICAgICAgICBXVEY6OlN0cmluZ1ZpZXc6OnNwbGl0IHNob3VsZCBoYXZlIGFu
IGFsbG93RW1wdHlFbnRyaWVzIGZsYWcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE4Nzg2NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvU3RyaW5nVmlldy5jcHA6
IEFkZCB0ZXN0LgorCiAyMDE4LTA3LTIwICBDb21taXQgUXVldWUgIDxjb21taXQtcXVldWVAd2Vi
a2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMjMzOTQzLCByMjMz
OTg4LCByMjM0MDA0LCBhbmQKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V1RGL1N0cmluZ1ZpZXcuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvU3RyaW5n
Vmlldy5jcHAKaW5kZXggZmRhOGZiY2ZlMmMyMGRhMTJiYTZhMGE4ZWJkMDdlMDM2MDliYmVlNC4u
MjEwNmYyYjBlNzY3OTZlODYyMmQ2YTFmMzY2NGQ5ZDFlMzJiZGUyNyAxMDA2NDQKLS0tIGEvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvU3RyaW5nVmlldy5jcHAKKysrIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XVEYvU3RyaW5nVmlldy5jcHAKQEAgLTI4OSwxMyArMjg5LDIwIEBA
IFRFU1QoV1RGLCBTdHJpbmdWaWV3U3BsaXRCYXNpYykKIFRFU1QoV1RGLCBTdHJpbmdWaWV3U3Bs
aXRXaXRoQ29uc2VjdXRpdmVTZXBhcmF0b3JzKQogewogICAgIFN0cmluZyByZWZlcmVuY2VIb2xk
ZXI7Ci0gICAgU3RyaW5nVmlldyBhID0gc3RyaW5nVmlld0Zyb21VVEY4KHJlZmVyZW5jZUhvbGRl
ciwgIlRoaXMgICAgIGlzICBhICAgICAgIHNlbnRlbmNlLiIpOworICAgIFN0cmluZ1ZpZXcgYSA9
IHN0cmluZ1ZpZXdGcm9tVVRGOChyZWZlcmVuY2VIb2xkZXIsICIgVGhpcyAgICAgaXMgIGEgICAg
ICAgc2VudGVuY2UuICIpOwogCiAgICAgVmVjdG9yPFN0cmluZz4gYWN0dWFsID0gdmVjdG9yRnJv
bVNwbGl0UmVzdWx0KGEuc3BsaXQoJyAnKSk7CiAgICAgVmVjdG9yPFN0cmluZz4gZXhwZWN0ZWQo
eyAiVGhpcyIsICJpcyIsICJhIiwgInNlbnRlbmNlLiIgfSk7CiAgICAgQVNTRVJUX0VRKGV4cGVj
dGVkLnNpemUoKSwgYWN0dWFsLnNpemUoKSk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBh
Y3R1YWwuc2l6ZSgpOyArK2kpCiAgICAgICAgIEVYUEVDVF9TVFJFUShleHBlY3RlZFtpXS51dGY4
KCkuZGF0YSgpLCBhY3R1YWxbaV0udXRmOCgpLmRhdGEoKSkgPDwgIlZlY3RvcnMgZGlmZmVyIGF0
IGluZGV4ICIgPDwgaTsKKworICAgIGF1dG8gYWxsb3dFbXB0eUVudHJpZXMgPSB0cnVlOworICAg
IGFjdHVhbCA9IHZlY3RvckZyb21TcGxpdFJlc3VsdChhLnNwbGl0KCcgJywgYWxsb3dFbXB0eUVu
dHJpZXMpKTsKKyAgICBleHBlY3RlZCA9IHsgIiIsICJUaGlzIiwgIiIsICIiLCAiIiwgIiIsICJp
cyIsICIiLCAiYSIsICIiLCAiIiwgIiIsICIiLCAiIiwgIiIsICJzZW50ZW5jZS4iLCAiIiB9Owor
ICAgIEFTU0VSVF9FUShleHBlY3RlZC5zaXplKCksIGFjdHVhbC5zaXplKCkpOworICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgYWN0dWFsLnNpemUoKTsgKytpKQorICAgICAgICBFWFBFQ1RfU1RS
RVEoZXhwZWN0ZWRbaV0udXRmOCgpLmRhdGEoKSwgYWN0dWFsW2ldLnV0ZjgoKS5kYXRhKCkpIDw8
ICJWZWN0b3JzIGRpZmZlciBhdCBpbmRleCAiIDw8IGk7CiB9CiAKIFRFU1QoV1RGLCBTdHJpbmdW
aWV3RXF1YWxCYXNpYykK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>345478</attachid>
            <date>2018-07-20 13:36:53 -0700</date>
            <delta_ts>2018-07-20 21:56:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-187864-20180720133652.patch</filename>
            <type>text/plain</type>
            <size>7678</size>
            <attacher name="Ross Kirsling">ross.kirsling</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM0MDQxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDU1M2Y3NGU2M2EyYzE3NDU5ZWY3YTEy
NzY1ZTAxZWYxMDgwMzI4Y2MuLjUxOGQzYjAwNGQyYmM0MWFlZjkxM2FmNzRjMzBkYWNhN2Y5ZDA4
ZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTgtMDctMjAgIFJvc3MgS2lyc2xpbmcgIDxyb3Nz
LmtpcnNsaW5nQHNvbnkuY29tPgorCisgICAgICAgIFdURjo6U3RyaW5nVmlldzo6c3BsaXQgc2hv
dWxkIGhhdmUgYW4gYWxsb3dFbXB0eUVudHJpZXMgZmxhZworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg3ODY0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3dGYvdGV4dC9TdHJpbmdWaWV3LmNwcDoKKyAg
ICAgICAgKFdURjo6U3RyaW5nVmlldzo6U3BsaXRSZXN1bHQ6Okl0ZXJhdG9yOjpmaW5kTmV4dFN1
YnN0cmluZyk6CisgICAgICAgIChXVEY6OlN0cmluZ1ZpZXc6OlNwbGl0UmVzdWx0OjpJdGVyYXRv
cjo6b3BlcmF0b3IrKyk6CisgICAgICAgICogd3RmL3RleHQvU3RyaW5nVmlldy5oOgorICAgICAg
ICAoV1RGOjpTdHJpbmdWaWV3OjpzcGxpdCBjb25zdCk6CisgICAgICAgIChXVEY6OlN0cmluZ1Zp
ZXc6OlNwbGl0UmVzdWx0OjpTcGxpdFJlc3VsdCk6CisgICAgICAgIChXVEY6OlN0cmluZ1ZpZXc6
OlNwbGl0UmVzdWx0OjpJdGVyYXRvcjo6b3BlcmF0b3I9PSBjb25zdCk6CisgICAgICAgIFdlIGNh
bid0IG1pbWljIFN0cmluZzo6c3BsaXQgY29tcGxldGVseSwgYmVjYXVzZSB0aGlzIG9uZSdzIGl0
ZXJhdG9yLWJhc2VkIC0tCisgICAgICAgIGFjaGlldmUgZGVzaXJlZCBiZWhhdmlvciBieSBhZGRp
bmcgbV9hbGxvd0VtcHR5RW50cmllcyB0byBTcGxpdFJlc3VsdCBhbmQgbV9pc0RvbmUgdG8gaXRz
IEl0ZXJhdG9yLgorICAgICAgICAoVGhlIGxhdHRlciBrZWVwcyB1cyBmcm9tIGhpdHRpbmcgYmVn
aW4oKSA9PSBlbmQoKSBwcmVtYXR1cmVseSBvbiBhIGZpbmFsIGVtcHR5IGVudHJ5LikKKwogMjAx
OC0wNy0xOCAgTWljaGFlbCBDYXRhbnphcm8gIDxtY2F0YW56YXJvQGlnYWxpYS5jb20+CiAKICAg
ICAgICAgU3dpdGNoIENNYWtlIHBvcnRzIGJhY2sgdG8gQysrIDE0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL3d0Zi90ZXh0L1N0cmluZ1ZpZXcuY3BwIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJp
bmdWaWV3LmNwcAppbmRleCBkMWZkMjgzZmRkMjVjZTNjNDQyYjdmNTFmZjk0MmM5MWQwNDhjYjIy
Li4wYjdmYjU0MDhmNWZkMjQzYzdjYjU5MmYyMjkzNWU4YzRiMjFmMWRhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ1ZpZXcuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL3Rl
eHQvU3RyaW5nVmlldy5jcHAKQEAgLTEwNSwxMiArMTA1LDE0IEBAIHNpemVfdCBTdHJpbmdWaWV3
OjpmaW5kKFN0cmluZ1ZpZXcgbWF0Y2hTdHJpbmcsIHVuc2lnbmVkIHN0YXJ0KSBjb25zdAogdm9p
ZCBTdHJpbmdWaWV3OjpTcGxpdFJlc3VsdDo6SXRlcmF0b3I6OmZpbmROZXh0U3Vic3RyaW5nKCkK
IHsKICAgICBmb3IgKHNpemVfdCBzZXBhcmF0b3JQb3NpdGlvbjsgKHNlcGFyYXRvclBvc2l0aW9u
ID0gbV9yZXN1bHQubV9zdHJpbmcuZmluZChtX3Jlc3VsdC5tX3NlcGFyYXRvciwgbV9wb3NpdGlv
bikpICE9IG5vdEZvdW5kOyArK21fcG9zaXRpb24pIHsKLSAgICAgICAgaWYgKHNlcGFyYXRvclBv
c2l0aW9uID4gbV9wb3NpdGlvbikgeworICAgICAgICBpZiAobV9yZXN1bHQubV9hbGxvd0VtcHR5
RW50cmllcyB8fCBzZXBhcmF0b3JQb3NpdGlvbiA+IG1fcG9zaXRpb24pIHsKICAgICAgICAgICAg
IG1fbGVuZ3RoID0gc2VwYXJhdG9yUG9zaXRpb24gLSBtX3Bvc2l0aW9uOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CiAgICAgfQogICAgIG1fbGVuZ3RoID0gbV9yZXN1bHQubV9zdHJp
bmcubGVuZ3RoKCkgLSBtX3Bvc2l0aW9uOworICAgIGlmICghbV9sZW5ndGggJiYgIW1fcmVzdWx0
Lm1fYWxsb3dFbXB0eUVudHJpZXMpCisgICAgICAgIG1faXNEb25lID0gdHJ1ZTsKIH0KIAogYXV0
byBTdHJpbmdWaWV3OjpTcGxpdFJlc3VsdDo6SXRlcmF0b3I6Om9wZXJhdG9yKysoKSAtPiBJdGVy
YXRvciYKQEAgLTEyMCw3ICsxMjIsOCBAQCBhdXRvIFN0cmluZ1ZpZXc6OlNwbGl0UmVzdWx0OjpJ
dGVyYXRvcjo6b3BlcmF0b3IrKygpIC0+IEl0ZXJhdG9yJgogICAgIGlmIChtX3Bvc2l0aW9uIDwg
bV9yZXN1bHQubV9zdHJpbmcubGVuZ3RoKCkpIHsKICAgICAgICAgKyttX3Bvc2l0aW9uOwogICAg
ICAgICBmaW5kTmV4dFN1YnN0cmluZygpOwotICAgIH0KKyAgICB9IGVsc2UgaWYgKCFtX2lzRG9u
ZSkKKyAgICAgICAgbV9pc0RvbmUgPSB0cnVlOwogICAgIHJldHVybiAqdGhpczsKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdWaWV3LmggYi9Tb3VyY2UvV1RGL3d0
Zi90ZXh0L1N0cmluZ1ZpZXcuaAppbmRleCBiOGQ4MDhiMjk0YTYxZDFkZmZlMzkyY2YxZWQ1ODRm
ZGIxNmY2MWM3Li5jYmY1N2U2YjhmOGE2NzhiODY2ZGE3NTY2NmMzYzE0M2QxYzRmYTdmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ1ZpZXcuaAorKysgYi9Tb3VyY2UvV1RG
L3d0Zi90ZXh0L1N0cmluZ1ZpZXcuaApAQCAtMTI0LDggKzEyNCwxMSBAQCBwdWJsaWM6CiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgTWF0Y2hlZENoYXJhY3RlclByZWRpY2F0ZT4KICAgICBTdHJpbmdW
aWV3IHN0cmlwTGVhZGluZ0FuZFRyYWlsaW5nTWF0Y2hlZENoYXJhY3RlcnMoY29uc3QgTWF0Y2hl
ZENoYXJhY3RlclByZWRpY2F0ZSYpOwogCisgICAgZW51bSBBbGxvd0VtcHR5U3BsaXRSZXN1bHRz
VGFnIHsgQWxsb3dFbXB0eVNwbGl0UmVzdWx0cyB9OworCiAgICAgY2xhc3MgU3BsaXRSZXN1bHQ7
CiAgICAgU3BsaXRSZXN1bHQgc3BsaXQoVUNoYXIpIGNvbnN0OworICAgIFNwbGl0UmVzdWx0IHNw
bGl0KFVDaGFyLCBBbGxvd0VtcHR5U3BsaXRSZXN1bHRzVGFnKSBjb25zdDsKIAogICAgIHNpemVf
dCBmaW5kKFVDaGFyLCB1bnNpZ25lZCBzdGFydCA9IDApIGNvbnN0OwogICAgIHNpemVfdCBmaW5k
KENvZGVVbml0TWF0Y2hGdW5jdGlvbiwgdW5zaWduZWQgc3RhcnQgPSAwKSBjb25zdDsKQEAgLTYz
NSw3ICs2MzgsNyBAQCBpbmxpbmUgYm9vbCBlcXVhbElnbm9yaW5nQVNDSUlDYXNlKFN0cmluZ1Zp
ZXcgYSwgY29uc3QgY2hhciogYikKIAogY2xhc3MgU3RyaW5nVmlldzo6U3BsaXRSZXN1bHQgewog
cHVibGljOgotICAgIGV4cGxpY2l0IFNwbGl0UmVzdWx0KFN0cmluZ1ZpZXcsIFVDaGFyIHNlcGFy
YXRvcik7CisgICAgU3BsaXRSZXN1bHQoU3RyaW5nVmlldywgVUNoYXIgc2VwYXJhdG9yLCBib29s
IGFsbG93RW1wdHlFbnRyaWVzKTsKIAogICAgIGNsYXNzIEl0ZXJhdG9yOwogICAgIEl0ZXJhdG9y
IGJlZ2luKCkgY29uc3Q7CkBAIC02NDQsNiArNjQ3LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAg
ICBTdHJpbmdWaWV3IG1fc3RyaW5nOwogICAgIFVDaGFyIG1fc2VwYXJhdG9yOworICAgIGJvb2wg
bV9hbGxvd0VtcHR5RW50cmllczsKIH07CiAKIGNsYXNzIFN0cmluZ1ZpZXc6OkdyYXBoZW1lQ2x1
c3RlcnMgewpAQCAtNzAzLDYgKzcwNyw3IEBAIHByaXZhdGU6CiAgICAgY29uc3QgU3BsaXRSZXN1
bHQmIG1fcmVzdWx0OwogICAgIHVuc2lnbmVkIG1fcG9zaXRpb24geyAwIH07CiAgICAgdW5zaWdu
ZWQgbV9sZW5ndGg7CisgICAgYm9vbCBtX2lzRG9uZTsKIH07CiAKIGNsYXNzIFN0cmluZ1ZpZXc6
OkdyYXBoZW1lQ2x1c3RlcnM6Okl0ZXJhdG9yIHsKQEAgLTg5NywxMiArOTAyLDE4IEBAIGlubGlu
ZSBhdXRvIFN0cmluZ1ZpZXc6OkNvZGVVbml0czo6ZW5kKCkgY29uc3QgLT4gSXRlcmF0b3IKIAog
aW5saW5lIGF1dG8gU3RyaW5nVmlldzo6c3BsaXQoVUNoYXIgc2VwYXJhdG9yKSBjb25zdCAtPiBT
cGxpdFJlc3VsdAogewotICAgIHJldHVybiBTcGxpdFJlc3VsdCB7ICp0aGlzLCBzZXBhcmF0b3Ig
fTsKKyAgICByZXR1cm4gU3BsaXRSZXN1bHQgeyAqdGhpcywgc2VwYXJhdG9yLCBmYWxzZSB9Owor
fQorCitpbmxpbmUgYXV0byBTdHJpbmdWaWV3OjpzcGxpdChVQ2hhciBzZXBhcmF0b3IsIEFsbG93
RW1wdHlTcGxpdFJlc3VsdHNUYWcpIGNvbnN0IC0+IFNwbGl0UmVzdWx0Cit7CisgICAgcmV0dXJu
IFNwbGl0UmVzdWx0IHsgKnRoaXMsIHNlcGFyYXRvciwgdHJ1ZSB9OwogfQogCi1pbmxpbmUgU3Ry
aW5nVmlldzo6U3BsaXRSZXN1bHQ6OlNwbGl0UmVzdWx0KFN0cmluZ1ZpZXcgc3RyaW5nVmlldywg
VUNoYXIgc2VwYXJhdG9yKQoraW5saW5lIFN0cmluZ1ZpZXc6OlNwbGl0UmVzdWx0OjpTcGxpdFJl
c3VsdChTdHJpbmdWaWV3IHN0cmluZ1ZpZXcsIFVDaGFyIHNlcGFyYXRvciwgYm9vbCBhbGxvd0Vt
cHR5RW50cmllcykKICAgICA6IG1fc3RyaW5nIHsgc3RyaW5nVmlldyB9CiAgICAgLCBtX3NlcGFy
YXRvciB7IHNlcGFyYXRvciB9CisgICAgLCBtX2FsbG93RW1wdHlFbnRyaWVzIHsgYWxsb3dFbXB0
eUVudHJpZXMgfQogewogfQogCkBAIC05MTgsNiArOTI5LDcgQEAgaW5saW5lIGF1dG8gU3RyaW5n
Vmlldzo6U3BsaXRSZXN1bHQ6OmVuZCgpIGNvbnN0IC0+IEl0ZXJhdG9yCiAKIGlubGluZSBTdHJp
bmdWaWV3OjpTcGxpdFJlc3VsdDo6SXRlcmF0b3I6Okl0ZXJhdG9yKGNvbnN0IFNwbGl0UmVzdWx0
JiByZXN1bHQpCiAgICAgOiBtX3Jlc3VsdCB7IHJlc3VsdCB9CisgICAgLCBtX2lzRG9uZSB7IHJl
c3VsdC5tX3N0cmluZy5pc0VtcHR5KCkgJiYgIXJlc3VsdC5tX2FsbG93RW1wdHlFbnRyaWVzIH0K
IHsKICAgICBmaW5kTmV4dFN1YnN0cmluZygpOwogfQpAQCAtOTI1LDYgKzkzNyw3IEBAIGlubGlu
ZSBTdHJpbmdWaWV3OjpTcGxpdFJlc3VsdDo6SXRlcmF0b3I6Okl0ZXJhdG9yKGNvbnN0IFNwbGl0
UmVzdWx0JiByZXN1bHQpCiBpbmxpbmUgU3RyaW5nVmlldzo6U3BsaXRSZXN1bHQ6Okl0ZXJhdG9y
OjpJdGVyYXRvcihjb25zdCBTcGxpdFJlc3VsdCYgcmVzdWx0LCBQb3NpdGlvblRhZykKICAgICA6
IG1fcmVzdWx0IHsgcmVzdWx0IH0KICAgICAsIG1fcG9zaXRpb24geyByZXN1bHQubV9zdHJpbmcu
bGVuZ3RoKCkgfQorICAgICwgbV9pc0RvbmUgeyB0cnVlIH0KIHsKIH0KIApAQCAtOTM3LDcgKzk1
MCw3IEBAIGlubGluZSBTdHJpbmdWaWV3IFN0cmluZ1ZpZXc6OlNwbGl0UmVzdWx0OjpJdGVyYXRv
cjo6b3BlcmF0b3IqKCkgY29uc3QKIGlubGluZSBib29sIFN0cmluZ1ZpZXc6OlNwbGl0UmVzdWx0
OjpJdGVyYXRvcjo6b3BlcmF0b3I9PShjb25zdCBJdGVyYXRvciYgb3RoZXIpIGNvbnN0CiB7CiAg
ICAgQVNTRVJUKCZtX3Jlc3VsdCA9PSAmb3RoZXIubV9yZXN1bHQpOwotICAgIHJldHVybiBtX3Bv
c2l0aW9uID09IG90aGVyLm1fcG9zaXRpb247CisgICAgcmV0dXJuIG1fcG9zaXRpb24gPT0gb3Ro
ZXIubV9wb3NpdGlvbiAmJiBtX2lzRG9uZSA9PSBvdGhlci5tX2lzRG9uZTsKIH0KIAogaW5saW5l
IGJvb2wgU3RyaW5nVmlldzo6U3BsaXRSZXN1bHQ6Okl0ZXJhdG9yOjpvcGVyYXRvciE9KGNvbnN0
IEl0ZXJhdG9yJiBvdGhlcikgY29uc3QKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rv
b2xzL0NoYW5nZUxvZwppbmRleCA0ODA4MTdmMzY4OTU0ZjBlMGIxYWU3YzY2NTFlOGJkYTRmYTkx
MDM4Li44NWM3YTVmMDIzNDE5OTVhMmYzNzc3ODAyNzBlZWVlMGJmNjdhNTI4IDEwMDY0NAotLS0g
YS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAK
KzIwMTgtMDctMjAgIFJvc3MgS2lyc2xpbmcgIDxyb3NzLmtpcnNsaW5nQHNvbnkuY29tPgorCisg
ICAgICAgIFdURjo6U3RyaW5nVmlldzo6c3BsaXQgc2hvdWxkIGhhdmUgYW4gYWxsb3dFbXB0eUVu
dHJpZXMgZmxhZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTg3ODY0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9TdHJpbmdWaWV3LmNwcDogQWRkIHRlc3QuCisK
IDIwMTgtMDctMjAgIENvbW1pdCBRdWV1ZSAgPGNvbW1pdC1xdWV1ZUB3ZWJraXQub3JnPgogCiAg
ICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIyMzM5NDMsIHIyMzM5ODgsIHIyMzQwMDQs
IGFuZApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvU3RyaW5nVmll
dy5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9TdHJpbmdWaWV3LmNwcAppbmRl
eCBmZGE4ZmJjZmUyYzIwZGExMmJhNmEwYThlYmQwN2UwMzYwOWJiZWU0Li43NGYxNzhjOGZlMGQ0
YTM4YzQxODhiZTUwZTViNWIyNzQ0MzBhMGU3IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dURi9TdHJpbmdWaWV3LmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dURi9TdHJpbmdWaWV3LmNwcApAQCAtMjg5LDEzICsyODksMTkgQEAgVEVTVChXVEYsIFN0
cmluZ1ZpZXdTcGxpdEJhc2ljKQogVEVTVChXVEYsIFN0cmluZ1ZpZXdTcGxpdFdpdGhDb25zZWN1
dGl2ZVNlcGFyYXRvcnMpCiB7CiAgICAgU3RyaW5nIHJlZmVyZW5jZUhvbGRlcjsKLSAgICBTdHJp
bmdWaWV3IGEgPSBzdHJpbmdWaWV3RnJvbVVURjgocmVmZXJlbmNlSG9sZGVyLCAiVGhpcyAgICAg
aXMgIGEgICAgICAgc2VudGVuY2UuIik7CisgICAgU3RyaW5nVmlldyBhID0gc3RyaW5nVmlld0Zy
b21VVEY4KHJlZmVyZW5jZUhvbGRlciwgIiBUaGlzICAgICBpcyAgYSAgICAgICBzZW50ZW5jZS4g
Iik7CiAKICAgICBWZWN0b3I8U3RyaW5nPiBhY3R1YWwgPSB2ZWN0b3JGcm9tU3BsaXRSZXN1bHQo
YS5zcGxpdCgnICcpKTsKICAgICBWZWN0b3I8U3RyaW5nPiBleHBlY3RlZCh7ICJUaGlzIiwgImlz
IiwgImEiLCAic2VudGVuY2UuIiB9KTsKICAgICBBU1NFUlRfRVEoZXhwZWN0ZWQuc2l6ZSgpLCBh
Y3R1YWwuc2l6ZSgpKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFjdHVhbC5zaXplKCk7
ICsraSkKICAgICAgICAgRVhQRUNUX1NUUkVRKGV4cGVjdGVkW2ldLnV0ZjgoKS5kYXRhKCksIGFj
dHVhbFtpXS51dGY4KCkuZGF0YSgpKSA8PCAiVmVjdG9ycyBkaWZmZXIgYXQgaW5kZXggIiA8PCBp
OworCisgICAgYWN0dWFsID0gdmVjdG9yRnJvbVNwbGl0UmVzdWx0KGEuc3BsaXQoJyAnLCBTdHJp
bmdWaWV3OjpBbGxvd0VtcHR5U3BsaXRSZXN1bHRzKSk7CisgICAgZXhwZWN0ZWQgPSB7ICIiLCAi
VGhpcyIsICIiLCAiIiwgIiIsICIiLCAiaXMiLCAiIiwgImEiLCAiIiwgIiIsICIiLCAiIiwgIiIs
ICIiLCAic2VudGVuY2UuIiwgIiIgfTsKKyAgICBBU1NFUlRfRVEoZXhwZWN0ZWQuc2l6ZSgpLCBh
Y3R1YWwuc2l6ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFjdHVhbC5zaXplKCk7
ICsraSkKKyAgICAgICAgRVhQRUNUX1NUUkVRKGV4cGVjdGVkW2ldLnV0ZjgoKS5kYXRhKCksIGFj
dHVhbFtpXS51dGY4KCkuZGF0YSgpKSA8PCAiVmVjdG9ycyBkaWZmZXIgYXQgaW5kZXggIiA8PCBp
OwogfQogCiBURVNUKFdURiwgU3RyaW5nVmlld0VxdWFsQmFzaWMpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>345504</attachid>
            <date>2018-07-20 21:56:19 -0700</date>
            <delta_ts>2018-07-23 10:07:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-187864-20180720215618.patch</filename>
            <type>text/plain</type>
            <size>7674</size>
            <attacher name="Ross Kirsling">ross.kirsling</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM0MDgxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDU1M2Y3NGU2M2EyYzE3NDU5ZWY3YTEy
NzY1ZTAxZWYxMDgwMzI4Y2MuLjUxOGQzYjAwNGQyYmM0MWFlZjkxM2FmNzRjMzBkYWNhN2Y5ZDA4
ZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTgtMDctMjAgIFJvc3MgS2lyc2xpbmcgIDxyb3Nz
LmtpcnNsaW5nQHNvbnkuY29tPgorCisgICAgICAgIFdURjo6U3RyaW5nVmlldzo6c3BsaXQgc2hv
dWxkIGhhdmUgYW4gYWxsb3dFbXB0eUVudHJpZXMgZmxhZworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg3ODY0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3dGYvdGV4dC9TdHJpbmdWaWV3LmNwcDoKKyAg
ICAgICAgKFdURjo6U3RyaW5nVmlldzo6U3BsaXRSZXN1bHQ6Okl0ZXJhdG9yOjpmaW5kTmV4dFN1
YnN0cmluZyk6CisgICAgICAgIChXVEY6OlN0cmluZ1ZpZXc6OlNwbGl0UmVzdWx0OjpJdGVyYXRv
cjo6b3BlcmF0b3IrKyk6CisgICAgICAgICogd3RmL3RleHQvU3RyaW5nVmlldy5oOgorICAgICAg
ICAoV1RGOjpTdHJpbmdWaWV3OjpzcGxpdCBjb25zdCk6CisgICAgICAgIChXVEY6OlN0cmluZ1Zp
ZXc6OlNwbGl0UmVzdWx0OjpTcGxpdFJlc3VsdCk6CisgICAgICAgIChXVEY6OlN0cmluZ1ZpZXc6
OlNwbGl0UmVzdWx0OjpJdGVyYXRvcjo6b3BlcmF0b3I9PSBjb25zdCk6CisgICAgICAgIFdlIGNh
bid0IG1pbWljIFN0cmluZzo6c3BsaXQgY29tcGxldGVseSwgYmVjYXVzZSB0aGlzIG9uZSdzIGl0
ZXJhdG9yLWJhc2VkIC0tCisgICAgICAgIGFjaGlldmUgZGVzaXJlZCBiZWhhdmlvciBieSBhZGRp
bmcgbV9hbGxvd0VtcHR5RW50cmllcyB0byBTcGxpdFJlc3VsdCBhbmQgbV9pc0RvbmUgdG8gaXRz
IEl0ZXJhdG9yLgorICAgICAgICAoVGhlIGxhdHRlciBrZWVwcyB1cyBmcm9tIGhpdHRpbmcgYmVn
aW4oKSA9PSBlbmQoKSBwcmVtYXR1cmVseSBvbiBhIGZpbmFsIGVtcHR5IGVudHJ5LikKKwogMjAx
OC0wNy0xOCAgTWljaGFlbCBDYXRhbnphcm8gIDxtY2F0YW56YXJvQGlnYWxpYS5jb20+CiAKICAg
ICAgICAgU3dpdGNoIENNYWtlIHBvcnRzIGJhY2sgdG8gQysrIDE0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL3d0Zi90ZXh0L1N0cmluZ1ZpZXcuY3BwIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJp
bmdWaWV3LmNwcAppbmRleCBkMWZkMjgzZmRkMjVjZTNjNDQyYjdmNTFmZjk0MmM5MWQwNDhjYjIy
Li4wYjdmYjU0MDhmNWZkMjQzYzdjYjU5MmYyMjkzNWU4YzRiMjFmMWRhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ1ZpZXcuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL3Rl
eHQvU3RyaW5nVmlldy5jcHAKQEAgLTEwNSwxMiArMTA1LDE0IEBAIHNpemVfdCBTdHJpbmdWaWV3
OjpmaW5kKFN0cmluZ1ZpZXcgbWF0Y2hTdHJpbmcsIHVuc2lnbmVkIHN0YXJ0KSBjb25zdAogdm9p
ZCBTdHJpbmdWaWV3OjpTcGxpdFJlc3VsdDo6SXRlcmF0b3I6OmZpbmROZXh0U3Vic3RyaW5nKCkK
IHsKICAgICBmb3IgKHNpemVfdCBzZXBhcmF0b3JQb3NpdGlvbjsgKHNlcGFyYXRvclBvc2l0aW9u
ID0gbV9yZXN1bHQubV9zdHJpbmcuZmluZChtX3Jlc3VsdC5tX3NlcGFyYXRvciwgbV9wb3NpdGlv
bikpICE9IG5vdEZvdW5kOyArK21fcG9zaXRpb24pIHsKLSAgICAgICAgaWYgKHNlcGFyYXRvclBv
c2l0aW9uID4gbV9wb3NpdGlvbikgeworICAgICAgICBpZiAobV9yZXN1bHQubV9hbGxvd0VtcHR5
RW50cmllcyB8fCBzZXBhcmF0b3JQb3NpdGlvbiA+IG1fcG9zaXRpb24pIHsKICAgICAgICAgICAg
IG1fbGVuZ3RoID0gc2VwYXJhdG9yUG9zaXRpb24gLSBtX3Bvc2l0aW9uOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CiAgICAgfQogICAgIG1fbGVuZ3RoID0gbV9yZXN1bHQubV9zdHJp
bmcubGVuZ3RoKCkgLSBtX3Bvc2l0aW9uOworICAgIGlmICghbV9sZW5ndGggJiYgIW1fcmVzdWx0
Lm1fYWxsb3dFbXB0eUVudHJpZXMpCisgICAgICAgIG1faXNEb25lID0gdHJ1ZTsKIH0KIAogYXV0
byBTdHJpbmdWaWV3OjpTcGxpdFJlc3VsdDo6SXRlcmF0b3I6Om9wZXJhdG9yKysoKSAtPiBJdGVy
YXRvciYKQEAgLTEyMCw3ICsxMjIsOCBAQCBhdXRvIFN0cmluZ1ZpZXc6OlNwbGl0UmVzdWx0OjpJ
dGVyYXRvcjo6b3BlcmF0b3IrKygpIC0+IEl0ZXJhdG9yJgogICAgIGlmIChtX3Bvc2l0aW9uIDwg
bV9yZXN1bHQubV9zdHJpbmcubGVuZ3RoKCkpIHsKICAgICAgICAgKyttX3Bvc2l0aW9uOwogICAg
ICAgICBmaW5kTmV4dFN1YnN0cmluZygpOwotICAgIH0KKyAgICB9IGVsc2UgaWYgKCFtX2lzRG9u
ZSkKKyAgICAgICAgbV9pc0RvbmUgPSB0cnVlOwogICAgIHJldHVybiAqdGhpczsKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdWaWV3LmggYi9Tb3VyY2UvV1RGL3d0
Zi90ZXh0L1N0cmluZ1ZpZXcuaAppbmRleCBiOGQ4MDhiMjk0YTYxZDFkZmZlMzkyY2YxZWQ1ODRm
ZGIxNmY2MWM3Li40ZTUzOTRkMTViMmI2YjdhZDQ2ODU5N2QxZWE5ZDdjYmJlOTllODk3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ1ZpZXcuaAorKysgYi9Tb3VyY2UvV1RG
L3d0Zi90ZXh0L1N0cmluZ1ZpZXcuaApAQCAtMTI0LDggKzEyNCwxMSBAQCBwdWJsaWM6CiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgTWF0Y2hlZENoYXJhY3RlclByZWRpY2F0ZT4KICAgICBTdHJpbmdW
aWV3IHN0cmlwTGVhZGluZ0FuZFRyYWlsaW5nTWF0Y2hlZENoYXJhY3RlcnMoY29uc3QgTWF0Y2hl
ZENoYXJhY3RlclByZWRpY2F0ZSYpOwogCisgICAgZW51bSBBbGxvd0VtcHR5RW50cmllc1RhZyB7
IEFsbG93RW1wdHlFbnRyaWVzIH07CisKICAgICBjbGFzcyBTcGxpdFJlc3VsdDsKICAgICBTcGxp
dFJlc3VsdCBzcGxpdChVQ2hhcikgY29uc3Q7CisgICAgU3BsaXRSZXN1bHQgc3BsaXQoVUNoYXIs
IEFsbG93RW1wdHlFbnRyaWVzVGFnKSBjb25zdDsKIAogICAgIHNpemVfdCBmaW5kKFVDaGFyLCB1
bnNpZ25lZCBzdGFydCA9IDApIGNvbnN0OwogICAgIHNpemVfdCBmaW5kKENvZGVVbml0TWF0Y2hG
dW5jdGlvbiwgdW5zaWduZWQgc3RhcnQgPSAwKSBjb25zdDsKQEAgLTYzNSw3ICs2MzgsNyBAQCBp
bmxpbmUgYm9vbCBlcXVhbElnbm9yaW5nQVNDSUlDYXNlKFN0cmluZ1ZpZXcgYSwgY29uc3QgY2hh
ciogYikKIAogY2xhc3MgU3RyaW5nVmlldzo6U3BsaXRSZXN1bHQgewogcHVibGljOgotICAgIGV4
cGxpY2l0IFNwbGl0UmVzdWx0KFN0cmluZ1ZpZXcsIFVDaGFyIHNlcGFyYXRvcik7CisgICAgU3Bs
aXRSZXN1bHQoU3RyaW5nVmlldywgVUNoYXIgc2VwYXJhdG9yLCBib29sIGFsbG93RW1wdHlFbnRy
aWVzKTsKIAogICAgIGNsYXNzIEl0ZXJhdG9yOwogICAgIEl0ZXJhdG9yIGJlZ2luKCkgY29uc3Q7
CkBAIC02NDQsNiArNjQ3LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBTdHJpbmdWaWV3IG1f
c3RyaW5nOwogICAgIFVDaGFyIG1fc2VwYXJhdG9yOworICAgIGJvb2wgbV9hbGxvd0VtcHR5RW50
cmllczsKIH07CiAKIGNsYXNzIFN0cmluZ1ZpZXc6OkdyYXBoZW1lQ2x1c3RlcnMgewpAQCAtNzAz
LDYgKzcwNyw3IEBAIHByaXZhdGU6CiAgICAgY29uc3QgU3BsaXRSZXN1bHQmIG1fcmVzdWx0Owog
ICAgIHVuc2lnbmVkIG1fcG9zaXRpb24geyAwIH07CiAgICAgdW5zaWduZWQgbV9sZW5ndGg7Cisg
ICAgYm9vbCBtX2lzRG9uZTsKIH07CiAKIGNsYXNzIFN0cmluZ1ZpZXc6OkdyYXBoZW1lQ2x1c3Rl
cnM6Okl0ZXJhdG9yIHsKQEAgLTg5NywxMiArOTAyLDE4IEBAIGlubGluZSBhdXRvIFN0cmluZ1Zp
ZXc6OkNvZGVVbml0czo6ZW5kKCkgY29uc3QgLT4gSXRlcmF0b3IKIAogaW5saW5lIGF1dG8gU3Ry
aW5nVmlldzo6c3BsaXQoVUNoYXIgc2VwYXJhdG9yKSBjb25zdCAtPiBTcGxpdFJlc3VsdAogewot
ICAgIHJldHVybiBTcGxpdFJlc3VsdCB7ICp0aGlzLCBzZXBhcmF0b3IgfTsKKyAgICByZXR1cm4g
U3BsaXRSZXN1bHQgeyAqdGhpcywgc2VwYXJhdG9yLCBmYWxzZSB9OworfQorCitpbmxpbmUgYXV0
byBTdHJpbmdWaWV3OjpzcGxpdChVQ2hhciBzZXBhcmF0b3IsIEFsbG93RW1wdHlFbnRyaWVzVGFn
KSBjb25zdCAtPiBTcGxpdFJlc3VsdAoreworICAgIHJldHVybiBTcGxpdFJlc3VsdCB7ICp0aGlz
LCBzZXBhcmF0b3IsIHRydWUgfTsKIH0KIAotaW5saW5lIFN0cmluZ1ZpZXc6OlNwbGl0UmVzdWx0
OjpTcGxpdFJlc3VsdChTdHJpbmdWaWV3IHN0cmluZ1ZpZXcsIFVDaGFyIHNlcGFyYXRvcikKK2lu
bGluZSBTdHJpbmdWaWV3OjpTcGxpdFJlc3VsdDo6U3BsaXRSZXN1bHQoU3RyaW5nVmlldyBzdHJp
bmdWaWV3LCBVQ2hhciBzZXBhcmF0b3IsIGJvb2wgYWxsb3dFbXB0eUVudHJpZXMpCiAgICAgOiBt
X3N0cmluZyB7IHN0cmluZ1ZpZXcgfQogICAgICwgbV9zZXBhcmF0b3IgeyBzZXBhcmF0b3IgfQor
ICAgICwgbV9hbGxvd0VtcHR5RW50cmllcyB7IGFsbG93RW1wdHlFbnRyaWVzIH0KIHsKIH0KIApA
QCAtOTE4LDYgKzkyOSw3IEBAIGlubGluZSBhdXRvIFN0cmluZ1ZpZXc6OlNwbGl0UmVzdWx0Ojpl
bmQoKSBjb25zdCAtPiBJdGVyYXRvcgogCiBpbmxpbmUgU3RyaW5nVmlldzo6U3BsaXRSZXN1bHQ6
Okl0ZXJhdG9yOjpJdGVyYXRvcihjb25zdCBTcGxpdFJlc3VsdCYgcmVzdWx0KQogICAgIDogbV9y
ZXN1bHQgeyByZXN1bHQgfQorICAgICwgbV9pc0RvbmUgeyByZXN1bHQubV9zdHJpbmcuaXNFbXB0
eSgpICYmICFyZXN1bHQubV9hbGxvd0VtcHR5RW50cmllcyB9CiB7CiAgICAgZmluZE5leHRTdWJz
dHJpbmcoKTsKIH0KQEAgLTkyNSw2ICs5MzcsNyBAQCBpbmxpbmUgU3RyaW5nVmlldzo6U3BsaXRS
ZXN1bHQ6Okl0ZXJhdG9yOjpJdGVyYXRvcihjb25zdCBTcGxpdFJlc3VsdCYgcmVzdWx0KQogaW5s
aW5lIFN0cmluZ1ZpZXc6OlNwbGl0UmVzdWx0OjpJdGVyYXRvcjo6SXRlcmF0b3IoY29uc3QgU3Bs
aXRSZXN1bHQmIHJlc3VsdCwgUG9zaXRpb25UYWcpCiAgICAgOiBtX3Jlc3VsdCB7IHJlc3VsdCB9
CiAgICAgLCBtX3Bvc2l0aW9uIHsgcmVzdWx0Lm1fc3RyaW5nLmxlbmd0aCgpIH0KKyAgICAsIG1f
aXNEb25lIHsgdHJ1ZSB9CiB7CiB9CiAKQEAgLTkzNyw3ICs5NTAsNyBAQCBpbmxpbmUgU3RyaW5n
VmlldyBTdHJpbmdWaWV3OjpTcGxpdFJlc3VsdDo6SXRlcmF0b3I6Om9wZXJhdG9yKigpIGNvbnN0
CiBpbmxpbmUgYm9vbCBTdHJpbmdWaWV3OjpTcGxpdFJlc3VsdDo6SXRlcmF0b3I6Om9wZXJhdG9y
PT0oY29uc3QgSXRlcmF0b3ImIG90aGVyKSBjb25zdAogewogICAgIEFTU0VSVCgmbV9yZXN1bHQg
PT0gJm90aGVyLm1fcmVzdWx0KTsKLSAgICByZXR1cm4gbV9wb3NpdGlvbiA9PSBvdGhlci5tX3Bv
c2l0aW9uOworICAgIHJldHVybiBtX3Bvc2l0aW9uID09IG90aGVyLm1fcG9zaXRpb24gJiYgbV9p
c0RvbmUgPT0gb3RoZXIubV9pc0RvbmU7CiB9CiAKIGlubGluZSBib29sIFN0cmluZ1ZpZXc6OlNw
bGl0UmVzdWx0OjpJdGVyYXRvcjo6b3BlcmF0b3IhPShjb25zdCBJdGVyYXRvciYgb3RoZXIpIGNv
bnN0CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXgg
NzU1OWI2ZmJjMjdhNDViNDM4NzQzMWFlYTFkYjgyNDNmMjdkMmMzYi4uODRiODQxNWU2ZGNlOWZm
MTViY2MxMjVjMWI4ZTYxYjI4OWMxNTEyMiAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisr
KyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDE4LTA3LTIwICBSb3NzIEtp
cnNsaW5nICA8cm9zcy5raXJzbGluZ0Bzb255LmNvbT4KKworICAgICAgICBXVEY6OlN0cmluZ1Zp
ZXc6OnNwbGl0IHNob3VsZCBoYXZlIGFuIGFsbG93RW1wdHlFbnRyaWVzIGZsYWcKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4Nzg2NAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9U
ZXN0cy9XVEYvU3RyaW5nVmlldy5jcHA6IEFkZCB0ZXN0LgorCiAyMDE4LTA3LTIwICBKb2huIFdp
bGFuZGVyICA8d2lsYW5kZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFJlc291cmNlIExvYWQgU3Rh
dGlzdGljczogRW5hYmxlIGJhc2ljIGZ1bmN0aW9uYWxpdHkgaW4gZXhwZXJpbWVudGFsIGRlYnVn
IG1vZGUKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1N0cmluZ1Zp
ZXcuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvU3RyaW5nVmlldy5jcHAKaW5k
ZXggZmRhOGZiY2ZlMmMyMGRhMTJiYTZhMGE4ZWJkMDdlMDM2MDliYmVlNC4uYzhiYjExNDAxZDI0
YWQxN2Q1MzBhYmU5NmEwYWVkYzA3ZTQ3MjJlMyAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XVEYvU3RyaW5nVmlldy5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XVEYvU3RyaW5nVmlldy5jcHAKQEAgLTI4OSwxMyArMjg5LDE5IEBAIFRFU1QoV1RGLCBT
dHJpbmdWaWV3U3BsaXRCYXNpYykKIFRFU1QoV1RGLCBTdHJpbmdWaWV3U3BsaXRXaXRoQ29uc2Vj
dXRpdmVTZXBhcmF0b3JzKQogewogICAgIFN0cmluZyByZWZlcmVuY2VIb2xkZXI7Ci0gICAgU3Ry
aW5nVmlldyBhID0gc3RyaW5nVmlld0Zyb21VVEY4KHJlZmVyZW5jZUhvbGRlciwgIlRoaXMgICAg
IGlzICBhICAgICAgIHNlbnRlbmNlLiIpOworICAgIFN0cmluZ1ZpZXcgYSA9IHN0cmluZ1ZpZXdG
cm9tVVRGOChyZWZlcmVuY2VIb2xkZXIsICIgVGhpcyAgICAgaXMgIGEgICAgICAgc2VudGVuY2Uu
ICIpOwogCiAgICAgVmVjdG9yPFN0cmluZz4gYWN0dWFsID0gdmVjdG9yRnJvbVNwbGl0UmVzdWx0
KGEuc3BsaXQoJyAnKSk7CiAgICAgVmVjdG9yPFN0cmluZz4gZXhwZWN0ZWQoeyAiVGhpcyIsICJp
cyIsICJhIiwgInNlbnRlbmNlLiIgfSk7CiAgICAgQVNTRVJUX0VRKGV4cGVjdGVkLnNpemUoKSwg
YWN0dWFsLnNpemUoKSk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhY3R1YWwuc2l6ZSgp
OyArK2kpCiAgICAgICAgIEVYUEVDVF9TVFJFUShleHBlY3RlZFtpXS51dGY4KCkuZGF0YSgpLCBh
Y3R1YWxbaV0udXRmOCgpLmRhdGEoKSkgPDwgIlZlY3RvcnMgZGlmZmVyIGF0IGluZGV4ICIgPDwg
aTsKKworICAgIGFjdHVhbCA9IHZlY3RvckZyb21TcGxpdFJlc3VsdChhLnNwbGl0KCcgJywgU3Ry
aW5nVmlldzo6QWxsb3dFbXB0eUVudHJpZXMpKTsKKyAgICBleHBlY3RlZCA9IHsgIiIsICJUaGlz
IiwgIiIsICIiLCAiIiwgIiIsICJpcyIsICIiLCAiYSIsICIiLCAiIiwgIiIsICIiLCAiIiwgIiIs
ICJzZW50ZW5jZS4iLCAiIiB9OworICAgIEFTU0VSVF9FUShleHBlY3RlZC5zaXplKCksIGFjdHVh
bC5zaXplKCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYWN0dWFsLnNpemUoKTsgKytp
KQorICAgICAgICBFWFBFQ1RfU1RSRVEoZXhwZWN0ZWRbaV0udXRmOCgpLmRhdGEoKSwgYWN0dWFs
W2ldLnV0ZjgoKS5kYXRhKCkpIDw8ICJWZWN0b3JzIGRpZmZlciBhdCBpbmRleCAiIDw8IGk7CiB9
CiAKIFRFU1QoV1RGLCBTdHJpbmdWaWV3RXF1YWxCYXNpYykK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>345579</attachid>
            <date>2018-07-23 10:07:38 -0700</date>
            <delta_ts>2018-07-23 17:01:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-187864-20180723100737.patch</filename>
            <type>text/plain</type>
            <size>7870</size>
            <attacher name="Ross Kirsling">ross.kirsling</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM0MDk3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGNjZDZkNTNmOTY0OWUzZmZlNTI4ZGI4
OGMyY2U2ODMxNDM3NjJkNDMuLmU3ZjJmOWYzOGM4NmE4MGU1ZDQzODNiN2NjMWVjMTIyYjAxOTg2
N2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTgtMDctMjAgIFJvc3MgS2lyc2xpbmcgIDxyb3Nz
LmtpcnNsaW5nQHNvbnkuY29tPgorCisgICAgICAgIFdURjo6U3RyaW5nVmlldzo6c3BsaXQgc2hv
dWxkIGhhdmUgYW4gYWxsb3dFbXB0eUVudHJpZXMgZmxhZworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg3ODY0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3dGYvdGV4dC9TdHJpbmdWaWV3LmNwcDoKKyAg
ICAgICAgKFdURjo6U3RyaW5nVmlldzo6U3BsaXRSZXN1bHQ6Okl0ZXJhdG9yOjpmaW5kTmV4dFN1
YnN0cmluZyk6CisgICAgICAgIChXVEY6OlN0cmluZ1ZpZXc6OlNwbGl0UmVzdWx0OjpJdGVyYXRv
cjo6b3BlcmF0b3IrKyk6CisgICAgICAgICogd3RmL3RleHQvU3RyaW5nVmlldy5oOgorICAgICAg
ICAoV1RGOjpTdHJpbmdWaWV3OjpzcGxpdCBjb25zdCk6CisgICAgICAgIChXVEY6OlN0cmluZ1Zp
ZXc6OlNwbGl0UmVzdWx0OjpTcGxpdFJlc3VsdCk6CisgICAgICAgIChXVEY6OlN0cmluZ1ZpZXc6
OlNwbGl0UmVzdWx0OjpJdGVyYXRvcjo6b3BlcmF0b3I9PSBjb25zdCk6CisgICAgICAgIFdlIGNh
bid0IG1pbWljIFN0cmluZzo6c3BsaXQgY29tcGxldGVseSwgYmVjYXVzZSB0aGlzIG9uZSdzIGl0
ZXJhdG9yLWJhc2VkIC0tCisgICAgICAgIGFjaGlldmUgZGVzaXJlZCBiZWhhdmlvciBieSBhZGRp
bmcgbV9hbGxvd0VtcHR5RW50cmllcyB0byBTcGxpdFJlc3VsdCBhbmQgbV9pc0RvbmUgdG8gaXRz
IEl0ZXJhdG9yLgorICAgICAgICAoVGhlIGxhdHRlciBrZWVwcyB1cyBmcm9tIGhpdHRpbmcgYmVn
aW4oKSA9PSBlbmQoKSBwcmVtYXR1cmVseSBvbiBhIGZpbmFsIGVtcHR5IGVudHJ5LikKKwogMjAx
OC0wNi0wNiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIFdlIHNo
b3VsZCBzdXBwb3J0IENyZWF0ZVRoaXMgaW4gdGhlIEZUTApkaWZmIC0tZ2l0IGEvU291cmNlL1dU
Ri93dGYvdGV4dC9TdHJpbmdWaWV3LmNwcCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nVmll
dy5jcHAKaW5kZXggZDFmZDI4M2ZkZDI1Y2UzYzQ0MmI3ZjUxZmY5NDJjOTFkMDQ4Y2IyMi4uZWU2
NDg2OTc0ZGFmOGY2YTJjZDkyNjAxOGRjOTU4YTcxN2I1YjUwYSAxMDA2NDQKLS0tIGEvU291cmNl
L1dURi93dGYvdGV4dC9TdHJpbmdWaWV3LmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0
cmluZ1ZpZXcuY3BwCkBAIC0xMDUsMjIgKzEwNSwyNSBAQCBzaXplX3QgU3RyaW5nVmlldzo6Zmlu
ZChTdHJpbmdWaWV3IG1hdGNoU3RyaW5nLCB1bnNpZ25lZCBzdGFydCkgY29uc3QKIHZvaWQgU3Ry
aW5nVmlldzo6U3BsaXRSZXN1bHQ6Okl0ZXJhdG9yOjpmaW5kTmV4dFN1YnN0cmluZygpCiB7CiAg
ICAgZm9yIChzaXplX3Qgc2VwYXJhdG9yUG9zaXRpb247IChzZXBhcmF0b3JQb3NpdGlvbiA9IG1f
cmVzdWx0Lm1fc3RyaW5nLmZpbmQobV9yZXN1bHQubV9zZXBhcmF0b3IsIG1fcG9zaXRpb24pKSAh
PSBub3RGb3VuZDsgKyttX3Bvc2l0aW9uKSB7Ci0gICAgICAgIGlmIChzZXBhcmF0b3JQb3NpdGlv
biA+IG1fcG9zaXRpb24pIHsKKyAgICAgICAgaWYgKG1fcmVzdWx0Lm1fYWxsb3dFbXB0eUVudHJp
ZXMgfHwgc2VwYXJhdG9yUG9zaXRpb24gPiBtX3Bvc2l0aW9uKSB7CiAgICAgICAgICAgICBtX2xl
bmd0aCA9IHNlcGFyYXRvclBvc2l0aW9uIC0gbV9wb3NpdGlvbjsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQogICAgIH0KICAgICBtX2xlbmd0aCA9IG1fcmVzdWx0Lm1fc3RyaW5nLmxl
bmd0aCgpIC0gbV9wb3NpdGlvbjsKKyAgICBpZiAoIW1fbGVuZ3RoICYmICFtX3Jlc3VsdC5tX2Fs
bG93RW1wdHlFbnRyaWVzKQorICAgICAgICBtX2lzRG9uZSA9IHRydWU7CiB9CiAKIGF1dG8gU3Ry
aW5nVmlldzo6U3BsaXRSZXN1bHQ6Okl0ZXJhdG9yOjpvcGVyYXRvcisrKCkgLT4gSXRlcmF0b3Im
CiB7Ci0gICAgQVNTRVJUKG1fcG9zaXRpb24gPCBtX3Jlc3VsdC5tX3N0cmluZy5sZW5ndGgoKSk7
CisgICAgQVNTRVJUKG1fcG9zaXRpb24gPD0gbV9yZXN1bHQubV9zdHJpbmcubGVuZ3RoKCkgJiYg
IW1faXNEb25lKTsKICAgICBtX3Bvc2l0aW9uICs9IG1fbGVuZ3RoOwogICAgIGlmIChtX3Bvc2l0
aW9uIDwgbV9yZXN1bHQubV9zdHJpbmcubGVuZ3RoKCkpIHsKICAgICAgICAgKyttX3Bvc2l0aW9u
OwogICAgICAgICBmaW5kTmV4dFN1YnN0cmluZygpOwotICAgIH0KKyAgICB9IGVsc2UgaWYgKCFt
X2lzRG9uZSkKKyAgICAgICAgbV9pc0RvbmUgPSB0cnVlOwogICAgIHJldHVybiAqdGhpczsKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdWaWV3LmggYi9Tb3VyY2Uv
V1RGL3d0Zi90ZXh0L1N0cmluZ1ZpZXcuaAppbmRleCBiOGQ4MDhiMjk0YTYxZDFkZmZlMzkyY2Yx
ZWQ1ODRmZGIxNmY2MWM3Li4wMmVkNzUzNzI5OTIyYTcyZTVjMTY4YjNjMDRhYzU3ZDc0ZDk0NzRi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ1ZpZXcuaAorKysgYi9Tb3Vy
Y2UvV1RGL3d0Zi90ZXh0L1N0cmluZ1ZpZXcuaApAQCAtMTI0LDggKzEyNCwxMSBAQCBwdWJsaWM6
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWF0Y2hlZENoYXJhY3RlclByZWRpY2F0ZT4KICAgICBT
dHJpbmdWaWV3IHN0cmlwTGVhZGluZ0FuZFRyYWlsaW5nTWF0Y2hlZENoYXJhY3RlcnMoY29uc3Qg
TWF0Y2hlZENoYXJhY3RlclByZWRpY2F0ZSYpOwogCisgICAgZW51bSBBbGxvd0VtcHR5RW50cmll
c1RhZyB7IEFsbG93RW1wdHlFbnRyaWVzIH07CisKICAgICBjbGFzcyBTcGxpdFJlc3VsdDsKICAg
ICBTcGxpdFJlc3VsdCBzcGxpdChVQ2hhcikgY29uc3Q7CisgICAgU3BsaXRSZXN1bHQgc3BsaXQo
VUNoYXIsIEFsbG93RW1wdHlFbnRyaWVzVGFnKSBjb25zdDsKIAogICAgIHNpemVfdCBmaW5kKFVD
aGFyLCB1bnNpZ25lZCBzdGFydCA9IDApIGNvbnN0OwogICAgIHNpemVfdCBmaW5kKENvZGVVbml0
TWF0Y2hGdW5jdGlvbiwgdW5zaWduZWQgc3RhcnQgPSAwKSBjb25zdDsKQEAgLTYzNSw3ICs2Mzgs
NyBAQCBpbmxpbmUgYm9vbCBlcXVhbElnbm9yaW5nQVNDSUlDYXNlKFN0cmluZ1ZpZXcgYSwgY29u
c3QgY2hhciogYikKIAogY2xhc3MgU3RyaW5nVmlldzo6U3BsaXRSZXN1bHQgewogcHVibGljOgot
ICAgIGV4cGxpY2l0IFNwbGl0UmVzdWx0KFN0cmluZ1ZpZXcsIFVDaGFyIHNlcGFyYXRvcik7Cisg
ICAgU3BsaXRSZXN1bHQoU3RyaW5nVmlldywgVUNoYXIgc2VwYXJhdG9yLCBib29sIGFsbG93RW1w
dHlFbnRyaWVzKTsKIAogICAgIGNsYXNzIEl0ZXJhdG9yOwogICAgIEl0ZXJhdG9yIGJlZ2luKCkg
Y29uc3Q7CkBAIC02NDQsNiArNjQ3LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBTdHJpbmdW
aWV3IG1fc3RyaW5nOwogICAgIFVDaGFyIG1fc2VwYXJhdG9yOworICAgIGJvb2wgbV9hbGxvd0Vt
cHR5RW50cmllczsKIH07CiAKIGNsYXNzIFN0cmluZ1ZpZXc6OkdyYXBoZW1lQ2x1c3RlcnMgewpA
QCAtNzAzLDYgKzcwNyw3IEBAIHByaXZhdGU6CiAgICAgY29uc3QgU3BsaXRSZXN1bHQmIG1fcmVz
dWx0OwogICAgIHVuc2lnbmVkIG1fcG9zaXRpb24geyAwIH07CiAgICAgdW5zaWduZWQgbV9sZW5n
dGg7CisgICAgYm9vbCBtX2lzRG9uZTsKIH07CiAKIGNsYXNzIFN0cmluZ1ZpZXc6OkdyYXBoZW1l
Q2x1c3RlcnM6Okl0ZXJhdG9yIHsKQEAgLTg5NywxMiArOTAyLDE4IEBAIGlubGluZSBhdXRvIFN0
cmluZ1ZpZXc6OkNvZGVVbml0czo6ZW5kKCkgY29uc3QgLT4gSXRlcmF0b3IKIAogaW5saW5lIGF1
dG8gU3RyaW5nVmlldzo6c3BsaXQoVUNoYXIgc2VwYXJhdG9yKSBjb25zdCAtPiBTcGxpdFJlc3Vs
dAogewotICAgIHJldHVybiBTcGxpdFJlc3VsdCB7ICp0aGlzLCBzZXBhcmF0b3IgfTsKKyAgICBy
ZXR1cm4gU3BsaXRSZXN1bHQgeyAqdGhpcywgc2VwYXJhdG9yLCBmYWxzZSB9OworfQorCitpbmxp
bmUgYXV0byBTdHJpbmdWaWV3OjpzcGxpdChVQ2hhciBzZXBhcmF0b3IsIEFsbG93RW1wdHlFbnRy
aWVzVGFnKSBjb25zdCAtPiBTcGxpdFJlc3VsdAoreworICAgIHJldHVybiBTcGxpdFJlc3VsdCB7
ICp0aGlzLCBzZXBhcmF0b3IsIHRydWUgfTsKIH0KIAotaW5saW5lIFN0cmluZ1ZpZXc6OlNwbGl0
UmVzdWx0OjpTcGxpdFJlc3VsdChTdHJpbmdWaWV3IHN0cmluZ1ZpZXcsIFVDaGFyIHNlcGFyYXRv
cikKK2lubGluZSBTdHJpbmdWaWV3OjpTcGxpdFJlc3VsdDo6U3BsaXRSZXN1bHQoU3RyaW5nVmll
dyBzdHJpbmdWaWV3LCBVQ2hhciBzZXBhcmF0b3IsIGJvb2wgYWxsb3dFbXB0eUVudHJpZXMpCiAg
ICAgOiBtX3N0cmluZyB7IHN0cmluZ1ZpZXcgfQogICAgICwgbV9zZXBhcmF0b3IgeyBzZXBhcmF0
b3IgfQorICAgICwgbV9hbGxvd0VtcHR5RW50cmllcyB7IGFsbG93RW1wdHlFbnRyaWVzIH0KIHsK
IH0KIApAQCAtOTE4LDYgKzkyOSw3IEBAIGlubGluZSBhdXRvIFN0cmluZ1ZpZXc6OlNwbGl0UmVz
dWx0OjplbmQoKSBjb25zdCAtPiBJdGVyYXRvcgogCiBpbmxpbmUgU3RyaW5nVmlldzo6U3BsaXRS
ZXN1bHQ6Okl0ZXJhdG9yOjpJdGVyYXRvcihjb25zdCBTcGxpdFJlc3VsdCYgcmVzdWx0KQogICAg
IDogbV9yZXN1bHQgeyByZXN1bHQgfQorICAgICwgbV9pc0RvbmUgeyByZXN1bHQubV9zdHJpbmcu
aXNFbXB0eSgpICYmICFyZXN1bHQubV9hbGxvd0VtcHR5RW50cmllcyB9CiB7CiAgICAgZmluZE5l
eHRTdWJzdHJpbmcoKTsKIH0KQEAgLTkyNSwxOSArOTM3LDIwIEBAIGlubGluZSBTdHJpbmdWaWV3
OjpTcGxpdFJlc3VsdDo6SXRlcmF0b3I6Okl0ZXJhdG9yKGNvbnN0IFNwbGl0UmVzdWx0JiByZXN1
bHQpCiBpbmxpbmUgU3RyaW5nVmlldzo6U3BsaXRSZXN1bHQ6Okl0ZXJhdG9yOjpJdGVyYXRvcihj
b25zdCBTcGxpdFJlc3VsdCYgcmVzdWx0LCBQb3NpdGlvblRhZykKICAgICA6IG1fcmVzdWx0IHsg
cmVzdWx0IH0KICAgICAsIG1fcG9zaXRpb24geyByZXN1bHQubV9zdHJpbmcubGVuZ3RoKCkgfQor
ICAgICwgbV9pc0RvbmUgeyB0cnVlIH0KIHsKIH0KIAogaW5saW5lIFN0cmluZ1ZpZXcgU3RyaW5n
Vmlldzo6U3BsaXRSZXN1bHQ6Okl0ZXJhdG9yOjpvcGVyYXRvciooKSBjb25zdAogewotICAgIEFT
U0VSVChtX3Bvc2l0aW9uIDwgbV9yZXN1bHQubV9zdHJpbmcubGVuZ3RoKCkpOworICAgIEFTU0VS
VChtX3Bvc2l0aW9uIDw9IG1fcmVzdWx0Lm1fc3RyaW5nLmxlbmd0aCgpICYmICFtX2lzRG9uZSk7
CiAgICAgcmV0dXJuIG1fcmVzdWx0Lm1fc3RyaW5nLnN1YnN0cmluZyhtX3Bvc2l0aW9uLCBtX2xl
bmd0aCk7CiB9CiAKIGlubGluZSBib29sIFN0cmluZ1ZpZXc6OlNwbGl0UmVzdWx0OjpJdGVyYXRv
cjo6b3BlcmF0b3I9PShjb25zdCBJdGVyYXRvciYgb3RoZXIpIGNvbnN0CiB7CiAgICAgQVNTRVJU
KCZtX3Jlc3VsdCA9PSAmb3RoZXIubV9yZXN1bHQpOwotICAgIHJldHVybiBtX3Bvc2l0aW9uID09
IG90aGVyLm1fcG9zaXRpb247CisgICAgcmV0dXJuIG1fcG9zaXRpb24gPT0gb3RoZXIubV9wb3Np
dGlvbiAmJiBtX2lzRG9uZSA9PSBvdGhlci5tX2lzRG9uZTsKIH0KIAogaW5saW5lIGJvb2wgU3Ry
aW5nVmlldzo6U3BsaXRSZXN1bHQ6Okl0ZXJhdG9yOjpvcGVyYXRvciE9KGNvbnN0IEl0ZXJhdG9y
JiBvdGhlcikgY29uc3QKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5n
ZUxvZwppbmRleCBlNDhmMTJkNTgzM2QzOGY3NjliZjNiYTFlNzhlZmYzMmY5MDI0MGY5Li4yNjRh
MzBiM2NmOWRjNzg2MmU5MjVmYWVkODU5N2ZjNjlkNWE2NzYzIDEwMDY0NAotLS0gYS9Ub29scy9D
aGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTgtMDct
MjAgIFJvc3MgS2lyc2xpbmcgIDxyb3NzLmtpcnNsaW5nQHNvbnkuY29tPgorCisgICAgICAgIFdU
Rjo6U3RyaW5nVmlldzo6c3BsaXQgc2hvdWxkIGhhdmUgYW4gYWxsb3dFbXB0eUVudHJpZXMgZmxh
ZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg3ODY0
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0
V2ViS2l0QVBJL1Rlc3RzL1dURi9TdHJpbmdWaWV3LmNwcDogQWRkIHRlc3QuCisKIDIwMTgtMDct
MjMgIENvbW1pdCBRdWV1ZSAgPGNvbW1pdC1xdWV1ZUB3ZWJraXQub3JnPgogCiAgICAgICAgIFVu
cmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIyMzMwMzAuCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dURi9TdHJpbmdWaWV3LmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV1RGL1N0cmluZ1ZpZXcuY3BwCmluZGV4IGZkYThmYmNmZTJjMjBkYTEyYmE2YTBhOGViZDA3
ZTAzNjA5YmJlZTQuLmM4YmIxMTQwMWQyNGFkMTdkNTMwYWJlOTZhMGFlZGMwN2U0NzIyZTMgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1N0cmluZ1ZpZXcuY3BwCisr
KyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1N0cmluZ1ZpZXcuY3BwCkBAIC0yODks
MTMgKzI4OSwxOSBAQCBURVNUKFdURiwgU3RyaW5nVmlld1NwbGl0QmFzaWMpCiBURVNUKFdURiwg
U3RyaW5nVmlld1NwbGl0V2l0aENvbnNlY3V0aXZlU2VwYXJhdG9ycykKIHsKICAgICBTdHJpbmcg
cmVmZXJlbmNlSG9sZGVyOwotICAgIFN0cmluZ1ZpZXcgYSA9IHN0cmluZ1ZpZXdGcm9tVVRGOChy
ZWZlcmVuY2VIb2xkZXIsICJUaGlzICAgICBpcyAgYSAgICAgICBzZW50ZW5jZS4iKTsKKyAgICBT
dHJpbmdWaWV3IGEgPSBzdHJpbmdWaWV3RnJvbVVURjgocmVmZXJlbmNlSG9sZGVyLCAiIFRoaXMg
ICAgIGlzICBhICAgICAgIHNlbnRlbmNlLiAiKTsKIAogICAgIFZlY3RvcjxTdHJpbmc+IGFjdHVh
bCA9IHZlY3RvckZyb21TcGxpdFJlc3VsdChhLnNwbGl0KCcgJykpOwogICAgIFZlY3RvcjxTdHJp
bmc+IGV4cGVjdGVkKHsgIlRoaXMiLCAiaXMiLCAiYSIsICJzZW50ZW5jZS4iIH0pOwogICAgIEFT
U0VSVF9FUShleHBlY3RlZC5zaXplKCksIGFjdHVhbC5zaXplKCkpOwogICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgYWN0dWFsLnNpemUoKTsgKytpKQogICAgICAgICBFWFBFQ1RfU1RSRVEoZXhw
ZWN0ZWRbaV0udXRmOCgpLmRhdGEoKSwgYWN0dWFsW2ldLnV0ZjgoKS5kYXRhKCkpIDw8ICJWZWN0
b3JzIGRpZmZlciBhdCBpbmRleCAiIDw8IGk7CisKKyAgICBhY3R1YWwgPSB2ZWN0b3JGcm9tU3Bs
aXRSZXN1bHQoYS5zcGxpdCgnICcsIFN0cmluZ1ZpZXc6OkFsbG93RW1wdHlFbnRyaWVzKSk7Cisg
ICAgZXhwZWN0ZWQgPSB7ICIiLCAiVGhpcyIsICIiLCAiIiwgIiIsICIiLCAiaXMiLCAiIiwgImEi
LCAiIiwgIiIsICIiLCAiIiwgIiIsICIiLCAic2VudGVuY2UuIiwgIiIgfTsKKyAgICBBU1NFUlRf
RVEoZXhwZWN0ZWQuc2l6ZSgpLCBhY3R1YWwuc2l6ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGFjdHVhbC5zaXplKCk7ICsraSkKKyAgICAgICAgRVhQRUNUX1NUUkVRKGV4cGVjdGVk
W2ldLnV0ZjgoKS5kYXRhKCksIGFjdHVhbFtpXS51dGY4KCkuZGF0YSgpKSA8PCAiVmVjdG9ycyBk
aWZmZXIgYXQgaW5kZXggIiA8PCBpOwogfQogCiBURVNUKFdURiwgU3RyaW5nVmlld0VxdWFsQmFz
aWMpCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>