<?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>196127</bug_id>
          
          <creation_ts>2019-03-21 19:07:48 -0700</creation_ts>
          <short_desc>Reproducible case of backwards nextParagraph returning a position ahead of the input position</short_desc>
          <delta_ts>2019-12-16 14:32:17 -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>HTML Editing</component>
          <version>Other</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>205142</dependson>
          <blocked>205284</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Tim Horton">thorton</reporter>
          <assigned_to name="Daniel Bates">dbates</assigned_to>
          <cc>dbates</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>mifenton</cc>
    
    <cc>rniwa</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wenson_hsieh</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1520107</commentid>
    <comment_count>0</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2019-03-21 19:07:48 -0700</bug_when>
    <thetext>Don&apos;t know how to write a standalone test for this yet, but:

&lt;style&gt;body { margin: 0; } iframe { border: none; }&lt;/style&gt;&lt;meta name=&apos;viewport&apos; content=&apos;initial-scale=1&apos;&gt;&lt;span id=&apos;the&apos;&gt;The&lt;/span&gt; quick brown fox &lt;span id=&apos;jumps&apos;&gt;jumps&lt;/span&gt; over the lazy &lt;span id=&apos;dog&apos;&gt;dog.&lt;/span&gt;

And then select jumps:

getSelection().setBaseAndExtent(jumps, 0, jumps, 1)

If you take the selection start and then call positionOfNextBoundaryOfGranularity() with granularity=paragraph and direction=backwards, *twice*, you end up at the *end* of the document.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1520114</commentid>
    <comment_count>1</comment_count>
      <attachid>365668</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-03-21 19:19:36 -0700</bug_when>
    <thetext>Created attachment 365668
Bad repro

I can&apos;t reproduce this... Maybe nextParagraphBoundaryInDirection behaves differently from modify.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1520117</commentid>
    <comment_count>2</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-03-21 19:24:42 -0700</bug_when>
    <thetext>&lt;rdar://problem/49135890&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1520118</commentid>
    <comment_count>3</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-03-21 19:24:45 -0700</bug_when>
    <thetext>We should look into this. A bug like this can result in an infinite loop elsewhere.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1520119</commentid>
    <comment_count>4</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2019-03-21 19:24:53 -0700</bug_when>
    <thetext>You should be able to reproduce with the API test in https://bugs.webkit.org/show_bug.cgi?id=196040 if you remove the silly check in moveByGranularity...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1521988</commentid>
    <comment_count>5</comment_count>
      <attachid>366146</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-03-27 20:48:55 -0700</bug_when>
    <thetext>Created attachment 366146
Fixes the bug</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1521991</commentid>
    <comment_count>6</comment_count>
      <attachid>366146</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-03-27 20:50:53 -0700</bug_when>
    <thetext>Comment on attachment 366146
Fixes the bug

Wrong bug :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1522004</commentid>
    <comment_count>7</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2019-03-27 22:27:30 -0700</bug_when>
    <thetext>Aww, you had me excited</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1598513</commentid>
    <comment_count>8</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2019-12-13 14:48:48 -0800</bug_when>
    <thetext>Hit this bug... I&apos;m going to take a stab.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1598514</commentid>
    <comment_count>9</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2019-12-13 14:51:55 -0800</bug_when>
    <thetext>The issue is that WebCore::nextParagraphBoundaryInDirection() does actually handle the case where the specified position is not within a paragraph. It handle that case as if the position was on a paragraph boundary. The latter needs to be handled as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1598516</commentid>
    <comment_count>10</comment_count>
      <attachid>385645</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2019-12-13 14:57:41 -0800</bug_when>
    <thetext>Created attachment 385645
Patch and unit test</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1598517</commentid>
    <comment_count>11</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2019-12-13 14:58:36 -0800</bug_when>
    <thetext>Kinda wavering on the changes here...trying to figure out what&apos;s the most readable code. Left some duplication on the table to try to get something more readable. Maybe solution should be DRY-er.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1598518</commentid>
    <comment_count>12</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2019-12-13 14:59:03 -0800</bug_when>
    <thetext>Patch will not apply until bug #205142 lands.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1598638</commentid>
    <comment_count>13</comment_count>
      <attachid>385645</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2019-12-14 08:09:16 -0800</bug_when>
    <thetext>Comment on attachment 385645
Patch and unit test

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

&gt; Tools/TestWebKitAPI/Tests/WebKitCocoa/DocumentEditingContext.mm:631
&gt; +    [webView synchronouslyLoadHTMLString:applyAhemStyle(@&quot;&lt;style&gt;body { margin: 0; } iframe { border: none; }&lt;/style&gt;&lt;meta name=&apos;viewport&apos; content=&apos;initial-scale=1&apos;&gt;&lt;span id=&apos;the&apos;&gt;The&lt;/span&gt; quick brown fox &lt;span id=&apos;jumps&apos;&gt;jumps&lt;/span&gt; over the lazy &lt;span id=&apos;dog&apos;&gt;dog.&lt;/span&gt;&quot;)];

Remove the &lt;style&gt; as  applyAhemStyle() adds it for us.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1598955</commentid>
    <comment_count>14</comment_count>
      <attachid>385779</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2019-12-16 10:20:41 -0800</bug_when>
    <thetext>Created attachment 385779
Patch and unit test</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1599087</commentid>
    <comment_count>15</comment_count>
      <attachid>385779</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2019-12-16 14:05:22 -0800</bug_when>
    <thetext>Comment on attachment 385779
Patch and unit test

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

&gt; Source/WebCore/ChangeLog:16
&gt; +                        or backwards, respectively.

I think it would help to clarify what causes the last (third) scenario here — i.e. the last of the 3 return statements in nextParagraphBoundaryInDirection.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1599093</commentid>
    <comment_count>16</comment_count>
      <attachid>385779</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2019-12-16 14:10:30 -0800</bug_when>
    <thetext>Comment on attachment 385779
Patch and unit test

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

&gt; Tools/TestWebKitAPI/Tests/WebKitCocoa/DocumentEditingContext.mm:628
&gt; +TEST(WebKit, DocumentEditingContextRequestLastTwoParagraphsWithCaretNotInParagraph)

