<?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>213708</bug_id>
          
          <creation_ts>2020-06-28 18:59:51 -0700</creation_ts>
          <short_desc>Use more efficient makeString() instead of StringBuilder</short_desc>
          <delta_ts>2020-07-01 10:19:31 -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>Bindings</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=213684</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexey Shvayka">ashvayka</reporter>
          <assigned_to name="Alexey Shvayka">ashvayka</assigned_to>
          <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>darin</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1666967</commentid>
    <comment_count>0</comment_count>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2020-06-28 18:59:51 -0700</bug_when>
    <thetext>Use more efficient makeString() instead of StringBuilder</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1666968</commentid>
    <comment_count>1</comment_count>
      <attachid>403024</attachid>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2020-06-28 19:06:28 -0700</bug_when>
    <thetext>Created attachment 403024
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1666969</commentid>
    <comment_count>2</comment_count>
      <attachid>403024</attachid>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2020-06-28 19:07:36 -0700</bug_when>
    <thetext>Comment on attachment 403024
Patch

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

&gt; Source/WebCore/bindings/js/JSDOMExceptionHandling.cpp:170
&gt; +template&lt;typename... StringTypes&gt; static String makeArgumentTypeErrorMessage(unsigned argumentIndex, const char* argumentName, const char* interfaceName, const char* functionName, StringTypes ...strings)

I think it&apos;s nice to keep this function pure and aligned with other make*ErrorMessage() helpers in this file, making reuse possible.
Also decreases arity by 2.

&gt; Source/WebCore/bindings/js/JSDOMExceptionHandling.cpp:174
&gt; +        functionName ? interfaceName : &quot;the &quot;,

I find this approach more readable then prefix/suffix + empty strings.

&gt; Source/WebCore/bindings/js/JSDOMExceptionHandling.cpp:177
&gt; +        &quot; must be &quot;, strings...

While we currently accept 2 arguments max, lets make this a variadic template to make error messages even more customizable.
Chrome &amp; Firefox mention &quot;callback&quot; in error messages.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1666973</commentid>
    <comment_count>3</comment_count>
      <attachid>403024</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-06-28 20:12:18 -0700</bug_when>
    <thetext>Comment on attachment 403024
Patch

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

Nice improvement.

&gt;&gt; Source/WebCore/bindings/js/JSDOMExceptionHandling.cpp:174
&gt;&gt; +        functionName ? interfaceName : &quot;the &quot;,
&gt; 
&gt; I find this approach more readable then prefix/suffix + empty strings.

I wonder if there is a nicer alternative. something akin to:

return makeString(&quot;Argument &quot;, argumentIndex + 1, &quot; (&apos;&quot;, argumentName, &quot;&apos;) to &quot;, functionName ? substring(&quot;the &quot;, interfaceName, &quot; constructor&quot;) : substring(interfaceName, &quot;.&quot;, functionName), &quot; must be &quot;, strings...);


where makeSubstring(...) is implemented as something like:

template&lt;typename... Args&gt;
auto makeSubstring(Args... args) -&gt; decltype(auto)
{
     return make_tuple(std::forward&lt;Args...&gt;(args...));
}

and then a general StringTypeAdapter&lt;std::tuple&lt;T...&gt;&gt; implementation to go along with it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1667685</commentid>
    <comment_count>4</comment_count>
      <attachid>403228</attachid>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2020-06-30 12:42:00 -0700</bug_when>
    <thetext>Created attachment 403228
Patch

