<?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>238235</bug_id>
          
          <creation_ts>2022-03-22 16:10:47 -0700</creation_ts>
          <short_desc>Use ASCIILiteral in a few more places where it is useful</short_desc>
          <delta_ts>2022-04-01 19:56:49 -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>WebCore Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=238162</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=238263</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=238287</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>238693</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>changseok</cc>
    
    <cc>darin</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>ggaren</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mifenton</cc>
    
    <cc>Morningstar</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1853971</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-03-22 16:10:47 -0700</bug_when>
    <thetext>Use ASCIILiteral in a few more places where it is useful.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1853978</commentid>
    <comment_count>1</comment_count>
      <attachid>455448</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-03-22 16:12:21 -0700</bug_when>
    <thetext>Created attachment 455448
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1853992</commentid>
    <comment_count>2</comment_count>
      <attachid>455448</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2022-03-22 16:36:03 -0700</bug_when>
    <thetext>Comment on attachment 455448
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1854035</commentid>
    <comment_count>3</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2022-03-22 18:29:07 -0700</bug_when>
    <thetext>Committed r291731 (248763@main): &lt;https://commits.webkit.org/248763@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 455448.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1854036</commentid>
    <comment_count>4</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2022-03-22 18:30:18 -0700</bug_when>
    <thetext>&lt;rdar://problem/90671659&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1854174</commentid>
    <comment_count>5</comment_count>
      <attachid>455448</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2022-03-23 08:11:29 -0700</bug_when>
    <thetext>Comment on attachment 455448
Patch

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

&gt; Source/JavaScriptCore/runtime/FunctionExecutable.cpp:162
&gt; +        functionHeader = &quot;function &quot;_s;

I don’t understand why we want a String for functionHeader instead of a const char*. Optimizing how efficiently we initialize a String that should not be created in the first place seems like a mistake. Not sure exactly how jsMakeNontrivialString works, but it seems a lot like makeString to me.

&gt; Source/WebCore/html/HTMLTextAreaElement.cpp:398
&gt; +    normalizedValue.replace(&quot;\r\n&quot;_s, &quot;\n&quot;_s);

Makes no logical sense to me that _s is useful here. Replacing one substring with another should be efficient when both are const char* since neither is being used as a String after the operation is over, and adding that overload would be better than adding _s. And using _s means that if we do overload for const char* that will not be sufficient. We’ll have to overload for ASCIILiteral as well.

This points to the trouble we can run into with so many different ways to represent string literals. This code isn’t performance critical, but it really offends me that it creates and destroys two StringImpl, and optimizing how quickly it does that seems like we are sort of missing the plot.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1854178</commentid>
    <comment_count>6</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-03-23 08:32:44 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #5)
&gt; Comment on attachment 455448 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=455448&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/FunctionExecutable.cpp:162
&gt; &gt; +        functionHeader = &quot;function &quot;_s;
&gt; 
&gt; I don’t understand why we want a String for functionHeader instead of a
&gt; const char*. Optimizing how efficiently we initialize a String that should
&gt; not be created in the first place seems like a mistake. Not sure exactly how
&gt; jsMakeNontrivialString works, but it seems a lot like makeString to me.
&gt; 
&gt; &gt; Source/WebCore/html/HTMLTextAreaElement.cpp:398
&gt; &gt; +    normalizedValue.replace(&quot;\r\n&quot;_s, &quot;\n&quot;_s);
&gt; 
&gt; Makes no logical sense to me that _s is useful here. Replacing one substring
&gt; with another should be efficient when both are const char* since neither is
&gt; being used as a String after the operation is over, and adding that overload
&gt; would be better than adding _s. And using _s means that if we do overload
&gt; for const char* that will not be sufficient. We’ll have to overload for
&gt; ASCIILiteral as well.
&gt; 
&gt; This points to the trouble we can run into with so many different ways to
&gt; represent string literals. This code isn’t performance critical, but it
&gt; really offends me that it creates and destroys two StringImpl, and
&gt; optimizing how quickly it does that seems like we are sort of missing the
&gt; plot.