No caret in this test. Will rename to DocumentEditingContextRequestLastTwoParagraphsWithSelectiontNotInAParagraph</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1599105</commentid>
    <comment_count>17</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2019-12-16 14:28:08 -0800</bug_when>
    <thetext>(In reply to Wenson Hsieh from comment #15)
&gt; Comment on attachment 385779 [details]
&gt; Patch and unit test
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=385779&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:16
&gt; &gt; +                        or backwards, respectively.
&gt; 
&gt; I think it would help to clarify what causes the last (third) scenario here
&gt; — i.e. the last of the 3 return statements in
&gt; nextParagraphBoundaryInDirection.

Nothing! There are only two cases: at boundary of paragraph and in paragraph. Somehow I wound up with a third case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1599107</commentid>
    <comment_count>18</comment_count>
      <attachid>385779</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2019-12-16 14:29:25 -0800</bug_when>
    <thetext>Comment on attachment 385779
Patch and unit test

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

&gt;&gt;&gt; Source/WebCore/ChangeLog:16
&gt;&gt;&gt; +                        or backwards, respectively.
&gt;&gt; 
&gt;&gt; I think it would help to clarify what causes the last (third) scenario here — i.e. the last of the 3 return statements in nextParagraphBoundaryInDirection.
&gt; 
&gt; Nothing! There are only two cases: at boundary of paragraph and in paragraph. Somehow I wound up with a third case.

Sounds like we can simplify the logic a bit, then!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1599108</commentid>
    <comment_count>19</comment_count>
      <attachid>385811</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2019-12-16 14:29:42 -0800</bug_when>
    <thetext>Created attachment 385811
To land</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1599110</commentid>
    <comment_count>20</comment_count>
      <attachid>385811</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2019-12-16 14:32:15 -0800</bug_when>
    <thetext>Comment on attachment 385811
To land

Clearing flags on attachment: 385811

Committed r253578: &lt;https://trac.webkit.org/changeset/253578&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1599111</commentid>
    <comment_count>21</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2019-12-16 14:32:17 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>365668</attachid>
            <date>2019-03-21 19:19:36 -0700</date>
            <delta_ts>2019-03-21 19:19:36 -0700</delta_ts>
            <desc>Bad repro</desc>
            <filename>196127.html</filename>
            <type>text/html</type>
            <size>515</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">PHN0eWxlPiBib2R5IHsgbWFyZ2luOiAwOyB9IGlmcmFtZSB7IGJvcmRlcjogbm9uZTsgfSA8L3N0
eWxlPjxzY3JpcHQ+Cgp3aW5kb3cub25sb2FkID0gKCkgPT4gewogICAgZG9jdW1lbnQuYm9keS5m
b2N1cygpOwogICAgZ2V0U2VsZWN0aW9uKCkuc2V0QmFzZUFuZEV4dGVudChqdW1wcywgMCwganVt
cHMsIDApOwogICAgZ2V0U2VsZWN0aW9uKCkubW9kaWZ5KCdtb3ZlJywgJ2JhY2t3YXJkJywgJ3Bh
cmFncmFwaCcpOwogICAgZ2V0U2VsZWN0aW9uKCkubW9kaWZ5KCdtb3ZlJywgJ2JhY2t3YXJkJywg
J3BhcmFncmFwaCcpOwp9Cgo8L3NjcmlwdD48bWV0YSBuYW1lPSd2aWV3cG9ydCcgY29udGVudD0n
aW5pdGlhbC1zY2FsZT0xJz48L2hlYWQ+PGJvZHkgY29udGVudGVkaXRhYmxlPjxzcGFuIGlkPSd0
aGUnPlRoZTwvc3Bhbj4gcXVpY2sgYnJvd24gZm94IDxzcGFuIGlkPSdqdW1wcyc+anVtcHM8L3Nw
YW4+IG92ZXIgdGhlIGxhenkgPHNwYW4gaWQ9J2RvZyc+ZG9nLjwvc3Bhbj48L2JvZHk+PC9odG1s
Pgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>366146</attachid>
            <date>2019-03-27 20:48:55 -0700</date>
            <delta_ts>2019-03-27 20:52:18 -0700</delta_ts>
            <desc>Fixes the bug</desc>
            <filename>bug-196127-20190327204854.patch</filename>
            <type>text/plain</type>
            <size>19142</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0MzU1OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDE5LTAzLTI3ICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIFJlcHJvZHVjaWJsZSBjYXNlIG9m
IGJhY2t3YXJkcyBuZXh0UGFyYWdyYXBoIHJldHVybmluZyBhIHBvc2l0aW9uIGFoZWFkIG9mIHRo
ZSBpbnB1dCBwb3NpdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTk2MTI3CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS80OTEzNTg5MD4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJNZW51TGlzdC5jcHA6CisgICAgICAgIChSZW5kZXJNZW51TGlzdDo6cG9wdXBEaWRIaWRl
KTogQWRkZWQgYSBjb21tZW50LgorCiAyMDE5LTAzLTI3ICBaYWxhbiBCdWp0YXMgIDx6YWxhbkBh
cHBsZS5jb20+CiAKICAgICAgICAgW0NvbnRlbnRDaGFuZ2VPYnNlcnZlcl0gU3RvcCB1c2luZyB0
aGUgZ2xvYmFsIF9XS0NvbnRlbnRDaGFuZ2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJNZW51TGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlck1lbnVMaXN0LmNwcAkocmV2aXNpb24gMjQzNTU4KQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjEyLDYg
KzYxMiw3IEBAIGludCBSZW5kZXJNZW51TGlzdDo6c2VsZWN0ZWRJbmRleCgpIGNvbnMKIHZvaWQg
UmVuZGVyTWVudUxpc3Q6OnBvcHVwRGlkSGlkZSgpCiB7CiAjaWYgIVBMQVRGT1JNKElPU19GQU1J
TFkpCisgICAgLy8gUG9wdXBNZW51TWFjOjpzaG93IGluIFdlYktpdExlZ2FjeSBjYW4gY2FsbCB0
aGlzIGNhbGxiYWNrIGV2ZW4gd2hlbiBwb3B1cCBoYWQgYWxyZWFkeSBiZWVuIGRpc21pc3NlZC4K
ICAgICBtX3BvcHVwSXNWaXNpYmxlID0gZmFsc2U7CiAjZW5kaWYKIH0KSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCShy
ZXZpc2lvbiAyNDM1OTcpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDI5IEBACisyMDE5LTAzLTI3ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJr
aXQub3JnPgorCisgICAgICAgIFJlcHJvZHVjaWJsZSBjYXNlIG9mIGJhY2t3YXJkcyBuZXh0UGFy
YWdyYXBoIHJldHVybmluZyBhIHBvc2l0aW9uIGFoZWFkIG9mIHRoZSBpbnB1dCBwb3NpdGlvbgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk2MTI3Cisg
ICAgICAgIDxyZGFyOi8vcHJvYmxlbS80OTEzNTg5MD4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGUgYnVnIHdhcyBjYXVzZWQgYnkgV2ViUG9wdXBN
ZW51OjpoaWRlIG5ldmVyIG5vdGlmeWluZyBQb3B1cENsaWVudCB0aGF0IHRoZSBwb3B1cCBoYWQg
YmVlbiBkaXNtaXNzZWQuCisgICAgICAgIFRoaXMgcmVzdWx0ZWQgaW4gUmVuZGVyTWVudUxpc3Q6
Om1fcG9wdXBJc1Zpc2libGUgdG8gYmUgbmV2ZXIgcmVzZXQuCisKKyAgICAgICAgQWxzbyBmaXhl
ZCBhIGJ1ZyBpbiBXZWJQb3B1cE1lbnVQcm94eU1hYzo6aGlkZVBvcHVwTWVudSB0aGF0IHRoaXMg
ZnVuY3Rpb24gd2FzIG5ldmVyIGRpc21pc3NpbmcKKyAgICAgICAgdGhlIHBvcHVwIGFzIHRoZSBz
ZWxlY3RvciAiZGlzbWlzc1BvcFVwIiwgb24gdGhlIGNvbnRyYXJ5IHRvIGl0cyBuYW1lLCBkb2Vz
IG5vdCBkaW1pc3MgdGhlIHBvcHVwLgorICAgICAgICBTZW5kIGNhbmNlbFRyYWNraW5nIHRvIE5T
TWVudSBpbnN0ZWFkLCB3aGljaCBET0VTIGRpc21pc3MgdGhlIHBvcHVwLgorCisgICAgICAgIFVu
Zm9ydHVuYXRlbHkgbm8gbmV3IHRlc3RzIHNpbmNlIE5TTWVudSBpcyBzaG93biB3aXRoIGEgc3lu
YyBBUEkgaW4gVUkgcHJvY2VzcywgYW5kIGFueSB0ZXN0IHRoYXQgdHJpZXMKKyAgICAgICAgdG8g
ZGlzbWlzcyB0aGUgcG9wdXAgb3ZlciBmcm9tIEpTIHNlZW1zIHRvIGJlIGZsYWt5LgorCisgICAg
ICAgIFRlc3RzOiBmYXN0L2Zvcm1zL3NlbGVjdC9tYWMtd2syL2JsdXItZGlzbWlzc2VzLXNlbGVj
dC1wb3B1cC5odG1sCisgICAgICAgICAgICAgICBmYXN0L2Zvcm1zL3NlbGVjdC9tYWMtd2syL29w
ZW4tc2VsZWN0LXBvcHVwLWFmdGVyLWRpc21pc3NpbmctYnktYmx1ci5odG1sCisKKyAgICAgICAg
KiBVSVByb2Nlc3MvbWFjL1dlYlBvcHVwTWVudVByb3h5TWFjLm1tOgorICAgICAgICAoV2ViS2l0
OjpXZWJQb3B1cE1lbnVQcm94eU1hYzo6aGlkZVBvcHVwTWVudSk6CisgICAgICAgICogV2ViUHJv
Y2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQb3B1cE1lbnUuY3BwOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQb3B1cE1lbnU6OmhpZGUpOgorCiAyMDE5LTAzLTI3ICBEZWFuIEphY2tzb24gIDxkaW5vQGFw
cGxlLmNvbT4KIAogICAgICAgICBbQVJLaXRdIEJsYWNrIHZpZXcgd2hlbiBvcGVuaW5nIGEgM0Qg
bW9kZWwgdXNkeiBmaWxlIGluIG5ldyB0YWIKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L21hYy9XZWJQb3B1cE1lbnVQcm94eU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9tYWMvV2ViUG9wdXBNZW51UHJveHlNYWMubW0JKHJldmlzaW9uIDI0MzU1OCkK
KysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XZWJQb3B1cE1lbnVQcm94eU1hYy5tbQko
d29ya2luZyBjb3B5KQpAQCAtMjAzLDcgKzIwMyw3IEBAIEFMTE9XX0RFUFJFQ0FURURfREVDTEFS
QVRJT05TX0VORAogCiB2b2lkIFdlYlBvcHVwTWVudVByb3h5TWFjOjpoaWRlUG9wdXBNZW51KCkK
IHsKLSAgICBbbV9wb3B1cCBkaXNtaXNzUG9wVXBdOworICAgIFtbbV9wb3B1cCBtZW51XSBjYW5j
ZWxUcmFja2luZ107CiB9CiAKIHZvaWQgV2ViUG9wdXBNZW51UHJveHlNYWM6OmNhbmNlbFRyYWNr
aW5nKCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQ
b3B1cE1lbnUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9XZWJQb3B1cE1lbnUuY3BwCShyZXZpc2lvbiAyNDM1NTgpCisrKyBTb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUG9wdXBNZW51LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTIwLDcgKzEyMCw4IEBAIHZvaWQgV2ViUG9wdXBNZW51OjpoaWRlKCkKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vz
c0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpIaWRlUG9wdXBNZW51
KCksIG1fcGFnZS0+cGFnZUlEKCkpOwotICAgIG1fcGFnZS0+c2V0QWN0aXZlUG9wdXBNZW51KDAp
OworICAgIG1fcGFnZS0+c2V0QWN0aXZlUG9wdXBNZW51KG51bGxwdHIpOworICAgIG1fcG9wdXBD
bGllbnQtPnBvcHVwRGlkSGlkZSgpOwogfQogCiB2b2lkIFdlYlBvcHVwTWVudTo6dXBkYXRlRnJv
bUVsZW1lbnQoKQpJbmRleDogU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24gMjQz
NTU4KQorKysgU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsMTggQEAKKzIwMTktMDMtMjcgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtp
dC5vcmc+CisKKyAgICAgICAgUmVwcm9kdWNpYmxlIGNhc2Ugb2YgYmFja3dhcmRzIG5leHRQYXJh
Z3JhcGggcmV0dXJuaW5nIGEgcG9zaXRpb24gYWhlYWQgb2YgdGhlIGlucHV0IHBvc2l0aW9uCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTYxMjcKKyAg
ICAgICAgPHJkYXI6Ly9wcm9ibGVtLzQ5MTM1ODkwPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEZpeGVkIHRoZSBidWcgdGhhdCB3ZSB3ZXJlIG5vdCBh
Y3R1YWxseSBkaXNtaXNzaW5nIHRoZSBwb3B1cCBpbiBQb3B1cE1lbnVNYWM6OmhpZGUgYXMgZG9u
ZSBpbiBXZWJLaXQyLgorCisgICAgICAgIFVuZm9ydHVuYXRlbHkgbm8gbmV3IHRlc3RzIHNpbmNl
IGludGVuYWxzLmlzU2VsZWN0UG9wdXBWaXNpYmxlIHdvdWxkIGFsd2F5cyByZXR1cm4gZmFsc2Ug
aW4gV2ViS2l0MS4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1BvcHVwTWVudU1hYy5tbToK
KyAgICAgICAgKFBvcHVwTWVudU1hYzo6aGlkZSk6CisKIDIwMTktMDMtMjUgIEFuZHkgRXN0ZXMg
IDxhZXN0ZXNAYXBwbGUuY29tPgogCiAgICAgICAgIFtpT1NdIEJyZWFrIGEgcmVmZXJlbmNlIGN5
Y2xlIGJldHdlZW4gUHJldmlld0xvYWRlciBhbmQgUmVzb3VyY2VMb2FkZXIKSW5kZXg6IFNvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1BvcHVwTWVudU1hYy5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9Qb3B1cE1lbnVN
YWMubW0JKHJldmlzaW9uIDI0MzU1OCkKKysrIFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNv
cmVTdXBwb3J0L1BvcHVwTWVudU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjM0LDkgKzIzNCwx
MSBAQCB2b2lkIFBvcHVwTWVudU1hYzo6c2hvdyhjb25zdCBJbnRSZWN0JiByCiAKIHZvaWQgUG9w
dXBNZW51TWFjOjpoaWRlKCkKIHsKLSAgICBbbV9wb3B1cCBkaXNtaXNzUG9wVXBdOworICAgIFtb
bV9wb3B1cCBtZW51XSBjYW5jZWxUcmFja2luZ107CisgICAgaWYgKG1fY2xpZW50KQorICAgICAg
ICBtX2NsaWVudC0+cG9wdXBEaWRIaWRlKCk7CiB9Ci0gICAgCisKIHZvaWQgUG9wdXBNZW51TWFj
Ojp1cGRhdGVGcm9tRWxlbWVudCgpCiB7CiB9CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNDM1NTgpCisr
KyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMiBAQAor
MjAxOS0wMy0yNyAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICBb
bWFjT1NdIFNlbGVjdCBlbGVtZW50IGRvZXNuJ3Qgc2hvdyBwb3B1cCBpZiBzZWxlY3QgZWxlbWVu
dCBoYWQgbG9zdCBmb2N1cyB3aGlsZSBwb3B1cCB3YXMgcHJldmlvc3VseSBzaG93bgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk2MzM2CisgICAgICAg
IDxyZGFyOi8vcHJvYmxlbS80NzI5MDQ1Mj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBBZGRlZCByZWdyZXNzaW9uIHRlc3RzIGZvciBkaXNtaXNzaW5n
IHRoZSBzZWxlY3QgZWxlbWVudCdzIHBvcHVwIG1lbnUgYnkgYmx1cmluZyB0aGUgZWxlbWVudCB0
aGVuIHJlLW9wZW5pbmcgdGhlIHBvcHVwLgorICAgICAgICBVbmZvcnR1bmF0ZWx5IHRoZXNlIHRl
c3RzIGFyZSBvbmx5IGVuYWJsZWQgaW4gV2ViS2l0MiBzaW5jZSBpbnRlbmFscy5pc1NlbGVjdFBv
cHVwVmlzaWJsZSB3b3VsZCBhbHdheXMgcmV0dXJuIGZhbHNlIGluIFdlYktpdDEuCisKKyAgICAg
ICAgKiBUZXN0RXhwZWN0YXRpb25zOgorICAgICAgICAqIGZhc3QvZm9ybXMvc2VsZWN0L21hYy13
azI6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZm9ybXMvc2VsZWN0L21hYy13azIvYmx1ci1kaXNt
aXNzZXMtc2VsZWN0LXBvcHVwLWV4cGVjdGVkLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3Qv
Zm9ybXMvc2VsZWN0L21hYy13azIvYmx1ci1kaXNtaXNzZXMtc2VsZWN0LXBvcHVwLmh0bWw6IEFk
ZGVkLgorICAgICAgICAqIGZhc3QvZm9ybXMvc2VsZWN0L21hYy13azIvb3Blbi1zZWxlY3QtcG9w
dXAtYWZ0ZXItZGlzbWlzc2luZy1ieS1ibHVyLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAg
ICogZmFzdC9mb3Jtcy9zZWxlY3QvbWFjLXdrMi9vcGVuLXNlbGVjdC1wb3B1cC1hZnRlci1kaXNt
aXNzaW5nLWJ5LWJsdXIuaHRtbDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbWFjLXdrMi9U
ZXN0RXhwZWN0YXRpb25zOgorCiAyMDE5LTAzLTI3ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBs
ZS5jb20+CiAKICAgICAgICAgWyBpT1MgU2ltdWxhdG9yIF0gUkVHUkVTU0lPTiAocjIzNzcwMikg
TGF5b3V0IFRlc3QgaHR0cC90ZXN0cy9zZWN1cml0eS94c3MtREVOSUVELXNjcmlwdC1pbmplY3Qt
aW50by1pbmFjdGl2ZS13aW5kb3cuaHRtbCBpcyBhIGZsYWt5IGZhaWx1cmUKSW5kZXg6IExheW91
dFRlc3RzL1Rlc3RFeHBlY3RhdGlvbnMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvVGVzdEV4
cGVjdGF0aW9ucwkocmV2aXNpb24gMjQzNTU4KQorKysgTGF5b3V0VGVzdHMvVGVzdEV4cGVjdGF0
aW9ucwkod29ya2luZyBjb3B5KQpAQCAtMjMsNiArMjMsNyBAQCBlZGl0aW5nL3VuZG8tbWFuYWdl
ciBbIFNraXAgXQogdGlsZWQtZHJhd2luZyBbIFNraXAgXQogZmFzdC9jc3Mvd2F0Y2hvcyBbIFNr
aXAgXQogZmFzdC9kb20vV2luZG93L3dhdGNob3MgWyBTa2lwIF0KK2Zhc3QvZm9ybXMvc2VsZWN0
L21hYy13azIgWyBTa2lwIF0KIGZhc3QvZm9ybXMvdGV4dGFyZWEvaW9zIFsgU2tpcCBdCiBmYXN0
L2Zvcm1zL3dhdGNob3MgWyBTa2lwIF0KIGZhc3Qvdmlld3BvcnQvd2F0Y2hvcyBbIFNraXAgXQpJ
bmRleDogTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9zZWxlY3QvbWFjLXdrMi9ibHVyLWRpc21pc3Nl
cy1zZWxlY3QtcG9wdXAtZXhwZWN0ZWQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9m
YXN0L2Zvcm1zL3NlbGVjdC9tYWMtd2syL2JsdXItZGlzbWlzc2VzLXNlbGVjdC1wb3B1cC1leHBl
Y3RlZC5odG1sCShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL2Zhc3QvZm9ybXMvc2VsZWN0
L21hYy13azIvYmx1ci1kaXNtaXNzZXMtc2VsZWN0LXBvcHVwLWV4cGVjdGVkLmh0bWwJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwxMiBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxib2R5
PgorPHAgdGFiaW5kZXg9IjEiPlRoaXMgdGVzdHMgbW92aW5nIHRoZSBmb2N1cyBmcm9tIGEgc2Vs
ZWN0IGVsZW1lbnQgd2hpbGUgaXRzIHBvcHVwIG1lbnUgaXMgb3Blbi4gV2ViS2l0IHNob3VsZCBk
aXNtaXNzIHRoZSBwb3B1cC48L3A+Cis8c2VsZWN0IG9ubW91c2Vkb3duPSJtb3ZlRm9jdXMoKSI+
CisgIDxvcHRpb24+Q2xpY2sgaGVyZTwvb3B0aW9uPgorICA8b3B0aW9uPllvdSBzaG91bGQgc2Vl
IHRoaXM8L29wdGlvbj4KKzwvc2VsZWN0PgorPGRpdiBpZD0icmVzdWx0Ij5QQVNTPC9kaXY+Cis8
c2NyaXB0PiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdwJykuZm9jdXMoKTsgPC9zY3JpcHQ+Cis8
L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL3NlbGVjdC9tYWMt
d2syL2JsdXItZGlzbWlzc2VzLXNlbGVjdC1wb3B1cC5odG1sCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2Zhc3QvZm9ybXMvc2VsZWN0L21hYy13azIvYmx1ci1kaXNtaXNzZXMtc2VsZWN0LXBv
cHVwLmh0bWwJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9zZWxlY3Qv
bWFjLXdrMi9ibHVyLWRpc21pc3Nlcy1zZWxlY3QtcG9wdXAuaHRtbAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDM5IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGJvZHk+Cis8cCB0YWJp
bmRleD0iMSI+VGhpcyB0ZXN0cyBtb3ZpbmcgdGhlIGZvY3VzIGZyb20gYSBzZWxlY3QgZWxlbWVu
dCB3aGlsZSBpdHMgcG9wdXAgbWVudSBpcyBvcGVuLiBXZWJLaXQgc2hvdWxkIGRpc21pc3MgdGhl
IHBvcHVwLjwvcD4KKzxzZWxlY3Q+CisgIDxvcHRpb24+Q2xpY2sgaGVyZTwvb3B0aW9uPgorICA8
b3B0aW9uPllvdSBzaG91bGQgc2VlIHRoaXM8L29wdGlvbj4KKzwvc2VsZWN0PgorPGRpdiBpZD0i
cmVzdWx0Ij48L2Rpdj4KKzxzY3JpcHQ+CisKK2NvbnN0IHNlbGVjdCA9IGRvY3VtZW50LnF1ZXJ5
U2VsZWN0b3IoJ3NlbGVjdCcpOworCitpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgdGVzdFJ1
bm5lci53YWl0VW50aWxEb25lKCk7CitlbHNlIHsKKyAgICBzZWxlY3QuYWRkRXZlbnRMaXN0ZW5l
cignbW91c2Vkb3duJywgKCkgPT4geworICAgICAgICBzZXRUaW1lb3V0KCgpID0+IGRvY3VtZW50
LnF1ZXJ5U2VsZWN0b3IoJ3AnKS5mb2N1cygpLCAwKTsKKyAgICB9KTsKK30KKword2luZG93Lm9u
bG9hZCA9ICgpID0+IHsKKyAgICBjb25zdCBldmVudCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCJN
b3VzZUV2ZW50Iik7CisgICAgZXZlbnQuaW5pdE1vdXNlRXZlbnQoIm1vdXNlZG93biIsIHRydWUs
IHRydWUsIGRvY3VtZW50LmRlZmF1bHRWaWV3LCAxLCBzZWxlY3Qub2Zmc2V0TGVmdCArIDUsIHNl
bGVjdC5vZmZzZXRUb3AgKyA1LCBzZWxlY3Qub2Zmc2V0TGVmdCArIDUsIHNlbGVjdC5vZmZzZXRU
b3AgKyA1LCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgMCwgZG9jdW1lbnQpOworICAgIHNl
bGVjdC5kaXNwYXRjaEV2ZW50KGV2ZW50KTsKKyAgICAKKyAgICBpZiAoIXdpbmRvdy50ZXN0UnVu
bmVyKQorICAgICAgICByZXR1cm47CisKKyAgICB0ZXN0UnVubmVyLnJ1blVJU2NyaXB0KGB1aUNv
bnRyb2xsZXIudWlTY3JpcHRDb21wbGV0ZSgpYCwgKCkgPT4geworICAgICAgICBkb2N1bWVudC5x
dWVyeVNlbGVjdG9yKCdwJykuZm9jdXMoKTsKKyAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoJ3Jlc3VsdCcpLnRleHRDb250ZW50ID0gaW50ZXJuYWxzLmlzU2VsZWN0UG9wdXBWaXNpYmxl
KHNlbGVjdCkgPyAnRkFJTCcgOiAnUEFTUyc7CisgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9u
ZSgpOworICAgIH0pOworfQorCis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExh
eW91dFRlc3RzL2Zhc3QvZm9ybXMvc2VsZWN0L21hYy13azIvb3Blbi1zZWxlY3QtcG9wdXAtYWZ0
ZXItZGlzbWlzc2luZy1ieS1ibHVyLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9mYXN0L2Zvcm1zL3NlbGVjdC9tYWMtd2syL29wZW4tc2VsZWN0LXBvcHVwLWFmdGVyLWRp
c21pc3NpbmctYnktYmx1ci1leHBlY3RlZC50eHQJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVz
dHMvZmFzdC9mb3Jtcy9zZWxlY3QvbWFjLXdrMi9vcGVuLXNlbGVjdC1wb3B1cC1hZnRlci1kaXNt
aXNzaW5nLWJ5LWJsdXItZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNyBA
QAorVGhpcyB0ZXN0cyByZS1vcGVuaW5nIHRoZSBzZWxlY3QgZWxlbWVudCBwb3B1cCBhZnRlciBj
bG9zaW5nIGl0IGJ5IGJsdXJpbmcgdGhlIGZvY3VzLiBXZWJLaXQgc2hvdWxkIHJlLW9wZW4gdGhl
IHBvcHVwIGludGVhZCBvZiBoaXR0aW5nIGEgZGVidWcgYXNzZXJ0LgorVG8gbWFudWFsbHkgdGVz
dCwgYWZ0ZXIgdGhlIHBvcHVwIHdoaWNoIG9wZW5lZCBhcyB0aGlzIHRlc3QgaXMgZGlzbWlzc2Vk
IChjbGljayBlbHNld2hlcmUgdG8gZGlzbWlzcyBpdCBpZiBub3QpLiBDbGlja2luZyBvbiB0aGUg
c2VsZWN0IGVsZW1lbnQgc2hvdWxkIHRoZW4gb3BlbiB0aGUgcG9wdXAgbWVudS4KKworCitQQVNT
IC0gcG9wdXAgY2xvc2VkIGJ5IGJsdXIKK1BBU1MgLSBwb3B1cCBvcGVuZWQgYWZ0ZXIgY2xvc2Vk
IGJ5IGJsdXIKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9zZWxlY3QvbWFjLXdrMi9v
cGVuLXNlbGVjdC1wb3B1cC1hZnRlci1kaXNtaXNzaW5nLWJ5LWJsdXIuaHRtbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL3NlbGVjdC9tYWMtd2syL29wZW4tc2VsZWN0LXBv
cHVwLWFmdGVyLWRpc21pc3NpbmctYnktYmx1ci5odG1sCShub25leGlzdGVudCkKKysrIExheW91
dFRlc3RzL2Zhc3QvZm9ybXMvc2VsZWN0L21hYy13azIvb3Blbi1zZWxlY3QtcG9wdXAtYWZ0ZXIt
ZGlzbWlzc2luZy1ieS1ibHVyLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NiBAQAor
PCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxib2R5PgorPHAgdGFiaW5kZXg9IjEiPlRoaXMgdGVz
dHMgcmUtb3BlbmluZyB0aGUgc2VsZWN0IGVsZW1lbnQgcG9wdXAgYWZ0ZXIgY2xvc2luZyBpdCBi
eSBibHVyaW5nIHRoZSBmb2N1cy4KK1dlYktpdCBzaG91bGQgcmUtb3BlbiB0aGUgcG9wdXAgaW50
ZWFkIG9mIGhpdHRpbmcgYSBkZWJ1ZyBhc3NlcnQuPGJyPgorVG8gbWFudWFsbHkgdGVzdCwgYWZ0
ZXIgdGhlIHBvcHVwIHdoaWNoIG9wZW5lZCBhcyB0aGlzIHRlc3QgaXMgZGlzbWlzc2VkIChjbGlj
ayBlbHNld2hlcmUgdG8gZGlzbWlzcyBpdCBpZiBub3QpLgorQ2xpY2tpbmcgb24gdGhlIHNlbGVj
dCBlbGVtZW50IHNob3VsZCB0aGVuIG9wZW4gdGhlIHBvcHVwIG1lbnUuPC9wPgorPHNlbGVjdD4K
KyAgPG9wdGlvbj5DbGljayBoZXJlPC9vcHRpb24+CisgIDxvcHRpb24+WW91IHNob3VsZCBzZWUg
dGhpczwvb3B0aW9uPgorPC9zZWxlY3Q+Cis8cHJlIGlkPSJyZXN1bHQiPjwvcHJlPgorPHNjcmlw
dD4KKworY29uc3Qgc2VsZWN0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcignc2VsZWN0Jyk7CisK
K2lmICh3aW5kb3cudGVzdFJ1bm5lcikgeworICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgp
OworICAgIHRlc3RSdW5uZXIuZHVtcEFzVGV4dCgpOworfSBlbHNlIHsKKyAgICBsZXQgY291bnQg
PSAwOworICAgIHNlbGVjdC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCAoKSA9PiB7Cisg
ICAgICAgIGlmIChjb3VudCsrKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBzZXRUaW1l
b3V0KCgpID0+IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ3AnKS5mb2N1cygpLCAwKTsKKyAgICB9
KTsKK30KKworZnVuY3Rpb24gbG9nKHRleHQpIHsKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgncmVzdWx0JykudGV4dENvbnRlbnQgKz0gdGV4dCArICdcbic7Cit9CisKK2Z1bmN0aW9uIGNs
aWNrT25TZWxlY3RFbGVtZW50KCkgeworICAgIGNvbnN0IGV2ZW50ID0gZG9jdW1lbnQuY3JlYXRl
RXZlbnQoIk1vdXNlRXZlbnQiKTsKKyAgICBldmVudC5pbml0TW91c2VFdmVudCgibW91c2Vkb3du
IiwgdHJ1ZSwgdHJ1ZSwgZG9jdW1lbnQuZGVmYXVsdFZpZXcsIDEsIHNlbGVjdC5vZmZzZXRMZWZ0
ICsgNSwgc2VsZWN0Lm9mZnNldFRvcCArIDUsIHNlbGVjdC5vZmZzZXRMZWZ0ICsgNSwgc2VsZWN0
Lm9mZnNldFRvcCArIDUsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAwLCBkb2N1bWVudCk7
CisgICAgc2VsZWN0LmRpc3BhdGNoRXZlbnQoZXZlbnQpOworfQorCitmdW5jdGlvbiByb3VuZFRy
aXBUb1VJUHJvY2VzcygpIHsKKyAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHsK
KyAgICAgICAgdGVzdFJ1bm5lci5ydW5VSVNjcmlwdChgdWlDb250cm9sbGVyLnVpU2NyaXB0Q29t
cGxldGUoKWAsIHJlc29sdmUpOworICAgIH0pOworfQorCit3aW5kb3cub25sb2FkID0gYXN5bmMg
KCkgPT4geworICAgIGNsaWNrT25TZWxlY3RFbGVtZW50KCk7CisKKyAgICBpZiAoIXdpbmRvdy50
ZXN0UnVubmVyKQorICAgICAgICByZXR1cm47CisKKyAgICBhd2FpdCByb3VuZFRyaXBUb1VJUHJv
Y2VzcygpOworICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ3AnKS5mb2N1cygpOworICAgIGxv
ZyhpbnRlcm5hbHMuaXNTZWxlY3RQb3B1cFZpc2libGUoc2VsZWN0KSA/ICdGQUlMIC0gcG9wdXAg
d2FzIG9wZW4gYWZ0ZXIgbW92aW5nIHRoZSBmb2N1cycgOiAnUEFTUyAtIHBvcHVwIGNsb3NlZCBi
eSBibHVyJyk7CisKKyAgICBjbGlja09uU2VsZWN0RWxlbWVudCgpOworICAgIGxvZyhpbnRlcm5h
bHMuaXNTZWxlY3RQb3B1cFZpc2libGUoc2VsZWN0KSA/ICdQQVNTIC0gcG9wdXAgb3BlbmVkIGFm
dGVyIGNsb3NlZCBieSBibHVyJyA6ICdGQUlMIC0gcG9wdXAgZmFpbGVkIHRvIG9wZW4gZm9yIHRo
ZSBzZWNvbmQgdGltZScpOworCisgICAgYXdhaXQgcm91bmRUcmlwVG9VSVByb2Nlc3MoKTsKKyAg
ICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdwJykuZm9jdXMoKTsKKworICAgIHRlc3RSdW5uZXIu
bm90aWZ5RG9uZSgpOworfQorCis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExh
eW91dFRlc3RzL2Zhc3QvZm9ybXMvc2VsZWN0L21hYy13azIvYmx1ci1kaXNtaXNzZXMtc2VsZWN0
LXBvcHVwLWV4cGVjdGVkLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9mb3Jt
cy9zZWxlY3QvbWFjLXdrMi9ibHVyLWRpc21pc3Nlcy1zZWxlY3QtcG9wdXAtZXhwZWN0ZWQuaHRt
bAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL3NlbGVjdC9tYWMtd2sy
L2JsdXItZGlzbWlzc2VzLXNlbGVjdC1wb3B1cC1leHBlY3RlZC5odG1sCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTIgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8Ym9keT4KKzxwIHRh
YmluZGV4PSIxIj5UaGlzIHRlc3RzIG1vdmluZyB0aGUgZm9jdXMgZnJvbSBhIHNlbGVjdCBlbGVt
ZW50IHdoaWxlIGl0cyBwb3B1cCBtZW51IGlzIG9wZW4uIFdlYktpdCBzaG91bGQgZGlzbWlzcyB0
aGUgcG9wdXAuPC9wPgorPHNlbGVjdCBvbm1vdXNlZG93bj0ibW92ZUZvY3VzKCkiPgorICA8b3B0
aW9uPkNsaWNrIGhlcmU8L29wdGlvbj4KKyAgPG9wdGlvbj5Zb3Ugc2hvdWxkIHNlZSB0aGlzPC9v
cHRpb24+Cis8L3NlbGVjdD4KKzxkaXYgaWQ9InJlc3VsdCI+UEFTUzwvZGl2PgorPHNjcmlwdD4g
ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigncCcpLmZvY3VzKCk7IDwvc2NyaXB0PgorPC9ib2R5Pgor
PC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9zZWxlY3QvbWFjLXdrMi9ibHVy
LWRpc21pc3Nlcy1zZWxlY3QtcG9wdXAuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9m
YXN0L2Zvcm1zL3NlbGVjdC9tYWMtd2syL2JsdXItZGlzbWlzc2VzLXNlbGVjdC1wb3B1cC5odG1s
CShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL2Zhc3QvZm9ybXMvc2VsZWN0L21hYy13azIv
Ymx1ci1kaXNtaXNzZXMtc2VsZWN0LXBvcHVwLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwzOSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxib2R5PgorPHAgdGFiaW5kZXg9IjEi
PlRoaXMgdGVzdHMgbW92aW5nIHRoZSBmb2N1cyBmcm9tIGEgc2VsZWN0IGVsZW1lbnQgd2hpbGUg
aXRzIHBvcHVwIG1lbnUgaXMgb3Blbi4gV2ViS2l0IHNob3VsZCBkaXNtaXNzIHRoZSBwb3B1cC48
L3A+Cis8c2VsZWN0PgorICA8b3B0aW9uPkNsaWNrIGhlcmU8L29wdGlvbj4KKyAgPG9wdGlvbj5Z
b3Ugc2hvdWxkIHNlZSB0aGlzPC9vcHRpb24+Cis8L3NlbGVjdD4KKzxkaXYgaWQ9InJlc3VsdCI+
PC9kaXY+Cis8c2NyaXB0PgorCitjb25zdCBzZWxlY3QgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9y
KCdzZWxlY3QnKTsKKworaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgIHRlc3RSdW5uZXIud2Fp
dFVudGlsRG9uZSgpOworZWxzZSB7CisgICAgc2VsZWN0LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNl
ZG93bicsICgpID0+IHsKKyAgICAgICAgc2V0VGltZW91dCgoKSA9PiBkb2N1bWVudC5xdWVyeVNl
bGVjdG9yKCdwJykuZm9jdXMoKSwgMCk7CisgICAgfSk7Cit9CisKK3dpbmRvdy5vbmxvYWQgPSAo
KSA9PiB7CisgICAgY29uc3QgZXZlbnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgiTW91c2VFdmVu
dCIpOworICAgIGV2ZW50LmluaXRNb3VzZUV2ZW50KCJtb3VzZWRvd24iLCB0cnVlLCB0cnVlLCBk
b2N1bWVudC5kZWZhdWx0VmlldywgMSwgc2VsZWN0Lm9mZnNldExlZnQgKyA1LCBzZWxlY3Qub2Zm
c2V0VG9wICsgNSwgc2VsZWN0Lm9mZnNldExlZnQgKyA1LCBzZWxlY3Qub2Zmc2V0VG9wICsgNSwg
ZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIDAsIGRvY3VtZW50KTsKKyAgICBzZWxlY3QuZGlz
cGF0Y2hFdmVudChldmVudCk7CisgICAgCisgICAgaWYgKCF3aW5kb3cudGVzdFJ1bm5lcikKKyAg
ICAgICAgcmV0dXJuOworCisgICAgdGVzdFJ1bm5lci5ydW5VSVNjcmlwdChgdWlDb250cm9sbGVy
LnVpU2NyaXB0Q29tcGxldGUoKWAsICgpID0+IHsKKyAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxl
Y3RvcigncCcpLmZvY3VzKCk7CisgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZXN1
bHQnKS50ZXh0Q29udGVudCA9IGludGVybmFscy5pc1NlbGVjdFBvcHVwVmlzaWJsZShzZWxlY3Qp
ID8gJ0ZBSUwnIDogJ1BBU1MnOworICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKKyAg
ICB9KTsKK30KKworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0
cy9mYXN0L2Zvcm1zL3NlbGVjdC9tYWMtd2syL29wZW4tc2VsZWN0LXBvcHVwLWFmdGVyLWRpc21p
c3NpbmctYnktYmx1ci1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFz
dC9mb3Jtcy9zZWxlY3QvbWFjLXdrMi9vcGVuLXNlbGVjdC1wb3B1cC1hZnRlci1kaXNtaXNzaW5n
LWJ5LWJsdXItZXhwZWN0ZWQudHh0CShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL2Zhc3Qv
Zm9ybXMvc2VsZWN0L21hYy13azIvb3Blbi1zZWxlY3QtcG9wdXAtYWZ0ZXItZGlzbWlzc2luZy1i
eS1ibHVyLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcgQEAKK1RoaXMg
dGVzdHMgcmUtb3BlbmluZyB0aGUgc2VsZWN0IGVsZW1lbnQgcG9wdXAgYWZ0ZXIgY2xvc2luZyBp
dCBieSBibHVyaW5nIHRoZSBmb2N1cy4gV2ViS2l0IHNob3VsZCByZS1vcGVuIHRoZSBwb3B1cCBp
bnRlYWQgb2YgaGl0dGluZyBhIGRlYnVnIGFzc2VydC4KK1RvIG1hbnVhbGx5IHRlc3QsIGFmdGVy
IHRoZSBwb3B1cCB3aGljaCBvcGVuZWQgYXMgdGhpcyB0ZXN0IGlzIGRpc21pc3NlZCAoY2xpY2sg
ZWxzZXdoZXJlIHRvIGRpc21pc3MgaXQgaWYgbm90KS4gQ2xpY2tpbmcgb24gdGhlIHNlbGVjdCBl
bGVtZW50IHNob3VsZCB0aGVuIG9wZW4gdGhlIHBvcHVwIG1lbnUuCisKKworUEFTUyAtIHBvcHVw
IGNsb3NlZCBieSBibHVyCitQQVNTIC0gcG9wdXAgb3BlbmVkIGFmdGVyIGNsb3NlZCBieSBibHVy
CisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZm9ybXMvc2VsZWN0L21hYy13azIvb3Blbi1zZWxl
Y3QtcG9wdXAtYWZ0ZXItZGlzbWlzc2luZy1ieS1ibHVyLmh0bWwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvZmFzdC9mb3Jtcy9zZWxlY3QvbWFjLXdrMi9vcGVuLXNlbGVjdC1wb3B1cC1hZnRl
ci1kaXNtaXNzaW5nLWJ5LWJsdXIuaHRtbAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy9m
YXN0L2Zvcm1zL3NlbGVjdC9tYWMtd2syL29wZW4tc2VsZWN0LXBvcHVwLWFmdGVyLWRpc21pc3Np
bmctYnktYmx1ci5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjYgQEAKKzwhRE9DVFlQ
RSBodG1sPgorPGh0bWw+Cis8Ym9keT4KKzxwIHRhYmluZGV4PSIxIj5UaGlzIHRlc3RzIHJlLW9w
ZW5pbmcgdGhlIHNlbGVjdCBlbGVtZW50IHBvcHVwIGFmdGVyIGNsb3NpbmcgaXQgYnkgYmx1cmlu
ZyB0aGUgZm9jdXMuCitXZWJLaXQgc2hvdWxkIHJlLW9wZW4gdGhlIHBvcHVwIGludGVhZCBvZiBo
aXR0aW5nIGEgZGVidWcgYXNzZXJ0Ljxicj4KK1RvIG1hbnVhbGx5IHRlc3QsIGFmdGVyIHRoZSBw
b3B1cCB3aGljaCBvcGVuZWQgYXMgdGhpcyB0ZXN0IGlzIGRpc21pc3NlZCAoY2xpY2sgZWxzZXdo
ZXJlIHRvIGRpc21pc3MgaXQgaWYgbm90KS4KK0NsaWNraW5nIG9uIHRoZSBzZWxlY3QgZWxlbWVu
dCBzaG91bGQgdGhlbiBvcGVuIHRoZSBwb3B1cCBtZW51LjwvcD4KKzxzZWxlY3Q+CisgIDxvcHRp
b24+Q2xpY2sgaGVyZTwvb3B0aW9uPgorICA8b3B0aW9uPllvdSBzaG91bGQgc2VlIHRoaXM8L29w
dGlvbj4KKzwvc2VsZWN0PgorPHByZSBpZD0icmVzdWx0Ij48L3ByZT4KKzxzY3JpcHQ+CisKK2Nv
bnN0IHNlbGVjdCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ3NlbGVjdCcpOworCitpZiAod2lu
ZG93LnRlc3RSdW5uZXIpIHsKKyAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKKyAgICB0
ZXN0UnVubmVyLmR1bXBBc1RleHQoKTsKK30gZWxzZSB7CisgICAgbGV0IGNvdW50ID0gMDsKKyAg
ICBzZWxlY3QuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgKCkgPT4geworICAgICAgICBp
ZiAoY291bnQrKykKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgc2V0VGltZW91dCgoKSA9
PiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdwJykuZm9jdXMoKSwgMCk7CisgICAgfSk7Cit9CisK
K2Z1bmN0aW9uIGxvZyh0ZXh0KSB7CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Jlc3Vs
dCcpLnRleHRDb250ZW50ICs9IHRleHQgKyAnXG4nOworfQorCitmdW5jdGlvbiBjbGlja09uU2Vs
ZWN0RWxlbWVudCgpIHsKKyAgICBjb25zdCBldmVudCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCJN
b3VzZUV2ZW50Iik7CisgICAgZXZlbnQuaW5pdE1vdXNlRXZlbnQoIm1vdXNlZG93biIsIHRydWUs
IHRydWUsIGRvY3VtZW50LmRlZmF1bHRWaWV3LCAxLCBzZWxlY3Qub2Zmc2V0TGVmdCArIDUsIHNl
bGVjdC5vZmZzZXRUb3AgKyA1LCBzZWxlY3Qub2Zmc2V0TGVmdCArIDUsIHNlbGVjdC5vZmZzZXRU
b3AgKyA1LCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgMCwgZG9jdW1lbnQpOworICAgIHNl
bGVjdC5kaXNwYXRjaEV2ZW50KGV2ZW50KTsKK30KKworZnVuY3Rpb24gcm91bmRUcmlwVG9VSVBy
b2Nlc3MoKSB7CisgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7CisgICAgICAg
IHRlc3RSdW5uZXIucnVuVUlTY3JpcHQoYHVpQ29udHJvbGxlci51aVNjcmlwdENvbXBsZXRlKClg
LCByZXNvbHZlKTsKKyAgICB9KTsKK30KKword2luZG93Lm9ubG9hZCA9IGFzeW5jICgpID0+IHsK
KyAgICBjbGlja09uU2VsZWN0RWxlbWVudCgpOworCisgICAgaWYgKCF3aW5kb3cudGVzdFJ1bm5l
cikKKyAgICAgICAgcmV0dXJuOworCisgICAgYXdhaXQgcm91bmRUcmlwVG9VSVByb2Nlc3MoKTsK
KyAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdwJykuZm9jdXMoKTsKKyAgICBsb2coaW50ZXJu
YWxzLmlzU2VsZWN0UG9wdXBWaXNpYmxlKHNlbGVjdCkgPyAnRkFJTCAtIHBvcHVwIHdhcyBvcGVu
IGFmdGVyIG1vdmluZyB0aGUgZm9jdXMnIDogJ1BBU1MgLSBwb3B1cCBjbG9zZWQgYnkgYmx1cicp
OworCisgICAgY2xpY2tPblNlbGVjdEVsZW1lbnQoKTsKKyAgICBsb2coaW50ZXJuYWxzLmlzU2Vs
ZWN0UG9wdXBWaXNpYmxlKHNlbGVjdCkgPyAnUEFTUyAtIHBvcHVwIG9wZW5lZCBhZnRlciBjbG9z
ZWQgYnkgYmx1cicgOiAnRkFJTCAtIHBvcHVwIGZhaWxlZCB0byBvcGVuIGZvciB0aGUgc2Vjb25k
IHRpbWUnKTsKKworICAgIGF3YWl0IHJvdW5kVHJpcFRvVUlQcm9jZXNzKCk7CisgICAgZG9jdW1l
bnQucXVlcnlTZWxlY3RvcigncCcpLmZvY3VzKCk7CisKKyAgICB0ZXN0UnVubmVyLm5vdGlmeURv
bmUoKTsKK30KKworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0
cy9wbGF0Zm9ybS9tYWMtd2syL1Rlc3RFeHBlY3RhdGlvbnMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvcGxhdGZvcm0vbWFjLXdrMi9UZXN0RXhwZWN0YXRpb25zCShyZXZpc2lvbiAyNDM1NTgp
CisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMtd2syL1Rlc3RFeHBlY3RhdGlvbnMJKHdvcmtp
bmcgY29weSkKQEAgLTcsNiArNyw3IEBACiAKIGVkaXRpbmcvZmluZCBbIFBhc3MgXQogZWRpdGlu
Zy91bmRvLW1hbmFnZXIgWyBQYXNzIF0KK2Zhc3QvZm9ybXMvc2VsZWN0L21hYy13azIgWyBQYXNz
IF0KIGZhc3QvdmlzdWFsLXZpZXdwb3J0L3RpbGVkLWRyYXdpbmcgWyBQYXNzIF0KIGZhc3Qvd2Vi
LXNoYXJlIFsgUGFzcyBdCiBzY3JvbGxpbmdjb29yZGluYXRvciBbIFBhc3MgXQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>385645</attachid>
            <date>2019-12-13 14:57:41 -0800</date>
            <delta_ts>2019-12-16 10:20:40 -0800</delta_ts>
            <desc>Patch and unit test</desc>
            <filename>bug-196127-20191213145741.patch</filename>
            <type>text/plain</type>
            <size>7673</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUzMzM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGVlNDcwY2RiN2E5YzJl
OTg1ZjAxMTM0Njc4MGMzNzEzZTIzZTE4Ni4uNmI0M2E5ZDNmYmE3MTkxMjg2ZGJjMmFjZDQ5Y2Qy
ZGNhZmJlNjYzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDE5LTEyLTEzICBEYW5p
ZWwgQmF0ZXMgIDxkYWJhdGVzQGFwcGxlLmNvbT4KKworICAgICAgICBSZXByb2R1Y2libGUgY2Fz
ZSBvZiBiYWNrd2FyZHMgbmV4dFBhcmFncmFwaCByZXR1cm5pbmcgYSBwb3NpdGlvbiBhaGVhZCBv
ZiB0aGUgaW5wdXQgcG9zaXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE5NjEyNworICAgICAgICA8cmRhcjovL3Byb2JsZW0vNDkxMzU4OTA+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRml4IHVwIHRo
ZSBjb2RlIHRvIGhhbmRsZToKKworICAgICAgICAgICAgICAgIDEuIFdoZW4gdGhlIHNwZWNpZmll
ZCBwb3NpdGlvbiBpcyBhdCBhIHBhcmFncmFwaCBib3VuZGFyeS4KKyAgICAgICAgICAgICAgICAg
ICAgICAgIEZvciB0aGlzIGNhc2UsIHdlIGRvIHdoYXQgd2UgZG8gbm93IGZvciB0aGUgIXdpdGhp
blVuaXRPZkdyYW51bGFyaXR5IGNhc2UuCisgICAgICAgICAgICAgICAgMi4gV2hlbiB0aGUgc3Bl
Y2lmaWVkIHBvc2l0aW9uIGlzIGFjdHVhbGx5IGluc2lkZSBhIHBhcmFncmFwaDoKKyAgICAgICAg
ICAgICAgICAgICAgICAgIEZvciB0aGlzIGNhc2UsIHdlIG5lZWQgdG8gcmV0dXJuIHRoZSBlbmQg
b2YgdGhlIHByZXZpb3VzIHBhcmFncmFwaCBvciB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAg
IHN0YXJ0IG9mIHRoZSBuZXh0IHBhcmFncmFwaCBkZXBlbmRpbmcgb24gd2hldGhlciB3ZSBhcmUg
c2VsZWN0aW5nIGZvcndhcmQKKyAgICAgICAgICAgICAgICAgICAgICAgIG9yIGJhY2t3YXJkcywg
cmVzcGVjdGl2ZWx5LgorCisgICAgICAgICogZWRpdGluZy9WaXNpYmxlVW5pdHMuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6bmV4dFBhcmFncmFwaEJvdW5kYXJ5SW5EaXJlY3Rpb24pOgorCiAyMDE5
LTEyLTEyICBEYW5pZWwgQmF0ZXMgIDxkYWJhdGVzQGFwcGxlLmNvbT4KIAogICAgICAgICAtcmVx
dWVzdERvY3VtZW50Q29udGV4dCBhbHdheXMgcmV0dXJucyAxIHRleHQgdW5pdCBtb3JlIGdyYW51
bGFyaXR5IHRoYW4gcmVxdWVzdGVkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGU0YjNhMWIzMGRjZjdkZmJjOGY2NDBl
MWI2ZjI3MzhiN2MwZWI4MmEuLjczZTk1Y2FjZGY2MzM3ZmEzNjczNDFiMDg1ZTFhMzZkMTljNThl
NzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTktMTItMTMgIERhbmllbCBCYXRlcyAg
PGRhYmF0ZXNAYXBwbGUuY29tPgorCisgICAgICAgIFJlcHJvZHVjaWJsZSBjYXNlIG9mIGJhY2t3
YXJkcyBuZXh0UGFyYWdyYXBoIHJldHVybmluZyBhIHBvc2l0aW9uIGFoZWFkIG9mIHRoZSBpbnB1
dCBwb3NpdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTk2MTI3CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS80OTEzNTg5MD4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZW1vdmUgd29ya2Fyb3VuZCBu
b3cgdGhhdCBXZWJDb3JlOjpuZXh0UGFyYWdyYXBoQm91bmRhcnlJbkRpcmVjdGlvbigpIGJlaGF2
ZXMgY29ycmVjdGx5LgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdl
SU9TLm1tOgorICAgICAgICAoV2ViS2l0Ojptb3ZlQnlHcmFudWxhcml0eVJlc3BlY3RpbmdXb3Jk
Qm91bmRhcnkpOgorCiAyMDE5LTEyLTEyICBEYW5pZWwgQmF0ZXMgIDxkYWJhdGVzQGFwcGxlLmNv
bT4KIAogICAgICAgICAtcmVxdWVzdERvY3VtZW50Q29udGV4dCBhbHdheXMgcmV0dXJucyAxIHRl
eHQgdW5pdCBtb3JlIGdyYW51bGFyaXR5IHRoYW4gcmVxdWVzdGVkCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVVbml0cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1Zpc2libGVVbml0cy5jcHAKaW5kZXggZjJkMjJlZTE3ODNmNDhlZTViODg1MmJiZGI4YTY1
ZWQ2YmU5MmFlMC4uNDJmNTdjYWIyNDYzNzlkZTQ3Y2Y2NjI4Y2YzYmY0YTYwMDEwOGY3MyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlVW5pdHMuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVVuaXRzLmNwcApAQCAtMTc5OCwxOCArMTc5OCwx
OCBAQCBzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIG5leHRMaW5lQm91bmRhcnlJbkRpcmVjdGlvbihj
b25zdCBWaXNpYmxlUG9zaXRpb24mIHZwLCBTZQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0
YXRpYyBWaXNpYmxlUG9zaXRpb24gbmV4dFBhcmFncmFwaEJvdW5kYXJ5SW5EaXJlY3Rpb24oY29u
c3QgVmlzaWJsZVBvc2l0aW9uJiB2cCwgU2VsZWN0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbikKK3N0
YXRpYyBWaXNpYmxlUG9zaXRpb24gbmV4dFBhcmFncmFwaEJvdW5kYXJ5SW5EaXJlY3Rpb24oVmlz
aWJsZVBvc2l0aW9uIHBvc2l0aW9uLCBTZWxlY3Rpb25EaXJlY3Rpb24gZGlyZWN0aW9uKQogewog
ICAgIGJvb2wgdXNlRG93bnN0cmVhbSA9IGRpcmVjdGlvbklzRG93bnN0cmVhbShkaXJlY3Rpb24p
OwotICAgIGJvb2wgd2l0aGluVW5pdE9mR3JhbnVsYXJpdHkgPSB3aXRoaW5UZXh0VW5pdE9mR3Jh
bnVsYXJpdHkodnAsIFBhcmFncmFwaEdyYW51bGFyaXR5LCBkaXJlY3Rpb24pOwotICAgIFZpc2li
bGVQb3NpdGlvbiByZXN1bHQ7Ci0KLSAgICBpZiAoIXdpdGhpblVuaXRPZkdyYW51bGFyaXR5KQot
ICAgICAgICByZXN1bHQgPSAgdXNlRG93bnN0cmVhbSA/IHN0YXJ0T2ZQYXJhZ3JhcGgobmV4dFBh
cmFncmFwaFBvc2l0aW9uKHZwLCB2cC5saW5lRGlyZWN0aW9uUG9pbnRGb3JCbG9ja0RpcmVjdGlv
bk5hdmlnYXRpb24oKSkpIDogZW5kT2ZQYXJhZ3JhcGgocHJldmlvdXNQYXJhZ3JhcGhQb3NpdGlv
bih2cCwgdnAubGluZURpcmVjdGlvblBvaW50Rm9yQmxvY2tEaXJlY3Rpb25OYXZpZ2F0aW9uKCkp
KTsKLSAgICBlbHNlCi0gICAgICAgIHJlc3VsdCA9IHVzZURvd25zdHJlYW0gPyBlbmRPZlBhcmFn
cmFwaCh2cCkgOiBzdGFydE9mUGFyYWdyYXBoKHZwKTsKLQotICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgaWYgKGF0Qm91bmRhcnlPZkdyYW51bGFyaXR5KHBvc2l0aW9uLCBQYXJhZ3JhcGhHcmFudWxh
cml0eSwgZGlyZWN0aW9uKSkgeworICAgICAgICBhdXRvIGxpbmVEaXJlY3Rpb24gPSBwb3NpdGlv
bi5saW5lRGlyZWN0aW9uUG9pbnRGb3JCbG9ja0RpcmVjdGlvbk5hdmlnYXRpb24oKTsKKyAgICAg
ICAgcmV0dXJuIHVzZURvd25zdHJlYW0gPyBzdGFydE9mUGFyYWdyYXBoKG5leHRQYXJhZ3JhcGhQ
b3NpdGlvbihwb3NpdGlvbiwgbGluZURpcmVjdGlvbikpIDogZW5kT2ZQYXJhZ3JhcGgocHJldmlv
dXNQYXJhZ3JhcGhQb3NpdGlvbihwb3NpdGlvbiwgbGluZURpcmVjdGlvbikpOworICAgIH0KKyAg
ICBpZiAoIXdpdGhpblRleHRVbml0T2ZHcmFudWxhcml0eShwb3NpdGlvbiwgUGFyYWdyYXBoR3Jh
bnVsYXJpdHksIGRpcmVjdGlvbikpIHsKKyAgICAgICAgYXV0byBsaW5lRGlyZWN0aW9uID0gcG9z
aXRpb24ubGluZURpcmVjdGlvblBvaW50Rm9yQmxvY2tEaXJlY3Rpb25OYXZpZ2F0aW9uKCk7Cisg
ICAgICAgIHBvc2l0aW9uID0gdXNlRG93bnN0cmVhbSA/IHByZXZpb3VzUGFyYWdyYXBoUG9zaXRp
b24ocG9zaXRpb24sIGxpbmVEaXJlY3Rpb24pIDogbmV4dFBhcmFncmFwaFBvc2l0aW9uKHBvc2l0
aW9uLCBsaW5lRGlyZWN0aW9uKTsKKyAgICB9CisgICAgcmV0dXJuIHVzZURvd25zdHJlYW0gPyBl
bmRPZlBhcmFncmFwaChwb3NpdGlvbikgOiBzdGFydE9mUGFyYWdyYXBoKHBvc2l0aW9uKTsKIH0K
IAogc3RhdGljIFZpc2libGVQb3NpdGlvbiBuZXh0RG9jdW1lbnRCb3VuZGFyeUluRGlyZWN0aW9u
KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgdnAsIFNlbGVjdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24p
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFn
ZUlPUy5tbSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9T
Lm1tCmluZGV4IGZmZjQ5YTBjNjQxYTU5OWM5MWU4ZDg5MDU1NTIyMDU3Mjk3YzdlOTYuLjUyOTJl
M2M0Nzk1MDIzZDA4OTZkYjJjY2UxMTdhYzAxOTg5MzVjOGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCisrKyBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCkBAIC0zODg5LDkgKzM4
ODksNiBAQCBzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIG1vdmVCeUdyYW51bGFyaXR5UmVzcGVjdGlu
Z1dvcmRCb3VuZGFyeShjb25zdCBWaXNpYmxlUG9zaQogICAgIFZpc2libGVQb3NpdGlvbiBuZXh0
UG9zaXRpb247CiAgICAgZG8gewogICAgICAgICBuZXh0UG9zaXRpb24gPSBwb3NpdGlvbk9mTmV4
dEJvdW5kYXJ5T2ZHcmFudWxhcml0eShjdXJyZW50UG9zaXRpb24sIGdyYW51bGFyaXR5LCBkaXJl
Y3Rpb24pOwotICAgICAgICAvLyBGSVhNRSAoMTk2MTI3KTogV2Ugc2hvdWxkbid0IG5lZWQgdG8g
ZG8gdGhpcywgYnV0IGhhdmUgc2VlbiBwcmV2aW91c1BhcmFncmFwaFBvc2l0aW9uIGdvIGZvcndh
cmRzLgotICAgICAgICBpZiAoKGJhY2t3YXJkcyAmJiBuZXh0UG9zaXRpb24gPiBjdXJyZW50UG9z
aXRpb24pIHx8ICghYmFja3dhcmRzICYmIG5leHRQb3NpdGlvbiA8IGN1cnJlbnRQb3NpdGlvbikp
Ci0gICAgICAgICAgICBicmVhazsKICAgICAgICAgaWYgKG5leHRQb3NpdGlvbi5pc051bGwoKSkK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjdXJyZW50UG9zaXRpb24gPSBuZXh0UG9zaXRp
b247CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXgg
NjhhMjY2OWYyNmQ1YWM5MmU3ZDRlYjIzY2I1ZWFmZmNmOTA0YTZiZi4uMGRiODU0MDUxYzk1OWJj
ZjY5OTU3ZTM3M2FkYjIyYjRlNmQ5MjNhNCAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisr
KyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDE5LTEyLTEzICBEYW5pZWwg
QmF0ZXMgIDxkYWJhdGVzQGFwcGxlLmNvbT4KKworICAgICAgICBSZXByb2R1Y2libGUgY2FzZSBv
ZiBiYWNrd2FyZHMgbmV4dFBhcmFncmFwaCByZXR1cm5pbmcgYSBwb3NpdGlvbiBhaGVhZCBvZiB0
aGUgaW5wdXQgcG9zaXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE5NjEyNworICAgICAgICA8cmRhcjovL3Byb2JsZW0vNDkxMzU4OTA+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIGEgdGVzdCB0
byBlbnN1cmUgdGhhdCByZXF1ZXN0aW5nIHR3byBwYXJhZ3JhcGhzIGFyb3VuZCB0aGUgaW5zZXJ0
aW9uIHBvaW50IHRoYXQgaXMKKyAgICAgICAgbm90IGluIGEgcGFyYWdyYXBoIHN0aWxsIHdvcmtz
LgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Eb2N1bWVudEVk
aXRpbmdDb250ZXh0Lm1tOgorICAgICAgICAoVEVTVCk6CisKIDIwMTktMTItMTIgIERhbmllbCBC
YXRlcyAgPGRhYmF0ZXNAYXBwbGUuY29tPgogCiAgICAgICAgIC1yZXF1ZXN0RG9jdW1lbnRDb250
ZXh0IGFsd2F5cyByZXR1cm5zIDEgdGV4dCB1bml0IG1vcmUgZ3JhbnVsYXJpdHkgdGhhbiByZXF1
ZXN0ZWQKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
RG9jdW1lbnRFZGl0aW5nQ29udGV4dC5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvRG9jdW1lbnRFZGl0aW5nQ29udGV4dC5tbQppbmRleCA2YmY4NjVjYWFmMWQ5Y2Ri
NzY1ZWJlYjQ5ZmRjYTU4ODhlYTRmM2M0Li5kN2UzNjVhYWI1NTFjYzI5MWQ3YzdjNWViNmZlMDcy
MjEzMjA5YTk3IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENv
Y29hL0RvY3VtZW50RWRpdGluZ0NvbnRleHQubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRDb2NvYS9Eb2N1bWVudEVkaXRpbmdDb250ZXh0Lm1tCkBAIC02MjUsNiArNjI1
LDE5IEBAIFRFU1QoV2ViS2l0LCBEb2N1bWVudEVkaXRpbmdDb250ZXh0UmVxdWVzdExhc3RUd29Q
YXJhZ3JhcGhzKQogICAgIEVYUEVDVF9OVUxMKGNvbnRleHQuY29udGV4dEFmdGVyKTsKIH0KIAor
VEVTVChXZWJLaXQsIERvY3VtZW50RWRpdGluZ0NvbnRleHRSZXF1ZXN0TGFzdFR3b1BhcmFncmFw
aHNXaXRoQ2FyZXROb3RJblBhcmFncmFwaCkKK3sKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5T
KFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgw
MCwgNjAwKV0pOworICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkSFRNTFN0cmluZzphcHBs
eUFoZW1TdHlsZShAIjxzdHlsZT5ib2R5IHsgbWFyZ2luOiAwOyB9IGlmcmFtZSB7IGJvcmRlcjog
bm9uZTsgfTwvc3R5bGU+PG1ldGEgbmFtZT0ndmlld3BvcnQnIGNvbnRlbnQ9J2luaXRpYWwtc2Nh
bGU9MSc+PHNwYW4gaWQ9J3RoZSc+VGhlPC9zcGFuPiBxdWljayBicm93biBmb3ggPHNwYW4gaWQ9
J2p1bXBzJz5qdW1wczwvc3Bhbj4gb3ZlciB0aGUgbGF6eSA8c3BhbiBpZD0nZG9nJz5kb2cuPC9z
cGFuPiIpXTsKKyAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZ2V0
U2VsZWN0aW9uKCkuc2V0QmFzZUFuZEV4dGVudChqdW1wcywgMCwganVtcHMsIDEpIl07IC8vIFdp
bGwgZm9jdXMgPHA+LgorCisgICAgYXV0byAqY29udGV4dCA9IFt3ZWJWaWV3IHN5bmNocm9ub3Vz
bHlSZXF1ZXN0RG9jdW1lbnRDb250ZXh0Om1ha2VSZXF1ZXN0KFVJV0tEb2N1bWVudFJlcXVlc3RU
ZXh0LCBVSVRleHRHcmFudWxhcml0eVBhcmFncmFwaCwgMildOworICAgIEVYUEVDVF9OT1RfTlVM
TChjb250ZXh0KTsKKyAgICBFWFBFQ1RfTlNTVFJJTkdfRVEoIlRoZSBxdWljayBicm93biBmb3gg
IiwgY29udGV4dC5jb250ZXh0QmVmb3JlKTsKKyAgICBFWFBFQ1RfTlNTVFJJTkdfRVEoImp1bXBz
IiwgY29udGV4dC5zZWxlY3RlZFRleHQpOworICAgIEVYUEVDVF9OU1NUUklOR19FUSgiIG92ZXIg
dGhlIGxhenkgZG9nLiIsIGNvbnRleHQuY29udGV4dEFmdGVyKTsKK30KKwogLy8gTUFSSzogVGVz
dHMgdXNpbmcgY2hhcmFjdGVyIGdyYW51bGFyaXR5CiAvLyBOb3RlIHRoYXQgd2UgYWx3YXlzIHJl
dHVybiByZXN1bHRzIHdpdGggcmVzcGVjdCB0byB0aGUgbmVhcmVzdCB3b3JkIGJvdW5kYXJ5IGlu
IHRoZSBkaXJlY3Rpb24gb2YgdGhlIHNlbGVjdGlvbi4KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>385779</attachid>
            <date>2019-12-16 10:20:41 -0800</date>
            <delta_ts>2019-12-16 14:29:41 -0800</delta_ts>
            <desc>Patch and unit test</desc>
            <filename>bug-196127-20191216102040.patch</filename>
            <type>text/plain</type>
            <size>7555</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUzMzM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGVlNDcwY2RiN2E5YzJl
OTg1ZjAxMTM0Njc4MGMzNzEzZTIzZTE4Ni4uNmI0M2E5ZDNmYmE3MTkxMjg2ZGJjMmFjZDQ5Y2Qy
ZGNhZmJlNjYzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDE5LTEyLTEzICBEYW5p
ZWwgQmF0ZXMgIDxkYWJhdGVzQGFwcGxlLmNvbT4KKworICAgICAgICBSZXByb2R1Y2libGUgY2Fz
ZSBvZiBiYWNrd2FyZHMgbmV4dFBhcmFncmFwaCByZXR1cm5pbmcgYSBwb3NpdGlvbiBhaGVhZCBv
ZiB0aGUgaW5wdXQgcG9zaXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE5NjEyNworICAgICAgICA8cmRhcjovL3Byb2JsZW0vNDkxMzU4OTA+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRml4IHVwIHRo
ZSBjb2RlIHRvIGhhbmRsZToKKworICAgICAgICAgICAgICAgIDEuIFdoZW4gdGhlIHNwZWNpZmll
ZCBwb3NpdGlvbiBpcyBhdCBhIHBhcmFncmFwaCBib3VuZGFyeS4KKyAgICAgICAgICAgICAgICAg
ICAgICAgIEZvciB0aGlzIGNhc2UsIHdlIGRvIHdoYXQgd2UgZG8gbm93IGZvciB0aGUgIXdpdGhp
blVuaXRPZkdyYW51bGFyaXR5IGNhc2UuCisgICAgICAgICAgICAgICAgMi4gV2hlbiB0aGUgc3Bl
Y2lmaWVkIHBvc2l0aW9uIGlzIGFjdHVhbGx5IGluc2lkZSBhIHBhcmFncmFwaDoKKyAgICAgICAg
ICAgICAgICAgICAgICAgIEZvciB0aGlzIGNhc2UsIHdlIG5lZWQgdG8gcmV0dXJuIHRoZSBlbmQg
b2YgdGhlIHByZXZpb3VzIHBhcmFncmFwaCBvciB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAg
IHN0YXJ0IG9mIHRoZSBuZXh0IHBhcmFncmFwaCBkZXBlbmRpbmcgb24gd2hldGhlciB3ZSBhcmUg
c2VsZWN0aW5nIGZvcndhcmQKKyAgICAgICAgICAgICAgICAgICAgICAgIG9yIGJhY2t3YXJkcywg
cmVzcGVjdGl2ZWx5LgorCisgICAgICAgICogZWRpdGluZy9WaXNpYmxlVW5pdHMuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6bmV4dFBhcmFncmFwaEJvdW5kYXJ5SW5EaXJlY3Rpb24pOgorCiAyMDE5
LTEyLTEyICBEYW5pZWwgQmF0ZXMgIDxkYWJhdGVzQGFwcGxlLmNvbT4KIAogICAgICAgICAtcmVx
dWVzdERvY3VtZW50Q29udGV4dCBhbHdheXMgcmV0dXJucyAxIHRleHQgdW5pdCBtb3JlIGdyYW51
bGFyaXR5IHRoYW4gcmVxdWVzdGVkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGU0YjNhMWIzMGRjZjdkZmJjOGY2NDBl
MWI2ZjI3MzhiN2MwZWI4MmEuLjczZTk1Y2FjZGY2MzM3ZmEzNjczNDFiMDg1ZTFhMzZkMTljNThl
NzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTktMTItMTMgIERhbmllbCBCYXRlcyAg
PGRhYmF0ZXNAYXBwbGUuY29tPgorCisgICAgICAgIFJlcHJvZHVjaWJsZSBjYXNlIG9mIGJhY2t3
YXJkcyBuZXh0UGFyYWdyYXBoIHJldHVybmluZyBhIHBvc2l0aW9uIGFoZWFkIG9mIHRoZSBpbnB1
dCBwb3NpdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTk2MTI3CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS80OTEzNTg5MD4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZW1vdmUgd29ya2Fyb3VuZCBu
b3cgdGhhdCBXZWJDb3JlOjpuZXh0UGFyYWdyYXBoQm91bmRhcnlJbkRpcmVjdGlvbigpIGJlaGF2
ZXMgY29ycmVjdGx5LgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdl
SU9TLm1tOgorICAgICAgICAoV2ViS2l0Ojptb3ZlQnlHcmFudWxhcml0eVJlc3BlY3RpbmdXb3Jk
Qm91bmRhcnkpOgorCiAyMDE5LTEyLTEyICBEYW5pZWwgQmF0ZXMgIDxkYWJhdGVzQGFwcGxlLmNv
bT4KIAogICAgICAgICAtcmVxdWVzdERvY3VtZW50Q29udGV4dCBhbHdheXMgcmV0dXJucyAxIHRl
eHQgdW5pdCBtb3JlIGdyYW51bGFyaXR5IHRoYW4gcmVxdWVzdGVkCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVVbml0cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1Zpc2libGVVbml0cy5jcHAKaW5kZXggZjJkMjJlZTE3ODNmNDhlZTViODg1MmJiZGI4YTY1
ZWQ2YmU5MmFlMC4uMDdmODEzZDQwNzk4NGIxZGViYjFhYzY0ZTk1OTNkNzBiMmQ4NjYyMiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlVW5pdHMuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVVuaXRzLmNwcApAQCAtMTc5OCwxOCArMTc5OCwx
NSBAQCBzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIG5leHRMaW5lQm91bmRhcnlJbkRpcmVjdGlvbihj
b25zdCBWaXNpYmxlUG9zaXRpb24mIHZwLCBTZQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0
YXRpYyBWaXNpYmxlUG9zaXRpb24gbmV4dFBhcmFncmFwaEJvdW5kYXJ5SW5EaXJlY3Rpb24oY29u
c3QgVmlzaWJsZVBvc2l0aW9uJiB2cCwgU2VsZWN0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbikKLXsK
LSAgICBib29sIHVzZURvd25zdHJlYW0gPSBkaXJlY3Rpb25Jc0Rvd25zdHJlYW0oZGlyZWN0aW9u
KTsKLSAgICBib29sIHdpdGhpblVuaXRPZkdyYW51bGFyaXR5ID0gd2l0aGluVGV4dFVuaXRPZkdy
YW51bGFyaXR5KHZwLCBQYXJhZ3JhcGhHcmFudWxhcml0eSwgZGlyZWN0aW9uKTsKLSAgICBWaXNp
YmxlUG9zaXRpb24gcmVzdWx0OwotCi0gICAgaWYgKCF3aXRoaW5Vbml0T2ZHcmFudWxhcml0eSkK
LSAgICAgICAgcmVzdWx0ID0gIHVzZURvd25zdHJlYW0gPyBzdGFydE9mUGFyYWdyYXBoKG5leHRQ
YXJhZ3JhcGhQb3NpdGlvbih2cCwgdnAubGluZURpcmVjdGlvblBvaW50Rm9yQmxvY2tEaXJlY3Rp
b25OYXZpZ2F0aW9uKCkpKSA6IGVuZE9mUGFyYWdyYXBoKHByZXZpb3VzUGFyYWdyYXBoUG9zaXRp
b24odnAsIHZwLmxpbmVEaXJlY3Rpb25Qb2ludEZvckJsb2NrRGlyZWN0aW9uTmF2aWdhdGlvbigp
KSk7Ci0gICAgZWxzZQotICAgICAgICByZXN1bHQgPSB1c2VEb3duc3RyZWFtID8gZW5kT2ZQYXJh
Z3JhcGgodnApIDogc3RhcnRPZlBhcmFncmFwaCh2cCk7Ci0KLSAgICByZXR1cm4gcmVzdWx0Owor
c3RhdGljIFZpc2libGVQb3NpdGlvbiBuZXh0UGFyYWdyYXBoQm91bmRhcnlJbkRpcmVjdGlvbihj
b25zdCBWaXNpYmxlUG9zaXRpb24mIHBvc2l0aW9uLCBTZWxlY3Rpb25EaXJlY3Rpb24gZGlyZWN0
aW9uKQoreworICAgIGF1dG8gdXNlRG93bnN0cmVhbSA9IGRpcmVjdGlvbklzRG93bnN0cmVhbShk
aXJlY3Rpb24pOworICAgIGF1dG8gbGluZURpcmVjdGlvbiA9IHBvc2l0aW9uLmxpbmVEaXJlY3Rp
b25Qb2ludEZvckJsb2NrRGlyZWN0aW9uTmF2aWdhdGlvbigpOworICAgIGlmIChhdEJvdW5kYXJ5
T2ZHcmFudWxhcml0eShwb3NpdGlvbiwgUGFyYWdyYXBoR3JhbnVsYXJpdHksIGRpcmVjdGlvbikp
CisgICAgICAgIHJldHVybiB1c2VEb3duc3RyZWFtID8gc3RhcnRPZlBhcmFncmFwaChuZXh0UGFy
YWdyYXBoUG9zaXRpb24ocG9zaXRpb24sIGxpbmVEaXJlY3Rpb24pKSA6IGVuZE9mUGFyYWdyYXBo
KHByZXZpb3VzUGFyYWdyYXBoUG9zaXRpb24ocG9zaXRpb24sIGxpbmVEaXJlY3Rpb24pKTsKKyAg
ICBpZiAod2l0aGluVGV4dFVuaXRPZkdyYW51bGFyaXR5KHBvc2l0aW9uLCBQYXJhZ3JhcGhHcmFu
dWxhcml0eSwgZGlyZWN0aW9uKSkKKyAgICAgICAgcmV0dXJuIHVzZURvd25zdHJlYW0gPyBlbmRP
ZlBhcmFncmFwaChwb3NpdGlvbikgOiBzdGFydE9mUGFyYWdyYXBoKHBvc2l0aW9uKTsKKyAgICBy
ZXR1cm4gdXNlRG93bnN0cmVhbSA/IGVuZE9mUGFyYWdyYXBoKHByZXZpb3VzUGFyYWdyYXBoUG9z
aXRpb24ocG9zaXRpb24sIGxpbmVEaXJlY3Rpb24pKSA6IHN0YXJ0T2ZQYXJhZ3JhcGgobmV4dFBh
cmFncmFwaFBvc2l0aW9uKHBvc2l0aW9uLCBsaW5lRGlyZWN0aW9uKSk7CiB9CiAKIHN0YXRpYyBW
aXNpYmxlUG9zaXRpb24gbmV4dERvY3VtZW50Qm91bmRhcnlJbkRpcmVjdGlvbihjb25zdCBWaXNp
YmxlUG9zaXRpb24mIHZwLCBTZWxlY3Rpb25EaXJlY3Rpb24gZGlyZWN0aW9uKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0gYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQppbmRleCBm
ZmY0OWEwYzY0MWE1OTljOTFlOGQ4OTA1NTUyMjA1NzI5N2M3ZTk2Li41MjkyZTNjNDc5NTAyM2Qw
ODk2ZGIyY2NlMTE3YWMwMTk4OTM1YzhkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQpAQCAtMzg4OSw5ICszODg5LDYgQEAgc3Rh
dGljIFZpc2libGVQb3NpdGlvbiBtb3ZlQnlHcmFudWxhcml0eVJlc3BlY3RpbmdXb3JkQm91bmRh
cnkoY29uc3QgVmlzaWJsZVBvc2kKICAgICBWaXNpYmxlUG9zaXRpb24gbmV4dFBvc2l0aW9uOwog
ICAgIGRvIHsKICAgICAgICAgbmV4dFBvc2l0aW9uID0gcG9zaXRpb25PZk5leHRCb3VuZGFyeU9m
R3JhbnVsYXJpdHkoY3VycmVudFBvc2l0aW9uLCBncmFudWxhcml0eSwgZGlyZWN0aW9uKTsKLSAg
ICAgICAgLy8gRklYTUUgKDE5NjEyNyk6IFdlIHNob3VsZG4ndCBuZWVkIHRvIGRvIHRoaXMsIGJ1
dCBoYXZlIHNlZW4gcHJldmlvdXNQYXJhZ3JhcGhQb3NpdGlvbiBnbyBmb3J3YXJkcy4KLSAgICAg
ICAgaWYgKChiYWNrd2FyZHMgJiYgbmV4dFBvc2l0aW9uID4gY3VycmVudFBvc2l0aW9uKSB8fCAo
IWJhY2t3YXJkcyAmJiBuZXh0UG9zaXRpb24gPCBjdXJyZW50UG9zaXRpb24pKQotICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGlmIChuZXh0UG9zaXRpb24uaXNOdWxsKCkpCiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY3VycmVudFBvc2l0aW9uID0gbmV4dFBvc2l0aW9uOwpkaWZmIC0t
Z2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDY4YTI2NjlmMjZk
NWFjOTJlN2Q0ZWIyM2NiNWVhZmZjZjkwNGE2YmYuLjBkYjg1NDA1MWM5NTliY2Y2OTk1N2UzNzNh
ZGIyMmI0ZTZkOTIzYTQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAxOS0xMi0xMyAgRGFuaWVsIEJhdGVzICA8ZGFi
YXRlc0BhcHBsZS5jb20+CisKKyAgICAgICAgUmVwcm9kdWNpYmxlIGNhc2Ugb2YgYmFja3dhcmRz
IG5leHRQYXJhZ3JhcGggcmV0dXJuaW5nIGEgcG9zaXRpb24gYWhlYWQgb2YgdGhlIGlucHV0IHBv
c2l0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
OTYxMjcKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzQ5MTM1ODkwPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBhIHRlc3QgdG8gZW5zdXJlIHRo
YXQgcmVxdWVzdGluZyB0d28gcGFyYWdyYXBocyBhcm91bmQgdGhlIGluc2VydGlvbiBwb2ludCB0
aGF0IGlzCisgICAgICAgIG5vdCBpbiBhIHBhcmFncmFwaCBzdGlsbCB3b3Jrcy4KKworICAgICAg
ICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvRG9jdW1lbnRFZGl0aW5nQ29udGV4
dC5tbToKKyAgICAgICAgKFRFU1QpOgorCiAyMDE5LTEyLTEyICBEYW5pZWwgQmF0ZXMgIDxkYWJh
dGVzQGFwcGxlLmNvbT4KIAogICAgICAgICAtcmVxdWVzdERvY3VtZW50Q29udGV4dCBhbHdheXMg
cmV0dXJucyAxIHRleHQgdW5pdCBtb3JlIGdyYW51bGFyaXR5IHRoYW4gcmVxdWVzdGVkCmRpZmYg
LS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0RvY3VtZW50RWRp
dGluZ0NvbnRleHQubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0Rv
Y3VtZW50RWRpdGluZ0NvbnRleHQubW0KaW5kZXggNmJmODY1Y2FhZjFkOWNkYjc2NWViZWI0OWZk
Y2E1ODg4ZWE0ZjNjNC4uZDBhZDQ5ZmJhM2MwMDE3NWYyZmI5YTM1OGU3MGFjZmI2N2E3N2FiYyAx
MDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Eb2N1bWVu
dEVkaXRpbmdDb250ZXh0Lm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Q29jb2EvRG9jdW1lbnRFZGl0aW5nQ29udGV4dC5tbQpAQCAtNjI1LDYgKzYyNSwxOSBAQCBURVNU
KFdlYktpdCwgRG9jdW1lbnRFZGl0aW5nQ29udGV4dFJlcXVlc3RMYXN0VHdvUGFyYWdyYXBocykK
ICAgICBFWFBFQ1RfTlVMTChjb250ZXh0LmNvbnRleHRBZnRlcik7CiB9CiAKK1RFU1QoV2ViS2l0
LCBEb2N1bWVudEVkaXRpbmdDb250ZXh0UmVxdWVzdExhc3RUd29QYXJhZ3JhcGhzV2l0aENhcmV0
Tm90SW5QYXJhZ3JhcGgpCit7CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dl
YlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCldKTsK
KyAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZEhUTUxTdHJpbmc6YXBwbHlBaGVtU3R5bGUo
QCI8c3BhbiBpZD0ndGhlJz5UaGU8L3NwYW4+IHF1aWNrIGJyb3duIGZveCA8c3BhbiBpZD0nanVt
cHMnPmp1bXBzPC9zcGFuPiBvdmVyIHRoZSBsYXp5IDxzcGFuIGlkPSdkb2cnPmRvZy48L3NwYW4+
IildOworICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJnZXRTZWxl
Y3Rpb24oKS5zZXRCYXNlQW5kRXh0ZW50KGp1bXBzLCAwLCBqdW1wcywgMSkiXTsgLy8gV2lsbCBm
b2N1cyA8cD4uCisKKyAgICBhdXRvICpjb250ZXh0ID0gW3dlYlZpZXcgc3luY2hyb25vdXNseVJl
cXVlc3REb2N1bWVudENvbnRleHQ6bWFrZVJlcXVlc3QoVUlXS0RvY3VtZW50UmVxdWVzdFRleHQs
IFVJVGV4dEdyYW51bGFyaXR5UGFyYWdyYXBoLCAyKV07CisgICAgRVhQRUNUX05PVF9OVUxMKGNv
bnRleHQpOworICAgIEVYUEVDVF9OU1NUUklOR19FUSgiVGhlIHF1aWNrIGJyb3duIGZveCAiLCBj
b250ZXh0LmNvbnRleHRCZWZvcmUpOworICAgIEVYUEVDVF9OU1NUUklOR19FUSgianVtcHMiLCBj
b250ZXh0LnNlbGVjdGVkVGV4dCk7CisgICAgRVhQRUNUX05TU1RSSU5HX0VRKCIgb3ZlciB0aGUg
bGF6eSBkb2cuIiwgY29udGV4dC5jb250ZXh0QWZ0ZXIpOworfQorCiAvLyBNQVJLOiBUZXN0cyB1
c2luZyBjaGFyYWN0ZXIgZ3JhbnVsYXJpdHkKIC8vIE5vdGUgdGhhdCB3ZSBhbHdheXMgcmV0dXJu
IHJlc3VsdHMgd2l0aCByZXNwZWN0IHRvIHRoZSBuZWFyZXN0IHdvcmQgYm91bmRhcnkgaW4gdGhl
IGRpcmVjdGlvbiBvZiB0aGUgc2VsZWN0aW9uLgogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>385811</attachid>
            <date>2019-12-16 14:29:42 -0800</date>
            <delta_ts>2019-12-16 14:29:42 -0800</delta_ts>
            <desc>To land</desc>
            <filename>bug-196127-20191216142942.patch</filename>
            <type>text/plain</type>
            <size>7392</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUzMzM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGVlNDcwY2RiN2E5YzJl
OTg1ZjAxMTM0Njc4MGMzNzEzZTIzZTE4Ni4uODkzZjViZjliOGRjZTU1NDU2MTZmYmRlZmVmNjli
NWVmM2Y4YTZjZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDE5LTEyLTEzICBEYW5p
ZWwgQmF0ZXMgIDxkYWJhdGVzQGFwcGxlLmNvbT4KKworICAgICAgICBSZXByb2R1Y2libGUgY2Fz
ZSBvZiBiYWNrd2FyZHMgbmV4dFBhcmFncmFwaCByZXR1cm5pbmcgYSBwb3NpdGlvbiBhaGVhZCBv
ZiB0aGUgaW5wdXQgcG9zaXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE5NjEyNworICAgICAgICA8cmRhcjovL3Byb2JsZW0vNDkxMzU4OTA+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgV2Vuc29uIEhzaWVoLgorCisgICAgICAgIEZpeCB1cCB0aGUg
Y29kZSB0byBoYW5kbGU6CisKKyAgICAgICAgICAgICAgICAxLiBXaGVuIHRoZSBzcGVjaWZpZWQg
cG9zaXRpb24gaXMgYXQgYSBwYXJhZ3JhcGggYm91bmRhcnkuCisgICAgICAgICAgICAgICAgICAg
ICAgICBGb3IgdGhpcyBjYXNlLCB3ZSBkbyB3aGF0IHdlIGRvIG5vdyBmb3IgdGhlICF3aXRoaW5V
bml0T2ZHcmFudWxhcml0eSBjYXNlLgorICAgICAgICAgICAgICAgIDIuIFdoZW4gdGhlIHNwZWNp
ZmllZCBwb3NpdGlvbiBpcyBhY3R1YWxseSBpbnNpZGUgYSBwYXJhZ3JhcGg6CisgICAgICAgICAg
ICAgICAgICAgICAgICBGb3IgdGhpcyBjYXNlLCB3ZSBuZWVkIHRvIHJldHVybiB0aGUgZW5kIG9m
IHRoZSBwcmV2aW91cyBwYXJhZ3JhcGggb3IgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBz
dGFydCBvZiB0aGUgbmV4dCBwYXJhZ3JhcGggZGVwZW5kaW5nIG9uIHdoZXRoZXIgd2UgYXJlIHNl
bGVjdGluZyBmb3J3YXJkCisgICAgICAgICAgICAgICAgICAgICAgICBvciBiYWNrd2FyZHMsIHJl
c3BlY3RpdmVseS4KKworICAgICAgICAqIGVkaXRpbmcvVmlzaWJsZVVuaXRzLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Om5leHRQYXJhZ3JhcGhCb3VuZGFyeUluRGlyZWN0aW9uKToKKwogMjAxOS0x
Mi0xMiAgRGFuaWVsIEJhdGVzICA8ZGFiYXRlc0BhcHBsZS5jb20+CiAKICAgICAgICAgLXJlcXVl
c3REb2N1bWVudENvbnRleHQgYWx3YXlzIHJldHVybnMgMSB0ZXh0IHVuaXQgbW9yZSBncmFudWxh
cml0eSB0aGFuIHJlcXVlc3RlZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCBlNGIzYTFiMzBkY2Y3ZGZiYzhmNjQwZTFi
NmYyNzM4YjdjMGViODJhLi5mYjQ1OGI2OGQxYmM1MmQyNGFkYWZkOGE1ZDE0NzU0ZjEwZDhjZjZi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDE5LTEyLTEzICBEYW5pZWwgQmF0ZXMgIDxk
YWJhdGVzQGFwcGxlLmNvbT4KKworICAgICAgICBSZXByb2R1Y2libGUgY2FzZSBvZiBiYWNrd2Fy
ZHMgbmV4dFBhcmFncmFwaCByZXR1cm5pbmcgYSBwb3NpdGlvbiBhaGVhZCBvZiB0aGUgaW5wdXQg
cG9zaXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE5NjEyNworICAgICAgICA8cmRhcjovL3Byb2JsZW0vNDkxMzU4OTA+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgV2Vuc29uIEhzaWVoLgorCisgICAgICAgIFJlbW92ZSB3b3JrYXJvdW5kIG5vdyB0
aGF0IFdlYkNvcmU6Om5leHRQYXJhZ3JhcGhCb3VuZGFyeUluRGlyZWN0aW9uKCkgYmVoYXZlcyBj
b3JyZWN0bHkuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1Mu
bW06CisgICAgICAgIChXZWJLaXQ6Om1vdmVCeUdyYW51bGFyaXR5UmVzcGVjdGluZ1dvcmRCb3Vu
ZGFyeSk6CisKIDIwMTktMTItMTIgIERhbmllbCBCYXRlcyAgPGRhYmF0ZXNAYXBwbGUuY29tPgog
CiAgICAgICAgIC1yZXF1ZXN0RG9jdW1lbnRDb250ZXh0IGFsd2F5cyByZXR1cm5zIDEgdGV4dCB1
bml0IG1vcmUgZ3JhbnVsYXJpdHkgdGhhbiByZXF1ZXN0ZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVVuaXRzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
VmlzaWJsZVVuaXRzLmNwcAppbmRleCBmMmQyMmVlMTc4M2Y0OGVlNWI4ODUyYmJkYjhhNjVlZDZi
ZTkyYWUwLi40NDc4YWRmMjJiYWY5ZThmYzU4MmFkMjc1MjhhMDM0YzVlNGNjODQ1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVVbml0cy5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlVW5pdHMuY3BwCkBAIC0xNzk4LDE4ICsxNzk4LDE0IEBA
IHN0YXRpYyBWaXNpYmxlUG9zaXRpb24gbmV4dExpbmVCb3VuZGFyeUluRGlyZWN0aW9uKGNvbnN0
IFZpc2libGVQb3NpdGlvbiYgdnAsIFNlCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGlj
IFZpc2libGVQb3NpdGlvbiBuZXh0UGFyYWdyYXBoQm91bmRhcnlJbkRpcmVjdGlvbihjb25zdCBW
aXNpYmxlUG9zaXRpb24mIHZwLCBTZWxlY3Rpb25EaXJlY3Rpb24gZGlyZWN0aW9uKQotewotICAg
IGJvb2wgdXNlRG93bnN0cmVhbSA9IGRpcmVjdGlvbklzRG93bnN0cmVhbShkaXJlY3Rpb24pOwot
ICAgIGJvb2wgd2l0aGluVW5pdE9mR3JhbnVsYXJpdHkgPSB3aXRoaW5UZXh0VW5pdE9mR3JhbnVs
YXJpdHkodnAsIFBhcmFncmFwaEdyYW51bGFyaXR5LCBkaXJlY3Rpb24pOwotICAgIFZpc2libGVQ
b3NpdGlvbiByZXN1bHQ7Ci0KLSAgICBpZiAoIXdpdGhpblVuaXRPZkdyYW51bGFyaXR5KQotICAg
ICAgICByZXN1bHQgPSAgdXNlRG93bnN0cmVhbSA/IHN0YXJ0T2ZQYXJhZ3JhcGgobmV4dFBhcmFn
cmFwaFBvc2l0aW9uKHZwLCB2cC5saW5lRGlyZWN0aW9uUG9pbnRGb3JCbG9ja0RpcmVjdGlvbk5h
dmlnYXRpb24oKSkpIDogZW5kT2ZQYXJhZ3JhcGgocHJldmlvdXNQYXJhZ3JhcGhQb3NpdGlvbih2
cCwgdnAubGluZURpcmVjdGlvblBvaW50Rm9yQmxvY2tEaXJlY3Rpb25OYXZpZ2F0aW9uKCkpKTsK
LSAgICBlbHNlCi0gICAgICAgIHJlc3VsdCA9IHVzZURvd25zdHJlYW0gPyBlbmRPZlBhcmFncmFw
aCh2cCkgOiBzdGFydE9mUGFyYWdyYXBoKHZwKTsKLQotICAgIHJldHVybiByZXN1bHQ7CitzdGF0
aWMgVmlzaWJsZVBvc2l0aW9uIG5leHRQYXJhZ3JhcGhCb3VuZGFyeUluRGlyZWN0aW9uKGNvbnN0
IFZpc2libGVQb3NpdGlvbiYgcG9zaXRpb24sIFNlbGVjdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24p
Cit7CisgICAgYXV0byB1c2VEb3duc3RyZWFtID0gZGlyZWN0aW9uSXNEb3duc3RyZWFtKGRpcmVj
dGlvbik7CisgICAgYXV0byBsaW5lRGlyZWN0aW9uID0gcG9zaXRpb24ubGluZURpcmVjdGlvblBv
aW50Rm9yQmxvY2tEaXJlY3Rpb25OYXZpZ2F0aW9uKCk7CisgICAgaWYgKGF0Qm91bmRhcnlPZkdy
YW51bGFyaXR5KHBvc2l0aW9uLCBQYXJhZ3JhcGhHcmFudWxhcml0eSwgZGlyZWN0aW9uKSkKKyAg
ICAgICAgcmV0dXJuIHVzZURvd25zdHJlYW0gPyBzdGFydE9mUGFyYWdyYXBoKG5leHRQYXJhZ3Jh
cGhQb3NpdGlvbihwb3NpdGlvbiwgbGluZURpcmVjdGlvbikpIDogZW5kT2ZQYXJhZ3JhcGgocHJl
dmlvdXNQYXJhZ3JhcGhQb3NpdGlvbihwb3NpdGlvbiwgbGluZURpcmVjdGlvbikpOworICAgIEFT
U0VSVCh3aXRoaW5UZXh0VW5pdE9mR3JhbnVsYXJpdHkocG9zaXRpb24sIFBhcmFncmFwaEdyYW51
bGFyaXR5LCBkaXJlY3Rpb24pKTsKKyAgICByZXR1cm4gdXNlRG93bnN0cmVhbSA/IGVuZE9mUGFy
YWdyYXBoKHBvc2l0aW9uKSA6IHN0YXJ0T2ZQYXJhZ3JhcGgocG9zaXRpb24pOwogfQogCiBzdGF0
aWMgVmlzaWJsZVBvc2l0aW9uIG5leHREb2N1bWVudEJvdW5kYXJ5SW5EaXJlY3Rpb24oY29uc3Qg
VmlzaWJsZVBvc2l0aW9uJiB2cCwgU2VsZWN0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbikKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1t
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KaW5k
ZXggZmZmNDlhMGM2NDFhNTk5YzkxZThkODkwNTU1MjIwNTcyOTdjN2U5Ni4uNTI5MmUzYzQ3OTUw
MjNkMDg5NmRiMmNjZTExN2FjMDE5ODkzNWM4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KKysrIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KQEAgLTM4ODksOSArMzg4OSw2IEBA
IHN0YXRpYyBWaXNpYmxlUG9zaXRpb24gbW92ZUJ5R3JhbnVsYXJpdHlSZXNwZWN0aW5nV29yZEJv
dW5kYXJ5KGNvbnN0IFZpc2libGVQb3NpCiAgICAgVmlzaWJsZVBvc2l0aW9uIG5leHRQb3NpdGlv
bjsKICAgICBkbyB7CiAgICAgICAgIG5leHRQb3NpdGlvbiA9IHBvc2l0aW9uT2ZOZXh0Qm91bmRh
cnlPZkdyYW51bGFyaXR5KGN1cnJlbnRQb3NpdGlvbiwgZ3JhbnVsYXJpdHksIGRpcmVjdGlvbik7
Ci0gICAgICAgIC8vIEZJWE1FICgxOTYxMjcpOiBXZSBzaG91bGRuJ3QgbmVlZCB0byBkbyB0aGlz
LCBidXQgaGF2ZSBzZWVuIHByZXZpb3VzUGFyYWdyYXBoUG9zaXRpb24gZ28gZm9yd2FyZHMuCi0g
ICAgICAgIGlmICgoYmFja3dhcmRzICYmIG5leHRQb3NpdGlvbiA+IGN1cnJlbnRQb3NpdGlvbikg
fHwgKCFiYWNrd2FyZHMgJiYgbmV4dFBvc2l0aW9uIDwgY3VycmVudFBvc2l0aW9uKSkKLSAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBpZiAobmV4dFBvc2l0aW9uLmlzTnVsbCgpKQogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGN1cnJlbnRQb3NpdGlvbiA9IG5leHRQb3NpdGlvbjsKZGlm
ZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA2OGEyNjY5
ZjI2ZDVhYzkyZTdkNGViMjNjYjVlYWZmY2Y5MDRhNmJmLi5lYzgyZDc2NTJhYTJkMzNiZTczMzU2
MTEwZDk5YjU0YjE4OTAwMmEwIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9v
bHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTktMTItMTMgIERhbmllbCBCYXRlcyAg
PGRhYmF0ZXNAYXBwbGUuY29tPgorCisgICAgICAgIFJlcHJvZHVjaWJsZSBjYXNlIG9mIGJhY2t3
YXJkcyBuZXh0UGFyYWdyYXBoIHJldHVybmluZyBhIHBvc2l0aW9uIGFoZWFkIG9mIHRoZSBpbnB1
dCBwb3NpdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTk2MTI3CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS80OTEzNTg5MD4KKworICAgICAgICBS
ZXZpZXdlZCBieSBXZW5zb24gSHNpZWguCisKKyAgICAgICAgQWRkIGEgdGVzdCB0byBlbnN1cmUg
dGhhdCByZXF1ZXN0aW5nIHR3byBwYXJhZ3JhcGhzIGFyb3VuZCB0aGUgaW5zZXJ0aW9uIHBvaW50
IHRoYXQgaXMKKyAgICAgICAgbm90IGluIGEgcGFyYWdyYXBoIHN0aWxsIHdvcmtzLgorCisgICAg
ICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9Eb2N1bWVudEVkaXRpbmdDb250
ZXh0Lm1tOgorICAgICAgICAoVEVTVCk6CisKIDIwMTktMTItMTIgIERhbmllbCBCYXRlcyAgPGRh
YmF0ZXNAYXBwbGUuY29tPgogCiAgICAgICAgIC1yZXF1ZXN0RG9jdW1lbnRDb250ZXh0IGFsd2F5
cyByZXR1cm5zIDEgdGV4dCB1bml0IG1vcmUgZ3JhbnVsYXJpdHkgdGhhbiByZXF1ZXN0ZWQKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvRG9jdW1lbnRF
ZGl0aW5nQ29udGV4dC5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
RG9jdW1lbnRFZGl0aW5nQ29udGV4dC5tbQppbmRleCA2YmY4NjVjYWFmMWQ5Y2RiNzY1ZWJlYjQ5
ZmRjYTU4ODhlYTRmM2M0Li43OTIyZjRlOGU1YmI2NmQzOGM5NmY2NmEyM2FiZTlmMWM3MjJkODhh
IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0RvY3Vt
ZW50RWRpdGluZ0NvbnRleHQubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRDb2NvYS9Eb2N1bWVudEVkaXRpbmdDb250ZXh0Lm1tCkBAIC02MjUsNiArNjI1LDE5IEBAIFRF
U1QoV2ViS2l0LCBEb2N1bWVudEVkaXRpbmdDb250ZXh0UmVxdWVzdExhc3RUd29QYXJhZ3JhcGhz
KQogICAgIEVYUEVDVF9OVUxMKGNvbnRleHQuY29udGV4dEFmdGVyKTsKIH0KIAorVEVTVChXZWJL
aXQsIERvY3VtZW50RWRpdGluZ0NvbnRleHRSZXF1ZXN0TGFzdFR3b1BhcmFncmFwaHNXaXRoU2Vs
ZWN0aW9udFdpdGhpblBhcmFncmFwaCkKK3sKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtb
VGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwg
NjAwKV0pOworICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkSFRNTFN0cmluZzphcHBseUFo
ZW1TdHlsZShAIjxzcGFuIGlkPSd0aGUnPlRoZTwvc3Bhbj4gcXVpY2sgYnJvd24gZm94IDxzcGFu
IGlkPSdqdW1wcyc+anVtcHM8L3NwYW4+IG92ZXIgdGhlIGxhenkgPHNwYW4gaWQ9J2RvZyc+ZG9n
Ljwvc3Bhbj4iKV07CisgICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpA
ImdldFNlbGVjdGlvbigpLnNldEJhc2VBbmRFeHRlbnQoanVtcHMsIDAsIGp1bXBzLCAxKSJdOyAv
LyBXaWxsIGZvY3VzIDxwPi4KKworICAgIGF1dG8gKmNvbnRleHQgPSBbd2ViVmlldyBzeW5jaHJv
bm91c2x5UmVxdWVzdERvY3VtZW50Q29udGV4dDptYWtlUmVxdWVzdChVSVdLRG9jdW1lbnRSZXF1
ZXN0VGV4dCwgVUlUZXh0R3JhbnVsYXJpdHlQYXJhZ3JhcGgsIDIpXTsKKyAgICBFWFBFQ1RfTk9U
X05VTEwoY29udGV4dCk7CisgICAgRVhQRUNUX05TU1RSSU5HX0VRKCJUaGUgcXVpY2sgYnJvd24g
Zm94ICIsIGNvbnRleHQuY29udGV4dEJlZm9yZSk7CisgICAgRVhQRUNUX05TU1RSSU5HX0VRKCJq
dW1wcyIsIGNvbnRleHQuc2VsZWN0ZWRUZXh0KTsKKyAgICBFWFBFQ1RfTlNTVFJJTkdfRVEoIiBv
dmVyIHRoZSBsYXp5IGRvZy4iLCBjb250ZXh0LmNvbnRleHRBZnRlcik7Cit9CisKIC8vIE1BUks6
IFRlc3RzIHVzaW5nIGNoYXJhY3RlciBncmFudWxhcml0eQogLy8gTm90ZSB0aGF0IHdlIGFsd2F5
cyByZXR1cm4gcmVzdWx0cyB3aXRoIHJlc3BlY3QgdG8gdGhlIG5lYXJlc3Qgd29yZCBib3VuZGFy
eSBpbiB0aGUgZGlyZWN0aW9uIG9mIHRoZSBzZWxlY3Rpb24uCiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>