<?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>214878</bug_id>
          
          <creation_ts>2020-07-28 09:13:18 -0700</creation_ts>
          <short_desc>Text manipulation: leading and trailing spaces should be ignored when comparing content</short_desc>
          <delta_ts>2020-08-06 18:24:10 -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>HTML Editing</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sihui Liu">sihui_liu</reporter>
          <assigned_to name="Sihui Liu">sihui_liu</assigned_to>
          <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>1675629</commentid>
    <comment_count>0</comment_count>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2020-07-28 09:13:18 -0700</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1675630</commentid>
    <comment_count>1</comment_count>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2020-07-28 09:13:54 -0700</bug_when>
    <thetext>&lt;rdar://problem/63735024&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1675645</commentid>
    <comment_count>2</comment_count>
      <attachid>405365</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2020-07-28 09:32:49 -0700</bug_when>
    <thetext>Created attachment 405365
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1676607</commentid>
    <comment_count>3</comment_count>
      <attachid>405365</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-07-30 16:08:44 -0700</bug_when>
    <thetext>Comment on attachment 405365
Patch

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

&gt; Source/WebCore/editing/TextIterator.cpp:639
&gt; +        if ((m_behavior &amp; TextIteratorEmitsCollapsedSpacesAtStart) &amp;&amp; m_textBox == firstTextBox &amp;&amp; textBoxStart == runStart &amp;&amp; runStart &amp;&amp; !m_emittedSpaceBeforeFirstTextBox) {

Can we instead do this in TextIterator::handleTextNode() like the way we handle
white-space: pre / pre-wrap content (i.e. inside renderer.style().collapseWhiteSpace())?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1676724</commentid>
    <comment_count>4</comment_count>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2020-07-30 22:11:07 -0700</bug_when>
    <thetext>(In reply to Ryosuke Niwa from comment #3)
&gt; Comment on attachment 405365 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=405365&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/editing/TextIterator.cpp:639
&gt; &gt; +        if ((m_behavior &amp; TextIteratorEmitsCollapsedSpacesAtStart) &amp;&amp; m_textBox == firstTextBox &amp;&amp; textBoxStart == runStart &amp;&amp; runStart &amp;&amp; !m_emittedSpaceBeforeFirstTextBox) {
&gt; 
&gt; Can we instead do this in TextIterator::handleTextNode() like the way we
&gt; handle
&gt; white-space: pre / pre-wrap content (i.e. inside
&gt; renderer.style().collapseWhiteSpace())?

Do you mean not doing white space collapsing with TextIteratorEmitsCollapsedSpacesAtStart or just move this code for handling first text box to TextIterator::handleTextNode()?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1676752</commentid>
    <comment_count>5</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-07-31 00:04:34 -0700</bug_when>
    <thetext>(In reply to Sihui Liu from comment #4)
&gt; (In reply to Ryosuke Niwa from comment #3)
&gt; &gt; Comment on attachment 405365 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=405365&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/editing/TextIterator.cpp:639
&gt; &gt; &gt; +        if ((m_behavior &amp; TextIteratorEmitsCollapsedSpacesAtStart) &amp;&amp; m_textBox == firstTextBox &amp;&amp; textBoxStart == runStart &amp;&amp; runStart &amp;&amp; !m_emittedSpaceBeforeFirstTextBox) {
&gt; &gt; 
&gt; &gt; Can we instead do this in TextIterator::handleTextNode() like the way we
&gt; &gt; handle
&gt; &gt; white-space: pre / pre-wrap content (i.e. inside
&gt; &gt; renderer.style().collapseWhiteSpace())?
&gt; 
&gt; Do you mean not doing white space collapsing with
&gt; TextIteratorEmitsCollapsedSpacesAtStart or just move this code for handling
&gt; first text box to TextIterator::handleTextNode()?

The latter. On my second thought, why can&apos;t we just ignore the leading whitespace in TextManipulationController??</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1676850</commentid>
    <comment_count>6</comment_count>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2020-07-31 09:38:22 -0700</bug_when>
    <thetext>(In reply to Ryosuke Niwa from comment #5)
&gt; (In reply to Sihui Liu from comment #4)
&gt; &gt; (In reply to Ryosuke Niwa from comment #3)
&gt; &gt; &gt; Comment on attachment 405365 [details]
&gt; &gt; &gt; Patch
&gt; &gt; &gt; 
&gt; &gt; &gt; View in context:
&gt; &gt; &gt; https://bugs.webkit.org/attachment.cgi?id=405365&amp;action=review
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Source/WebCore/editing/TextIterator.cpp:639
&gt; &gt; &gt; &gt; +        if ((m_behavior &amp; TextIteratorEmitsCollapsedSpacesAtStart) &amp;&amp; m_textBox == firstTextBox &amp;&amp; textBoxStart == runStart &amp;&amp; runStart &amp;&amp; !m_emittedSpaceBeforeFirstTextBox) {
&gt; &gt; &gt; 
&gt; &gt; &gt; Can we instead do this in TextIterator::handleTextNode() like the way we
&gt; &gt; &gt; handle
&gt; &gt; &gt; white-space: pre / pre-wrap content (i.e. inside
&gt; &gt; &gt; renderer.style().collapseWhiteSpace())?
&gt; &gt; 
&gt; &gt; Do you mean not doing white space collapsing with
&gt; &gt; TextIteratorEmitsCollapsedSpacesAtStart or just move this code for handling
&gt; &gt; first text box to TextIterator::handleTextNode()?
&gt; 
&gt; The latter. On my second thought, why can&apos;t we just ignore the leading
&gt; whitespace in TextManipulationController??

You mean when checking the content of in replace()? That&apos;s another solution.
I think the issue here is we don&apos;t get consistent result from TextIterator when text node&apos;s content is unchanged, so it&apos;s either we change our way to compare(like comparing after removing leading and trailing spaces), or make TextIterator to return more &quot;stable&quot; result for same content. 

(I didn&apos;t do the first one as TextIterator may also insert/remove spaces in the middle of node content based on layout, so maybe still need to adjust TextIterator&apos;s behavior later)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1676899</commentid>
    <comment_count>7</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-07-31 11:49:14 -0700</bug_when>
    <thetext>(In reply to Sihui Liu from comment #6)
&gt; (In reply to Ryosuke Niwa from comment #5)
&gt; &gt; (In reply to Sihui Liu from comment #4)
&gt; &gt; &gt; (In reply to Ryosuke Niwa from comment #3)
&gt; &gt; &gt; &gt; Comment on attachment 405365 [details]
&gt; &gt; &gt; &gt; Patch
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; View in context:
&gt; &gt; &gt; &gt; https://bugs.webkit.org/attachment.cgi?id=405365&amp;action=review
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; Source/WebCore/editing/TextIterator.cpp:639
&gt; &gt; &gt; &gt; &gt; +        if ((m_behavior &amp; TextIteratorEmitsCollapsedSpacesAtStart) &amp;&amp; m_textBox == firstTextBox &amp;&amp; textBoxStart == runStart &amp;&amp; runStart &amp;&amp; !m_emittedSpaceBeforeFirstTextBox) {
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Can we instead do this in TextIterator::handleTextNode() like the way we
&gt; &gt; &gt; &gt; handle
&gt; &gt; &gt; &gt; white-space: pre / pre-wrap content (i.e. inside
&gt; &gt; &gt; &gt; renderer.style().collapseWhiteSpace())?
&gt; &gt; &gt; 
&gt; &gt; &gt; Do you mean not doing white space collapsing with
&gt; &gt; &gt; TextIteratorEmitsCollapsedSpacesAtStart or just move this code for handling
&gt; &gt; &gt; first text box to TextIterator::handleTextNode()?
&gt; &gt; 
&gt; &gt; The latter. On my second thought, why can&apos;t we just ignore the leading
&gt; &gt; whitespace in TextManipulationController??
&gt; 
&gt; You mean when checking the content of in replace()? That&apos;s another solution.

Yes.

&gt; I think the issue here is we don&apos;t get consistent result from TextIterator
&gt; when text node&apos;s content is unchanged, so it&apos;s either we change our way to
&gt; compare(like comparing after removing leading and trailing spaces), or make
&gt; TextIterator to return more &quot;stable&quot; result for same content.

TextIterator is a very complicated class so I&apos;m a bit concerned of adding yet another mode that does a different thing. I think given what we know, ignoring the leading whitespace at the beginning of a paragraph and the trailing whitespace at the end of a paragraph is a better approach. The code change is where it needs to be (TextManipulationController) so it&apos;s easier to explain why / understand why we need that code. Whereas if we added this code in TextIterator, someone else might start using it or modify its behavior for whatever reason without understanding why it was added.

&gt; (I didn&apos;t do the first one as TextIterator may also insert/remove spaces in
&gt; the middle of node content based on layout, so maybe still need to adjust
&gt; TextIterator&apos;s behavior later)

Well, if that were to happen, the content DID change. If CSS styles are modified enough to start treating whitespace differently, etc... then we need to consider that as a content change. e.g. this is akin to how CSS display: none is set on some text nodes or content: &quot;hello&quot; is added to show more CSS generated content, etc...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1677722</commentid>
    <comment_count>8</comment_count>
      <attachid>405941</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2020-08-04 14:12:34 -0700</bug_when>
    <thetext>Created attachment 405941
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1677991</commentid>
    <comment_count>9</comment_count>
      <attachid>405941</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-08-05 11:22:05 -0700</bug_when>
    <thetext>Comment on attachment 405941
Patch

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

&gt; Source/WebCore/ChangeLog:11
&gt; +        collapsed space. 
&gt; +        When TextManipulationController starts observing paragraphs, it iterates the whole document and the range of 

Can we either add blank lines so that they&apos;re separate paragraphs or just continue the next sentence on the same line?
It looks weird &amp; hard to read otherwise.

&gt; Source/WebCore/editing/TextManipulationController.cpp:286
&gt; +    return content.stripWhiteSpace() == originalContent.stripWhiteSpace();

We should only do this on the very first or the very last token.
Also, we should call stripWhiteSpace only when the regular equality fails.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1678267</commentid>
    <comment_count>10</comment_count>
      <attachid>406086</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2020-08-06 09:19:03 -0700</bug_when>
    <thetext>Created attachment 406086
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1678423</commentid>
    <comment_count>11</comment_count>
      <attachid>406086</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-08-06 14:57:36 -0700</bug_when>
    <thetext>Comment on attachment 406086
Patch

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

&gt; Source/WebCore/editing/TextManipulationController.cpp:802
&gt; +            bool isContentUnchanged = (currentToken.content == token.content) || ((currentTokenIndex == 1 || currentTokenIndex == item.tokens.size()) &amp;&amp; isContentEquivalent(currentToken.content, token.content));
&gt; +            if (!content.isReplacedContent &amp;&amp; !isContentUnchanged)

This is a really long line.
Can we split it like this:
bool isContentUnchanged = currentToken.content == token.content;
if (!UNLIKELY(isContentUnchanged)) {
    bool isFirstOrLastToken = currentTokenIndex == 1 || currentTokenIndex == item.tokens.size();
    isContentUnchanged = isFirstOrLastToken &amp;&amp; isContentEquivalent(currentToken.content, token.content);
}

&gt; Tools/ChangeLog:8
&gt; +

Say that we&apos;re adding a regression test.

&gt; Tools/TestWebKitAPI/Tests/WebKitCocoa/TextManipulation.mm:3050
&gt; +        &quot;  &lt;style&gt;&quot;

Since you&apos;re not inserting newlines, they&apos;d all be in a single line. We might as well omit indentation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1678424</commentid>
    <comment_count>12</comment_count>
      <attachid>406086</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-08-06 14:58:16 -0700</bug_when>
    <thetext>Comment on attachment 406086
Patch

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

&gt; Source/WebCore/editing/TextManipulationController.cpp:284
&gt; +static bool isContentEquivalent(const String&amp; content, const String&amp; originalContent)

Can we rename this to something like areEqualIgnoringLeadingAndTrailingWhitespaces?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1678443</commentid>
    <comment_count>13</comment_count>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2020-08-06 15:46:38 -0700</bug_when>
    <thetext>(In reply to Ryosuke Niwa from comment #12)
&gt; Comment on attachment 406086 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=406086&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/editing/TextManipulationController.cpp:284
&gt; &gt; +static bool isContentEquivalent(const String&amp; content, const String&amp; originalContent)
&gt; 
&gt; Can we rename this to something like
&gt; areEqualIgnoringLeadingAndTrailingWhitespaces?

Yes. Thanks for review!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1678485</commentid>
    <comment_count>14</comment_count>
      <attachid>406140</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2020-08-06 17:56:12 -0700</bug_when>
    <thetext>Created attachment 406140
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1678503</commentid>
    <comment_count>15</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-08-06 18:24:10 -0700</bug_when>
    <thetext>Committed r265361: &lt;https://trac.webkit.org/changeset/265361&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 406140.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>405365</attachid>
            <date>2020-07-28 09:32:49 -0700</date>
            <delta_ts>2020-08-04 14:12:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-214878-20200728093249.patch</filename>
            <type>text/plain</type>
            <size>12142</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY0OTM0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDM5MjBlYWU4MTA2NjRj
OTA4ZGY4N2E2ZTdmOTkwOWVjN2E0ZTkxMi4uYjk0MzY2MTdiMjNhZjM0YmU5YzZjZGFjNGI2MDc3
OWYxOTJhNjc4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMzIEBACisyMDIwLTA3LTI4ICBTaWh1
aSBMaXUgIDxzaWh1aV9saXVAYXBwZS5jb20+CisKKyAgICAgICAgVGV4dCBtYW5pcHVsYXRpb246
IGNvbGxhcHNlZCBzcGFjZXMgYXQgdGhlIGJlZ2lubmluZyBvZiB0ZXh0IHNob3VsZCBhbHdheXMg
YmUgZW1pdHRlZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjE0ODc4CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS82MzczNTAyND4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXh0SXRlcmF0b3IgZG9lcyBu
b3QgZW1pdCBjb2xsYXBzZWQgc3BhY2UgaWYgdGhlcmUgaXMgbm8gdGV4dCBlbWl0dGVkIGJlZm9y
ZSBvciB0aGUgbGFzdCBlbWl0dGVkIGNoYXJhY3RlciBpcyAKKyAgICAgICAgY29sbGFwc2VkIHNw
YWNlLiAKKyAgICAgICAgV2hlbiBUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlciBzdGFydHMgb2Jz
ZXJ2aW5nIHBhcmFncmFwaHMsIGl0IGl0ZXJhdGVzIHRoZSB3aG9sZSBkb2N1bWVudCBhbmQgdGhl
IHJhbmdlIG9mIAorICAgICAgICBUZXh0SXRlcmF0b3IgaXMgdGhlIHJhbmdlIG9mIGRvY3VtZW50
LiBGb3Igc29tZSB0ZXh0IG5vZGUgQSBpbiB0aGUgZG9jdW1lbnQsIGlmIFRleHRJdGVyYXRvciBl
bWl0cyB0ZXh0IGZvciBzb21lCisgICAgICAgIG90aGVyIHRleHQgbm9kZSBCIGJlZm9yZSBpdCwg
dGhlIGNvbGxhcHNlZCBzcGFjZSBhdCB0aGUgYmVnaW5uaW5nIG9mIEEgd2lsbCBiZSBlbWl0dGVk
LCBhbmQgCisgICAgICAgIFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyIHdvdWxkIHRoaW5rIHRo
ZSBlbWl0dGVkIHNwYWNlIGlzIHBhcnQgb2YgQSdzIGNvbnRlbnQuIAorICAgICAgICBXaGVuIFRl
eHRNYW5pcHVsYXRpb25Db250cm9sbGVyIHJlcGxhY2VzIGNvbnRlbnQgZm9yIEEsIGFuZCB0aGUg
cmFuZ2Ugb2YgVGV4dEl0ZXJhdG9yIGlzIHNldCB0byB0aGUgcmFuZ2Ugb2YgQSwgCisgICAgICAg
IHRoZSBjb2xsYXBzZWQgc3BhY2UgaXMgbm90IGVtaXR0ZWQuIFRoZSBjaGVjayB0byBlbnN1cmUg
QSdzIGNvbnRlbnQgaXMgdW5jaGFuZ2VkIHdvdWxkIGZhaWwuCisKKyAgICAgICAgVG8gc29sdmUg
dGhpcyBpc3N1ZSwgaW50cm9kdWNlIGEgbmV3IGJlaGF2aW9yIGluIFRleHRJdGVyYXRvciB0byBs
ZXQgaXQgYWx3YXlzIGVtaXQgY29sbGFwc2VkIHNwYWNlIGF0IHRoZQorICAgICAgICBiZWdpbm5p
bmcgb2YgdGV4dCBub2RlLCBhbmQgbGV0IFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyIHVzZSB0
aGF0IGJlaGF2aW9yLgorCisgICAgICAgIEFQSSB0ZXN0OiBUZXh0TWFuaXB1bGF0aW9uLkNvbXBs
ZXRlVGV4dE1hbmlwdWxhdGlvblBhcmFncmFwaENvbnRhaW5zQ29sbGFwc2VkU3BhY2VzCisKKyAg
ICAgICAgKiBlZGl0aW5nL1RleHRJdGVyYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
SXRlcmF0b3I6OmhhbmRsZVRleHROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRJdGVyYXRv
cjo6aGFuZGxlVGV4dEJveCk6CisgICAgICAgICogZWRpdGluZy9UZXh0SXRlcmF0b3IuaDoKKyAg
ICAgICAgKiBlZGl0aW5nL1RleHRJdGVyYXRvckJlaGF2aW9yLmg6CisgICAgICAgICogZWRpdGlu
Zy9UZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYXJh
Z3JhcGhDb250ZW50SXRlcmF0b3I6OlBhcmFncmFwaENvbnRlbnRJdGVyYXRvcik6CisKIDIwMjAt
MDctMjcgIERlYW4gSmFja3NvbiAgPGRpbm9AYXBwbGUuY29tPgogCiAgICAgICAgIFJlcGVhdGFi
bGUgV2ViQ29udGVudCBjcmFzaDogV2ViQ29yZTo6anNXZWJHTFJlbmRlcmluZ0NvbnRleHRQcm90
b3R5cGVGdW5jdGlvbkdldEVycm9yCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1RleHRJdGVyYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5j
cHAKaW5kZXggODEwYWI3NmNkOThlNzFmMTIzNzMyMDNmMjhlN2E4ZWU2OTUxOTE2Mi4uZmQ4MDI5
MzgzMTBlNjJhZDlkZmM0ZmVhZWEyNTUyNjgyOTg5N2YyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvVGV4dEl0ZXJhdG9yLmNwcApAQCAtNTUyLDYgKzU1Miw4IEBAIGJvb2wgVGV4dEl0ZXJhdG9y
OjpoYW5kbGVUZXh0Tm9kZSgpCiAgICAgbV9sYXN0VGV4dE5vZGUgPSAmdGV4dE5vZGU7CiAgICAg
U3RyaW5nIHJlbmRlcmVyVGV4dCA9IHJlbmRlcmVyLnRleHQoKTsKIAorICAgIG1fZW1pdHRlZFNw
YWNlQmVmb3JlRmlyc3RUZXh0Qm94ID0gZmFsc2U7CisKICAgICAvLyBoYW5kbGUgcHJlLWZvcm1h
dHRlZCB0ZXh0CiAgICAgaWYgKCFyZW5kZXJlci5zdHlsZSgpLmNvbGxhcHNlV2hpdGVTcGFjZSgp
KSB7CiAgICAgICAgIGludCBydW5TdGFydCA9IG1fb2Zmc2V0OwpAQCAtNjI4LDggKzYzMCwyMyBA
QCB2b2lkIFRleHRJdGVyYXRvcjo6aGFuZGxlVGV4dEJveCgpCiAgICAgICAgICAgICAgICAgZW1p
dFRleHQodGV4dE5vZGUsIHJlbmRlcmVyLCBzcGFjZVJ1blN0YXJ0LCBzcGFjZVJ1blN0YXJ0ICsg
MSk7CiAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICBlbWl0Q2hhcmFjdGVyKCcg
JywgdGV4dE5vZGUsIG51bGxwdHIsIHJ1blN0YXJ0LCBydW5TdGFydCk7CisKKyAgICAgICAgICAg
IGlmIChtX3RleHRCb3ggPT0gZmlyc3RUZXh0Qm94KQorICAgICAgICAgICAgICAgIG1fZW1pdHRl
ZFNwYWNlQmVmb3JlRmlyc3RUZXh0Qm94ID0gdHJ1ZTsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQorCisgICAgICAgIGlmICgobV9iZWhhdmlvciAmIFRleHRJdGVyYXRvckVtaXRzQ29s
bGFwc2VkU3BhY2VzQXRTdGFydCkgJiYgbV90ZXh0Qm94ID09IGZpcnN0VGV4dEJveCAmJiB0ZXh0
Qm94U3RhcnQgPT0gcnVuU3RhcnQgJiYgcnVuU3RhcnQgJiYgIW1fZW1pdHRlZFNwYWNlQmVmb3Jl
Rmlyc3RUZXh0Qm94KSB7CisgICAgICAgICAgICBpZiAocmVuZGVyZXJUZXh0W3J1blN0YXJ0IC0g
MV0gPT0gJyAnKSB7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgc3BhY2VSdW5TdGFydCA9IHJ1
blN0YXJ0IC0gMTsKKyAgICAgICAgICAgICAgICB3aGlsZSAoc3BhY2VSdW5TdGFydCAmJiByZW5k
ZXJlclRleHRbc3BhY2VSdW5TdGFydCAtIDFdID09ICcgJykKKyAgICAgICAgICAgICAgICAgICAg
LS1zcGFjZVJ1blN0YXJ0OworICAgICAgICAgICAgICAgIGVtaXRUZXh0KHRleHROb2RlLCByZW5k
ZXJlciwgc3BhY2VSdW5TdGFydCwgc3BhY2VSdW5TdGFydCArIDEpOworICAgICAgICAgICAgICAg
IG1fZW1pdHRlZFNwYWNlQmVmb3JlRmlyc3RUZXh0Qm94ID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwogICAgICAgICB1bnNpZ25lZCB0
ZXh0Qm94RW5kID0gdGV4dEJveFN0YXJ0ICsgbV90ZXh0Qm94LT5sZW5ndGgoKTsKICAgICAgICAg
dW5zaWduZWQgcnVuRW5kID0gc3RkOjptaW4odGV4dEJveEVuZCwgZW5kKTsKICAgICAgICAgCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5oIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuaAppbmRleCA5ZGVhNzMzYjZiMWYzYzYxMTll
YjY4OTMxNDY3ODAyNjE1ZTcxZjZlLi4yOGRiNzg0NzRiMjNkMjc5ZDUxNjUyYTQwNGQwOTZjZjdi
NGE2OGQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmgKQEAgLTE2Nyw2ICsx
NjcsOCBAQCBwcml2YXRlOgogCiAgICAgLy8gVXNlZCB3aGVuIGRlY2lkaW5nIHRleHQgZnJhZ21l
bnQgY3JlYXRlZCBieSA6Zmlyc3QtbGV0dGVyIHNob3VsZCBiZSBsb29rZWQgaW50by4KICAgICBi
b29sIG1faGFuZGxlZEZpcnN0TGV0dGVyIHsgZmFsc2UgfTsKKworICAgIGJvb2wgbV9lbWl0dGVk
U3BhY2VCZWZvcmVGaXJzdFRleHRCb3ggeyBmYWxzZSB9OwogfTsKIAogLy8gSXRlcmF0ZXMgdGhy
b3VnaCB0aGUgRE9NIHJhbmdlLCByZXR1cm5pbmcgYWxsIHRoZSB0ZXh0LCBhbmQgMC1sZW5ndGgg
Ym91bmRhcmllcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0
b3JCZWhhdmlvci5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3JCZWhhdmlv
ci5oCmluZGV4IGMwMWY5N2Y4MmQyODFkMTZiOGE2NGQ5YmI0NGZmOGFiNjg3MDZhNzMuLjFiMjM5
ZDY1MDhiODhjY2Q4M2Q5YjI2YjkwYzM3YTRhM2NmZjdiZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yQmVoYXZpb3IuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1RleHRJdGVyYXRvckJlaGF2aW9yLmgKQEAgLTU5LDYgKzU5LDggQEAgZW51bSBU
ZXh0SXRlcmF0b3JCZWhhdmlvckZsYWcgewogICAgIFRleHRJdGVyYXRvckNsaXBzVG9GcmFtZUFu
Y2VzdG9ycyA9IDEgPDwgOCwKIAogICAgIFRleHRJdGVyYXRvclRyYXZlcnNlc0ZsYXRUcmVlID0g
MSA8PCA5LAorCisgICAgVGV4dEl0ZXJhdG9yRW1pdHNDb2xsYXBzZWRTcGFjZXNBdFN0YXJ0ID0g
MSA8PCAxMCwKIH07CiAKIHR5cGVkZWYgdW5zaWduZWQgc2hvcnQgVGV4dEl0ZXJhdG9yQmVoYXZp
b3I7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRNYW5pcHVsYXRpb25D
b250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dE1hbmlwdWxhdGlvbkNv
bnRyb2xsZXIuY3BwCmluZGV4IGIzMWRhYzVkYTc5NDYwZjc5ZTkwZGJlNjQ5YTYwNjllMmQ0NTZm
MDkuLjMwZTc4Yjc3MzdkNTU4MGUzNzE5YzgxZTNkMmMwYjk0NjE4ODg0YmEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuY3Bw
CkBAIC0xNDYsNyArMTQ2LDcgQEAgc3RhdGljIGJvb2wgaXNUb2tlbkRlbGltaXRlcihVQ2hhciBj
aGFyYWN0ZXIpCiBjbGFzcyBQYXJhZ3JhcGhDb250ZW50SXRlcmF0b3IgewogcHVibGljOgogICAg
IFBhcmFncmFwaENvbnRlbnRJdGVyYXRvcihjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBv
c2l0aW9uJiBlbmQpCi0gICAgICAgIDogbV9pdGVyYXRvcih7ICptYWtlQm91bmRhcnlQb2ludChz
dGFydCksICptYWtlQm91bmRhcnlQb2ludChlbmQpIH0sIFRleHRJdGVyYXRvcklnbm9yZXNTdHls
ZVZpc2liaWxpdHkpCisgICAgICAgIDogbV9pdGVyYXRvcih7ICptYWtlQm91bmRhcnlQb2ludChz
dGFydCksICptYWtlQm91bmRhcnlQb2ludChlbmQpIH0sIFRleHRJdGVyYXRvcklnbm9yZXNTdHls
ZVZpc2liaWxpdHkgfCBUZXh0SXRlcmF0b3JFbWl0c0NvbGxhcHNlZFNwYWNlc0F0U3RhcnQpCiAg
ICAgICAgICwgbV9ub2RlKHN0YXJ0LmZpcnN0Tm9kZSgpKQogICAgICAgICAsIG1fcGFzdEVuZE5v
ZGUoZW5kLmZpcnN0Tm9kZSgpKQogICAgIHsKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCAxMTU1MzBmYWFlZDM2YzczMWM3NjhlYzAyZjdkOWI3NmQw
ZWIzZjFjLi42OTc1MTYyMTNmNmQ0ODVjMjI4ZTZhZTQyYTc1ZDczOGJlMTc4NmIzIDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYg
QEAKKzIwMjAtMDctMjggIFNpaHVpIExpdSAgPHNpaHVpX2xpdUBhcHBlLmNvbT4KKworICAgICAg
ICBUZXh0IG1hbmlwdWxhdGlvbjogY29sbGFwc2VkIHNwYWNlcyBhdCB0aGUgYmVnaW5uaW5nIG9m
IHRleHQgc2hvdWxkIGFsd2F5cyBiZSBlbWl0dGVkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTQ4NzgKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzYz
NzM1MDI0PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFVwZGF0ZSBleGlzdGluZyB0ZXN0cyBmb3IgYmVoYXZpb3IgY2hhbmdlLgorCisgICAgICAgICog
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9UZXh0TWFuaXB1bGF0aW9uLm1tOgorICAg
ICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisKIDIwMjAtMDctMjcgIENhcmxvcyBHYXJjaWEg
Q2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQuIEZpeCBH
VEsgYnVpbGQgd2l0aCBHTGliIDwgMi42MgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRDb2NvYS9UZXh0TWFuaXB1bGF0aW9uLm1tIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9UZXh0TWFuaXB1bGF0aW9uLm1tCmluZGV4IDRkYTI1Yjlj
NTI4MmU1MjhkNGQyMGJkYmRlMmJiMTgwZWZhNGU0NjEuLjhkYzAyODlkMzUzNWExM2ExNzNjMzVk
ZTc3MDgwNmU3NmUzM2JjNDMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvVGV4dE1hbmlwdWxhdGlvbi5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdENvY29hL1RleHRNYW5pcHVsYXRpb24ubW0KQEAgLTkzOSw3ICs5MzksNyBA
QCBURVNUKFRleHRNYW5pcHVsYXRpb24sIFN0YXJ0VGV4dE1hbmlwdWxhdGlvbkV4dHJhY3RzVmlz
aWJsZUxpbmVCcmVha3NJblRleHRBc0V4YwogICAgIEVYUEVDVF9TVFJFUSgidHdvIiwgaXRlbXNb
MF0udG9rZW5zWzNdLmNvbnRlbnQuVVRGOFN0cmluZyk7CiAgICAgRVhQRUNUX0ZBTFNFKGl0ZW1z
WzBdLnRva2Vuc1szXS5pc0V4Y2x1ZGVkKTsKICAgICBFWFBFQ1RfRVEoaXRlbXNbMV0udG9rZW5z
LmNvdW50LCAxVUwpOwotICAgIEVYUEVDVF9TVFJFUSgidGhyZWUgZm91ciIsIGl0ZW1zWzFdLnRv
a2Vuc1swXS5jb250ZW50LlVURjhTdHJpbmcpOworICAgIEVYUEVDVF9TVFJFUSgiIHRocmVlIGZv
dXIiLCBpdGVtc1sxXS50b2tlbnNbMF0uY29udGVudC5VVEY4U3RyaW5nKTsKIH0KIAogVEVTVChU
ZXh0TWFuaXB1bGF0aW9uLCBTdGFydFRleHRNYW5pcHVsYXRpb25FeHRyYWN0c1ByaXZhdGVVc2VD
aGFyYWN0ZXJzQXNFeGNsdWRlZFRva2VucykKQEAgLTEyOTAsMTAgKzEyOTAsMTAgQEAgVEVTVChU
ZXh0TWFuaXB1bGF0aW9uLCBDb21wbGV0ZVRleHRNYW5pcHVsYXRpb25SZXBsYWNlTXVsdGlwbGVT
aW1wbGVQYXJhZ3JhcGhzKQogICAgIEVYUEVDVF9TVFJFUSgiaGVsbGxvLCB3b29vcmxkIiwgaXRl
bXNbMF0udG9rZW5zWzBdLmNvbnRlbnQuVVRGOFN0cmluZyk7CiAKICAgICBFWFBFQ1RfRVEoaXRl
bXNbMV0udG9rZW5zLmNvdW50LCA0VUwpOwotICAgIEVYUEVDVF9TVFJFUSgiaGV5LCAiLCBpdGVt
c1sxXS50b2tlbnNbMF0uY29udGVudC5VVEY4U3RyaW5nKTsKLSAgICBFWFBFQ1RfU1RSRVEoIktp
dHMiLCBpdGVtc1sxXS50b2tlbnNbMV0uY29udGVudC5VVEY4U3RyaW5nKTsKLSAgICBFWFBFQ1Rf
U1RSRVEoIiBpcyAiLCBpdGVtc1sxXS50b2tlbnNbMl0uY29udGVudC5VVEY4U3RyaW5nKTsKLSAg
ICBFWFBFQ1RfU1RSRVEoImN1dXV0ZSIsIGl0ZW1zWzFdLnRva2Vuc1szXS5jb250ZW50LlVURjhT
dHJpbmcpOworICAgIEVYUEVDVF9XS19TVFJFUSgiIGhleSwgIiwgaXRlbXNbMV0udG9rZW5zWzBd
LmNvbnRlbnQpOworICAgIEVYUEVDVF9XS19TVFJFUSgiIEtpdHMiLCBpdGVtc1sxXS50b2tlbnNb
MV0uY29udGVudCk7CisgICAgRVhQRUNUX1dLX1NUUkVRKCIgaXMgIiwgaXRlbXNbMV0udG9rZW5z
WzJdLmNvbnRlbnQpOworICAgIEVYUEVDVF9XS19TVFJFUSgiY3V1dXRlIiwgaXRlbXNbMV0udG9r
ZW5zWzNdLmNvbnRlbnQpOwogCiAgICAgZG9uZSA9IGZhbHNlOwogICAgIFt3ZWJWaWV3IF9jb21w
bGV0ZVRleHRNYW5pcHVsYXRpb25Gb3JJdGVtczpAWyhfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbSAq
KWNyZWF0ZUl0ZW0oaXRlbXNbMV0uaWRlbnRpZmllciwgewpAQCAtMTM0MiwxMCArMTM0MiwxMCBA
QCBURVNUKFRleHRNYW5pcHVsYXRpb24sIENvbXBsZXRlVGV4dE1hbmlwdWxhdGlvblJlcGxhY2VN
dWx0aXBsZVNpbXBsZVBhcmFncmFwaHNBdAogICAgIEVYUEVDVF9TVFJFUSgiaGVsbGxvLCB3b29v
cmxkIiwgaXRlbXNbMF0udG9rZW5zWzBdLmNvbnRlbnQuVVRGOFN0cmluZyk7CiAKICAgICBFWFBF
Q1RfRVEoaXRlbXNbMV0udG9rZW5zLmNvdW50LCA0VUwpOwotICAgIEVYUEVDVF9TVFJFUSgiaGV5
LCAiLCBpdGVtc1sxXS50b2tlbnNbMF0uY29udGVudC5VVEY4U3RyaW5nKTsKLSAgICBFWFBFQ1Rf
U1RSRVEoIktpdHMiLCBpdGVtc1sxXS50b2tlbnNbMV0uY29udGVudC5VVEY4U3RyaW5nKTsKLSAg
ICBFWFBFQ1RfU1RSRVEoIiBpcyAiLCBpdGVtc1sxXS50b2tlbnNbMl0uY29udGVudC5VVEY4U3Ry
aW5nKTsKLSAgICBFWFBFQ1RfU1RSRVEoImN1dXV0ZSIsIGl0ZW1zWzFdLnRva2Vuc1szXS5jb250
ZW50LlVURjhTdHJpbmcpOworICAgIEVYUEVDVF9XS19TVFJFUSgiIGhleSwgIiwgaXRlbXNbMV0u
dG9rZW5zWzBdLmNvbnRlbnQpOworICAgIEVYUEVDVF9XS19TVFJFUSgiIEtpdHMiLCBpdGVtc1sx
XS50b2tlbnNbMV0uY29udGVudCk7CisgICAgRVhQRUNUX1dLX1NUUkVRKCIgaXMgIiwgaXRlbXNb
MV0udG9rZW5zWzJdLmNvbnRlbnQpOworICAgIEVYUEVDVF9XS19TVFJFUSgiY3V1dXRlIiwgaXRl
bXNbMV0udG9rZW5zWzNdLmNvbnRlbnQpOwogCiAgICAgZG9uZSA9IGZhbHNlOwogICAgIFt3ZWJW
aWV3IF9jb21wbGV0ZVRleHRNYW5pcHVsYXRpb25Gb3JJdGVtczpAWyhfV0tUZXh0TWFuaXB1bGF0
aW9uSXRlbSAqKWNyZWF0ZUl0ZW0oaXRlbXNbMV0uaWRlbnRpZmllciwgewpAQCAtMjAzNyw3ICsy
MDM3LDcgQEAgVEVTVChUZXh0TWFuaXB1bGF0aW9uLCBDb21wbGV0ZVRleHRNYW5pcHVsYXRpb25G
YWlsV2hlbkNvbnRlbnRJc0NoYW5nZWQpCiAgICAgYXV0byAqaXRlbXMgPSBbZGVsZWdhdGUgaXRl
bXNdOwogICAgIEVYUEVDVF9FUShpdGVtcy5jb3VudCwgMVVMKTsKICAgICBFWFBFQ1RfRVEoaXRl
bXNbMF0udG9rZW5zLmNvdW50LCAzVUwpOwotICAgIEVYUEVDVF9TVFJFUSgid2hhdCAiLCBpdGVt
c1swXS50b2tlbnNbMF0uY29udGVudC5VVEY4U3RyaW5nKTsKKyAgICBFWFBFQ1RfU1RSRVEoIiB3
aGF0ICIsIGl0ZW1zWzBdLnRva2Vuc1swXS5jb250ZW50LlVURjhTdHJpbmcpOwogICAgIEVYUEVD
VF9TVFJFUSgidGltZSIsIGl0ZW1zWzBdLnRva2Vuc1sxXS5jb250ZW50LlVURjhTdHJpbmcpOwog
ICAgIEVYUEVDVF9TVFJFUSgiIGFyZSB0aGV5IG5vdz8iLCBpdGVtc1swXS50b2tlbnNbMl0uY29u
dGVudC5VVEY4U3RyaW5nKTsKIApAQCAtMjkxOSw2ICsyOTE5LDU4IEBAIFRFU1QoVGV4dE1hbmlw
dWxhdGlvbiwgQ29tcGxldGVUZXh0TWFuaXB1bGF0aW9uQWRkc092ZXJmbG93SGlkZGVuVG9Bdm9p
ZEJyZWFraW5nCiAgICAgRVhQRUNUX1dLX1NUUkVRKCJhdXRvIiwgW3dlYlZpZXcgc3RyaW5nQnlF
dmFsdWF0aW5nSmF2YVNjcmlwdDpAImdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQucXVlcnlTZWxl
Y3Rvcignc3BhbicpKS5vdmVyZmxvd1kiXSk7CiB9CiAKK1RFU1QoVGV4dE1hbmlwdWxhdGlvbiwg
Q29tcGxldGVUZXh0TWFuaXB1bGF0aW9uUGFyYWdyYXBoQ29udGFpbnNDb2xsYXBzZWRTcGFjZXMp
Cit7CisgICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tUZXh0TWFuaXB1bGF0aW9uRGVsZWdh
dGUgYWxsb2NdIGluaXRdKTsKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2Vi
VmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDQwMCwgNDAwKV0pOwor
ICAgIFt3ZWJWaWV3IF9zZXRUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGU6ZGVsZWdhdGUuZ2V0KCld
OworICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkSFRNTFN0cmluZzpAIjwhRE9DVFlQRSBo
dG1sPiIKKyAgICAgICAgIjxoZWFkPiIKKyAgICAgICAgIiAgPHN0eWxlPiIKKyAgICAgICAgIiAg
ICBzcGFuIHsiCisgICAgICAgICIgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IgorICAgICAg
ICAiICAgIH0iCisgICAgICAgICIgIDwvc3R5bGU+IgorICAgICAgICAiPC9oZWFkPiIKKyAgICAg
ICAgIjxib2R5PiIKKyAgICAgICAgIjxkaXY+IHN0YXJ0PC9kaXY+IgorICAgICAgICAiPGRpdj4g
Z3JlZXRpbmc8L2Rpdj4iCisgICAgICAgICI8c3Bhbj4gIGhlbGxvPC9zcGFuPiIKKyAgICAgICAg
IjxhPiAgd29ybGQ8L2E+IgorICAgICAgICAiPC9ib2R5PiJdOworCisgICAgZG9uZSA9IGZhbHNl
OworICAgIFt3ZWJWaWV3IF9zdGFydFRleHRNYW5pcHVsYXRpb25zV2l0aENvbmZpZ3VyYXRpb246
bmlsIGNvbXBsZXRpb246XnsKKyAgICAgICAgZG9uZSA9IHRydWU7CisgICAgfV07CisgICAgVGVz
dFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKKworICAgIGF1dG8gaXRlbXMgPSBbZGVsZWdh
dGUgaXRlbXNdOworICAgIEVYUEVDVF9FUShpdGVtcy5jb3VudCwgNFVMKTsKKyAgICBFWFBFQ1Rf
RVEoaXRlbXNbMF0udG9rZW5zLmNvdW50LCAxVUwpOworICAgIEVYUEVDVF9XS19TVFJFUSgiIHN0
YXJ0IiwgaXRlbXNbMF0udG9rZW5zWzBdLmNvbnRlbnQpOworICAgIEVYUEVDVF9FUShpdGVtc1sx
XS50b2tlbnMuY291bnQsIDFVTCk7CisgICAgRVhQRUNUX1dLX1NUUkVRKCIgZ3JlZXRpbmciLCBp
dGVtc1sxXS50b2tlbnNbMF0uY29udGVudCk7CisgICAgRVhQRUNUX0VRKGl0ZW1zWzJdLnRva2Vu
cy5jb3VudCwgMVVMKTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoIiBoZWxsbyIsIGl0ZW1zWzJdLnRv
a2Vuc1swXS5jb250ZW50KTsKKyAgICBFWFBFQ1RfRVEoaXRlbXNbM10udG9rZW5zLmNvdW50LCAx
VUwpOworICAgIEVYUEVDVF9XS19TVFJFUSgiIHdvcmxkIiwgaXRlbXNbM10udG9rZW5zWzBdLmNv
bnRlbnQpOworCisgICAgZG9uZSA9IGZhbHNlOworICAgIFt3ZWJWaWV3IF9jb21wbGV0ZVRleHRN
YW5pcHVsYXRpb25Gb3JJdGVtczpAWworICAgICAgICBjcmVhdGVJdGVtKGl0ZW1zWzBdLmlkZW50
aWZpZXIsIHt7IGl0ZW1zWzBdLnRva2Vuc1swXS5pZGVudGlmaWVyLCBAIlN0YXJ0IiB9fSkuZ2V0
KCksCisgICAgICAgIGNyZWF0ZUl0ZW0oaXRlbXNbMV0uaWRlbnRpZmllciwge3sgaXRlbXNbMV0u
dG9rZW5zWzBdLmlkZW50aWZpZXIsIEAiR3JlZXRpbmciIH19KS5nZXQoKSwKKyAgICAgICAgY3Jl
YXRlSXRlbShpdGVtc1syXS5pZGVudGlmaWVyLCB7eyBpdGVtc1syXS50b2tlbnNbMF0uaWRlbnRp
ZmllciwgQCJIZWxsbyIgfX0pLmdldCgpLAorICAgICAgICBjcmVhdGVJdGVtKGl0ZW1zWzNdLmlk
ZW50aWZpZXIsIHt7IGl0ZW1zWzNdLnRva2Vuc1swXS5pZGVudGlmaWVyLCBAIldvcmxkIiB9fSku
Z2V0KCkKKyAgICBdIGNvbXBsZXRpb246XihOU0FycmF5PE5TRXJyb3IgKj4gKmVycm9ycykgewor
ICAgICAgICBFWFBFQ1RfRVEoZXJyb3JzLCBuaWwpOworICAgICAgICBkb25lID0gdHJ1ZTsKKyAg
ICB9XTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOworCisgICAgRVhQRUNU
X1dLX1NUUkVRKCI8ZGl2PlN0YXJ0PC9kaXY+PGRpdj5HcmVldGluZzwvZGl2PjxzcGFuPkhlbGxv
PC9zcGFuPjxhPldvcmxkPC9hPiIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3Jp
cHQ6QCJkb2N1bWVudC5ib2R5LmlubmVySFRNTCJdKTsKK30KKwogVEVTVChUZXh0TWFuaXB1bGF0
aW9uLCBUZXh0TWFuaXB1bGF0aW9uVG9rZW5EZWJ1Z0Rlc2NyaXB0aW9uKQogewogICAgIGF1dG8g
dG9rZW4gPSBhZG9wdE5TKFtbX1dLVGV4dE1hbmlwdWxhdGlvblRva2VuIGFsbG9jXSBpbml0XSk7
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>405941</attachid>
            <date>2020-08-04 14:12:34 -0700</date>
            <delta_ts>2020-08-06 09:19:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-214878-20200804141233.patch</filename>
            <type>text/plain</type>
            <size>6367</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY1MjQ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDEzNjc5NmViNGUwZmU0
NzNlZjM0MDczNzI4MmIzYWI0Mzg0M2JmMS4uYmYxMzlmMzlmM2NmZDE3MjQ5ODE3Yzc2MGVkNTYw
NTA2NDNjMmQ3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4IEBACisyMDIwLTA4LTA0ICBTaWh1
aSBMaXUgIDxzaWh1aV9saXVAYXBwZS5jb20+CisKKyAgICAgICAgVGV4dCBtYW5pcHVsYXRpb246
IGxlYWRpbmcgYW5kIHRyYWlsaW5nIHNwYWNlcyBzaG91bGQgYmUgaWdub3JlZCB3aGVuIGNvbXBh
cmluZyBjb250ZW50CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMTQ4NzgKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzYzNzM1MDI0PgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRleHRJdGVyYXRvciBkb2Vz
IG5vdCBlbWl0IGNvbGxhcHNlZCBzcGFjZSBpZiB0aGVyZSBpcyBubyB0ZXh0IGVtaXR0ZWQgYmVm
b3JlIG9yIHRoZSBsYXN0IGVtaXR0ZWQgY2hhcmFjdGVyIGlzIAorICAgICAgICBjb2xsYXBzZWQg
c3BhY2UuIAorICAgICAgICBXaGVuIFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyIHN0YXJ0cyBv
YnNlcnZpbmcgcGFyYWdyYXBocywgaXQgaXRlcmF0ZXMgdGhlIHdob2xlIGRvY3VtZW50IGFuZCB0
aGUgcmFuZ2Ugb2YgCisgICAgICAgIFRleHRJdGVyYXRvciBpcyB0aGUgcmFuZ2Ugb2YgZG9jdW1l
bnQuIEZvciBzb21lIHRleHQgbm9kZSBBIGluIHRoZSBkb2N1bWVudCwgaWYgVGV4dEl0ZXJhdG9y
IGVtaXRzIHRleHQgZm9yIHNvbWUKKyAgICAgICAgb3RoZXIgdGV4dCBub2RlIEIgYmVmb3JlIGl0
LCB0aGUgY29sbGFwc2VkIHNwYWNlIGF0IHRoZSBiZWdpbm5pbmcgb2YgQSB3aWxsIGJlIGVtaXR0
ZWQsIGFuZCAKKyAgICAgICAgVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIgd291bGQgdGhpbmsg
dGhlIGVtaXR0ZWQgc3BhY2UgaXMgcGFydCBvZiBBJ3MgY29udGVudC4gCisgICAgICAgIFdoZW4g
VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIgcmVwbGFjZXMgY29udGVudCBmb3IgQSwgYW5kIHRo
ZSByYW5nZSBvZiBUZXh0SXRlcmF0b3IgaXMgc2V0IHRvIHRoZSByYW5nZSBvZiBBLCAKKyAgICAg
ICAgdGhlIGNvbGxhcHNlZCBzcGFjZSBpcyBub3QgZW1pdHRlZC4gVGhlIGNoZWNrIHRvIGVuc3Vy
ZSBBJ3MgY29udGVudCBpcyB1bmNoYW5nZWQgd291bGQgZmFpbC4KKyAKKyAgICAgICAgVG8gc29s
dmUgdGhpcyBpc3N1ZSwgVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIgbm93IGNoZWNrIGNvbnRl
bnQgYWZ0ZXIgcmVtb3ZpbmcgbGVhZGluZyBhbmQgdHJhaWxpbmcgc3BhY2VzLgorIAorICAgICAg
ICBBUEkgdGVzdDogVGV4dE1hbmlwdWxhdGlvbi5Db21wbGV0ZVRleHRNYW5pcHVsYXRpb25QYXJh
Z3JhcGhzQ29udGFpbkNvbGxhcHNlZFNwYWNlcworCisgICAgICAgICogZWRpdGluZy9UZXh0TWFu
aXB1bGF0aW9uQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjppc0NvbnRlbnRFcXVp
dmFsZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpy
ZXBsYWNlKToKKwogMjAyMC0wOC0wNCAgQW5kcmVzIEdvbnphbGV6ICA8YW5kcmVzZ18yMkBhcHBs
ZS5jb20+CiAKICAgICAgICAgQWRkIHRoZSBhYmlsaXR5IG9mIGNvbXBhcmluZyB0aGUgYWNjZXNz
aWJpbGl0eSB0cmVlIHdpdGggaXNvbGF0ZWQgdHJlZSBtb2RlIG9uIGFuZCBvZmYuCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRNYW5pcHVsYXRpb25Db250cm9sbGVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuY3Bw
CmluZGV4IDg3NmMwYjMyNWQxMTMzYmNhYzMyYTNjYWVkODAwZGQxNzIyODk1M2UuLjQ3YTdhY2Qz
MjIwZmU0OTRjNWYyMDRlMDU0MjVkM2YyMmI2NDgwZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuY3BwCkBAIC0yODEsNiAr
MjgxLDExIEBAIHN0YXRpYyBib29sIGNhblBlcmZvcm1UZXh0TWFuaXB1bGF0aW9uQnlSZXBsYWNp
bmdFbnRpcmVUZXh0Q29udGVudChjb25zdCBFbGVtZW50CiAgICAgcmV0dXJuIGVsZW1lbnQuaGFz
VGFnTmFtZShIVE1MTmFtZXM6OnRpdGxlVGFnKSB8fCBlbGVtZW50Lmhhc1RhZ05hbWUoSFRNTE5h
bWVzOjpvcHRpb25UYWcpOwogfQogCitzdGF0aWMgYm9vbCBpc0NvbnRlbnRFcXVpdmFsZW50KGNv
bnN0IFN0cmluZyYgY29udGVudCwgY29uc3QgU3RyaW5nJiBvcmlnaW5hbENvbnRlbnQpCit7Cisg
ICAgcmV0dXJuIGNvbnRlbnQuc3RyaXBXaGl0ZVNwYWNlKCkgPT0gb3JpZ2luYWxDb250ZW50LnN0
cmlwV2hpdGVTcGFjZSgpOworfQorCiBzdGF0aWMgT3B0aW9uYWw8VGV4dE1hbmlwdWxhdGlvbkNv
bnRyb2xsZXI6Ok1hbmlwdWxhdGlvblRva2VuSW5mbz4gdG9rZW5JbmZvKE5vZGUqIG5vZGUpCiB7
CiAgICAgaWYgKCFub2RlKQpAQCAtNzc5LDcgKzc4NCw3IEBAIGF1dG8gVGV4dE1hbmlwdWxhdGlv
bkNvbnRyb2xsZXI6OnJlcGxhY2UoY29uc3QgTWFuaXB1bGF0aW9uSXRlbURhdGEmIGl0ZW0sIGNv
bnN0CiAgICAgICAgICAgICAgICAgcmV0dXJuIE1hbmlwdWxhdGlvbkZhaWx1cmVUeXBlOjpDb250
ZW50Q2hhbmdlZDsKIAogICAgICAgICAgICAgYXV0byYgY3VycmVudFRva2VuID0gaXRlbS50b2tl
bnNbY3VycmVudFRva2VuSW5kZXgrK107Ci0gICAgICAgICAgICBpZiAoIWNvbnRlbnQuaXNSZXBs
YWNlZENvbnRlbnQgJiYgY3VycmVudFRva2VuLmNvbnRlbnQgIT0gdG9rZW4uY29udGVudCkKKyAg
ICAgICAgICAgIGlmICghY29udGVudC5pc1JlcGxhY2VkQ29udGVudCAmJiAhaXNDb250ZW50RXF1
aXZhbGVudChjdXJyZW50VG9rZW4uY29udGVudCwgdG9rZW4uY29udGVudCkpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIE1hbmlwdWxhdGlvbkZhaWx1cmVUeXBlOjpDb250ZW50Q2hhbmdlZDsKIAog
ICAgICAgICAgICAgdG9rZW5FeGNoYW5nZU1hcC5zZXQoY3VycmVudFRva2VuLmlkZW50aWZpZXIs
IFRva2VuRXhjaGFuZ2VEYXRhIHsgY29udGVudC5ub2RlLmNvcHlSZWYoKSwgY3VycmVudFRva2Vu
LmNvbnRlbnQsICFpc05vZGVJbmNsdWRlZCB9KTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxv
ZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBiMDEwNmE4ZTIxMTI1N2RiODdjNzliMmIzZTgwMWNl
ZmQ1MDM4YzkzLi5kZmEwNzg2ODNiNTk2MWU2ZDliZTA1MDY0Njk1YzA3ZWI0YjIwNGM4IDEwMDY0
NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MTQgQEAKKzIwMjAtMDgtMDQgIFNpaHVpIExpdSAgPHNpaHVpX2xpdUBhcHBlLmNvbT4KKworICAg
ICAgICBUZXh0IG1hbmlwdWxhdGlvbjogbGVhZGluZyBhbmQgdHJhaWxpbmcgc3BhY2VzIHNob3Vs
ZCBiZSBpZ25vcmVkIHdoZW4gY29tcGFyaW5nIGNvbnRlbnQKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNDg3OAorICAgICAgICA8cmRhcjovL3Byb2Js
ZW0vNjM3MzUwMjQ+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1RleHRNYW5pcHVsYXRpb24u
bW06CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKwogMjAyMC0wOC0wNCAgSGVjdG9y
IExvcGV6ICA8aGVjdG9yX2lfbG9wZXpAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBteXNlbGYg
dG8gY29udHJpYnV0b3JzLmpzb24KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvVGV4dE1hbmlwdWxhdGlvbi5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvVGV4dE1hbmlwdWxhdGlvbi5tbQppbmRleCA5MWU5YjIyMTk4ODgw
N2VjMTIxNGRiNDQ3ZDkxZjdmODJmNTEwYTg2Li40ZWFiM2IyMjdkZWEyNTYxZmFmNzg3OTcxMjJh
NjI4MThjNjNjNjY2IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL1RleHRNYW5pcHVsYXRpb24ubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9UZXh0TWFuaXB1bGF0aW9uLm1tCkBAIC0yOTg1LDYgKzI5ODUsNTAgQEAg
VEVTVChUZXh0TWFuaXB1bGF0aW9uLCBDb21wbGV0ZVRleHRNYW5pcHVsYXRpb25BZGRzT3ZlcmZs
b3dIaWRkZW5Ub0F2b2lkQnJlYWtpbmcKICAgICBFWFBFQ1RfV0tfU1RSRVEoImF1dG8iLCBbd2Vi
VmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZ2V0Q29tcHV0ZWRTdHlsZShkb2N1
bWVudC5xdWVyeVNlbGVjdG9yKCdzcGFuJykpLm92ZXJmbG93WSJdKTsKIH0KIAorVEVTVChUZXh0
TWFuaXB1bGF0aW9uLCBDb21wbGV0ZVRleHRNYW5pcHVsYXRpb25QYXJhZ3JhcGhzQ29udGFpbkNv
bGxhcHNlZFNwYWNlcykKK3sKKyAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbW1RleHRNYW5p
cHVsYXRpb25EZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0
TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwg
NDAwLCA0MDApXSk7CisgICAgW3dlYlZpZXcgX3NldFRleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZTpk
ZWxlZ2F0ZS5nZXQoKV07CisgICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRIVE1MU3RyaW5n
OkAiPCFET0NUWVBFIGh0bWw+IgorICAgICAgICAiPGhlYWQ+IgorICAgICAgICAiICA8c3R5bGU+
IgorICAgICAgICAiICAgIHNwYW4geyIKKyAgICAgICAgIiAgICAgIGRpc3BsYXk6IGlubGluZS1i
bG9jazsiCisgICAgICAgICIgICAgfSIKKyAgICAgICAgIiAgPC9zdHlsZT4iCisgICAgICAgICI8
L2hlYWQ+IgorICAgICAgICAiPGJvZHk+IgorICAgICAgICAiPHNwYW4+ICBoZWxsbzwvc3Bhbj4i
CisgICAgICAgICI8c3Bhbj4gIHdvcmxkPC9zcGFuPiIKKyAgICAgICAgIjwvYm9keT4iXTsKKwor
ICAgIGRvbmUgPSBmYWxzZTsKKyAgICBbd2ViVmlldyBfc3RhcnRUZXh0TWFuaXB1bGF0aW9uc1dp
dGhDb25maWd1cmF0aW9uOm5pbCBjb21wbGV0aW9uOl57CisgICAgICAgIGRvbmUgPSB0cnVlOwor
ICAgIH1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CisKKyAgICBhdXRv
IGl0ZW1zID0gW2RlbGVnYXRlIGl0ZW1zXTsKKyAgICBFWFBFQ1RfRVEoaXRlbXMuY291bnQsIDJV
TCk7CisgICAgRVhQRUNUX0VRKGl0ZW1zWzBdLnRva2Vucy5jb3VudCwgMVVMKTsKKyAgICBFWFBF
Q1RfV0tfU1RSRVEoImhlbGxvIiwgaXRlbXNbMF0udG9rZW5zWzBdLmNvbnRlbnQpOworICAgIEVY
UEVDVF9FUShpdGVtc1sxXS50b2tlbnMuY291bnQsIDFVTCk7CisgICAgRVhQRUNUX1dLX1NUUkVR
KCIgd29ybGQiLCBpdGVtc1sxXS50b2tlbnNbMF0uY29udGVudCk7CisKKyAgICBkb25lID0gZmFs
c2U7CisgICAgW3dlYlZpZXcgX2NvbXBsZXRlVGV4dE1hbmlwdWxhdGlvbkZvckl0ZW1zOkBbCisg
ICAgICAgIGNyZWF0ZUl0ZW0oaXRlbXNbMF0uaWRlbnRpZmllciwge3sgaXRlbXNbMF0udG9rZW5z
WzBdLmlkZW50aWZpZXIsIEAiSGVsbG8iIH19KS5nZXQoKSwKKyAgICAgICAgY3JlYXRlSXRlbShp
dGVtc1sxXS5pZGVudGlmaWVyLCB7eyBpdGVtc1sxXS50b2tlbnNbMF0uaWRlbnRpZmllciwgQCJX
b3JsZCIgfX0pLmdldCgpLAorICAgIF0gY29tcGxldGlvbjpeKE5TQXJyYXk8TlNFcnJvciAqPiAq
ZXJyb3JzKSB7CisgICAgICAgIEVYUEVDVF9FUShlcnJvcnMsIG5pbCk7CisgICAgICAgIGRvbmUg
PSB0cnVlOworICAgIH1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CisK
KyAgICBFWFBFQ1RfV0tfU1RSRVEoIjxzcGFuPkhlbGxvPC9zcGFuPjxzcGFuPldvcmxkPC9zcGFu
PiIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJkb2N1bWVudC5ib2R5
LmlubmVySFRNTCJdKTsKK30KKwogVEVTVChUZXh0TWFuaXB1bGF0aW9uLCBUZXh0TWFuaXB1bGF0
aW9uVG9rZW5EZWJ1Z0Rlc2NyaXB0aW9uKQogewogICAgIGF1dG8gdG9rZW4gPSBhZG9wdE5TKFtb
X1dLVGV4dE1hbmlwdWxhdGlvblRva2VuIGFsbG9jXSBpbml0XSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>406086</attachid>
            <date>2020-08-06 09:19:03 -0700</date>
            <delta_ts>2020-08-06 17:56:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-214878-20200806091902.patch</filename>
            <type>text/plain</type>
            <size>6578</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY1MzI0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjAxYjJmZWQ3YTNiNzJl
NThkNGVmYzVkMjY0YmM3ZWUxMjRmNTRiMy4uNzZkMzNhMTkxNTE3YTNkYzZhY2ZiZTU5MDljZDkz
N2U0OTQ0N2U5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4IEBACisyMDIwLTA4LTA2ICBTaWh1
aSBMaXUgIDxzaWh1aV9saXVAYXBwZS5jb20+CisKKyAgICAgICAgVGV4dCBtYW5pcHVsYXRpb246
IGxlYWRpbmcgYW5kIHRyYWlsaW5nIHNwYWNlcyBzaG91bGQgYmUgaWdub3JlZCB3aGVuIGNvbXBh
cmluZyBjb250ZW50CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMTQ4NzgKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzYzNzM1MDI0PgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRleHRJdGVyYXRvciBkb2Vz
IG5vdCBlbWl0IGNvbGxhcHNlZCBzcGFjZSBpZiB0aGVyZSBpcyBubyB0ZXh0IGVtaXR0ZWQgYmVm
b3JlIG9yIHRoZSBsYXN0IGVtaXR0ZWQgY2hhcmFjdGVyIGlzIAorICAgICAgICBjb2xsYXBzZWQg
c3BhY2UuIFdoZW4gVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIgc3RhcnRzIG9ic2VydmluZyBw
YXJhZ3JhcGhzLCBpdCBpdGVyYXRlcyB0aGUgd2hvbGUgZG9jdW1lbnQgYW5kCisgICAgICAgIHRo
ZSByYW5nZSBvZiBUZXh0SXRlcmF0b3IgaXMgdGhlIHJhbmdlIG9mIGRvY3VtZW50LiBGb3Igc29t
ZSB0ZXh0IG5vZGUgQSBpbiB0aGUgZG9jdW1lbnQsIGlmIFRleHRJdGVyYXRvciBlbWl0cyAKKyAg
ICAgICAgdGV4dCBmb3Igc29tZSBvdGhlciB0ZXh0IG5vZGUgQiBiZWZvcmUgaXQsIHRoZSBjb2xs
YXBzZWQgc3BhY2UgYXQgdGhlIGJlZ2lubmluZyBvZiBBIHdpbGwgYmUgZW1pdHRlZCwgYW5kIAor
ICAgICAgICBUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlciB3b3VsZCB0aGluayB0aGUgZW1pdHRl
ZCBzcGFjZSBpcyBwYXJ0IG9mIEEncyBjb250ZW50LiBXaGVuIFRleHRNYW5pcHVsYXRpb25Db250
cm9sbGVyCisgICAgICAgIHJlcGxhY2VzIGNvbnRlbnQgZm9yIEEsIGFuZCB0aGUgcmFuZ2Ugb2Yg
VGV4dEl0ZXJhdG9yIGlzIHNldCB0byB0aGUgcmFuZ2Ugb2YgQSwgdGhlIGNvbGxhcHNlZCBzcGFj
ZSBpcyBub3QgCisgICAgICAgIGVtaXR0ZWQuIFRoZSBjaGVjayB0byBlbnN1cmUgQSdzIGNvbnRl
bnQgaXMgdW5jaGFuZ2VkIHdvdWxkIGZhaWwuCisgCisgICAgICAgIFRvIHNvbHZlIHRoaXMgaXNz
dWUsIGZvciBmaXJzdCBhbmQgbGFzdCB0b2tlbiBpbiB0aGUgcGFyYWdyYXBoLCBUZXh0TWFuaXB1
bGF0aW9uQ29udHJvbGxlciBjaGVja3MgY29udGVudCBhZnRlciAKKyAgICAgICAgcmVtb3Zpbmcg
bGVhZGluZyBhbmQgdHJhaWxpbmcgc3BhY2VzLgorIAorICAgICAgICBBUEkgdGVzdDogVGV4dE1h
bmlwdWxhdGlvbi5Db21wbGV0ZVRleHRNYW5pcHVsYXRpb25QYXJhZ3JhcGhzQ29udGFpbkNvbGxh
cHNlZFNwYWNlcworCisgICAgICAgICogZWRpdGluZy9UZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjppc0NvbnRlbnRFcXVpdmFsZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpyZXBsYWNlKToKKwogMjAyMC0w
OC0wNSAgUm9iIEJ1aXMgIDxyYnVpc0BpZ2FsaWEuY29tPgogCiAgICAgICAgIFJlbW92ZSB0aGUg
U3R5bGVSZXNvbHZlci1zcGVjaWZpYyBldmFsdWF0ZSBmdW5jdGlvbiBpbiBNZWRpYVF1ZXJ5RXZh
bHVhdG9yCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRNYW5pcHVsYXRp
b25Db250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dE1hbmlwdWxhdGlv
bkNvbnRyb2xsZXIuY3BwCmluZGV4IDQ5YjE3NGEyMzg2NTRiNTJhNGU2MDJjNzMyNmUyY2U3OGZl
ZTJmNjIuLmUxMWY5NTY5YjQ5ZmU4MTE0YmFmYWM5MjM5ZWEwYjZhOGI3M2E4OGIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIu
Y3BwCkBAIC0yODEsNiArMjgxLDExIEBAIHN0YXRpYyBib29sIGNhblBlcmZvcm1UZXh0TWFuaXB1
bGF0aW9uQnlSZXBsYWNpbmdFbnRpcmVUZXh0Q29udGVudChjb25zdCBFbGVtZW50CiAgICAgcmV0
dXJuIGVsZW1lbnQuaGFzVGFnTmFtZShIVE1MTmFtZXM6OnRpdGxlVGFnKSB8fCBlbGVtZW50Lmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjpvcHRpb25UYWcpOwogfQogCitzdGF0aWMgYm9vbCBpc0NvbnRl
bnRFcXVpdmFsZW50KGNvbnN0IFN0cmluZyYgY29udGVudCwgY29uc3QgU3RyaW5nJiBvcmlnaW5h
bENvbnRlbnQpCit7CisgICAgcmV0dXJuIGNvbnRlbnQuc3RyaXBXaGl0ZVNwYWNlKCkgPT0gb3Jp
Z2luYWxDb250ZW50LnN0cmlwV2hpdGVTcGFjZSgpOworfQorCiBzdGF0aWMgT3B0aW9uYWw8VGV4
dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Ok1hbmlwdWxhdGlvblRva2VuSW5mbz4gdG9rZW5JbmZv
KE5vZGUqIG5vZGUpCiB7CiAgICAgaWYgKCFub2RlKQpAQCAtNzkzLDcgKzc5OCw4IEBAIGF1dG8g
VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6OnJlcGxhY2UoY29uc3QgTWFuaXB1bGF0aW9uSXRl
bURhdGEmIGl0ZW0sIGNvbnN0CiAgICAgICAgICAgICAgICAgcmV0dXJuIE1hbmlwdWxhdGlvbkZh
aWx1cmVUeXBlOjpDb250ZW50Q2hhbmdlZDsKIAogICAgICAgICAgICAgYXV0byYgY3VycmVudFRv
a2VuID0gaXRlbS50b2tlbnNbY3VycmVudFRva2VuSW5kZXgrK107Ci0gICAgICAgICAgICBpZiAo
IWNvbnRlbnQuaXNSZXBsYWNlZENvbnRlbnQgJiYgY3VycmVudFRva2VuLmNvbnRlbnQgIT0gdG9r
ZW4uY29udGVudCkKKyAgICAgICAgICAgIGJvb2wgaXNDb250ZW50VW5jaGFuZ2VkID0gKGN1cnJl
bnRUb2tlbi5jb250ZW50ID09IHRva2VuLmNvbnRlbnQpIHx8ICgoY3VycmVudFRva2VuSW5kZXgg
PT0gMSB8fCBjdXJyZW50VG9rZW5JbmRleCA9PSBpdGVtLnRva2Vucy5zaXplKCkpICYmIGlzQ29u
dGVudEVxdWl2YWxlbnQoY3VycmVudFRva2VuLmNvbnRlbnQsIHRva2VuLmNvbnRlbnQpKTsKKyAg
ICAgICAgICAgIGlmICghY29udGVudC5pc1JlcGxhY2VkQ29udGVudCAmJiAhaXNDb250ZW50VW5j
aGFuZ2VkKQogICAgICAgICAgICAgICAgIHJldHVybiBNYW5pcHVsYXRpb25GYWlsdXJlVHlwZTo6
Q29udGVudENoYW5nZWQ7CiAKICAgICAgICAgICAgIHRva2VuRXhjaGFuZ2VNYXAuc2V0KGN1cnJl
bnRUb2tlbi5pZGVudGlmaWVyLCBUb2tlbkV4Y2hhbmdlRGF0YSB7IGNvbnRlbnQubm9kZS5jb3B5
UmVmKCksIGN1cnJlbnRUb2tlbi5jb250ZW50LCAhaXNOb2RlSW5jbHVkZWQgfSk7CmRpZmYgLS1n
aXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNDU0YzdjY2JhNDNi
ZDg4NDcwYmI4NThiMzMzNWMxMmQzNjhiYzk1Zi4uMzU0NWZlN2UyMDM4Mjg3ZmM2YTIxNDllYTQ3
NmVlZGExZmIzMjc0ZCAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0No
YW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDIwLTA4LTA2ICBTaWh1aSBMaXUgIDxzaWh1aV9s
aXVAYXBwZS5jb20+CisKKyAgICAgICAgVGV4dCBtYW5pcHVsYXRpb246IGxlYWRpbmcgYW5kIHRy
YWlsaW5nIHNwYWNlcyBzaG91bGQgYmUgaWdub3JlZCB3aGVuIGNvbXBhcmluZyBjb250ZW50Cisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTQ4NzgKKyAg
ICAgICAgPHJkYXI6Ly9wcm9ibGVtLzYzNzM1MDI0PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2Nv
YS9UZXh0TWFuaXB1bGF0aW9uLm1tOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisK
IDIwMjAtMDgtMDYgIFJvYiBCdWlzICA8cmJ1aXNAaWdhbGlhLmNvbT4KIAogICAgICAgICBidWls
ZC13ZWJraXQgc2NyaXB0IHRyaWVzIHRvIGV4ZWN1dGUgY29tbWFuZCB4Y29kZWJ1aWxkIG9uIExp
bnV4CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Rl
eHRNYW5pcHVsYXRpb24ubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29h
L1RleHRNYW5pcHVsYXRpb24ubW0KaW5kZXggY2I4NjFhZTBmZGE4MTUwZmY1YzkzMTJmNzk1N2I2
N2ZlY2NjODRmMy4uNGFjNDExYjBkM2UyMGFlM2ZkZTM5NWJlOWFkZDFlZTZjNWU3ZWE5MyAxMDA2
NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9UZXh0TWFuaXB1
bGF0aW9uLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvVGV4
dE1hbmlwdWxhdGlvbi5tbQpAQCAtMzA0MCw2ICszMDQwLDUwIEBAIFRFU1QoVGV4dE1hbmlwdWxh
dGlvbiwgQ29tcGxldGVUZXh0TWFuaXB1bGF0aW9uQWRkc092ZXJmbG93SGlkZGVuVG9Bdm9pZEJy
ZWFraW5nCiAgICAgRVhQRUNUX1dLX1NUUkVRKCJhdXRvIiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFs
dWF0aW5nSmF2YVNjcmlwdDpAImdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQucXVlcnlTZWxlY3Rv
cignc3BhbicpKS5vdmVyZmxvd1kiXSk7CiB9CiAKK1RFU1QoVGV4dE1hbmlwdWxhdGlvbiwgQ29t
cGxldGVUZXh0TWFuaXB1bGF0aW9uUGFyYWdyYXBoc0NvbnRhaW5Db2xsYXBzZWRTcGFjZXMpCit7
CisgICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUg
YWxsb2NdIGluaXRdKTsKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmll
dyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDQwMCwgNDAwKV0pOworICAg
IFt3ZWJWaWV3IF9zZXRUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGU6ZGVsZWdhdGUuZ2V0KCldOwor
ICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkSFRNTFN0cmluZzpAIjwhRE9DVFlQRSBodG1s
PiIKKyAgICAgICAgIjxoZWFkPiIKKyAgICAgICAgIiAgPHN0eWxlPiIKKyAgICAgICAgIiAgICBz
cGFuIHsiCisgICAgICAgICIgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IgorICAgICAgICAi
ICAgIH0iCisgICAgICAgICIgIDwvc3R5bGU+IgorICAgICAgICAiPC9oZWFkPiIKKyAgICAgICAg
Ijxib2R5PiIKKyAgICAgICAgIjxzcGFuPiAgaGVsbG88L3NwYW4+IgorICAgICAgICAiPHNwYW4+
ICB3b3JsZDwvc3Bhbj4iCisgICAgICAgICI8L2JvZHk+Il07CisKKyAgICBkb25lID0gZmFsc2U7
CisgICAgW3dlYlZpZXcgX3N0YXJ0VGV4dE1hbmlwdWxhdGlvbnNXaXRoQ29uZmlndXJhdGlvbjpu
aWwgY29tcGxldGlvbjpeeworICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICB9XTsKKyAgICBUZXN0
V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOworCisgICAgYXV0byBpdGVtcyA9IFtkZWxlZ2F0
ZSBpdGVtc107CisgICAgRVhQRUNUX0VRKGl0ZW1zLmNvdW50LCAyVUwpOworICAgIEVYUEVDVF9F
UShpdGVtc1swXS50b2tlbnMuY291bnQsIDFVTCk7CisgICAgRVhQRUNUX1dLX1NUUkVRKCJoZWxs
byIsIGl0ZW1zWzBdLnRva2Vuc1swXS5jb250ZW50KTsKKyAgICBFWFBFQ1RfRVEoaXRlbXNbMV0u
dG9rZW5zLmNvdW50LCAxVUwpOworICAgIEVYUEVDVF9XS19TVFJFUSgiIHdvcmxkIiwgaXRlbXNb
MV0udG9rZW5zWzBdLmNvbnRlbnQpOworCisgICAgZG9uZSA9IGZhbHNlOworICAgIFt3ZWJWaWV3
IF9jb21wbGV0ZVRleHRNYW5pcHVsYXRpb25Gb3JJdGVtczpAWworICAgICAgICBjcmVhdGVJdGVt
KGl0ZW1zWzBdLmlkZW50aWZpZXIsIHt7IGl0ZW1zWzBdLnRva2Vuc1swXS5pZGVudGlmaWVyLCBA
IkhlbGxvIiB9fSkuZ2V0KCksCisgICAgICAgIGNyZWF0ZUl0ZW0oaXRlbXNbMV0uaWRlbnRpZmll
ciwge3sgaXRlbXNbMV0udG9rZW5zWzBdLmlkZW50aWZpZXIsIEAiV29ybGQiIH19KS5nZXQoKSwK
KyAgICBdIGNvbXBsZXRpb246XihOU0FycmF5PE5TRXJyb3IgKj4gKmVycm9ycykgeworICAgICAg
ICBFWFBFQ1RfRVEoZXJyb3JzLCBuaWwpOworICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICB9XTsK
KyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOworCisgICAgRVhQRUNUX1dLX1NU
UkVRKCI8c3Bhbj5IZWxsbzwvc3Bhbj48c3Bhbj5Xb3JsZDwvc3Bhbj4iLCBbd2ViVmlldyBzdHJp
bmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZG9jdW1lbnQuYm9keS5pbm5lckhUTUwiXSk7Cit9
CisKIFRFU1QoVGV4dE1hbmlwdWxhdGlvbiwgVGV4dE1hbmlwdWxhdGlvblRva2VuRGVidWdEZXNj
cmlwdGlvbikKIHsKICAgICBhdXRvIHRva2VuID0gYWRvcHROUyhbW19XS1RleHRNYW5pcHVsYXRp
b25Ub2tlbiBhbGxvY10gaW5pdF0pOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>406140</attachid>
            <date>2020-08-06 17:56:12 -0700</date>
            <delta_ts>2020-08-06 18:24:10 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-214878-20200806175611.patch</filename>
            <type>text/plain</type>
            <size>6772</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY1MzUxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTRlZGUzM2JiNTVmYjQ4
YzgxZDE3ZjU4YmUzNDBmYmZhOTU5N2JhMi4uYjNmZDk5NDI4ZjQ1Nzk0ZTY1NmVkMDBhOWVkZTQw
MmVmN2Q4YzA5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4IEBACisyMDIwLTA4LTA2ICBTaWh1
aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIFRleHQgbWFuaXB1bGF0aW9u
OiBsZWFkaW5nIGFuZCB0cmFpbGluZyBzcGFjZXMgc2hvdWxkIGJlIGlnbm9yZWQgd2hlbiBjb21w
YXJpbmcgY29udGVudAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjE0ODc4CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS82MzczNTAyND4KKworICAgICAg
ICBSZXZpZXdlZCBieSBSeW9zdWtlIE5pd2EuCisKKyAgICAgICAgVGV4dEl0ZXJhdG9yIGRvZXMg
bm90IGVtaXQgY29sbGFwc2VkIHNwYWNlIGlmIHRoZXJlIGlzIG5vIHRleHQgZW1pdHRlZCBiZWZv
cmUgb3IgdGhlIGxhc3QgZW1pdHRlZCBjaGFyYWN0ZXIgaXMgCisgICAgICAgIGNvbGxhcHNlZCBz
cGFjZS4gV2hlbiBUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlciBzdGFydHMgb2JzZXJ2aW5nIHBh
cmFncmFwaHMsIGl0IGl0ZXJhdGVzIHRoZSB3aG9sZSBkb2N1bWVudCBhbmQKKyAgICAgICAgdGhl
IHJhbmdlIG9mIFRleHRJdGVyYXRvciBpcyB0aGUgcmFuZ2Ugb2YgZG9jdW1lbnQuIEZvciBzb21l
IHRleHQgbm9kZSBBIGluIHRoZSBkb2N1bWVudCwgaWYgVGV4dEl0ZXJhdG9yIGVtaXRzIAorICAg
ICAgICB0ZXh0IGZvciBzb21lIG90aGVyIHRleHQgbm9kZSBCIGJlZm9yZSBpdCwgdGhlIGNvbGxh
cHNlZCBzcGFjZSBhdCB0aGUgYmVnaW5uaW5nIG9mIEEgd2lsbCBiZSBlbWl0dGVkLCBhbmQgCisg
ICAgICAgIFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyIHdvdWxkIHRoaW5rIHRoZSBlbWl0dGVk
IHNwYWNlIGlzIHBhcnQgb2YgQSdzIGNvbnRlbnQuIFdoZW4gVGV4dE1hbmlwdWxhdGlvbkNvbnRy
b2xsZXIKKyAgICAgICAgcmVwbGFjZXMgY29udGVudCBmb3IgQSwgYW5kIHRoZSByYW5nZSBvZiBU
ZXh0SXRlcmF0b3IgaXMgc2V0IHRvIHRoZSByYW5nZSBvZiBBLCB0aGUgY29sbGFwc2VkIHNwYWNl
IGlzIG5vdCAKKyAgICAgICAgZW1pdHRlZC4gVGhlIGNoZWNrIHRvIGVuc3VyZSBBJ3MgY29udGVu
dCBpcyB1bmNoYW5nZWQgd291bGQgZmFpbC4KKyAKKyAgICAgICAgVG8gc29sdmUgdGhpcyBpc3N1
ZSwgZm9yIGZpcnN0IGFuZCBsYXN0IHRva2VuIGluIHRoZSBwYXJhZ3JhcGgsIFRleHRNYW5pcHVs
YXRpb25Db250cm9sbGVyIGNoZWNrcyBjb250ZW50IGFmdGVyIAorICAgICAgICByZW1vdmluZyBs
ZWFkaW5nIGFuZCB0cmFpbGluZyBzcGFjZXMuCisgCisgICAgICAgIEFQSSB0ZXN0OiBUZXh0TWFu
aXB1bGF0aW9uLkNvbXBsZXRlVGV4dE1hbmlwdWxhdGlvblBhcmFncmFwaHNDb250YWluQ29sbGFw
c2VkU3BhY2VzCisKKyAgICAgICAgKiBlZGl0aW5nL1RleHRNYW5pcHVsYXRpb25Db250cm9sbGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmFyZUVxdWFsSWdub3JpbmdMZWFkaW5nQW5kVHJhaWxp
bmdXaGl0ZXNwYWNlcyk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJv
bGxlcjo6cmVwbGFjZSk6CisKIDIwMjAtMDgtMDYgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxl
LmNvbT4KIAogICAgICAgICBEcm9wIG5vbi1zdGFuZGFyZCBjcmVhdGVCdWZmZXIoQXJyYXlCdWZm
ZXIsIGJvb2xlYW4pIG92ZXJsb2FkIGZyb20gQXVkaW9Db250ZXh0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1RleHRNYW5pcHVsYXRpb25Db250cm9sbGVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuY3BwCmluZGV4IDQ5
YjE3NGEyMzg2NTRiNTJhNGU2MDJjNzMyNmUyY2U3OGZlZTJmNjIuLjRlZTVlNmM5NmIxMTk4OGJk
MzhkZWE2ZDY1ZDA0OGI3ZjhmODVkZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuY3BwCkBAIC0yODEsNiArMjgxLDExIEBA
IHN0YXRpYyBib29sIGNhblBlcmZvcm1UZXh0TWFuaXB1bGF0aW9uQnlSZXBsYWNpbmdFbnRpcmVU
ZXh0Q29udGVudChjb25zdCBFbGVtZW50CiAgICAgcmV0dXJuIGVsZW1lbnQuaGFzVGFnTmFtZShI
VE1MTmFtZXM6OnRpdGxlVGFnKSB8fCBlbGVtZW50Lmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvcHRp
b25UYWcpOwogfQogCitzdGF0aWMgYm9vbCBhcmVFcXVhbElnbm9yaW5nTGVhZGluZ0FuZFRyYWls
aW5nV2hpdGVzcGFjZXMoY29uc3QgU3RyaW5nJiBjb250ZW50LCBjb25zdCBTdHJpbmcmIG9yaWdp
bmFsQ29udGVudCkKK3sKKyAgICByZXR1cm4gY29udGVudC5zdHJpcFdoaXRlU3BhY2UoKSA9PSBv
cmlnaW5hbENvbnRlbnQuc3RyaXBXaGl0ZVNwYWNlKCk7Cit9CisKIHN0YXRpYyBPcHRpb25hbDxU
ZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6TWFuaXB1bGF0aW9uVG9rZW5JbmZvPiB0b2tlbklu
Zm8oTm9kZSogbm9kZSkKIHsKICAgICBpZiAoIW5vZGUpCkBAIC03OTMsNyArNzk4LDEzIEBAIGF1
dG8gVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6OnJlcGxhY2UoY29uc3QgTWFuaXB1bGF0aW9u
SXRlbURhdGEmIGl0ZW0sIGNvbnN0CiAgICAgICAgICAgICAgICAgcmV0dXJuIE1hbmlwdWxhdGlv
bkZhaWx1cmVUeXBlOjpDb250ZW50Q2hhbmdlZDsKIAogICAgICAgICAgICAgYXV0byYgY3VycmVu
dFRva2VuID0gaXRlbS50b2tlbnNbY3VycmVudFRva2VuSW5kZXgrK107Ci0gICAgICAgICAgICBp
ZiAoIWNvbnRlbnQuaXNSZXBsYWNlZENvbnRlbnQgJiYgY3VycmVudFRva2VuLmNvbnRlbnQgIT0g
dG9rZW4uY29udGVudCkKKyAgICAgICAgICAgIGJvb2wgaXNDb250ZW50VW5jaGFuZ2VkID0gY3Vy
cmVudFRva2VuLmNvbnRlbnQgPT0gdG9rZW4uY29udGVudDsKKyAgICAgICAgICAgIGlmICghVU5M
SUtFTFkoaXNDb250ZW50VW5jaGFuZ2VkKSkgeworICAgICAgICAgICAgICAgIGJvb2wgaXNGaXJz
dE9yTGFzdFRva2VuID0gY3VycmVudFRva2VuSW5kZXggPT0gMSB8fCBjdXJyZW50VG9rZW5JbmRl
eCA9PSBpdGVtLnRva2Vucy5zaXplKCk7CisgICAgICAgICAgICAgICAgaXNDb250ZW50VW5jaGFu
Z2VkID0gaXNGaXJzdE9yTGFzdFRva2VuICYmIGFyZUVxdWFsSWdub3JpbmdMZWFkaW5nQW5kVHJh
aWxpbmdXaGl0ZXNwYWNlcyhjdXJyZW50VG9rZW4uY29udGVudCwgdG9rZW4uY29udGVudCk7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghY29udGVudC5pc1JlcGxhY2VkQ29udGVu
dCAmJiAhaXNDb250ZW50VW5jaGFuZ2VkKQogICAgICAgICAgICAgICAgIHJldHVybiBNYW5pcHVs
YXRpb25GYWlsdXJlVHlwZTo6Q29udGVudENoYW5nZWQ7CiAKICAgICAgICAgICAgIHRva2VuRXhj
aGFuZ2VNYXAuc2V0KGN1cnJlbnRUb2tlbi5pZGVudGlmaWVyLCBUb2tlbkV4Y2hhbmdlRGF0YSB7
IGNvbnRlbnQubm9kZS5jb3B5UmVmKCksIGN1cnJlbnRUb2tlbi5jb250ZW50LCAhaXNOb2RlSW5j
bHVkZWQgfSk7CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cK
aW5kZXggNzJlY2MzN2YwZDc2MjA2ODhlOGQ0YjUxOTk1ZmY2ZDY3YTE0ZTY2YS4uYTBkODdjOTk0
Y2RjMTFhOTEwMjRmNzAyZDJhNTNiNDJjZWRkNmY4MiAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdl
TG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDIwLTA4LTA2ICBT
aWh1aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIFRleHQgbWFuaXB1bGF0
aW9uOiBsZWFkaW5nIGFuZCB0cmFpbGluZyBzcGFjZXMgc2hvdWxkIGJlIGlnbm9yZWQgd2hlbiBj
b21wYXJpbmcgY29udGVudAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjE0ODc4CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS82MzczNTAyND4KKworICAg
ICAgICBSZXZpZXdlZCBieSBSeW9zdWtlIE5pd2EuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdENvY29hL1RleHRNYW5pcHVsYXRpb24ubW06CisgICAgICAgIChUZXN0V2Vi
S2l0QVBJOjpURVNUKToKKwogMjAyMC0wOC0wNiAgSm9uYXRoYW4gQmVkYXJkICA8amJlZGFyZEBh
cHBsZS5jb20+CiAKICAgICAgICAgW3dlYmtpdGNvcmVweV0gU3RhbmRhcmRpemUgc2V0dXB0b29s
cyB2ZXJzaW9uCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENv
Y29hL1RleHRNYW5pcHVsYXRpb24ubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL1RleHRNYW5pcHVsYXRpb24ubW0KaW5kZXggY2I4NjFhZTBmZGE4MTUwZmY1YzkzMTJm
Nzk1N2I2N2ZlY2NjODRmMy4uMzhjNmE1YWViMzQzZmJjYmYyNWY1ZWM3NDU5NTQ1MDQ0ODIyODBm
MSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9UZXh0
TWFuaXB1bGF0aW9uLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvVGV4dE1hbmlwdWxhdGlvbi5tbQpAQCAtMzA0MCw2ICszMDQwLDQ4IEBAIFRFU1QoVGV4dE1h
bmlwdWxhdGlvbiwgQ29tcGxldGVUZXh0TWFuaXB1bGF0aW9uQWRkc092ZXJmbG93SGlkZGVuVG9B
dm9pZEJyZWFraW5nCiAgICAgRVhQRUNUX1dLX1NUUkVRKCJhdXRvIiwgW3dlYlZpZXcgc3RyaW5n
QnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQucXVlcnlT
ZWxlY3Rvcignc3BhbicpKS5vdmVyZmxvd1kiXSk7CiB9CiAKK1RFU1QoVGV4dE1hbmlwdWxhdGlv
biwgQ29tcGxldGVUZXh0TWFuaXB1bGF0aW9uUGFyYWdyYXBoc0NvbnRhaW5Db2xsYXBzZWRTcGFj
ZXMpCit7CisgICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tUZXh0TWFuaXB1bGF0aW9uRGVs
ZWdhdGUgYWxsb2NdIGluaXRdKTsKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdL
V2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDQwMCwgNDAwKV0p
OworICAgIFt3ZWJWaWV3IF9zZXRUZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGU6ZGVsZWdhdGUuZ2V0
KCldOworICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkSFRNTFN0cmluZzpAIjwhRE9DVFlQ
RSBodG1sPiIKKyAgICAgICAgIjxoZWFkPiIKKyAgICAgICAgIjxzdHlsZT4iCisgICAgICAgICJz
cGFuIHsgZGlzcGxheTogaW5saW5lLWJsb2NrOyB9IgorICAgICAgICAiPC9zdHlsZT4iCisgICAg
ICAgICI8L2hlYWQ+IgorICAgICAgICAiPGJvZHk+IgorICAgICAgICAiPHNwYW4+ICBoZWxsbzwv
c3Bhbj4iCisgICAgICAgICI8c3Bhbj4gIHdvcmxkPC9zcGFuPiIKKyAgICAgICAgIjwvYm9keT4i
XTsKKworICAgIGRvbmUgPSBmYWxzZTsKKyAgICBbd2ViVmlldyBfc3RhcnRUZXh0TWFuaXB1bGF0
aW9uc1dpdGhDb25maWd1cmF0aW9uOm5pbCBjb21wbGV0aW9uOl57CisgICAgICAgIGRvbmUgPSB0
cnVlOworICAgIH1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CisKKyAg
ICBhdXRvIGl0ZW1zID0gW2RlbGVnYXRlIGl0ZW1zXTsKKyAgICBFWFBFQ1RfRVEoaXRlbXMuY291
bnQsIDJVTCk7CisgICAgRVhQRUNUX0VRKGl0ZW1zWzBdLnRva2Vucy5jb3VudCwgMVVMKTsKKyAg
ICBFWFBFQ1RfV0tfU1RSRVEoImhlbGxvIiwgaXRlbXNbMF0udG9rZW5zWzBdLmNvbnRlbnQpOwor
ICAgIEVYUEVDVF9FUShpdGVtc1sxXS50b2tlbnMuY291bnQsIDFVTCk7CisgICAgRVhQRUNUX1dL
X1NUUkVRKCIgd29ybGQiLCBpdGVtc1sxXS50b2tlbnNbMF0uY29udGVudCk7CisKKyAgICBkb25l
ID0gZmFsc2U7CisgICAgW3dlYlZpZXcgX2NvbXBsZXRlVGV4dE1hbmlwdWxhdGlvbkZvckl0ZW1z
OkBbCisgICAgICAgIGNyZWF0ZUl0ZW0oaXRlbXNbMF0uaWRlbnRpZmllciwge3sgaXRlbXNbMF0u
dG9rZW5zWzBdLmlkZW50aWZpZXIsIEAiSGVsbG8iIH19KS5nZXQoKSwKKyAgICAgICAgY3JlYXRl
SXRlbShpdGVtc1sxXS5pZGVudGlmaWVyLCB7eyBpdGVtc1sxXS50b2tlbnNbMF0uaWRlbnRpZmll
ciwgQCJXb3JsZCIgfX0pLmdldCgpLAorICAgIF0gY29tcGxldGlvbjpeKE5TQXJyYXk8TlNFcnJv
ciAqPiAqZXJyb3JzKSB7CisgICAgICAgIEVYUEVDVF9FUShlcnJvcnMsIG5pbCk7CisgICAgICAg
IGRvbmUgPSB0cnVlOworICAgIH1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9u
ZSk7CisKKyAgICBFWFBFQ1RfV0tfU1RSRVEoIjxzcGFuPkhlbGxvPC9zcGFuPjxzcGFuPldvcmxk
PC9zcGFuPiIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJkb2N1bWVu
dC5ib2R5LmlubmVySFRNTCJdKTsKK30KKwogVEVTVChUZXh0TWFuaXB1bGF0aW9uLCBUZXh0TWFu
aXB1bGF0aW9uVG9rZW5EZWJ1Z0Rlc2NyaXB0aW9uKQogewogICAgIGF1dG8gdG9rZW4gPSBhZG9w
dE5TKFtbX1dLVGV4dE1hbmlwdWxhdGlvblRva2VuIGFsbG9jXSBpbml0XSk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>