To be clear, _s is definitely useful for performance here, with the current code base. What you&apos;re pointing out is that we should probably refactor the code so that we don&apos;t need a String at all.
That sounds fair and I can look into this in a follow-up.

Also, if we added a String::replace(const char*, const char*) and passed in a _s, I suspect the compiler would complain about it being ambiguous since an ASCIILiteral can be implicitly converted to either a const char* or a String.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1854182</commentid>
    <comment_count>7</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2022-03-23 08:39:26 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #6)
&gt; To be clear, _s is definitely useful for performance here, with the current
&gt; code base. What you&apos;re pointing out is that we should probably refactor the
&gt; code so that we don&apos;t need a String at all.

Yes, and in the first, non-replace, case, it’s a super-local, super-trivial refactor, almost as simple as adding the _s.

&gt; Also, if we added a String::replace(const char*, const char*) and passed in
&gt; a _s, I suspect the compiler would complain about it being ambiguous since
&gt; an ASCIILiteral can be implicitly converted to either a const char* or a
&gt; String.

On reflection what we probably want is String::replace(StringView, StringView). That might have good enough performance that we could get rid of most or all of the other overloads.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1855808</commentid>
    <comment_count>8</comment_count>
    <who name="Dawn Morningstar">Morningstar</who>
    <bug_when>2022-03-28 15:48:12 -0700</bug_when>
    <thetext>(In reply to EWS from comment #3)
&gt; Committed r291731 (248763@main): &lt;https://commits.webkit.org/248763@main&gt;
&gt; 
&gt; All reviewed patches have been landed. Closing bug and clearing flags on
&gt; attachment 455448 [details].

Could this patch be causing a whole suite of constantly crashing tests?
https://results.webkit.org/?platform=ios&amp;suite=layout-tests&amp;suite=layout-tests&amp;suite=layout-tests&amp;suite=layout-tests&amp;suite=layout-tests&amp;suite=layout-tests&amp;suite=layout-tests&amp;test=editing%2Fdeleting%2F5126166.html&amp;test=editing%2Fdeleting%2F5206311-1.html&amp;test=editing%2Fdeleting%2F5206311-2.html&amp;test=editing%2Fdeleting%2F5433862-1.html&amp;test=editing%2Fdeleting%2Fbackspace-at-table-cell-beginning.html&amp;test=editing%2Fdeleting%2Fdelete-line-016.html&amp;test=editing%2Fdeleting%2Fforward-delete-empty-table-cell.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1855811</commentid>
    <comment_count>9</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-03-28 15:50:20 -0700</bug_when>
    <thetext>(In reply to Matteo Flores from comment #8)
&gt; (In reply to EWS from comment #3)
&gt; &gt; Committed r291731 (248763@main): &lt;https://commits.webkit.org/248763@main&gt;
&gt; &gt; 
&gt; &gt; All reviewed patches have been landed. Closing bug and clearing flags on
&gt; &gt; attachment 455448 [details].
&gt; 
&gt; Could this patch be causing a whole suite of constantly crashing tests?
&gt; https://results.webkit.org/?platform=ios&amp;suite=layout-tests&amp;suite=layout-
&gt; tests&amp;suite=layout-tests&amp;suite=layout-tests&amp;suite=layout-tests&amp;suite=layout-
&gt; tests&amp;suite=layout-tests&amp;test=editing%2Fdeleting%2F5126166.
&gt; html&amp;test=editing%2Fdeleting%2F5206311-1.
&gt; html&amp;test=editing%2Fdeleting%2F5206311-2.
&gt; html&amp;test=editing%2Fdeleting%2F5433862-1.
&gt; html&amp;test=editing%2Fdeleting%2Fbackspace-at-table-cell-beginning.
&gt; html&amp;test=editing%2Fdeleting%2Fdelete-line-016.
&gt; html&amp;test=editing%2Fdeleting%2Fforward-delete-empty-table-cell.html

Hmm, crashes seem to look like:
ASSERTION FAILED: areVisiblePositionsInSameTreeScope(result, vp) =&gt; useDownstream ? (result &gt; vp) : (result &lt; vp)
./editing/VisibleUnits.cpp(1707) : WebCore::VisiblePosition WebCore::nextSentenceBoundaryInDirection(const WebCore::VisiblePosition &amp;, WebCore::SelectionDirection)
1   0x1381f1d89 WTFCrash
2   0x163f1d5da WebCore::nextSentenceBoundaryInDirection(WebCore::VisiblePosition const&amp;, WebCore::SelectionDirection)
3   0x163f1cb4a WebCore::positionOfNextBoundaryOfGranularity(WebCore::VisiblePosition const&amp;, WebCore::TextGranularity, WebCore::SelectionDirection)
4   0x124cf43b6 WebKit::WebPage::autocorrectionContext()
5   0x124cf4c78 WebKit::WebPage::preemptivelySendAutocorrectionContext()
6   0x125a264eb WebKit::WebPage::didChangeSelection(WebCore::Frame&amp;)
7   0x12571fb35 WebKit::WebEditorClient::respondToChangedSelection(WebCore::Frame*)
8   0x163e5d360 WebCore::Editor::respondToChangedSelection(WebCore::VisibleSelection const&amp;, WTF::OptionSet&lt;WebCore::FrameSelection::SetSelectionOption&gt;)
9   0x163e68314 WebCore::FrameSelection::setSelectionWithoutUpdatingAppearance(WebCore::VisibleSelection const&amp;, WTF::OptionSet&lt;WebCore::FrameSelection::SetSelectionOption&gt;, WebCore::FrameSelection::CursorAlignOnScroll, WebCore::TextGranularity)
10  0x163e4b190 WebCore::FrameSelection::setSelection(WebCore::VisibleSelection const&amp;, WTF::OptionSet&lt;WebCore::FrameSelection::SetSelectionOption&gt;, WebCore::AXTextStateChangeIntent, WebCore::FrameSelection::CursorAlignOnScroll, WebCore::TextGranularity)
11  0x163e5bef6 WebCore::FrameSelection::moveTo(WebCore::Position const&amp;, WebCore::Affinity, WebCore::EUserTriggered)
12  0x16498d294 WebCore::DOMSelection::collapse(WebCore::Node*, unsigned int)
13  0x160f9b8bd WebCore::jsDOMSelectionPrototypeFunction_collapseBody(JSC::JSGlobalObject*, JSC::CallFrame*, WebCore::JSDOMSelection*)::&apos;lambda&apos;()::operator()() const
14  0x160f9b5e1 JSC::JSValue WebCore::toJS&lt;WebCore::IDLUndefined, WebCore::jsDOMSelectionPrototypeFunction_collapseBody(JSC::JSGlobalObject*, JSC::CallFrame*, WebCore::JSDOMSelection*)::&apos;lambda&apos;()&gt;(JSC::JSGlobalObject&amp;, JSC::ThrowScope&amp;, WebCore::jsDOMSelectionPrototypeFunction_collapseBody(JSC::JSGlobalObject*, JSC::CallFrame*, WebCore::JSDOMSelection*)::&apos;lambda&apos;()&amp;&amp;)
15  0x160f9b51b WebCore::jsDOMSelectionPrototypeFunction_collapseBody(JSC::JSGlobalObject*, JSC::CallFrame*, WebCore::JSDOMSelection*)
16  0x160f9b0b5 long long WebCore::IDLOperation&lt;WebCore::JSDOMSelection&gt;::call&lt;&amp;(WebCore::jsDOMSelectionPrototypeFunction_collapseBody(JSC::JSGlobalObject*, JSC::CallFrame*, WebCore::JSDOMSelection*)), (WebCore::CastedThisErrorBehavior)0&gt;(JSC::JSGlobalObject&amp;, JSC::CallFrame&amp;, char const*)
17  0x160f983a4 WebCore::jsDOMSelectionPrototypeFunction_collapse(JSC::JSGlobalObject*, JSC::CallFrame*)

It does not look related to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1855817</commentid>
    <comment_count>10</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-03-28 15:57:32 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #9)
&gt; (In reply to Matteo Flores from comment #8)
&gt; &gt; (In reply to EWS from comment #3)
&gt; &gt; &gt; Committed r291731 (248763@main): &lt;https://commits.webkit.org/248763@main&gt;
&gt; &gt; &gt; 
&gt; &gt; &gt; All reviewed patches have been landed. Closing bug and clearing flags on
&gt; &gt; &gt; attachment 455448 [details].
&gt; &gt; 
&gt; &gt; Could this patch be causing a whole suite of constantly crashing tests?
&gt; &gt; https://results.webkit.org/?platform=ios&amp;suite=layout-tests&amp;suite=layout-
&gt; &gt; tests&amp;suite=layout-tests&amp;suite=layout-tests&amp;suite=layout-tests&amp;suite=layout-
&gt; &gt; tests&amp;suite=layout-tests&amp;test=editing%2Fdeleting%2F5126166.
&gt; &gt; html&amp;test=editing%2Fdeleting%2F5206311-1.
&gt; &gt; html&amp;test=editing%2Fdeleting%2F5206311-2.
&gt; &gt; html&amp;test=editing%2Fdeleting%2F5433862-1.
&gt; &gt; html&amp;test=editing%2Fdeleting%2Fbackspace-at-table-cell-beginning.
&gt; &gt; html&amp;test=editing%2Fdeleting%2Fdelete-line-016.
&gt; &gt; html&amp;test=editing%2Fdeleting%2Fforward-delete-empty-table-cell.html
&gt; 
&gt; Hmm, crashes seem to look like:
&gt; ASSERTION FAILED: areVisiblePositionsInSameTreeScope(result, vp) =&gt;
&gt; useDownstream ? (result &gt; vp) : (result &lt; vp)
&gt; ./editing/VisibleUnits.cpp(1707) : WebCore::VisiblePosition
&gt; WebCore::nextSentenceBoundaryInDirection(const WebCore::VisiblePosition &amp;,
&gt; WebCore::SelectionDirection)
&gt; 1   0x1381f1d89 WTFCrash
&gt; 2   0x163f1d5da
&gt; WebCore::nextSentenceBoundaryInDirection(WebCore::VisiblePosition const&amp;,
&gt; WebCore::SelectionDirection)
&gt; 3   0x163f1cb4a
&gt; WebCore::positionOfNextBoundaryOfGranularity(WebCore::VisiblePosition
&gt; const&amp;, WebCore::TextGranularity, WebCore::SelectionDirection)
&gt; 4   0x124cf43b6 WebKit::WebPage::autocorrectionContext()
&gt; 5   0x124cf4c78 WebKit::WebPage::preemptivelySendAutocorrectionContext()
&gt; 6   0x125a264eb WebKit::WebPage::didChangeSelection(WebCore::Frame&amp;)
&gt; 7   0x12571fb35
&gt; WebKit::WebEditorClient::respondToChangedSelection(WebCore::Frame*)
&gt; 8   0x163e5d360
&gt; WebCore::Editor::respondToChangedSelection(WebCore::VisibleSelection const&amp;,
&gt; WTF::OptionSet&lt;WebCore::FrameSelection::SetSelectionOption&gt;)
&gt; 9   0x163e68314
&gt; WebCore::FrameSelection::setSelectionWithoutUpdatingAppearance(WebCore::
&gt; VisibleSelection const&amp;,
&gt; WTF::OptionSet&lt;WebCore::FrameSelection::SetSelectionOption&gt;,
&gt; WebCore::FrameSelection::CursorAlignOnScroll, WebCore::TextGranularity)
&gt; 10  0x163e4b190
&gt; WebCore::FrameSelection::setSelection(WebCore::VisibleSelection const&amp;,
&gt; WTF::OptionSet&lt;WebCore::FrameSelection::SetSelectionOption&gt;,
&gt; WebCore::AXTextStateChangeIntent,
&gt; WebCore::FrameSelection::CursorAlignOnScroll, WebCore::TextGranularity)
&gt; 11  0x163e5bef6 WebCore::FrameSelection::moveTo(WebCore::Position const&amp;,
&gt; WebCore::Affinity, WebCore::EUserTriggered)
&gt; 12  0x16498d294 WebCore::DOMSelection::collapse(WebCore::Node*, unsigned int)
&gt; 13  0x160f9b8bd
&gt; WebCore::jsDOMSelectionPrototypeFunction_collapseBody(JSC::JSGlobalObject*,
&gt; JSC::CallFrame*, WebCore::JSDOMSelection*)::&apos;lambda&apos;()::operator()() const
&gt; 14  0x160f9b5e1 JSC::JSValue WebCore::toJS&lt;WebCore::IDLUndefined,
&gt; WebCore::jsDOMSelectionPrototypeFunction_collapseBody(JSC::JSGlobalObject*,
&gt; JSC::CallFrame*,
&gt; WebCore::JSDOMSelection*)::&apos;lambda&apos;()&gt;(JSC::JSGlobalObject&amp;,
&gt; JSC::ThrowScope&amp;,
&gt; WebCore::jsDOMSelectionPrototypeFunction_collapseBody(JSC::JSGlobalObject*,
&gt; JSC::CallFrame*, WebCore::JSDOMSelection*)::&apos;lambda&apos;()&amp;&amp;)
&gt; 15  0x160f9b51b
&gt; WebCore::jsDOMSelectionPrototypeFunction_collapseBody(JSC::JSGlobalObject*,
&gt; JSC::CallFrame*, WebCore::JSDOMSelection*)
&gt; 16  0x160f9b0b5 long long
&gt; WebCore::IDLOperation&lt;WebCore::JSDOMSelection&gt;::call&lt;&amp;(WebCore::
&gt; jsDOMSelectionPrototypeFunction_collapseBody(JSC::JSGlobalObject*,
&gt; JSC::CallFrame*, WebCore::JSDOMSelection*)),
&gt; (WebCore::CastedThisErrorBehavior)0&gt;(JSC::JSGlobalObject&amp;, JSC::CallFrame&amp;,
&gt; char const*)
&gt; 17  0x160f983a4
&gt; WebCore::jsDOMSelectionPrototypeFunction_collapse(JSC::JSGlobalObject*,
&gt; JSC::CallFrame*)
&gt; 
&gt; It does not look related to me.

Wenson says this is a regression from https://github.com/WebKit/WebKit/commit/5bd94703d84ac79d2a2d3fefe454709c54145e84, not my change.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>455448</attachid>
            <date>2022-03-22 16:12:21 -0700</date>
            <delta_ts>2022-03-22 18:29:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-238235-20220322161220.patch</filename>
            <type>text/plain</type>
            <size>5534</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkxNzE1CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBm
MjhiZTQ2MDVlZjQ5MWFhYmRiNDU3Yzk0ZWQ3ZmYzNmMyMDU5MWZlLi5jN2E2YzNlYWJlOTE5ZDBl
MmExMzI1NzFjN2NlOTNmYzlkZmIxNTZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMyBAQAorMjAyMi0wMy0yMiAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgor
CisgICAgICAgIFVzZSBBU0NJSUxpdGVyYWwgaW4gYSBmZXcgbW9yZSBwbGFjZXMgd2hlcmUgaXQg
aXMgdXNlZnVsCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMzgyMzUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIHJ1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlLmNwcDoKKyAgICAgICAgKEpTQzo6RnVuY3Rp
b25FeGVjdXRhYmxlOjp0b1N0cmluZ1Nsb3cpOgorCiAyMDIyLTAzLTIxICBZdXN1a2UgU3V6dWtp
ICA8eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAgICAgW0pTQ10gQ2hhbmdlIERhdGUucGFyc2Ug
dG8gc3RvcCByZXR1cm5pbmcgbnVtYmVycyB3aXRoIGZyYWN0aW9uYWwgcGFydApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmlu
ZGV4IDc3ZGNjYmY5NjBhZjBhNjBjNDQ5MTUxOGFmM2MyZGU4ODE0YzQwZDguLmFhYmMwMmU1YWQ4
MWFlMWVlYjRjNmY4OGM5YWMwMWQ2Y2JiZjI2MjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBA
QAorMjAyMi0wMy0yMiAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAg
IFVzZSBBU0NJSUxpdGVyYWwgaW4gYSBmZXcgbW9yZSBwbGFjZXMgd2hlcmUgaXQgaXMgdXNlZnVs
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzgyMzUK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGh0bWwv
SFRNTFRleHRBcmVhRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGV4dEFyZWFF
bGVtZW50OjpzZXRWYWx1ZUNvbW1vbik6CisgICAgICAgICogcGxhdGZvcm0vYW5pbWF0aW9uL1Rp
bWluZ0Z1bmN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRpbWluZ0Z1bmN0aW9uOjpjc3NU
ZXh0IGNvbnN0KToKKwogMjAyMi0wMy0yMiAgRnVqaWkgSGlyb25vcmkgIDxIaXJvbm9yaS5GdWpp
aUBzb255LmNvbT4KIAogICAgICAgICBbV2luQ2Fpcm9dIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdM
LmgoNzgpOiBlcnJvciBDMjAyNzogdXNlIG9mIHVuZGVmaW5lZCB0eXBlICdXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTCcKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0Z1bmN0aW9uRXhlY3V0YWJsZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9G
dW5jdGlvbkV4ZWN1dGFibGUuY3BwCmluZGV4IGExNzY0N2FjOWFhMjNlNzU0NzU2NzJlNGM2ZWI1
MmZkMDU5ZTRiNmMuLmYxNDlkNGU1OWE3MjRhODQyNTdmYjY4Nzg0OTJjMmFhM2IxNjJlOGIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJs
ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25FeGVjdXRh
YmxlLmNwcApAQCAtMTQ1LDcgKzE0NSw3IEBAIEpTU3RyaW5nKiBGdW5jdGlvbkV4ZWN1dGFibGU6
OnRvU3RyaW5nU2xvdyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogICAgIHN3aXRjaCAo
cGFyc2VNb2RlKCkpIHsKICAgICBjYXNlIFNvdXJjZVBhcnNlTW9kZTo6R2VuZXJhdG9yV3JhcHBl
ckZ1bmN0aW9uTW9kZToKICAgICBjYXNlIFNvdXJjZVBhcnNlTW9kZTo6R2VuZXJhdG9yV3JhcHBl
ck1ldGhvZE1vZGU6Ci0gICAgICAgIGZ1bmN0aW9uSGVhZGVyID0gImZ1bmN0aW9uKiAiOworICAg
ICAgICBmdW5jdGlvbkhlYWRlciA9ICJmdW5jdGlvbiogIl9zOwogICAgICAgICBicmVhazsKIAog
ICAgIGNhc2UgU291cmNlUGFyc2VNb2RlOjpOb3JtYWxGdW5jdGlvbk1vZGU6CkBAIC0xNTksNyAr
MTU5LDcgQEAgSlNTdHJpbmcqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6dG9TdHJpbmdTbG93KEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiAgICAgY2FzZSBTb3VyY2VQYXJzZU1vZGU6OkFzeW5j
R2VuZXJhdG9yQm9keU1vZGU6CiAgICAgY2FzZSBTb3VyY2VQYXJzZU1vZGU6OkFzeW5jRnVuY3Rp
b25Cb2R5TW9kZToKICAgICBjYXNlIFNvdXJjZVBhcnNlTW9kZTo6QXN5bmNBcnJvd0Z1bmN0aW9u
Qm9keU1vZGU6Ci0gICAgICAgIGZ1bmN0aW9uSGVhZGVyID0gImZ1bmN0aW9uICI7CisgICAgICAg
IGZ1bmN0aW9uSGVhZGVyID0gImZ1bmN0aW9uICJfczsKICAgICAgICAgYnJlYWs7CiAKICAgICBj
YXNlIFNvdXJjZVBhcnNlTW9kZTo6QXJyb3dGdW5jdGlvbk1vZGU6CkBAIC0xNjksMTYgKzE2OSwx
NiBAQCBKU1N0cmluZyogRnVuY3Rpb25FeGVjdXRhYmxlOjp0b1N0cmluZ1Nsb3coSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCkKIAogICAgIGNhc2UgU291cmNlUGFyc2VNb2RlOjpBc3luY0Z1
bmN0aW9uTW9kZToKICAgICBjYXNlIFNvdXJjZVBhcnNlTW9kZTo6QXN5bmNNZXRob2RNb2RlOgot
ICAgICAgICBmdW5jdGlvbkhlYWRlciA9ICJhc3luYyBmdW5jdGlvbiAiOworICAgICAgICBmdW5j
dGlvbkhlYWRlciA9ICJhc3luYyBmdW5jdGlvbiAiX3M7CiAgICAgICAgIGJyZWFrOwogCiAgICAg
Y2FzZSBTb3VyY2VQYXJzZU1vZGU6OkFzeW5jQXJyb3dGdW5jdGlvbk1vZGU6Ci0gICAgICAgIGZ1
bmN0aW9uSGVhZGVyID0gImFzeW5jICI7CisgICAgICAgIGZ1bmN0aW9uSGVhZGVyID0gImFzeW5j
ICJfczsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIFNvdXJjZVBhcnNlTW9kZTo6QXN5bmNH
ZW5lcmF0b3JXcmFwcGVyRnVuY3Rpb25Nb2RlOgogICAgIGNhc2UgU291cmNlUGFyc2VNb2RlOjpB
c3luY0dlbmVyYXRvcldyYXBwZXJNZXRob2RNb2RlOgotICAgICAgICBmdW5jdGlvbkhlYWRlciA9
ICJhc3luYyBmdW5jdGlvbiogIjsKKyAgICAgICAgZnVuY3Rpb25IZWFkZXIgPSAiYXN5bmMgZnVu
Y3Rpb24qICJfczsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcAppbmRleCAyZjEwY2VkODQxMzFlZDdlOWRkMTg3YTM0
MDFjZmRjZGVjNGJhNDNlLi5kNTc3ZWE2NmVhYWEwMzE3MjAyOTU1MzBiMWFjMGQ1OTM4MzZmMGZi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5jcHAKQEAgLTM5
NSw3ICszOTUsNyBAQCB2b2lkIEhUTUxUZXh0QXJlYUVsZW1lbnQ6OnNldFZhbHVlQ29tbW9uKGNv
bnN0IFN0cmluZyYgbmV3VmFsdWUsIFRleHRGaWVsZEV2ZW50QgogICAgIC8vIENvZGUgZWxzZXdo
ZXJlIG5vcm1hbGl6ZXMgbGluZSBlbmRpbmdzIGFkZGVkIGJ5IHRoZSB1c2VyIHZpYSB0aGUga2V5
Ym9hcmQgb3IgcGFzdGluZy4KICAgICAvLyBXZSBub3JtYWxpemUgbGluZSBlbmRpbmdzIGNvbWlu
ZyBmcm9tIEphdmFTY3JpcHQgaGVyZS4KICAgICBTdHJpbmcgbm9ybWFsaXplZFZhbHVlID0gbmV3
VmFsdWUuaXNOdWxsKCkgPyBlbXB0eVN0cmluZygpIDogbmV3VmFsdWU7Ci0gICAgbm9ybWFsaXpl
ZFZhbHVlLnJlcGxhY2UoIlxyXG4iLCAiXG4iKTsKKyAgICBub3JtYWxpemVkVmFsdWUucmVwbGFj
ZSgiXHJcbiJfcywgIlxuIl9zKTsKICAgICBub3JtYWxpemVkVmFsdWUucmVwbGFjZSgnXHInLCAn
XG4nKTsKIAogICAgIC8vIFJldHVybiBlYXJseSBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdG8gbW92
ZSB0aGUgY2FyZXQgb3IgdHJpZ2dlciBvdGhlciBzaWRlIGVmZmVjdHMKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2FuaW1hdGlvbi9UaW1pbmdGdW5jdGlvbi5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9hbmltYXRpb24vVGltaW5nRnVuY3Rpb24uY3BwCmluZGV4IDk3
YjIwNTdmNmE0MGZkZWJlNGRkMzU2ZGYzYzM3NGIwODZlNWFmNzYuLjNkMjc1MzViYmMzYmQxZjk2
YjIzZDAxYzEzZWE1ZGE4OTRkODhjMDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2FuaW1hdGlvbi9UaW1pbmdGdW5jdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vYW5pbWF0aW9uL1RpbWluZ0Z1bmN0aW9uLmNwcApAQCAtMTk4LDEzICsxOTgsMTMgQEAg
U3RyaW5nIFRpbWluZ0Z1bmN0aW9uOjpjc3NUZXh0KCkgY29uc3QKICAgICBpZiAobV90eXBlID09
IFRpbWluZ0Z1bmN0aW9uOjpDdWJpY0JlemllckZ1bmN0aW9uKSB7CiAgICAgICAgIGF1dG8mIGZ1
bmN0aW9uID0gZG93bmNhc3Q8Q3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbj4oKnRoaXMpOwogICAg
ICAgICBpZiAoZnVuY3Rpb24ueDEoKSA9PSAwLjI1ICYmIGZ1bmN0aW9uLnkxKCkgPT0gMC4xICYm
IGZ1bmN0aW9uLngyKCkgPT0gMC4yNSAmJiBmdW5jdGlvbi55MigpID09IDEuMCkKLSAgICAgICAg
ICAgIHJldHVybiAiZWFzZSI7CisgICAgICAgICAgICByZXR1cm4gImVhc2UiX3M7CiAgICAgICAg
IGlmIChmdW5jdGlvbi54MSgpID09IDAuNDIgJiYgIWZ1bmN0aW9uLnkxKCkgJiYgZnVuY3Rpb24u
eDIoKSA9PSAxLjAgJiYgZnVuY3Rpb24ueTIoKSA9PSAxLjApCi0gICAgICAgICAgICByZXR1cm4g
ImVhc2UtaW4iOworICAgICAgICAgICAgcmV0dXJuICJlYXNlLWluIl9zOwogICAgICAgICBpZiAo
IWZ1bmN0aW9uLngxKCkgJiYgIWZ1bmN0aW9uLnkxKCkgJiYgZnVuY3Rpb24ueDIoKSA9PSAwLjU4
ICYmIGZ1bmN0aW9uLnkyKCkgPT0gMS4wKQotICAgICAgICAgICAgcmV0dXJuICJlYXNlLW91dCI7
CisgICAgICAgICAgICByZXR1cm4gImVhc2Utb3V0Il9zOwogICAgICAgICBpZiAoZnVuY3Rpb24u
eDEoKSA9PSAwLjQyICYmICFmdW5jdGlvbi55MSgpICYmIGZ1bmN0aW9uLngyKCkgPT0gMC41OCAm
JiBmdW5jdGlvbi55MigpID09IDEuMCkKLSAgICAgICAgICAgIHJldHVybiAiZWFzZS1pbi1vdXQi
OworICAgICAgICAgICAgcmV0dXJuICJlYXNlLWluLW91dCJfczsKICAgICAgICAgcmV0dXJuIG1h
a2VTdHJpbmcoImN1YmljLWJlemllcigiLCBmdW5jdGlvbi54MSgpLCAiLCAiLCBmdW5jdGlvbi55
MSgpLCAiLCAiLCBmdW5jdGlvbi54MigpLCAiLCAiLCBmdW5jdGlvbi55MigpLCAnKScpOwogICAg
IH0KIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>