Fix `expectedValues` being passed twice and implement StringTypeAdapter&lt;std::tuple&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1667686</commentid>
    <comment_count>5</comment_count>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2020-06-30 12:43:02 -0700</bug_when>
    <thetext>(In reply to Sam Weinig from comment #3)
&gt; Comment on attachment 403024 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=403024&amp;action=review
&gt; 
&gt; Nice improvement.

Entirely Darin&apos;s idea, I must say.

&gt; template&lt;typename... Args&gt;
&gt; auto makeSubstring(Args... args) -&gt; decltype(auto)
&gt; {
&gt;      return make_tuple(std::forward&lt;Args...&gt;(args...));
&gt; }

Using std::tuple imposes certain limitations: seems like we can&apos;t do `makeSubstring(&quot;a&quot;, &apos;b&apos;)` or `x ? makeSubstring(&quot;a&quot;) : makeSubstring(&quot;a&quot;, &quot;b&quot;)`.
Also, I think an API should indicate that no actual string is created, so I went with inline std::make_tuple() + overload. Am I missing something?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1667688</commentid>
    <comment_count>6</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-06-30 12:52:17 -0700</bug_when>
    <thetext>(In reply to Alexey Shvayka from comment #5)
&gt; (In reply to Sam Weinig from comment #3)
&gt; &gt; Comment on attachment 403024 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=403024&amp;action=review
&gt; &gt; 
&gt; &gt; Nice improvement.
&gt; 
&gt; Entirely Darin&apos;s idea, I must say.
&gt; 
&gt; &gt; template&lt;typename... Args&gt;
&gt; &gt; auto makeSubstring(Args... args) -&gt; decltype(auto)
&gt; &gt; {
&gt; &gt;      return make_tuple(std::forward&lt;Args...&gt;(args...));
&gt; &gt; }
&gt; 
&gt; Using std::tuple imposes certain limitations: seems like we can&apos;t do
&gt; `makeSubstring(&quot;a&quot;, &apos;b&apos;)` or `x ? makeSubstring(&quot;a&quot;) : makeSubstring(&quot;a&quot;,
&gt; &quot;b&quot;)`.
&gt; Also, I think an API should indicate that no actual string is created, so I
&gt; went with inline std::make_tuple() + overload. Am I missing something?

I don&apos;t think you were missing anything. makeSubstring() was really just aliasing make_tuple (the name makeSubstring is definitely not great, as you note, it doesn&apos;t really impart that it is not actually creating a String). Your way seems good.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1667690</commentid>
    <comment_count>7</comment_count>
      <attachid>403228</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-06-30 12:54:24 -0700</bug_when>
    <thetext>Comment on attachment 403228
Patch

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

&gt; Source/WTF/ChangeLog:17
&gt; +        (WTF::StringTypeAdapter&lt;std::tuple&lt;StringTypes::StringTypeAdapter):
&gt; +        (WTF::StringTypeAdapter&lt;std::tuple&lt;StringTypes::length const):
&gt; +        (WTF::StringTypeAdapter&lt;std::tuple&lt;StringTypes::is8Bit const):
&gt; +        (WTF::StringTypeAdapter&lt;std::tuple&lt;StringTypes::writeTo const):
&gt; +        (WTF::StringTypeAdapter&lt;std::tuple&lt;StringTypes::computeLength):
&gt; +        (WTF::StringTypeAdapter&lt;std::tuple&lt;StringTypes::computeIs8Bit):

The script didn’t do a good job of generating this. I suggest removing it or repairing it so it makes sense.

&gt; Source/WTF/wtf/text/StringConcatenate.h:200
&gt; +template&lt;typename... StringTypes&gt; class StringTypeAdapter&lt;std::tuple&lt;StringTypes...&gt;, void&gt; {

I think there’s a way to do this more generically for all tuple-like things rather than just std::tuple, but we can return and do that later.

&gt; Source/WebCore/bindings/js/JSDOMExceptionHandling.cpp:174
&gt; +        functionName ? std::make_tuple(interfaceName, &quot;.&quot;, functionName) : std::make_tuple(&quot;the &quot;, interfaceName, &quot; constructor&quot;),

So this only works because both tuples are the same size and have the same types? That seems not really in the spirit of what we’re hoping to achieve, but fine for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1667701</commentid>
    <comment_count>8</comment_count>
      <attachid>403233</attachid>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2020-06-30 13:12:41 -0700</bug_when>
    <thetext>Created attachment 403233
Patch

Fix ChangeLog manually.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1667702</commentid>
    <comment_count>9</comment_count>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2020-06-30 13:16:18 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #7)
&gt; So this only works because both tuples are the same size and have the same
&gt; types? That seems not really in the spirit of what we’re hoping to achieve,
&gt; but fine for now.

Yes, otherwise it&apos;s compile-time error. I&apos;m not sure how to fix it, or at least make empty arguments default to empty strings.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1667892</commentid>
    <comment_count>10</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-07-01 03:49:13 -0700</bug_when>
    <thetext>Committed r263795: &lt;https://trac.webkit.org/changeset/263795&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 403233.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1667893</commentid>
    <comment_count>11</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-07-01 03:50:13 -0700</bug_when>
    <thetext>&lt;rdar://problem/64980827&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1667976</commentid>
    <comment_count>12</comment_count>
      <attachid>403233</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-07-01 09:49:34 -0700</bug_when>
    <thetext>Comment on attachment 403233
Patch

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

A few *small* refinement ideas for follow-up later.

&gt; Source/WTF/wtf/text/StringConcatenate.h:200
&gt; +template&lt;typename... StringTypes&gt; class StringTypeAdapter&lt;std::tuple&lt;StringTypes...&gt;, void&gt; {

Refinement ideas for future:

Would like to figure out how to do this for the broader definition of Tuple, anything that supports std::apply, instead of literally std::tuple. I think this is a recurring pattern in template meta-programming, but I don’t know the exact technique.

&gt; Source/WTF/wtf/text/StringConcatenate.h:216
&gt; +                StringTypeAdapter&lt;StringTypes&gt;(strings).writeTo(destination + (offset * sizeof(CharacterType))),

I would have left off the parentheses around the &quot;offset * sizeof(CharacterType)&quot;.

&gt; Source/WTF/wtf/text/StringConcatenate.h:231
&gt; +    static unsigned computeLength(StringTypes... strings)
&gt; +    {
&gt; +        return (... + StringTypeAdapter&lt;StringTypes&gt;(strings).length());
&gt; +    }
&gt; +
&gt; +    static bool computeIs8Bit(StringTypes... strings)
&gt; +    {
&gt; +        return (... &amp;&amp; StringTypeAdapter&lt;StringTypes&gt;(strings).is8Bit());
&gt; +    }

Refinement ideas for future:

Should we use lambdas for this instead of separate functions, or would this make the constructor too ugly?

Are the parentheses needed? Some coding styles use parentheses with return a lot, but in WebKit we don’t ever use them. I was confused about the &quot;(...&quot; a bit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1667989</commentid>
    <comment_count>13</comment_count>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2020-07-01 10:18:37 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #12)
&gt; Are the parentheses needed? Some coding styles use parentheses with return a
&gt; lot, but in WebKit we don’t ever use them. I was confused about the &quot;(...&quot; a
&gt; bit.

Please note this is a C++17 fold expression: https://en.cppreference.com/w/cpp/language/fold.
Parentheses are syntax requirement; I&apos;ve confirmed it doesn&apos;t compile w/o them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1667990</commentid>
    <comment_count>14</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-07-01 10:19:31 -0700</bug_when>
    <thetext>(In reply to Alexey Shvayka from comment #13)
&gt; Please note this is a C++17 fold expression:
&gt; https://en.cppreference.com/w/cpp/language/fold.
&gt; Parentheses are syntax requirement; I&apos;ve confirmed it doesn&apos;t compile w/o
&gt; them.

Thanks; great to learn about it!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>403024</attachid>
            <date>2020-06-28 19:06:28 -0700</date>
            <delta_ts>2020-06-30 12:41:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-213708-20200629050626.patch</filename>
            <type>text/plain</type>
            <size>6917</size>
            <attacher name="Alexey Shvayka">ashvayka</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MzY0MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI3IEBACisyMDIwLTA2LTI4ICBBbGV4ZXkg
U2h2YXlrYSAgPHNodmFpa2FsZXNoQGdtYWlsLmNvbT4KKworICAgICAgICBVc2UgbW9yZSBlZmZp
Y2llbnQgbWFrZVN0cmluZygpIGluc3RlYWQgb2YgU3RyaW5nQnVpbGRlcgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEzNzA4CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCByZWZhY3RvcnMg
dGhyb3dSZXF1aXJlZE1lbWJlclR5cGVFcnJvcigpIGFuZCB0aHJvd0FyZ3VtZW50KkVycm9yKCkK
KyAgICAgICAgbWV0aG9kcywgcmVwbGFjaW5nIGFsbCBTdHJpbmdCdWlsZGVyIHVzYWdlcyB3aXRo
IG1vcmUgZWZmaWNpZW50IG1ha2VTdHJpbmcoKS4KKworICAgICAgICBFeHRyYWN0cyBtYWtlQXJn
dW1lbnRUeXBlRXJyb3JNZXNzYWdlKCksIHNpbWlsaWFyIHRvIGV4aXN0aW5nIGhlbHBlcnMsCisg
ICAgICAgIHdoaWNoIGNhbiBiZSByZXVzZWQgaWYgbmVjY2Vzc2FyeS4KKworICAgICAgICBObyBu
ZXcgdGVzdHMsIG5vIGJlaGF2aW9yIGNoYW5nZS4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pT
RE9NRXhjZXB0aW9uSGFuZGxpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bWFrZUFyZ3VtZW50
VHlwZUVycm9yTWVzc2FnZSk6CisgICAgICAgIChXZWJDb3JlOjp0aHJvd0FyZ3VtZW50TXVzdEJl
RW51bUVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6OnRocm93QXJndW1lbnRNdXN0QmVGdW5jdGlv
bkVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6OnRocm93QXJndW1lbnRNdXN0QmVPYmplY3RFcnJv
cik6CisgICAgICAgIChXZWJDb3JlOjp0aHJvd0FyZ3VtZW50VHlwZUVycm9yKToKKyAgICAgICAg
KFdlYkNvcmU6OnRocm93UmVxdWlyZWRNZW1iZXJUeXBlRXJyb3IpOgorICAgICAgICAoV2ViQ29y
ZTo6YXBwZW5kQXJndW1lbnRNdXN0QmUpOiBEZWxldGVkLgorCiAyMDIwLTA2LTI4ICBaYWxhbiBC
dWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgW0xGQ11bVEZDXSBBZGp1c3QgdGFi
bGUgY29udGVudCB2ZXJ0aWNhbCBwb3NpdGlvbiB0byBtYXRjaCB2ZXJ0aWNhbC1hbGlnbgpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01FeGNlcHRpb25IYW5kbGluZy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01FeGNlcHRpb25I
YW5kbGluZy5jcHAJKHJldmlzaW9uIDI2MzYzOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRE9NRXhjZXB0aW9uSGFuZGxpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICsz
NCw2IEBACiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvRXhjZXB0aW9uSGVscGVycy5oPgogI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL1NjcmlwdENhbGxTdGFjay5oPgogI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL1NjcmlwdENhbGxTdGFja0ZhY3RvcnkuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9T
dHJpbmdCdWlsZGVyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBK
U0M7CkBAIC0xNjgsMTQgKzE2NywxNSBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgdGhyb3dUeXBl
RXJyb3IoSlNDCiAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoJmxleGljYWxHbG9iYWxPYmpl
Y3QsIHNjb3BlLCBlcnJvck1lc3NhZ2UpOwogfQogCi1zdGF0aWMgdm9pZCBhcHBlbmRBcmd1bWVu
dE11c3RCZShTdHJpbmdCdWlsZGVyJiBidWlsZGVyLCB1bnNpZ25lZCBhcmd1bWVudEluZGV4LCBj
b25zdCBjaGFyKiBhcmd1bWVudE5hbWUsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0
IGNoYXIqIGZ1bmN0aW9uTmFtZSkKK3RlbXBsYXRlPHR5cGVuYW1lLi4uIFN0cmluZ1R5cGVzPiBz
dGF0aWMgU3RyaW5nIG1ha2VBcmd1bWVudFR5cGVFcnJvck1lc3NhZ2UodW5zaWduZWQgYXJndW1l
bnRJbmRleCwgY29uc3QgY2hhciogYXJndW1lbnROYW1lLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VO
YW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIFN0cmluZ1R5cGVzIC4uLnN0cmluZ3MpCiB7
Ci0gICAgYnVpbGRlci5hcHBlbmQoIkFyZ3VtZW50ICIsIGFyZ3VtZW50SW5kZXggKyAxLCAiICgn
IiwgYXJndW1lbnROYW1lLCAiJykgdG8gIik7Ci0gICAgaWYgKCFmdW5jdGlvbk5hbWUpCi0gICAg
ICAgIGJ1aWxkZXIuYXBwZW5kKCJ0aGUgIiwgaW50ZXJmYWNlTmFtZSwgIiBjb25zdHJ1Y3RvciIp
OwotICAgIGVsc2UKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoaW50ZXJmYWNlTmFtZSwgJy4nLCBm
dW5jdGlvbk5hbWUpOwotICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIG11c3QgYmUgIik7Cisg
ICAgcmV0dXJuIG1ha2VTdHJpbmcoCisgICAgICAgICJBcmd1bWVudCAiLCBhcmd1bWVudEluZGV4
ICsgMSwgIiAoJyIsIGFyZ3VtZW50TmFtZSwgIicpIHRvICIsCisgICAgICAgIGZ1bmN0aW9uTmFt
ZSA/IGludGVyZmFjZU5hbWUgOiAidGhlICIsCisgICAgICAgIGZ1bmN0aW9uTmFtZSA/ICIuIiA6
IGludGVyZmFjZU5hbWUsCisgICAgICAgIGZ1bmN0aW9uTmFtZSA/IGZ1bmN0aW9uTmFtZSA6ICIg
Y29uc3RydWN0b3IiLAorICAgICAgICAiIG11c3QgYmUgIiwgc3RyaW5ncy4uLgorICAgICk7CiB9
CiAKIHZvaWQgdGhyb3dOb3RTdXBwb3J0ZWRFcnJvcihKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBBU0NJSUxpdGVyYWwgbWVz
c2FnZSkKQEAgLTE5OCwzNCArMTk4LDIyIEBAIHZvaWQgdGhyb3dTZWN1cml0eUVycm9yKEpTQzo6
SlNHbG9iYWxPYmoKIAogSlNDOjpFbmNvZGVkSlNWYWx1ZSB0aHJvd0FyZ3VtZW50TXVzdEJlRW51
bUVycm9yKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6VGhy
b3dTY29wZSYgc2NvcGUsIHVuc2lnbmVkIGFyZ3VtZW50SW5kZXgsIGNvbnN0IGNoYXIqIGFyZ3Vt
ZW50TmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25JbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBm
dW5jdGlvbk5hbWUsIGNvbnN0IGNoYXIqIGV4cGVjdGVkVmFsdWVzKQogewotICAgIFN0cmluZ0J1
aWxkZXIgYnVpbGRlcjsKLSAgICBhcHBlbmRBcmd1bWVudE11c3RCZShidWlsZGVyLCBhcmd1bWVu
dEluZGV4LCBhcmd1bWVudE5hbWUsIGZ1bmN0aW9uSW50ZXJmYWNlTmFtZSwgZnVuY3Rpb25OYW1l
KTsKLSAgICBidWlsZGVyLmFwcGVuZCgib25lIG9mOiAiLCBleHBlY3RlZFZhbHVlcyk7Ci0gICAg
cmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoJmxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCBidWls
ZGVyLnRvU3RyaW5nKCkpOworICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKCZsZXhpY2FsR2xv
YmFsT2JqZWN0LCBzY29wZSwgbWFrZUFyZ3VtZW50VHlwZUVycm9yTWVzc2FnZShhcmd1bWVudElu
ZGV4LCBhcmd1bWVudE5hbWUsIGZ1bmN0aW9uSW50ZXJmYWNlTmFtZSwgZnVuY3Rpb25OYW1lLCBl
eHBlY3RlZFZhbHVlcywgIm9uZSBvZjogIiwgZXhwZWN0ZWRWYWx1ZXMpKTsKIH0KIAogSlNDOjpF
bmNvZGVkSlNWYWx1ZSB0aHJvd0FyZ3VtZW50TXVzdEJlRnVuY3Rpb25FcnJvcihKU0M6OkpTR2xv
YmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCB1
bnNpZ25lZCBhcmd1bWVudEluZGV4LCBjb25zdCBjaGFyKiBhcmd1bWVudE5hbWUsIGNvbnN0IGNo
YXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSkKIHsKLSAgICBTdHJp
bmdCdWlsZGVyIGJ1aWxkZXI7Ci0gICAgYXBwZW5kQXJndW1lbnRNdXN0QmUoYnVpbGRlciwgYXJn
dW1lbnRJbmRleCwgYXJndW1lbnROYW1lLCBpbnRlcmZhY2VOYW1lLCBmdW5jdGlvbk5hbWUpOwot
ICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiYSBmdW5jdGlvbiIpOwotICAgIHJldHVybiB0aHJv
d1ZNVHlwZUVycm9yKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgYnVpbGRlci50b1N0cmlu
ZygpKTsKKyAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcigmbGV4aWNhbEdsb2JhbE9iamVjdCwg
c2NvcGUsIG1ha2VBcmd1bWVudFR5cGVFcnJvck1lc3NhZ2UoYXJndW1lbnRJbmRleCwgYXJndW1l
bnROYW1lLCBpbnRlcmZhY2VOYW1lLCBmdW5jdGlvbk5hbWUsICJhIGZ1bmN0aW9uIikpOwogfQog
CiBKU0M6OkVuY29kZWRKU1ZhbHVlIHRocm93QXJndW1lbnRNdXN0QmVPYmplY3RFcnJvcihKU0M6
OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNj
b3BlLCB1bnNpZ25lZCBhcmd1bWVudEluZGV4LCBjb25zdCBjaGFyKiBhcmd1bWVudE5hbWUsIGNv
bnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSkKIHsKLSAg
ICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7Ci0gICAgYXBwZW5kQXJndW1lbnRNdXN0QmUoYnVpbGRl
ciwgYXJndW1lbnRJbmRleCwgYXJndW1lbnROYW1lLCBpbnRlcmZhY2VOYW1lLCBmdW5jdGlvbk5h
bWUpOwotICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiYW4gb2JqZWN0Iik7Ci0gICAgcmV0dXJu
IHRocm93Vk1UeXBlRXJyb3IoJmxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCBidWlsZGVyLnRv
U3RyaW5nKCkpOworICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKCZsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBzY29wZSwgbWFrZUFyZ3VtZW50VHlwZUVycm9yTWVzc2FnZShhcmd1bWVudEluZGV4LCBh
cmd1bWVudE5hbWUsIGludGVyZmFjZU5hbWUsIGZ1bmN0aW9uTmFtZSwgImFuIG9iamVjdCIpKTsK
IH0KIAogSlNDOjpFbmNvZGVkSlNWYWx1ZSB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKEpTQzo6SlNH
bG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUs
IHVuc2lnbmVkIGFyZ3VtZW50SW5kZXgsIGNvbnN0IGNoYXIqIGFyZ3VtZW50TmFtZSwgY29uc3Qg
Y2hhciogZnVuY3Rpb25JbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNv
bnN0IGNoYXIqIGV4cGVjdGVkVHlwZSkKIHsKLSAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7Ci0g
ICAgYXBwZW5kQXJndW1lbnRNdXN0QmUoYnVpbGRlciwgYXJndW1lbnRJbmRleCwgYXJndW1lbnRO
YW1lLCBmdW5jdGlvbkludGVyZmFjZU5hbWUsIGZ1bmN0aW9uTmFtZSk7Ci0gICAgYnVpbGRlci5h
cHBlbmQoImFuIGluc3RhbmNlIG9mICIsIGV4cGVjdGVkVHlwZSk7Ci0gICAgcmV0dXJuIHRocm93
Vk1UeXBlRXJyb3IoJmxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCBidWlsZGVyLnRvU3RyaW5n
KCkpOworICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBz
Y29wZSwgbWFrZUFyZ3VtZW50VHlwZUVycm9yTWVzc2FnZShhcmd1bWVudEluZGV4LCBhcmd1bWVu
dE5hbWUsIGZ1bmN0aW9uSW50ZXJmYWNlTmFtZSwgZnVuY3Rpb25OYW1lLCAiYW4gaW5zdGFuY2Ug
b2YgIiwgZXhwZWN0ZWRUeXBlKSk7CiB9CiAKIHZvaWQgdGhyb3dBdHRyaWJ1dGVUeXBlRXJyb3Io
SlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3Bl
JiBzY29wZSwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRl
TmFtZSwgY29uc3QgY2hhciogZXhwZWN0ZWRUeXBlKQpAQCAtMjM1LDE0ICsyMjMsNyBAQCB2b2lk
IHRocm93QXR0cmlidXRlVHlwZUVycm9yKEpTQzo6SlNHbG9iCiAKIEpTQzo6RW5jb2RlZEpTVmFs
dWUgdGhyb3dSZXF1aXJlZE1lbWJlclR5cGVFcnJvcihKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBjb25zdCBjaGFyKiBtZW1i
ZXJOYW1lLCBjb25zdCBjaGFyKiBkaWN0aW9uYXJ5TmFtZSwgY29uc3QgY2hhciogZXhwZWN0ZWRU
eXBlKQogewotICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKLSAgICBidWlsZGVyLmFwcGVuZExp
dGVyYWwoIk1lbWJlciAiKTsKLSAgICBidWlsZGVyLmFwcGVuZChkaWN0aW9uYXJ5TmFtZSk7Ci0g
ICAgYnVpbGRlci5hcHBlbmQoJy4nKTsKLSAgICBidWlsZGVyLmFwcGVuZChtZW1iZXJOYW1lKTsK
LSAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIiBpcyByZXF1aXJlZCBhbmQgbXVzdCBiZSBhbiBp
bnN0YW5jZSBvZiAiKTsKLSAgICBidWlsZGVyLmFwcGVuZChleHBlY3RlZFR5cGUpOwotICAgIHJl
dHVybiB0aHJvd1ZNVHlwZUVycm9yKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgYnVpbGRl
ci50b1N0cmluZygpKTsKKyAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcigmbGV4aWNhbEdsb2Jh
bE9iamVjdCwgc2NvcGUsIG1ha2VTdHJpbmcoIk1lbWJlciAiLCBkaWN0aW9uYXJ5TmFtZSwgJy4n
LCBtZW1iZXJOYW1lLCAiIGlzIHJlcXVpcmVkIGFuZCBtdXN0IGJlIGFuIGluc3RhbmNlIG9mICIs
IGV4cGVjdGVkVHlwZSkpOwogfQogCiBKU0M6OkVuY29kZWRKU1ZhbHVlIHRocm93Q29uc3RydWN0
b3JTY3JpcHRFeGVjdXRpb25Db250ZXh0VW5hdmFpbGFibGVFcnJvcihKU0M6OkpTR2xvYmFsT2Jq
ZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBjb25zdCBj
aGFyKiBpbnRlcmZhY2VOYW1lKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>403228</attachid>
            <date>2020-06-30 12:42:00 -0700</date>
            <delta_ts>2020-06-30 13:12:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-213708-20200630224158.patch</filename>
            <type>text/plain</type>
            <size>9643</size>
            <attacher name="Alexey Shvayka">ashvayka</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyNjM3NjApCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDIxIEBACisyMDIwLTA2LTMwICBBbGV4ZXkgU2h2YXlrYSAgPHNo
dmFpa2FsZXNoQGdtYWlsLmNvbT4KKworICAgICAgICBVc2UgbW9yZSBlZmZpY2llbnQgbWFrZVN0
cmluZygpIGluc3RlYWQgb2YgU3RyaW5nQnVpbGRlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEzNzA4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgU2Ft
IFdlaW5pZy4KKworICAgICAgICBJbnRyb2R1Y2VzIFN0cmluZ1R5cGVBZGFwdGVyPHN0ZDo6dHVw
bGU+IG92ZXJsb2FkLCB3aGljaCBlbmFibGVzIHVzaW5nCisgICAgICAgIG1ha2VTdHJpbmcoKSBp
bnN0ZWFkIG9mIFN0cmluZ0J1aWxkZXIgaW4gbW9yZSBjYXNlcy4KKworICAgICAgICAqIHd0Zi90
ZXh0L1N0cmluZ0NvbmNhdGVuYXRlLmg6CisgICAgICAgIChXVEY6OlN0cmluZ1R5cGVBZGFwdGVy
PHN0ZDo6dHVwbGU8U3RyaW5nVHlwZXM6OlN0cmluZ1R5cGVBZGFwdGVyKToKKyAgICAgICAgKFdU
Rjo6U3RyaW5nVHlwZUFkYXB0ZXI8c3RkOjp0dXBsZTxTdHJpbmdUeXBlczo6bGVuZ3RoIGNvbnN0
KToKKyAgICAgICAgKFdURjo6U3RyaW5nVHlwZUFkYXB0ZXI8c3RkOjp0dXBsZTxTdHJpbmdUeXBl
czo6aXM4Qml0IGNvbnN0KToKKyAgICAgICAgKFdURjo6U3RyaW5nVHlwZUFkYXB0ZXI8c3RkOjp0
dXBsZTxTdHJpbmdUeXBlczo6d3JpdGVUbyBjb25zdCk6CisgICAgICAgIChXVEY6OlN0cmluZ1R5
cGVBZGFwdGVyPHN0ZDo6dHVwbGU8U3RyaW5nVHlwZXM6OmNvbXB1dGVMZW5ndGgpOgorICAgICAg
ICAoV1RGOjpTdHJpbmdUeXBlQWRhcHRlcjxzdGQ6OnR1cGxlPFN0cmluZ1R5cGVzOjpjb21wdXRl
SXM4Qml0KToKKwogMjAyMC0wNi0zMCAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3
ZWJraXQub3JnPgogCiAgICAgICAgIFJlbW92ZSBXVEY6Ok1ENQpJbmRleDogU291cmNlL1dURi93
dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3Rm
L3RleHQvU3RyaW5nQ29uY2F0ZW5hdGUuaAkocmV2aXNpb24gMjYzNjM4KQorKysgU291cmNlL1dU
Ri93dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOTcsNiAr
MTk3LDQ0IEBAIHB1YmxpYzoKICAgICB9CiB9OwogCit0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBTdHJp
bmdUeXBlcz4gY2xhc3MgU3RyaW5nVHlwZUFkYXB0ZXI8c3RkOjp0dXBsZTxTdHJpbmdUeXBlcy4u
Lj4sIHZvaWQ+IHsKK3B1YmxpYzoKKyAgICBTdHJpbmdUeXBlQWRhcHRlcihzdGQ6OnR1cGxlPFN0
cmluZ1R5cGVzLi4uPiB0dXBsZSkKKyAgICAgICAgOiBtX3R1cGxlIHsgdHVwbGUgfQorICAgICAg
ICAsIG1fbGVuZ3RoIHsgc3RkOjphcHBseShjb21wdXRlTGVuZ3RoLCB0dXBsZSkgfQorICAgICAg
ICAsIG1faXM4Qml0IHsgc3RkOjphcHBseShjb21wdXRlSXM4Qml0LCB0dXBsZSkgfQorICAgIHsK
KyAgICB9CisKKyAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2xlbmd0aDsg
fQorICAgIGJvb2wgaXM4Qml0KCkgY29uc3QgeyByZXR1cm4gbV9pczhCaXQ7IH0KKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiB2b2lkIHdyaXRlVG8oQ2hhcmFjdGVyVHlwZSog
ZGVzdGluYXRpb24pIGNvbnN0CisgICAgeworICAgICAgICBzdGQ6OmFwcGx5KFsmXShTdHJpbmdU
eXBlcy4uLiBzdHJpbmdzKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSAwOworICAg
ICAgICAgICAgKC4uLiwgKAorICAgICAgICAgICAgICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmlu
Z1R5cGVzPihzdHJpbmdzKS53cml0ZVRvKGRlc3RpbmF0aW9uICsgKG9mZnNldCAqIHNpemVvZihD
aGFyYWN0ZXJUeXBlKSkpLAorICAgICAgICAgICAgICAgIG9mZnNldCArPSBTdHJpbmdUeXBlQWRh
cHRlcjxTdHJpbmdUeXBlcz4oc3RyaW5ncykubGVuZ3RoKCkKKyAgICAgICAgICAgICkpOworICAg
ICAgICB9LCBtX3R1cGxlKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgc3RhdGljIHVuc2lnbmVk
IGNvbXB1dGVMZW5ndGgoU3RyaW5nVHlwZXMuLi4gc3RyaW5ncykKKyAgICB7CisgICAgICAgIHJl
dHVybiAoLi4uICsgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZXM+KHN0cmluZ3MpLmxlbmd0
aCgpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBjb21wdXRlSXM4Qml0KFN0cmluZ1R5cGVz
Li4uIHN0cmluZ3MpCisgICAgeworICAgICAgICByZXR1cm4gKC4uLiAmJiBTdHJpbmdUeXBlQWRh
cHRlcjxTdHJpbmdUeXBlcz4oc3RyaW5ncykuaXM4Qml0KCkpOworICAgIH0KKworICAgIHN0ZDo6
dHVwbGU8U3RyaW5nVHlwZXMuLi4+IG1fdHVwbGU7CisgICAgdW5zaWduZWQgbV9sZW5ndGg7Cisg
ICAgYm9vbCBtX2lzOEJpdDsKK307CisKIHRlbXBsYXRlPHR5cGVuYW1lIFVuZGVybHlpbmdFbGVt
ZW50VHlwZT4gc3RydWN0IFBhZGRpbmdTcGVjaWZpY2F0aW9uIHsKICAgICBMQ2hhciBjaGFyYWN0
ZXI7CiAgICAgdW5zaWduZWQgbGVuZ3RoOwpJbmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjYzNjQx
KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MjcgQEAKKzIwMjAtMDYtMzAgIEFsZXhleSBTaHZheWthICA8c2h2YWlrYWxlc2hAZ21haWwuY29t
PgorCisgICAgICAgIFVzZSBtb3JlIGVmZmljaWVudCBtYWtlU3RyaW5nKCkgaW5zdGVhZCBvZiBT
dHJpbmdCdWlsZGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMTM3MDgKKworICAgICAgICBSZXZpZXdlZCBieSBTYW0gV2VpbmlnLgorCisgICAgICAg
IFRoaXMgcGF0Y2ggcmVmYWN0b3JzIHRocm93UmVxdWlyZWRNZW1iZXJUeXBlRXJyb3IoKSBhbmQg
dGhyb3dBcmd1bWVudCpFcnJvcigpCisgICAgICAgIG1ldGhvZHMsIHJlcGxhY2luZyBhbGwgU3Ry
aW5nQnVpbGRlciB1c2FnZXMgd2l0aCBtb3JlIGVmZmljaWVudCBtYWtlU3RyaW5nKCkuCisKKyAg
ICAgICAgRXh0cmFjdHMgbWFrZUFyZ3VtZW50VHlwZUVycm9yTWVzc2FnZSgpLCBzaW1pbGlhciB0
byBleGlzdGluZyBoZWxwZXJzLAorICAgICAgICB3aGljaCBjYW4gYmUgcmV1c2VkIGlmIG5lY2Nl
c3NhcnkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBubyBiZWhhdmlvciBjaGFuZ2UuCisKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6Om1ha2VBcmd1bWVudFR5cGVFcnJvck1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6dGhyb3dBcmd1bWVudE11c3RCZUVudW1FcnJvcik6CisgICAgICAgIChXZWJDb3JlOjp0aHJv
d0FyZ3VtZW50TXVzdEJlRnVuY3Rpb25FcnJvcik6CisgICAgICAgIChXZWJDb3JlOjp0aHJvd0Fy
Z3VtZW50TXVzdEJlT2JqZWN0RXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6dGhyb3dBcmd1bWVu
dFR5cGVFcnJvcik6CisgICAgICAgIChXZWJDb3JlOjp0aHJvd1JlcXVpcmVkTWVtYmVyVHlwZUVy
cm9yKToKKyAgICAgICAgKFdlYkNvcmU6OmFwcGVuZEFyZ3VtZW50TXVzdEJlKTogRGVsZXRlZC4K
KwogMjAyMC0wNi0yOCAgWmFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgogCiAgICAgICAg
IFtMRkNdW1RGQ10gQWRqdXN0IHRhYmxlIGNvbnRlbnQgdmVydGljYWwgcG9zaXRpb24gdG8gbWF0
Y2ggdmVydGljYWwtYWxpZ24KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9N
RXhjZXB0aW9uSGFuZGxpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRE9NRXhjZXB0aW9uSGFuZGxpbmcuY3BwCShyZXZpc2lvbiAyNjM2MzgpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNiBAQAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0V4
Y2VwdGlvbkhlbHBlcnMuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TY3JpcHRDYWxsU3Rh
Y2suaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TY3JpcHRDYWxsU3RhY2tGYWN0b3J5Lmg+
Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwpAQCAtMTY4LDE0ICsxNjcsMTMgQEAgc3RhdGljIEVu
Y29kZWRKU1ZhbHVlIHRocm93VHlwZUVycm9yKEpTQwogICAgIHJldHVybiB0aHJvd1ZNVHlwZUVy
cm9yKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgZXJyb3JNZXNzYWdlKTsKIH0KIAotc3Rh
dGljIHZvaWQgYXBwZW5kQXJndW1lbnRNdXN0QmUoU3RyaW5nQnVpbGRlciYgYnVpbGRlciwgdW5z
aWduZWQgYXJndW1lbnRJbmRleCwgY29uc3QgY2hhciogYXJndW1lbnROYW1lLCBjb25zdCBjaGFy
KiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUpCit0ZW1wbGF0ZTx0eXBl
bmFtZS4uLiBTdHJpbmdUeXBlcz4gc3RhdGljIFN0cmluZyBtYWtlQXJndW1lbnRUeXBlRXJyb3JN
ZXNzYWdlKHVuc2lnbmVkIGFyZ3VtZW50SW5kZXgsIGNvbnN0IGNoYXIqIGFyZ3VtZW50TmFtZSwg
Y29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBTdHJp
bmdUeXBlcyAuLi5zdHJpbmdzKQogewotICAgIGJ1aWxkZXIuYXBwZW5kKCJBcmd1bWVudCAiLCBh
cmd1bWVudEluZGV4ICsgMSwgIiAoJyIsIGFyZ3VtZW50TmFtZSwgIicpIHRvICIpOwotICAgIGlm
ICghZnVuY3Rpb25OYW1lKQotICAgICAgICBidWlsZGVyLmFwcGVuZCgidGhlICIsIGludGVyZmFj
ZU5hbWUsICIgY29uc3RydWN0b3IiKTsKLSAgICBlbHNlCi0gICAgICAgIGJ1aWxkZXIuYXBwZW5k
KGludGVyZmFjZU5hbWUsICcuJywgZnVuY3Rpb25OYW1lKTsKLSAgICBidWlsZGVyLmFwcGVuZExp
dGVyYWwoIiBtdXN0IGJlICIpOworICAgIHJldHVybiBtYWtlU3RyaW5nKAorICAgICAgICAiQXJn
dW1lbnQgIiwgYXJndW1lbnRJbmRleCArIDEsICIgKCciLCBhcmd1bWVudE5hbWUsICInKSB0byAi
LAorICAgICAgICBmdW5jdGlvbk5hbWUgPyBzdGQ6Om1ha2VfdHVwbGUoaW50ZXJmYWNlTmFtZSwg
Ii4iLCBmdW5jdGlvbk5hbWUpIDogc3RkOjptYWtlX3R1cGxlKCJ0aGUgIiwgaW50ZXJmYWNlTmFt
ZSwgIiBjb25zdHJ1Y3RvciIpLAorICAgICAgICAiIG11c3QgYmUgIiwgc3RyaW5ncy4uLgorICAg
ICk7CiB9CiAKIHZvaWQgdGhyb3dOb3RTdXBwb3J0ZWRFcnJvcihKU0M6OkpTR2xvYmFsT2JqZWN0
JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBBU0NJSUxpdGVy
YWwgbWVzc2FnZSkKQEAgLTE5OCwzNCArMTk2LDIyIEBAIHZvaWQgdGhyb3dTZWN1cml0eUVycm9y
KEpTQzo6SlNHbG9iYWxPYmoKIAogSlNDOjpFbmNvZGVkSlNWYWx1ZSB0aHJvd0FyZ3VtZW50TXVz
dEJlRW51bUVycm9yKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpT
Qzo6VGhyb3dTY29wZSYgc2NvcGUsIHVuc2lnbmVkIGFyZ3VtZW50SW5kZXgsIGNvbnN0IGNoYXIq
IGFyZ3VtZW50TmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25JbnRlcmZhY2VOYW1lLCBjb25zdCBj
aGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IGNoYXIqIGV4cGVjdGVkVmFsdWVzKQogewotICAgIFN0
cmluZ0J1aWxkZXIgYnVpbGRlcjsKLSAgICBhcHBlbmRBcmd1bWVudE11c3RCZShidWlsZGVyLCBh
cmd1bWVudEluZGV4LCBhcmd1bWVudE5hbWUsIGZ1bmN0aW9uSW50ZXJmYWNlTmFtZSwgZnVuY3Rp
b25OYW1lKTsKLSAgICBidWlsZGVyLmFwcGVuZCgib25lIG9mOiAiLCBleHBlY3RlZFZhbHVlcyk7
Ci0gICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoJmxleGljYWxHbG9iYWxPYmplY3QsIHNjb3Bl
LCBidWlsZGVyLnRvU3RyaW5nKCkpOworICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKCZsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgbWFrZUFyZ3VtZW50VHlwZUVycm9yTWVzc2FnZShhcmd1
bWVudEluZGV4LCBhcmd1bWVudE5hbWUsIGZ1bmN0aW9uSW50ZXJmYWNlTmFtZSwgZnVuY3Rpb25O
YW1lLCAib25lIG9mOiAiLCBleHBlY3RlZFZhbHVlcykpOwogfQogCiBKU0M6OkVuY29kZWRKU1Zh
bHVlIHRocm93QXJndW1lbnRNdXN0QmVGdW5jdGlvbkVycm9yKEpTQzo6SlNHbG9iYWxPYmplY3Qm
IGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIHVuc2lnbmVkIGFy
Z3VtZW50SW5kZXgsIGNvbnN0IGNoYXIqIGFyZ3VtZW50TmFtZSwgY29uc3QgY2hhciogaW50ZXJm
YWNlTmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1lKQogewotICAgIFN0cmluZ0J1aWxkZXIg
YnVpbGRlcjsKLSAgICBhcHBlbmRBcmd1bWVudE11c3RCZShidWlsZGVyLCBhcmd1bWVudEluZGV4
LCBhcmd1bWVudE5hbWUsIGludGVyZmFjZU5hbWUsIGZ1bmN0aW9uTmFtZSk7Ci0gICAgYnVpbGRl
ci5hcHBlbmRMaXRlcmFsKCJhIGZ1bmN0aW9uIik7Ci0gICAgcmV0dXJuIHRocm93Vk1UeXBlRXJy
b3IoJmxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCBidWlsZGVyLnRvU3RyaW5nKCkpOworICAg
IHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgbWFr
ZUFyZ3VtZW50VHlwZUVycm9yTWVzc2FnZShhcmd1bWVudEluZGV4LCBhcmd1bWVudE5hbWUsIGlu
dGVyZmFjZU5hbWUsIGZ1bmN0aW9uTmFtZSwgImEgZnVuY3Rpb24iKSk7CiB9CiAKIEpTQzo6RW5j
b2RlZEpTVmFsdWUgdGhyb3dBcmd1bWVudE11c3RCZU9iamVjdEVycm9yKEpTQzo6SlNHbG9iYWxP
YmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIHVuc2ln
bmVkIGFyZ3VtZW50SW5kZXgsIGNvbnN0IGNoYXIqIGFyZ3VtZW50TmFtZSwgY29uc3QgY2hhciog
aW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1lKQogewotICAgIFN0cmluZ0J1
aWxkZXIgYnVpbGRlcjsKLSAgICBhcHBlbmRBcmd1bWVudE11c3RCZShidWlsZGVyLCBhcmd1bWVu
dEluZGV4LCBhcmd1bWVudE5hbWUsIGludGVyZmFjZU5hbWUsIGZ1bmN0aW9uTmFtZSk7Ci0gICAg
YnVpbGRlci5hcHBlbmRMaXRlcmFsKCJhbiBvYmplY3QiKTsKLSAgICByZXR1cm4gdGhyb3dWTVR5
cGVFcnJvcigmbGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsIGJ1aWxkZXIudG9TdHJpbmcoKSk7
CisgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoJmxleGljYWxHbG9iYWxPYmplY3QsIHNjb3Bl
LCBtYWtlQXJndW1lbnRUeXBlRXJyb3JNZXNzYWdlKGFyZ3VtZW50SW5kZXgsIGFyZ3VtZW50TmFt
ZSwgaW50ZXJmYWNlTmFtZSwgZnVuY3Rpb25OYW1lLCAiYW4gb2JqZWN0IikpOwogfQogCiBKU0M6
OkVuY29kZWRKU1ZhbHVlIHRocm93QXJndW1lbnRUeXBlRXJyb3IoSlNDOjpKU0dsb2JhbE9iamVj
dCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgdW5zaWduZWQg
YXJndW1lbnRJbmRleCwgY29uc3QgY2hhciogYXJndW1lbnROYW1lLCBjb25zdCBjaGFyKiBmdW5j
dGlvbkludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgY2hhciog
ZXhwZWN0ZWRUeXBlKQogewotICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKLSAgICBhcHBlbmRB
cmd1bWVudE11c3RCZShidWlsZGVyLCBhcmd1bWVudEluZGV4LCBhcmd1bWVudE5hbWUsIGZ1bmN0
aW9uSW50ZXJmYWNlTmFtZSwgZnVuY3Rpb25OYW1lKTsKLSAgICBidWlsZGVyLmFwcGVuZCgiYW4g
aW5zdGFuY2Ugb2YgIiwgZXhwZWN0ZWRUeXBlKTsKLSAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJv
cigmbGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsIGJ1aWxkZXIudG9TdHJpbmcoKSk7CisgICAg
cmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoJmxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCBtYWtl
QXJndW1lbnRUeXBlRXJyb3JNZXNzYWdlKGFyZ3VtZW50SW5kZXgsIGFyZ3VtZW50TmFtZSwgZnVu
Y3Rpb25JbnRlcmZhY2VOYW1lLCBmdW5jdGlvbk5hbWUsICJhbiBpbnN0YW5jZSBvZiAiLCBleHBl
Y3RlZFR5cGUpKTsKIH0KIAogdm9pZCB0aHJvd0F0dHJpYnV0ZVR5cGVFcnJvcihKU0M6OkpTR2xv
YmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBj
b25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lLCBjb25z
dCBjaGFyKiBleHBlY3RlZFR5cGUpCkBAIC0yMzUsMTQgKzIyMSw3IEBAIHZvaWQgdGhyb3dBdHRy
aWJ1dGVUeXBlRXJyb3IoSlNDOjpKU0dsb2IKIAogSlNDOjpFbmNvZGVkSlNWYWx1ZSB0aHJvd1Jl
cXVpcmVkTWVtYmVyVHlwZUVycm9yKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxP
YmplY3QsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGNvbnN0IGNoYXIqIG1lbWJlck5hbWUsIGNv
bnN0IGNoYXIqIGRpY3Rpb25hcnlOYW1lLCBjb25zdCBjaGFyKiBleHBlY3RlZFR5cGUpCiB7Ci0g
ICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwotICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiTWVt
YmVyICIpOwotICAgIGJ1aWxkZXIuYXBwZW5kKGRpY3Rpb25hcnlOYW1lKTsKLSAgICBidWlsZGVy
LmFwcGVuZCgnLicpOwotICAgIGJ1aWxkZXIuYXBwZW5kKG1lbWJlck5hbWUpOwotICAgIGJ1aWxk
ZXIuYXBwZW5kTGl0ZXJhbCgiIGlzIHJlcXVpcmVkIGFuZCBtdXN0IGJlIGFuIGluc3RhbmNlIG9m
ICIpOwotICAgIGJ1aWxkZXIuYXBwZW5kKGV4cGVjdGVkVHlwZSk7Ci0gICAgcmV0dXJuIHRocm93
Vk1UeXBlRXJyb3IoJmxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCBidWlsZGVyLnRvU3RyaW5n
KCkpOworICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBz
Y29wZSwgbWFrZVN0cmluZygiTWVtYmVyICIsIGRpY3Rpb25hcnlOYW1lLCAnLicsIG1lbWJlck5h
bWUsICIgaXMgcmVxdWlyZWQgYW5kIG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgIiwgZXhwZWN0ZWRU
eXBlKSk7CiB9CiAKIEpTQzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dDb25zdHJ1Y3RvclNjcmlwdEV4
ZWN1dGlvbkNvbnRleHRVbmF2YWlsYWJsZUVycm9yKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGlj
YWxHbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGNvbnN0IGNoYXIqIGludGVy
ZmFjZU5hbWUpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>403233</attachid>
            <date>2020-06-30 13:12:41 -0700</date>
            <delta_ts>2020-07-01 03:49:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-213708-20200630231240.patch</filename>
            <type>text/plain</type>
            <size>9279</size>
            <attacher name="Alexey Shvayka">ashvayka</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyNjM3NjApCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBACisyMDIwLTA2LTMwICBBbGV4ZXkgU2h2YXlrYSAgPHNo
dmFpa2FsZXNoQGdtYWlsLmNvbT4KKworICAgICAgICBVc2UgbW9yZSBlZmZpY2llbnQgbWFrZVN0
cmluZygpIGluc3RlYWQgb2YgU3RyaW5nQnVpbGRlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEzNzA4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgU2Ft
IFdlaW5pZy4KKworICAgICAgICBJbnRyb2R1Y2VzIFN0cmluZ1R5cGVBZGFwdGVyPHN0ZDo6dHVw
bGU+IG92ZXJsb2FkLCB3aGljaCBlbmFibGVzIHVzaW5nCisgICAgICAgIG1ha2VTdHJpbmcoKSBp
bnN0ZWFkIG9mIFN0cmluZ0J1aWxkZXIgaW4gbW9yZSBjYXNlcy4KKworICAgICAgICAqIHd0Zi90
ZXh0L1N0cmluZ0NvbmNhdGVuYXRlLmg6CisgICAgICAgIChXVEY6OlN0cmluZ1R5cGVBZGFwdGVy
PHN0ZDo6dHVwbGU8U3RyaW5nVHlwZXMuLi4+LCB2b2lkPik6IEFkZGVkLgorCiAyMDIwLTA2LTMw
ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAgICAg
UmVtb3ZlIFdURjo6TUQ1CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0NvbmNhdGVu
YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0
ZS5oCShyZXZpc2lvbiAyNjM2MzgpCisrKyBTb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0NvbmNh
dGVuYXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5Nyw2ICsxOTcsNDQgQEAgcHVibGljOgogICAg
IH0KIH07CiAKK3RlbXBsYXRlPHR5cGVuYW1lLi4uIFN0cmluZ1R5cGVzPiBjbGFzcyBTdHJpbmdU
eXBlQWRhcHRlcjxzdGQ6OnR1cGxlPFN0cmluZ1R5cGVzLi4uPiwgdm9pZD4geworcHVibGljOgor
ICAgIFN0cmluZ1R5cGVBZGFwdGVyKHN0ZDo6dHVwbGU8U3RyaW5nVHlwZXMuLi4+IHR1cGxlKQor
ICAgICAgICA6IG1fdHVwbGUgeyB0dXBsZSB9CisgICAgICAgICwgbV9sZW5ndGggeyBzdGQ6OmFw
cGx5KGNvbXB1dGVMZW5ndGgsIHR1cGxlKSB9CisgICAgICAgICwgbV9pczhCaXQgeyBzdGQ6OmFw
cGx5KGNvbXB1dGVJczhCaXQsIHR1cGxlKSB9CisgICAgeworICAgIH0KKworICAgIHVuc2lnbmVk
IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVuZ3RoOyB9CisgICAgYm9vbCBpczhCaXQoKSBj
b25zdCB7IHJldHVybiBtX2lzOEJpdDsgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3Rl
clR5cGU+IHZvaWQgd3JpdGVUbyhDaGFyYWN0ZXJUeXBlKiBkZXN0aW5hdGlvbikgY29uc3QKKyAg
ICB7CisgICAgICAgIHN0ZDo6YXBwbHkoWyZdKFN0cmluZ1R5cGVzLi4uIHN0cmluZ3MpIHsKKyAg
ICAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IDA7CisgICAgICAgICAgICAoLi4uLCAoCisgICAg
ICAgICAgICAgICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZXM+KHN0cmluZ3MpLndyaXRl
VG8oZGVzdGluYXRpb24gKyAob2Zmc2V0ICogc2l6ZW9mKENoYXJhY3RlclR5cGUpKSksCisgICAg
ICAgICAgICAgICAgb2Zmc2V0ICs9IFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5cGVzPihzdHJp
bmdzKS5sZW5ndGgoKQorICAgICAgICAgICAgKSk7CisgICAgICAgIH0sIG1fdHVwbGUpOworICAg
IH0KKworcHJpdmF0ZToKKyAgICBzdGF0aWMgdW5zaWduZWQgY29tcHV0ZUxlbmd0aChTdHJpbmdU
eXBlcy4uLiBzdHJpbmdzKQorICAgIHsKKyAgICAgICAgcmV0dXJuICguLi4gKyBTdHJpbmdUeXBl
QWRhcHRlcjxTdHJpbmdUeXBlcz4oc3RyaW5ncykubGVuZ3RoKCkpOworICAgIH0KKworICAgIHN0
YXRpYyBib29sIGNvbXB1dGVJczhCaXQoU3RyaW5nVHlwZXMuLi4gc3RyaW5ncykKKyAgICB7Cisg
ICAgICAgIHJldHVybiAoLi4uICYmIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5cGVzPihzdHJp
bmdzKS5pczhCaXQoKSk7CisgICAgfQorCisgICAgc3RkOjp0dXBsZTxTdHJpbmdUeXBlcy4uLj4g
bV90dXBsZTsKKyAgICB1bnNpZ25lZCBtX2xlbmd0aDsKKyAgICBib29sIG1faXM4Qml0OworfTsK
KwogdGVtcGxhdGU8dHlwZW5hbWUgVW5kZXJseWluZ0VsZW1lbnRUeXBlPiBzdHJ1Y3QgUGFkZGlu
Z1NwZWNpZmljYXRpb24gewogICAgIExDaGFyIGNoYXJhY3RlcjsKICAgICB1bnNpZ25lZCBsZW5n
dGg7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNjM2NDEpCisrKyBTb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyNyBAQAorMjAyMC0wNi0zMCAgQWxl
eGV5IFNodmF5a2EgIDxzaHZhaWthbGVzaEBnbWFpbC5jb20+CisKKyAgICAgICAgVXNlIG1vcmUg
ZWZmaWNpZW50IG1ha2VTdHJpbmcoKSBpbnN0ZWFkIG9mIFN0cmluZ0J1aWxkZXIKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMzcwOAorCisgICAgICAg
IFJldmlld2VkIGJ5IFNhbSBXZWluaWcuCisKKyAgICAgICAgVGhpcyBwYXRjaCByZWZhY3RvcnMg
dGhyb3dSZXF1aXJlZE1lbWJlclR5cGVFcnJvcigpIGFuZCB0aHJvd0FyZ3VtZW50KkVycm9yKCkK
KyAgICAgICAgbWV0aG9kcywgcmVwbGFjaW5nIGFsbCBTdHJpbmdCdWlsZGVyIHVzYWdlcyB3aXRo
IG1vcmUgZWZmaWNpZW50IG1ha2VTdHJpbmcoKS4KKworICAgICAgICBFeHRyYWN0cyBtYWtlQXJn
dW1lbnRUeXBlRXJyb3JNZXNzYWdlKCksIHNpbWlsaWFyIHRvIGV4aXN0aW5nIGhlbHBlcnMsCisg
ICAgICAgIHdoaWNoIGNhbiBiZSByZXVzZWQgaWYgbmVjY2Vzc2FyeS4KKworICAgICAgICBObyBu
ZXcgdGVzdHMsIG5vIGJlaGF2aW9yIGNoYW5nZS4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pT
RE9NRXhjZXB0aW9uSGFuZGxpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bWFrZUFyZ3VtZW50
VHlwZUVycm9yTWVzc2FnZSk6CisgICAgICAgIChXZWJDb3JlOjp0aHJvd0FyZ3VtZW50TXVzdEJl
RW51bUVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6OnRocm93QXJndW1lbnRNdXN0QmVGdW5jdGlv
bkVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6OnRocm93QXJndW1lbnRNdXN0QmVPYmplY3RFcnJv
cik6CisgICAgICAgIChXZWJDb3JlOjp0aHJvd0FyZ3VtZW50VHlwZUVycm9yKToKKyAgICAgICAg
KFdlYkNvcmU6OnRocm93UmVxdWlyZWRNZW1iZXJUeXBlRXJyb3IpOgorICAgICAgICAoV2ViQ29y
ZTo6YXBwZW5kQXJndW1lbnRNdXN0QmUpOiBEZWxldGVkLgorCiAyMDIwLTA2LTI4ICBaYWxhbiBC
dWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgW0xGQ11bVEZDXSBBZGp1c3QgdGFi
bGUgY29udGVudCB2ZXJ0aWNhbCBwb3NpdGlvbiB0byBtYXRjaCB2ZXJ0aWNhbC1hbGlnbgpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01FeGNlcHRpb25IYW5kbGluZy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01FeGNlcHRpb25I
YW5kbGluZy5jcHAJKHJldmlzaW9uIDI2MzYzOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRE9NRXhjZXB0aW9uSGFuZGxpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICsz
NCw2IEBACiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvRXhjZXB0aW9uSGVscGVycy5oPgogI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL1NjcmlwdENhbGxTdGFjay5oPgogI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL1NjcmlwdENhbGxTdGFja0ZhY3RvcnkuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9T
dHJpbmdCdWlsZGVyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBK
U0M7CkBAIC0xNjgsMTQgKzE2NywxMyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgdGhyb3dUeXBl
RXJyb3IoSlNDCiAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoJmxleGljYWxHbG9iYWxPYmpl
Y3QsIHNjb3BlLCBlcnJvck1lc3NhZ2UpOwogfQogCi1zdGF0aWMgdm9pZCBhcHBlbmRBcmd1bWVu
dE11c3RCZShTdHJpbmdCdWlsZGVyJiBidWlsZGVyLCB1bnNpZ25lZCBhcmd1bWVudEluZGV4LCBj
b25zdCBjaGFyKiBhcmd1bWVudE5hbWUsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0
IGNoYXIqIGZ1bmN0aW9uTmFtZSkKK3RlbXBsYXRlPHR5cGVuYW1lLi4uIFN0cmluZ1R5cGVzPiBz
dGF0aWMgU3RyaW5nIG1ha2VBcmd1bWVudFR5cGVFcnJvck1lc3NhZ2UodW5zaWduZWQgYXJndW1l
bnRJbmRleCwgY29uc3QgY2hhciogYXJndW1lbnROYW1lLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VO
YW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIFN0cmluZ1R5cGVzIC4uLnN0cmluZ3MpCiB7
Ci0gICAgYnVpbGRlci5hcHBlbmQoIkFyZ3VtZW50ICIsIGFyZ3VtZW50SW5kZXggKyAxLCAiICgn
IiwgYXJndW1lbnROYW1lLCAiJykgdG8gIik7Ci0gICAgaWYgKCFmdW5jdGlvbk5hbWUpCi0gICAg
ICAgIGJ1aWxkZXIuYXBwZW5kKCJ0aGUgIiwgaW50ZXJmYWNlTmFtZSwgIiBjb25zdHJ1Y3RvciIp
OwotICAgIGVsc2UKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoaW50ZXJmYWNlTmFtZSwgJy4nLCBm
dW5jdGlvbk5hbWUpOwotICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIG11c3QgYmUgIik7Cisg
ICAgcmV0dXJuIG1ha2VTdHJpbmcoCisgICAgICAgICJBcmd1bWVudCAiLCBhcmd1bWVudEluZGV4
ICsgMSwgIiAoJyIsIGFyZ3VtZW50TmFtZSwgIicpIHRvICIsCisgICAgICAgIGZ1bmN0aW9uTmFt
ZSA/IHN0ZDo6bWFrZV90dXBsZShpbnRlcmZhY2VOYW1lLCAiLiIsIGZ1bmN0aW9uTmFtZSkgOiBz
dGQ6Om1ha2VfdHVwbGUoInRoZSAiLCBpbnRlcmZhY2VOYW1lLCAiIGNvbnN0cnVjdG9yIiksCisg
ICAgICAgICIgbXVzdCBiZSAiLCBzdHJpbmdzLi4uCisgICAgKTsKIH0KIAogdm9pZCB0aHJvd05v
dFN1cHBvcnRlZEVycm9yKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3Qs
IEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIEFTQ0lJTGl0ZXJhbCBtZXNzYWdlKQpAQCAtMTk4LDM0
ICsxOTYsMjIgQEAgdm9pZCB0aHJvd1NlY3VyaXR5RXJyb3IoSlNDOjpKU0dsb2JhbE9iagogCiBK
U0M6OkVuY29kZWRKU1ZhbHVlIHRocm93QXJndW1lbnRNdXN0QmVFbnVtRXJyb3IoSlNDOjpKU0ds
b2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwg
dW5zaWduZWQgYXJndW1lbnRJbmRleCwgY29uc3QgY2hhciogYXJndW1lbnROYW1lLCBjb25zdCBj
aGFyKiBmdW5jdGlvbkludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29u
c3QgY2hhciogZXhwZWN0ZWRWYWx1ZXMpCiB7Ci0gICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwot
ICAgIGFwcGVuZEFyZ3VtZW50TXVzdEJlKGJ1aWxkZXIsIGFyZ3VtZW50SW5kZXgsIGFyZ3VtZW50
TmFtZSwgZnVuY3Rpb25JbnRlcmZhY2VOYW1lLCBmdW5jdGlvbk5hbWUpOwotICAgIGJ1aWxkZXIu
YXBwZW5kKCJvbmUgb2Y6ICIsIGV4cGVjdGVkVmFsdWVzKTsKLSAgICByZXR1cm4gdGhyb3dWTVR5
cGVFcnJvcigmbGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsIGJ1aWxkZXIudG9TdHJpbmcoKSk7
CisgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoJmxleGljYWxHbG9iYWxPYmplY3QsIHNjb3Bl
LCBtYWtlQXJndW1lbnRUeXBlRXJyb3JNZXNzYWdlKGFyZ3VtZW50SW5kZXgsIGFyZ3VtZW50TmFt
ZSwgZnVuY3Rpb25JbnRlcmZhY2VOYW1lLCBmdW5jdGlvbk5hbWUsICJvbmUgb2Y6ICIsIGV4cGVj
dGVkVmFsdWVzKSk7CiB9CiAKIEpTQzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dBcmd1bWVudE11c3RC
ZUZ1bmN0aW9uRXJyb3IoSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwg
SlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgdW5zaWduZWQgYXJndW1lbnRJbmRleCwgY29uc3QgY2hh
ciogYXJndW1lbnROYW1lLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBm
dW5jdGlvbk5hbWUpCiB7Ci0gICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwotICAgIGFwcGVuZEFy
Z3VtZW50TXVzdEJlKGJ1aWxkZXIsIGFyZ3VtZW50SW5kZXgsIGFyZ3VtZW50TmFtZSwgaW50ZXJm
YWNlTmFtZSwgZnVuY3Rpb25OYW1lKTsKLSAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoImEgZnVu
Y3Rpb24iKTsKLSAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcigmbGV4aWNhbEdsb2JhbE9iamVj
dCwgc2NvcGUsIGJ1aWxkZXIudG9TdHJpbmcoKSk7CisgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJy
b3IoJmxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCBtYWtlQXJndW1lbnRUeXBlRXJyb3JNZXNz
YWdlKGFyZ3VtZW50SW5kZXgsIGFyZ3VtZW50TmFtZSwgaW50ZXJmYWNlTmFtZSwgZnVuY3Rpb25O
YW1lLCAiYSBmdW5jdGlvbiIpKTsKIH0KIAogSlNDOjpFbmNvZGVkSlNWYWx1ZSB0aHJvd0FyZ3Vt
ZW50TXVzdEJlT2JqZWN0RXJyb3IoSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9i
amVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgdW5zaWduZWQgYXJndW1lbnRJbmRleCwgY29u
c3QgY2hhciogYXJndW1lbnROYW1lLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBj
aGFyKiBmdW5jdGlvbk5hbWUpCiB7Ci0gICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwotICAgIGFw
cGVuZEFyZ3VtZW50TXVzdEJlKGJ1aWxkZXIsIGFyZ3VtZW50SW5kZXgsIGFyZ3VtZW50TmFtZSwg
aW50ZXJmYWNlTmFtZSwgZnVuY3Rpb25OYW1lKTsKLSAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwo
ImFuIG9iamVjdCIpOwotICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKCZsZXhpY2FsR2xvYmFs
T2JqZWN0LCBzY29wZSwgYnVpbGRlci50b1N0cmluZygpKTsKKyAgICByZXR1cm4gdGhyb3dWTVR5
cGVFcnJvcigmbGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsIG1ha2VBcmd1bWVudFR5cGVFcnJv
ck1lc3NhZ2UoYXJndW1lbnRJbmRleCwgYXJndW1lbnROYW1lLCBpbnRlcmZhY2VOYW1lLCBmdW5j
dGlvbk5hbWUsICJhbiBvYmplY3QiKSk7CiB9CiAKIEpTQzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dB
cmd1bWVudFR5cGVFcnJvcihKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCB1bnNpZ25lZCBhcmd1bWVudEluZGV4LCBjb25zdCBj
aGFyKiBhcmd1bWVudE5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uSW50ZXJmYWNlTmFtZSwgY29u
c3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBjaGFyKiBleHBlY3RlZFR5cGUpCiB7Ci0gICAg
U3RyaW5nQnVpbGRlciBidWlsZGVyOwotICAgIGFwcGVuZEFyZ3VtZW50TXVzdEJlKGJ1aWxkZXIs
IGFyZ3VtZW50SW5kZXgsIGFyZ3VtZW50TmFtZSwgZnVuY3Rpb25JbnRlcmZhY2VOYW1lLCBmdW5j
dGlvbk5hbWUpOwotICAgIGJ1aWxkZXIuYXBwZW5kKCJhbiBpbnN0YW5jZSBvZiAiLCBleHBlY3Rl
ZFR5cGUpOwotICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKCZsZXhpY2FsR2xvYmFsT2JqZWN0
LCBzY29wZSwgYnVpbGRlci50b1N0cmluZygpKTsKKyAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJv
cigmbGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsIG1ha2VBcmd1bWVudFR5cGVFcnJvck1lc3Nh
Z2UoYXJndW1lbnRJbmRleCwgYXJndW1lbnROYW1lLCBmdW5jdGlvbkludGVyZmFjZU5hbWUsIGZ1
bmN0aW9uTmFtZSwgImFuIGluc3RhbmNlIG9mICIsIGV4cGVjdGVkVHlwZSkpOwogfQogCiB2b2lk
IHRocm93QXR0cmlidXRlVHlwZUVycm9yKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9i
YWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5h
bWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUsIGNvbnN0IGNoYXIqIGV4cGVjdGVkVHlwZSkK
QEAgLTIzNSwxNCArMjIxLDcgQEAgdm9pZCB0aHJvd0F0dHJpYnV0ZVR5cGVFcnJvcihKU0M6OkpT
R2xvYgogCiBKU0M6OkVuY29kZWRKU1ZhbHVlIHRocm93UmVxdWlyZWRNZW1iZXJUeXBlRXJyb3Io
SlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3Bl
JiBzY29wZSwgY29uc3QgY2hhciogbWVtYmVyTmFtZSwgY29uc3QgY2hhciogZGljdGlvbmFyeU5h
bWUsIGNvbnN0IGNoYXIqIGV4cGVjdGVkVHlwZSkKIHsKLSAgICBTdHJpbmdCdWlsZGVyIGJ1aWxk
ZXI7Ci0gICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCJNZW1iZXIgIik7Ci0gICAgYnVpbGRlci5h
cHBlbmQoZGljdGlvbmFyeU5hbWUpOwotICAgIGJ1aWxkZXIuYXBwZW5kKCcuJyk7Ci0gICAgYnVp
bGRlci5hcHBlbmQobWVtYmVyTmFtZSk7Ci0gICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgaXMg
cmVxdWlyZWQgYW5kIG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgIik7Ci0gICAgYnVpbGRlci5hcHBl
bmQoZXhwZWN0ZWRUeXBlKTsKLSAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcigmbGV4aWNhbEds
b2JhbE9iamVjdCwgc2NvcGUsIGJ1aWxkZXIudG9TdHJpbmcoKSk7CisgICAgcmV0dXJuIHRocm93
Vk1UeXBlRXJyb3IoJmxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCBtYWtlU3RyaW5nKCJNZW1i
ZXIgIiwgZGljdGlvbmFyeU5hbWUsICcuJywgbWVtYmVyTmFtZSwgIiBpcyByZXF1aXJlZCBhbmQg
bXVzdCBiZSBhbiBpbnN0YW5jZSBvZiAiLCBleHBlY3RlZFR5cGUpKTsKIH0KIAogSlNDOjpFbmNv
ZGVkSlNWYWx1ZSB0aHJvd0NvbnN0cnVjdG9yU2NyaXB0RXhlY3V0aW9uQ29udGV4dFVuYXZhaWxh
YmxlRXJyb3IoSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpU
aHJvd1Njb3BlJiBzY29wZSwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSkK
</data>

          </attachment>
      

    </bug>

</bugzilla>