<?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>204954</bug_id>
          
          <creation_ts>2019-12-06 11:59:43 -0800</creation_ts>
          <short_desc>Web Inspector: non-regex Local Overrides and Script Blackboxing shouldn&apos;t apply to scripts that just contain the URL</short_desc>
          <delta_ts>2019-12-07 01:29:23 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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="Devin Rousso">hi</reporter>
          <assigned_to name="Devin Rousso">hi</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>hi</cc>
    
    <cc>inspector-bugzilla-changes</cc>
    
    <cc>joepeck</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</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>1596306</commentid>
    <comment_count>0</comment_count>
    <who name="Devin Rousso">hi</who>
    <bug_when>2019-12-06 11:59:43 -0800</bug_when>
    <thetext>`Inspector::ContentSearchUtilities::createSearchRegex` doesn&apos;t add `^` and `$` to the beginning and end of the search string, meaning that the `InspectorNetworkAgent` would think that it should intercept &lt;https://webkit.org/example&gt; if it was given a non-regex Local Override for &lt;https://webkit.org/&gt;, since &lt;https://webkit.org/example&gt; _contains_ the string &quot;https://webkit.org/&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1596381</commentid>
    <comment_count>1</comment_count>
      <attachid>385048</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2019-12-06 14:59:24 -0800</bug_when>
    <thetext>Created attachment 385048
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1596386</commentid>
    <comment_count>2</comment_count>
      <attachid>385048</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2019-12-06 15:05:48 -0800</bug_when>
    <thetext>Comment on attachment 385048
Patch

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

&gt; Source/WebCore/ChangeLog:10
&gt; +        If `isRegex` is false, add `^` and `$` to the beginning and end of the search string to
&gt; +        ensure that the search string is exactly matched, not just contained within the potentially
&gt; +        intercepted URL.

Isn&apos;t this incorrect if there are any special characters?

For example if my URL was:

    &quot;http://example.com/(test&quot;
    &quot;http://example.com/$/test&quot;

I&apos;d expect each of these to match potential URLs not treated like regexes. However it seems (1) would be an invalid regex and (2) would behave different if treated like a regex.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1596389</commentid>
    <comment_count>3</comment_count>
      <attachid>385048</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2019-12-06 15:10:38 -0800</bug_when>
    <thetext>Comment on attachment 385048
Patch

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

&gt;&gt; Source/WebCore/ChangeLog:10
&gt;&gt; +        intercepted URL.
&gt; 
&gt; Isn&apos;t this incorrect if there are any special characters?
&gt; 
&gt; For example if my URL was:
&gt; 
&gt;     &quot;http://example.com/(test&quot;
&gt;     &quot;http://example.com/$/test&quot;
&gt; 
&gt; I&apos;d expect each of these to match potential URLs not treated like regexes. However it seems (1) would be an invalid regex and (2) would behave different if treated like a regex.

Both `Inspector::ContentSearchUtilities::createSearchRegex` and `Inspector::ContentSearchUtilities::createMatchRegex` escape the query string if the `isRegex` parameter is false (they add &quot;\\&quot; before any of &quot;[](){}+-*.,?\\^$|&quot;).  In the case that it is true, we don&apos;t add the `^` and `$` to the query string, and let it wholly be treated as a regex.

See how `createSearchRegexSource` is used in &apos;Source/JavaScriptCore/inspector/ContentSearchUtilities.cpp&apos;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1596390</commentid>
    <comment_count>4</comment_count>
      <attachid>385048</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2019-12-06 15:11:31 -0800</bug_when>
    <thetext>Comment on attachment 385048
Patch

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

&gt; Source/JavaScriptCore/inspector/ContentSearchUtilities.cpp:139
&gt; +    return RegularExpression { isRegex ? query : makeString(&quot;^&quot;_s, createSearchRegexSource(query), &quot;$&quot;_s), caseSensitive ? TextCaseSensitive : TextCaseInsensitive };

A `makeString` shouldn&apos;t require WTFStrings for single characters. It likely could just be:

    makeString(&apos;^&apos;, ..., &apos;$&apos;)

&gt; Source/WebCore/inspector/agents/InspectorNetworkAgent.cpp:858
&gt;      for (auto&amp; intercept : m_intercepts) {
&gt; -        auto regex = ContentSearchUtilities::createSearchRegex(intercept.url, intercept.caseSensitive, intercept.isRegex);
&gt; +        auto regex = ContentSearchUtilities::createMatchRegex(intercept.url, intercept.caseSensitive, intercept.isRegex);
&gt;          if (regex.match(urlString) != -1)
&gt;              return true;
&gt;      }

I&apos;d expect to see:

    if (intercept.isRegex) {
        ... regex ...
    } else {
        ... string compare ...
    }</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1596391</commentid>
    <comment_count>5</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2019-12-06 15:12:31 -0800</bug_when>
    <thetext>(In reply to Devin Rousso from comment #3)
&gt; Comment on attachment 385048 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=385048&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/ChangeLog:10
&gt; &gt;&gt; +        intercepted URL.
&gt; &gt; 
&gt; &gt; Isn&apos;t this incorrect if there are any special characters?
&gt; &gt; 
&gt; &gt; For example if my URL was:
&gt; &gt; 
&gt; &gt;     &quot;http://example.com/(test&quot;
&gt; &gt;     &quot;http://example.com/$/test&quot;
&gt; &gt; 
&gt; &gt; I&apos;d expect each of these to match potential URLs not treated like regexes. However it seems (1) would be an invalid regex and (2) would behave different if treated like a regex.
&gt; 
&gt; Both `Inspector::ContentSearchUtilities::createSearchRegex` and
&gt; `Inspector::ContentSearchUtilities::createMatchRegex` escape the query
&gt; string if the `isRegex` parameter is false (they add &quot;\\&quot; before any of
&gt; &quot;[](){}+-*.,?\\^$|&quot;).  In the case that it is true, we don&apos;t add the `^` and
&gt; `$` to the query string, and let it wholly be treated as a regex.
&gt; 
&gt; See how `createSearchRegexSource` is used in
&gt; &apos;Source/JavaScriptCore/inspector/ContentSearchUtilities.cpp&apos;.

Ugh, gross, and very non-obvious.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1596392</commentid>
    <comment_count>6</comment_count>
      <attachid>385048</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2019-12-06 15:13:38 -0800</bug_when>
    <thetext>Comment on attachment 385048
Patch

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

&gt; Source/JavaScriptCore/inspector/ContentSearchUtilities.cpp:137
&gt; +RegularExpression createMatchRegex(const String&amp; query, bool caseSensitive, bool isRegex)

Maybe name this `createExactMatchRegex`?

&gt;&gt; Source/WebCore/inspector/agents/InspectorNetworkAgent.cpp:858
&gt;&gt;      }
&gt; 
&gt; I&apos;d expect to see:
&gt; 
&gt;     if (intercept.isRegex) {
&gt;         ... regex ...
&gt;     } else {
&gt;         ... string compare ...
&gt;     }

I see you answer this because `ContentSearchUtilities` is clever.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1596403</commentid>
    <comment_count>7</comment_count>
      <attachid>385048</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2019-12-06 15:24:09 -0800</bug_when>
    <thetext>Comment on attachment 385048
Patch

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

&gt;&gt; Source/JavaScriptCore/inspector/ContentSearchUtilities.cpp:137
&gt;&gt; +RegularExpression createMatchRegex(const String&amp; query, bool caseSensitive, bool isRegex)
&gt; 
&gt; Maybe name this `createExactMatchRegex`?

In my mind, &quot;exact match&quot; implies that the resulting regex would match against an _entire_ string, which isn&apos;t really accurate for when `isRegex` is true (e.g. `https\:\/\/webkit\.org\/` would match every response to any URL that contained &quot;https://webkit.org/&quot;, even if the URL was something like &quot;https://example.org/?redirect=https://webkit.org/?params=foobarbaz&quot;).

&gt;&gt; Source/JavaScriptCore/inspector/ContentSearchUtilities.cpp:139
&gt;&gt; +    return RegularExpression { isRegex ? query : makeString(&quot;^&quot;_s, createSearchRegexSource(query), &quot;$&quot;_s), caseSensitive ? TextCaseSensitive : TextCaseInsensitive };
&gt; 
&gt; A `makeString` shouldn&apos;t require WTFStrings for single characters. It likely could just be:
&gt; 
&gt;     makeString(&apos;^&apos;, ..., &apos;$&apos;)

What is the usual style for this.  I&apos;d though to use `ASCIILiteral` for all ASCII strings, regardless of the number of characters, but perhaps that is unnecessary.  I&apos;m fine either way.  I&apos;ll change this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1596404</commentid>
    <comment_count>8</comment_count>
      <attachid>385050</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2019-12-06 15:29:11 -0800</bug_when>
    <thetext>Created attachment 385050
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1596443</commentid>
    <comment_count>9</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2019-12-06 17:08:06 -0800</bug_when>
    <thetext>(In reply to Devin Rousso from comment #7)
&gt; Comment on attachment 385048 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=385048&amp;action=review
&gt; 
&gt; &gt;&gt; Source/JavaScriptCore/inspector/ContentSearchUtilities.cpp:139
&gt; &gt;&gt; +    return RegularExpression { isRegex ? query : makeString(&quot;^&quot;_s, createSearchRegexSource(query), &quot;$&quot;_s), caseSensitive ? TextCaseSensitive : TextCaseInsensitive };
&gt; &gt; 
&gt; &gt; A `makeString` shouldn&apos;t require WTFStrings for single characters. It likely could just be:
&gt; &gt; 
&gt; &gt;     makeString(&apos;^&apos;, ..., &apos;$&apos;)
&gt; 
&gt; What is the usual style for this.  I&apos;d though to use `ASCIILiteral` for all
&gt; ASCII strings, regardless of the number of characters, but perhaps that is
&gt; unnecessary.  I&apos;m fine either way.  I&apos;ll change this.

`makeString` is constructing a single WTFString by concatenating components. See StringConcatenate.h. Therefore the simplest components that you can concatenate together should cause the most efficient construction.

Lets compare:

    1. makeString(char, WTFString, char)
    2. makeString(ASCIILiteral, WTFString, ASCIILiteral)

(1) is likely to be simpler then (2) because its components are simpler.

Note that in StringConcatenate.h that an ASCIILiteral has a special case. This means an ASCIILiteral like &quot;foo&quot;_s should be treated exactly the same as char* &quot;foo&quot;. As it should be, because why convert to a WTFString and back to characters to concatenate! But a char literal (&apos;f&apos;) is simpler than a char* literal (&quot;f&quot;), it avoids a potential strlen(...) and StringImpl::copyCharacters call, both of which are unnecessary complexity for a single character.

In general, operations (searching, comparing, concatenating) are almost always simpler / more efficient to use a character instead of a char*/ASCIILiteral/WTFString.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1596453</commentid>
    <comment_count>10</comment_count>
      <attachid>385050</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2019-12-06 17:15:49 -0800</bug_when>
    <thetext>Comment on attachment 385050
Patch

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

&gt; Source/JavaScriptCore/inspector/ContentSearchUtilities.cpp:139
&gt; +    return RegularExpression { isRegex ? query : makeString(&apos;^&apos;, createSearchRegexSource(query), &apos;$&apos;), caseSensitive ? TextCaseSensitive : TextCaseInsensitive };

A better name for `createSearchRegexSource` seems like `escapeRegex` or something.

I find these functions confusing. &quot;createFooRegex&quot; which takes an `isRegex` flag seems counter-intuitive.

Perhaps this could be better: `createRegularExpressionForSearchString(const String&amp; searchString, bool caseSensitive, SearchStringType type)` where `enum SearchStringType { Regex, ExactString, ContainsString }`.

Maybe I&apos;m over thinking it but it seems very error prone to read this function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1596497</commentid>
    <comment_count>11</comment_count>
      <attachid>385050</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2019-12-06 21:20:30 -0800</bug_when>
    <thetext>Comment on attachment 385050
Patch

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

&gt;&gt; Source/JavaScriptCore/inspector/ContentSearchUtilities.cpp:139
&gt;&gt; +    return RegularExpression { isRegex ? query : makeString(&apos;^&apos;, createSearchRegexSource(query), &apos;$&apos;), caseSensitive ? TextCaseSensitive : TextCaseInsensitive };
&gt; 
&gt; A better name for `createSearchRegexSource` seems like `escapeRegex` or something.
&gt; 
&gt; I find these functions confusing. &quot;createFooRegex&quot; which takes an `isRegex` flag seems counter-intuitive.
&gt; 
&gt; Perhaps this could be better: `createRegularExpressionForSearchString(const String&amp; searchString, bool caseSensitive, SearchStringType type)` where `enum SearchStringType { Regex, ExactString, ContainsString }`.
&gt; 
&gt; Maybe I&apos;m over thinking it but it seems very error prone to read this function.

I like this!  I&apos;ll take a stab at it :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1596504</commentid>
    <comment_count>12</comment_count>
      <attachid>385080</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2019-12-06 21:51:06 -0800</bug_when>
    <thetext>Created attachment 385080
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1596536</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-12-07 01:27:35 -0800</bug_when>
    <thetext>The commit-queue encountered the following flaky tests while processing attachment 385080:

webgl/1.0.3/conformance/ogles/GL/mat/mat_025_to_032.html bug 204981 (author: justin_fan@apple.com)
The commit-queue is continuing to process your patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1596537</commentid>
    <comment_count>14</comment_count>
      <attachid>385080</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-12-07 01:28:28 -0800</bug_when>
    <thetext>Comment on attachment 385080
Patch

Clearing flags on attachment: 385080

Committed r253246: &lt;https://trac.webkit.org/changeset/253246&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1596538</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-12-07 01:28:30 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1596539</commentid>
    <comment_count>16</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-12-07 01:29:23 -0800</bug_when>
    <thetext>&lt;rdar://problem/57725755&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>385048</attachid>
            <date>2019-12-06 14:59:24 -0800</date>
            <delta_ts>2019-12-06 15:29:11 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>204954.diff</filename>
            <type>text/plain</type>
            <size>6174</size>
            <attacher name="Devin Rousso">hi</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDVjYTQ0YjE3YjJiLi5iOWU1MDIzZGYxMyAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjUgQEAKKzIwMTktMTItMDYgIERldmlu
IFJvdXNzbyAgPGRyb3Vzc29AYXBwbGUuY29tPgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IG5v
bi1yZWdleCBMb2NhbCBPdmVycmlkZXMgYW5kIFNjcmlwdCBCbGFja2JveGluZyBzaG91bGRuJ3Qg
YXBwbHkgdG8gc2NyaXB0cyB0aGF0IGp1c3QgY29udGFpbiB0aGUgVVJMCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDQ5NTQKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJZiBgaXNSZWdleGAgaXMgZmFsc2Us
IGFkZCBgXmAgYW5kIGAkYCB0byB0aGUgYmVnaW5uaW5nIGFuZCBlbmQgb2YgdGhlIHNlYXJjaCBz
dHJpbmcgdG8KKyAgICAgICAgZW5zdXJlIHRoYXQgdGhlIHNlYXJjaCBzdHJpbmcgaXMgZXhhY3Rs
eSBtYXRjaGVkLCBub3QganVzdCBjb250YWluZWQgd2l0aGluIHRoZSBwb3RlbnRpYWxseQorICAg
ICAgICBpbnRlcmNlcHRlZCBVUkwuCisKKyAgICAgICAgVGhpcyBkb2Vzbid0IGFjdHVhbGx5IGNo
YW5nZSBmdW5jdGlvbmFsaXR5IGJlY2F1c2UgdGhlIFdlYiBJbnNwZWN0b3IgZnJvbnRlbmQgd291
bGRuJ3QKKyAgICAgICAgcmVwbGFjZSB0aGUgbmV0d29yayByZXNwb25zZSBmb3IgdGhlc2UgY29u
dGFpbmluZyBtYXRjaGVzLCBhcyB0aGUgZnJvbnRlbmQgSmF2YVNjcmlwdAorICAgICAgICBhbHJl
YWR5IGNvcnJlY3RseSBwZXJmb3JtZWQgdGhpcyBsb2dpYywgYW5kIHdvdWxkIHRoZXJlZm9yZSBg
TmV0d29yay5pbnRlcmNlcHRDb250aW51ZWAuCisKKyAgICAgICAgKiBpbnNwZWN0b3IvQ29udGVu
dFNlYXJjaFV0aWxpdGllcy5oOgorICAgICAgICAqIGluc3BlY3Rvci9Db250ZW50U2VhcmNoVXRp
bGl0aWVzLmNwcDoKKyAgICAgICAgKEluc3BlY3Rvcjo6Q29udGVudFNlYXJjaFV0aWxpdGllczo6
Y3JlYXRlTWF0Y2hSZWdleCk6IEFkZGVkLgorCisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9J
bnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcDoKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVjdG9y
RGVidWdnZXJBZ2VudDo6c2hvdWxkQmxhY2tib3hVUkwgY29uc3QpOgorCiAyMDE5LTEyLTA1ICBU
YWRldSBaYWdhbGxvICA8dHphZ2FsbG9AYXBwbGUuY29tPgogCiAgICAgICAgIFtXZWJBc3NlbWJs
eV0gRml4IExMSW50Q2FsbGVlJ3Mgb3duZXJzaGlwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL0NvbnRlbnRTZWFyY2hVdGlsaXRpZXMuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9Db250ZW50U2VhcmNoVXRpbGl0aWVzLmNwcAppbmRleCBm
NzkxNDA2OTkxZi4uZWM0MDhhMDcyOWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvQ29udGVudFNlYXJjaFV0aWxpdGllcy5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9Db250ZW50U2VhcmNoVXRpbGl0aWVzLmNwcApAQCAtMTM0LDYg
KzEzNCwxMSBAQCBSZWd1bGFyRXhwcmVzc2lvbiBjcmVhdGVTZWFyY2hSZWdleChjb25zdCBTdHJp
bmcmIHF1ZXJ5LCBib29sIGNhc2VTZW5zaXRpdmUsIGJvbwogICAgIHJldHVybiBSZWd1bGFyRXhw
cmVzc2lvbiB7IGlzUmVnZXggPyBxdWVyeSA6IGNyZWF0ZVNlYXJjaFJlZ2V4U291cmNlKHF1ZXJ5
KSwgY2FzZVNlbnNpdGl2ZSA/IFRleHRDYXNlU2Vuc2l0aXZlIDogVGV4dENhc2VJbnNlbnNpdGl2
ZSB9OwogfQogCitSZWd1bGFyRXhwcmVzc2lvbiBjcmVhdGVNYXRjaFJlZ2V4KGNvbnN0IFN0cmlu
ZyYgcXVlcnksIGJvb2wgY2FzZVNlbnNpdGl2ZSwgYm9vbCBpc1JlZ2V4KQoreworICAgIHJldHVy
biBSZWd1bGFyRXhwcmVzc2lvbiB7IGlzUmVnZXggPyBxdWVyeSA6IG1ha2VTdHJpbmcoIl4iX3Ms
IGNyZWF0ZVNlYXJjaFJlZ2V4U291cmNlKHF1ZXJ5KSwgIiQiX3MpLCBjYXNlU2Vuc2l0aXZlID8g
VGV4dENhc2VTZW5zaXRpdmUgOiBUZXh0Q2FzZUluc2Vuc2l0aXZlIH07Cit9CisKIGludCBjb3Vu
dFJlZ3VsYXJFeHByZXNzaW9uTWF0Y2hlcyhjb25zdCBSZWd1bGFyRXhwcmVzc2lvbiYgcmVnZXgs
IGNvbnN0IFN0cmluZyYgY29udGVudCkKIHsKICAgICBpZiAoY29udGVudC5pc0VtcHR5KCkpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0NvbnRlbnRTZWFyY2hV
dGlsaXRpZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvQ29udGVudFNlYXJj
aFV0aWxpdGllcy5oCmluZGV4IGQyZWE4ZWUwZWVjLi43NzE4ZDFjMzJhNCAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9Db250ZW50U2VhcmNoVXRpbGl0aWVzLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9Db250ZW50U2VhcmNoVXRpbGl0
aWVzLmgKQEAgLTQwLDYgKzQwLDcgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiBuYW1lc3BhY2Ug
Q29udGVudFNlYXJjaFV0aWxpdGllcyB7CiAKIEpTX0VYUE9SVF9QUklWQVRFIEpTQzo6WWFycjo6
UmVndWxhckV4cHJlc3Npb24gY3JlYXRlU2VhcmNoUmVnZXgoY29uc3QgU3RyaW5nJiBxdWVyeSwg
Ym9vbCBjYXNlU2Vuc2l0aXZlLCBib29sIGlzUmVnZXgpOworSlNfRVhQT1JUX1BSSVZBVEUgSlND
OjpZYXJyOjpSZWd1bGFyRXhwcmVzc2lvbiBjcmVhdGVNYXRjaFJlZ2V4KGNvbnN0IFN0cmluZyYg
cXVlcnksIGJvb2wgY2FzZVNlbnNpdGl2ZSwgYm9vbCBpc1JlZ2V4KTsKIEpTX0VYUE9SVF9QUklW
QVRFIGludCBjb3VudFJlZ3VsYXJFeHByZXNzaW9uTWF0Y2hlcyhjb25zdCBKU0M6OllhcnI6OlJl
Z3VsYXJFeHByZXNzaW9uJiwgY29uc3QgU3RyaW5nJik7CiBKU19FWFBPUlRfUFJJVkFURSBSZWY8
SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6R2VuZXJpY1R5cGVzOjpTZWFyY2hNYXRjaD4+IHNlYXJj
aEluVGV4dEJ5TGluZXMoY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBj
b25zdCBib29sIGNhc2VTZW5zaXRpdmUsIGNvbnN0IGJvb2wgaXNSZWdleCk7CiBKU19FWFBPUlRf
UFJJVkFURSBUZXh0UG9zaXRpb24gdGV4dFBvc2l0aW9uRnJvbU9mZnNldChzaXplX3Qgb2Zmc2V0
LCBjb25zdCBWZWN0b3I8c2l6ZV90PiYgbGluZUVuZGluZ3MpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JEZWJ1
Z2dlckFnZW50LmNwcAppbmRleCA0NDY4NzU3ZWE1Ni4uMjc0ZTE5N2M3ZjMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRlYnVnZ2Vy
QWdlbnQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0lu
c3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwCkBAIC05MjYsNyArOTI2LDcgQEAgYm9vbCBJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50OjpzaG91bGRCbGFja2JveFVSTChjb25zdCBTdHJpbmcmIHVybCkgY29u
c3QKIHsKICAgICBpZiAoIXVybC5pc0VtcHR5KCkpIHsKICAgICAgICAgZm9yIChjb25zdCBhdXRv
JiBibGFja2JveENvbmZpZyA6IG1fYmxhY2tib3hlZFVSTHMpIHsKLSAgICAgICAgICAgIGF1dG8g
cmVnZXggPSBDb250ZW50U2VhcmNoVXRpbGl0aWVzOjpjcmVhdGVTZWFyY2hSZWdleChibGFja2Jv
eENvbmZpZy51cmwsIGJsYWNrYm94Q29uZmlnLmNhc2VTZW5zaXRpdmUsIGJsYWNrYm94Q29uZmln
LmlzUmVnZXgpOworICAgICAgICAgICAgYXV0byByZWdleCA9IENvbnRlbnRTZWFyY2hVdGlsaXRp
ZXM6OmNyZWF0ZU1hdGNoUmVnZXgoYmxhY2tib3hDb25maWcudXJsLCBibGFja2JveENvbmZpZy5j
YXNlU2Vuc2l0aXZlLCBibGFja2JveENvbmZpZy5pc1JlZ2V4KTsKICAgICAgICAgICAgIGlmIChy
ZWdleC5tYXRjaCh1cmwpICE9IC0xKQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAg
ICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cKaW5kZXggYjFmY2M2NTllMmQuLmU2NGQwNmFhOGFlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMjEgQEAKKzIwMTktMTItMDYgIERldmluIFJvdXNzbyAgPGRyb3Vzc29AYXBw
bGUuY29tPgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IG5vbi1yZWdleCBMb2NhbCBPdmVycmlk
ZXMgYW5kIFNjcmlwdCBCbGFja2JveGluZyBzaG91bGRuJ3QgYXBwbHkgdG8gc2NyaXB0cyB0aGF0
IGp1c3QgY29udGFpbiB0aGUgVVJMCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMDQ5NTQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBJZiBgaXNSZWdleGAgaXMgZmFsc2UsIGFkZCBgXmAgYW5kIGAkYCB0byB0
aGUgYmVnaW5uaW5nIGFuZCBlbmQgb2YgdGhlIHNlYXJjaCBzdHJpbmcgdG8KKyAgICAgICAgZW5z
dXJlIHRoYXQgdGhlIHNlYXJjaCBzdHJpbmcgaXMgZXhhY3RseSBtYXRjaGVkLCBub3QganVzdCBj
b250YWluZWQgd2l0aGluIHRoZSBwb3RlbnRpYWxseQorICAgICAgICBpbnRlcmNlcHRlZCBVUkwu
CisKKyAgICAgICAgVGhpcyBkb2Vzbid0IGFjdHVhbGx5IGNoYW5nZSBmdW5jdGlvbmFsaXR5IGJl
Y2F1c2UgdGhlIFdlYiBJbnNwZWN0b3IgZnJvbnRlbmQgd291bGRuJ3QKKyAgICAgICAgcmVwbGFj
ZSB0aGUgbmV0d29yayByZXNwb25zZSBmb3IgdGhlc2UgY29udGFpbmluZyBtYXRjaGVzLCBhcyB0
aGUgZnJvbnRlbmQgSmF2YVNjcmlwdAorICAgICAgICBhbHJlYWR5IGNvcnJlY3RseSBwZXJmb3Jt
ZWQgdGhpcyBsb2dpYywgYW5kIHdvdWxkIHRoZXJlZm9yZSBgTmV0d29yay5pbnRlcmNlcHRDb250
aW51ZWAuCisKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rvck5ldHdvcmtBZ2Vu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OnNob3VsZElu
dGVyY2VwdCk6CisKIDIwMTktMTItMDUgIFphbGFuIEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4K
IAogICAgICAgICBbTEZDXVtJRkNdIEZpeCBjc3MxL2Jhc2ljL2NvbnRhaW5tZW50Lmh0bWwKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yTmV0d29y
a0FnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yTmV0
d29ya0FnZW50LmNwcAppbmRleCA4ZWVkNDFkYWRiNi4uYjAyNzE0MDkyMTkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yTmV0d29ya0FnZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rvck5ldHdvcmtB
Z2VudC5jcHAKQEAgLTg1Miw3ICs4NTIsNyBAQCBib29sIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6
c2hvdWxkSW50ZXJjZXB0KFVSTCB1cmwpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGZv
ciAoYXV0byYgaW50ZXJjZXB0IDogbV9pbnRlcmNlcHRzKSB7Ci0gICAgICAgIGF1dG8gcmVnZXgg
PSBDb250ZW50U2VhcmNoVXRpbGl0aWVzOjpjcmVhdGVTZWFyY2hSZWdleChpbnRlcmNlcHQudXJs
LCBpbnRlcmNlcHQuY2FzZVNlbnNpdGl2ZSwgaW50ZXJjZXB0LmlzUmVnZXgpOworICAgICAgICBh
dXRvIHJlZ2V4ID0gQ29udGVudFNlYXJjaFV0aWxpdGllczo6Y3JlYXRlTWF0Y2hSZWdleChpbnRl
cmNlcHQudXJsLCBpbnRlcmNlcHQuY2FzZVNlbnNpdGl2ZSwgaW50ZXJjZXB0LmlzUmVnZXgpOwog
ICAgICAgICBpZiAocmVnZXgubWF0Y2godXJsU3RyaW5nKSAhPSAtMSkKICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0K
</data>
<flag name="review"
          id="400895"
          type_id="1"
          status="+"
          setter="joepeck"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>385050</attachid>
            <date>2019-12-06 15:29:11 -0800</date>
            <delta_ts>2019-12-06 21:51:04 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>204954.diff</filename>
            <type>text/plain</type>
            <size>6172</size>
            <attacher name="Devin Rousso">hi</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDVjYTQ0YjE3YjJiLi5iOWU1MDIzZGYxMyAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjUgQEAKKzIwMTktMTItMDYgIERldmlu
IFJvdXNzbyAgPGRyb3Vzc29AYXBwbGUuY29tPgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IG5v
bi1yZWdleCBMb2NhbCBPdmVycmlkZXMgYW5kIFNjcmlwdCBCbGFja2JveGluZyBzaG91bGRuJ3Qg
YXBwbHkgdG8gc2NyaXB0cyB0aGF0IGp1c3QgY29udGFpbiB0aGUgVVJMCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDQ5NTQKKworICAgICAgICBSZXZp
ZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCisKKyAgICAgICAgSWYgYGlzUmVnZXhgIGlzIGZhbHNl
LCBhZGQgYF5gIGFuZCBgJGAgdG8gdGhlIGJlZ2lubmluZyBhbmQgZW5kIG9mIHRoZSBzZWFyY2gg
c3RyaW5nIHRvCisgICAgICAgIGVuc3VyZSB0aGF0IHRoZSBzZWFyY2ggc3RyaW5nIGlzIGV4YWN0
bHkgbWF0Y2hlZCwgbm90IGp1c3QgY29udGFpbmVkIHdpdGhpbiB0aGUgcG90ZW50aWFsbHkKKyAg
ICAgICAgaW50ZXJjZXB0ZWQgVVJMLgorCisgICAgICAgIFRoaXMgZG9lc24ndCBhY3R1YWxseSBj
aGFuZ2UgZnVuY3Rpb25hbGl0eSBiZWNhdXNlIHRoZSBXZWIgSW5zcGVjdG9yIGZyb250ZW5kIHdv
dWxkbid0CisgICAgICAgIHJlcGxhY2UgdGhlIG5ldHdvcmsgcmVzcG9uc2UgZm9yIHRoZXNlIGNv
bnRhaW5pbmcgbWF0Y2hlcywgYXMgdGhlIGZyb250ZW5kIEphdmFTY3JpcHQKKyAgICAgICAgYWxy
ZWFkeSBjb3JyZWN0bHkgcGVyZm9ybWVkIHRoaXMgbG9naWMsIGFuZCB3b3VsZCB0aGVyZWZvcmUg
YE5ldHdvcmsuaW50ZXJjZXB0Q29udGludWVgLgorCisgICAgICAgICogaW5zcGVjdG9yL0NvbnRl
bnRTZWFyY2hVdGlsaXRpZXMuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvQ29udGVudFNlYXJjaFV0
aWxpdGllcy5jcHA6CisgICAgICAgIChJbnNwZWN0b3I6OkNvbnRlbnRTZWFyY2hVdGlsaXRpZXM6
OmNyZWF0ZU1hdGNoUmVnZXgpOiBBZGRlZC4KKworICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHA6CisgICAgICAgIChJbnNwZWN0b3I6Okluc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQ6OnNob3VsZEJsYWNrYm94VVJMIGNvbnN0KToKKwogMjAxOS0xMi0wNSAg
VGFkZXUgWmFnYWxsbyAgPHR6YWdhbGxvQGFwcGxlLmNvbT4KIAogICAgICAgICBbV2ViQXNzZW1i
bHldIEZpeCBMTEludENhbGxlZSdzIG93bmVyc2hpcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9Db250ZW50U2VhcmNoVXRpbGl0aWVzLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvQ29udGVudFNlYXJjaFV0aWxpdGllcy5jcHAKaW5kZXgg
Zjc5MTQwNjk5MWYuLmVjNDA4YTA3MjliIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL0NvbnRlbnRTZWFyY2hVdGlsaXRpZXMuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3IvQ29udGVudFNlYXJjaFV0aWxpdGllcy5jcHAKQEAgLTEzNCw2
ICsxMzQsMTEgQEAgUmVndWxhckV4cHJlc3Npb24gY3JlYXRlU2VhcmNoUmVnZXgoY29uc3QgU3Ry
aW5nJiBxdWVyeSwgYm9vbCBjYXNlU2Vuc2l0aXZlLCBib28KICAgICByZXR1cm4gUmVndWxhckV4
cHJlc3Npb24geyBpc1JlZ2V4ID8gcXVlcnkgOiBjcmVhdGVTZWFyY2hSZWdleFNvdXJjZShxdWVy
eSksIGNhc2VTZW5zaXRpdmUgPyBUZXh0Q2FzZVNlbnNpdGl2ZSA6IFRleHRDYXNlSW5zZW5zaXRp
dmUgfTsKIH0KIAorUmVndWxhckV4cHJlc3Npb24gY3JlYXRlTWF0Y2hSZWdleChjb25zdCBTdHJp
bmcmIHF1ZXJ5LCBib29sIGNhc2VTZW5zaXRpdmUsIGJvb2wgaXNSZWdleCkKK3sKKyAgICByZXR1
cm4gUmVndWxhckV4cHJlc3Npb24geyBpc1JlZ2V4ID8gcXVlcnkgOiBtYWtlU3RyaW5nKCdeJywg
Y3JlYXRlU2VhcmNoUmVnZXhTb3VyY2UocXVlcnkpLCAnJCcpLCBjYXNlU2Vuc2l0aXZlID8gVGV4
dENhc2VTZW5zaXRpdmUgOiBUZXh0Q2FzZUluc2Vuc2l0aXZlIH07Cit9CisKIGludCBjb3VudFJl
Z3VsYXJFeHByZXNzaW9uTWF0Y2hlcyhjb25zdCBSZWd1bGFyRXhwcmVzc2lvbiYgcmVnZXgsIGNv
bnN0IFN0cmluZyYgY29udGVudCkKIHsKICAgICBpZiAoY29udGVudC5pc0VtcHR5KCkpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0NvbnRlbnRTZWFyY2hVdGls
aXRpZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvQ29udGVudFNlYXJjaFV0
aWxpdGllcy5oCmluZGV4IGQyZWE4ZWUwZWVjLi43NzE4ZDFjMzJhNCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9Db250ZW50U2VhcmNoVXRpbGl0aWVzLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9Db250ZW50U2VhcmNoVXRpbGl0aWVz
LmgKQEAgLTQwLDYgKzQwLDcgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiBuYW1lc3BhY2UgQ29u
dGVudFNlYXJjaFV0aWxpdGllcyB7CiAKIEpTX0VYUE9SVF9QUklWQVRFIEpTQzo6WWFycjo6UmVn
dWxhckV4cHJlc3Npb24gY3JlYXRlU2VhcmNoUmVnZXgoY29uc3QgU3RyaW5nJiBxdWVyeSwgYm9v
bCBjYXNlU2Vuc2l0aXZlLCBib29sIGlzUmVnZXgpOworSlNfRVhQT1JUX1BSSVZBVEUgSlNDOjpZ
YXJyOjpSZWd1bGFyRXhwcmVzc2lvbiBjcmVhdGVNYXRjaFJlZ2V4KGNvbnN0IFN0cmluZyYgcXVl
cnksIGJvb2wgY2FzZVNlbnNpdGl2ZSwgYm9vbCBpc1JlZ2V4KTsKIEpTX0VYUE9SVF9QUklWQVRF
IGludCBjb3VudFJlZ3VsYXJFeHByZXNzaW9uTWF0Y2hlcyhjb25zdCBKU0M6OllhcnI6OlJlZ3Vs
YXJFeHByZXNzaW9uJiwgY29uc3QgU3RyaW5nJik7CiBKU19FWFBPUlRfUFJJVkFURSBSZWY8SlNP
Tjo6QXJyYXlPZjxQcm90b2NvbDo6R2VuZXJpY1R5cGVzOjpTZWFyY2hNYXRjaD4+IHNlYXJjaElu
VGV4dEJ5TGluZXMoY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBjb25z
dCBib29sIGNhc2VTZW5zaXRpdmUsIGNvbnN0IGJvb2wgaXNSZWdleCk7CiBKU19FWFBPUlRfUFJJ
VkFURSBUZXh0UG9zaXRpb24gdGV4dFBvc2l0aW9uRnJvbU9mZnNldChzaXplX3Qgb2Zmc2V0LCBj
b25zdCBWZWN0b3I8c2l6ZV90PiYgbGluZUVuZGluZ3MpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JEZWJ1Z2dl
ckFnZW50LmNwcAppbmRleCA0NDY4NzU3ZWE1Ni4uMjc0ZTE5N2M3ZjMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRlYnVnZ2VyQWdl
bnQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3Bl
Y3RvckRlYnVnZ2VyQWdlbnQuY3BwCkBAIC05MjYsNyArOTI2LDcgQEAgYm9vbCBJbnNwZWN0b3JE
ZWJ1Z2dlckFnZW50OjpzaG91bGRCbGFja2JveFVSTChjb25zdCBTdHJpbmcmIHVybCkgY29uc3QK
IHsKICAgICBpZiAoIXVybC5pc0VtcHR5KCkpIHsKICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBi
bGFja2JveENvbmZpZyA6IG1fYmxhY2tib3hlZFVSTHMpIHsKLSAgICAgICAgICAgIGF1dG8gcmVn
ZXggPSBDb250ZW50U2VhcmNoVXRpbGl0aWVzOjpjcmVhdGVTZWFyY2hSZWdleChibGFja2JveENv
bmZpZy51cmwsIGJsYWNrYm94Q29uZmlnLmNhc2VTZW5zaXRpdmUsIGJsYWNrYm94Q29uZmlnLmlz
UmVnZXgpOworICAgICAgICAgICAgYXV0byByZWdleCA9IENvbnRlbnRTZWFyY2hVdGlsaXRpZXM6
OmNyZWF0ZU1hdGNoUmVnZXgoYmxhY2tib3hDb25maWcudXJsLCBibGFja2JveENvbmZpZy5jYXNl
U2Vuc2l0aXZlLCBibGFja2JveENvbmZpZy5pc1JlZ2V4KTsKICAgICAgICAgICAgIGlmIChyZWdl
eC5tYXRjaCh1cmwpICE9IC0xKQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAg
ICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKaW5kZXggYjFmY2M2NTllMmQuLmU2NGQwNmFhOGFlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMjEgQEAKKzIwMTktMTItMDYgIERldmluIFJvdXNzbyAgPGRyb3Vzc29AYXBwbGUu
Y29tPgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IG5vbi1yZWdleCBMb2NhbCBPdmVycmlkZXMg
YW5kIFNjcmlwdCBCbGFja2JveGluZyBzaG91bGRuJ3QgYXBwbHkgdG8gc2NyaXB0cyB0aGF0IGp1
c3QgY29udGFpbiB0aGUgVVJMCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMDQ5NTQKKworICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8u
CisKKyAgICAgICAgSWYgYGlzUmVnZXhgIGlzIGZhbHNlLCBhZGQgYF5gIGFuZCBgJGAgdG8gdGhl
IGJlZ2lubmluZyBhbmQgZW5kIG9mIHRoZSBzZWFyY2ggc3RyaW5nIHRvCisgICAgICAgIGVuc3Vy
ZSB0aGF0IHRoZSBzZWFyY2ggc3RyaW5nIGlzIGV4YWN0bHkgbWF0Y2hlZCwgbm90IGp1c3QgY29u
dGFpbmVkIHdpdGhpbiB0aGUgcG90ZW50aWFsbHkKKyAgICAgICAgaW50ZXJjZXB0ZWQgVVJMLgor
CisgICAgICAgIFRoaXMgZG9lc24ndCBhY3R1YWxseSBjaGFuZ2UgZnVuY3Rpb25hbGl0eSBiZWNh
dXNlIHRoZSBXZWIgSW5zcGVjdG9yIGZyb250ZW5kIHdvdWxkbid0CisgICAgICAgIHJlcGxhY2Ug
dGhlIG5ldHdvcmsgcmVzcG9uc2UgZm9yIHRoZXNlIGNvbnRhaW5pbmcgbWF0Y2hlcywgYXMgdGhl
IGZyb250ZW5kIEphdmFTY3JpcHQKKyAgICAgICAgYWxyZWFkeSBjb3JyZWN0bHkgcGVyZm9ybWVk
IHRoaXMgbG9naWMsIGFuZCB3b3VsZCB0aGVyZWZvcmUgYE5ldHdvcmsuaW50ZXJjZXB0Q29udGlu
dWVgLgorCisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JOZXR3b3JrQWdlbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yTmV0d29ya0FnZW50OjpzaG91bGRJbnRl
cmNlcHQpOgorCiAyMDE5LTEyLTA1ICBaYWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAK
ICAgICAgICAgW0xGQ11bSUZDXSBGaXggY3NzMS9iYXNpYy9jb250YWlubWVudC5odG1sCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rvck5ldHdvcmtB
Z2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rvck5ldHdv
cmtBZ2VudC5jcHAKaW5kZXggOGVlZDQxZGFkYjYuLmIwMjcxNDA5MjE5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rvck5ldHdvcmtBZ2VudC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JOZXR3b3JrQWdl
bnQuY3BwCkBAIC04NTIsNyArODUyLDcgQEAgYm9vbCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OnNo
b3VsZEludGVyY2VwdChVUkwgdXJsKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBmb3Ig
KGF1dG8mIGludGVyY2VwdCA6IG1faW50ZXJjZXB0cykgewotICAgICAgICBhdXRvIHJlZ2V4ID0g
Q29udGVudFNlYXJjaFV0aWxpdGllczo6Y3JlYXRlU2VhcmNoUmVnZXgoaW50ZXJjZXB0LnVybCwg
aW50ZXJjZXB0LmNhc2VTZW5zaXRpdmUsIGludGVyY2VwdC5pc1JlZ2V4KTsKKyAgICAgICAgYXV0
byByZWdleCA9IENvbnRlbnRTZWFyY2hVdGlsaXRpZXM6OmNyZWF0ZU1hdGNoUmVnZXgoaW50ZXJj
ZXB0LnVybCwgaW50ZXJjZXB0LmNhc2VTZW5zaXRpdmUsIGludGVyY2VwdC5pc1JlZ2V4KTsKICAg
ICAgICAgaWYgKHJlZ2V4Lm1hdGNoKHVybFN0cmluZykgIT0gLTEpCiAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>385080</attachid>
            <date>2019-12-06 21:51:06 -0800</date>
            <delta_ts>2019-12-07 01:28:28 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-204954-20191206215105.patch</filename>
            <type>text/plain</type>
            <size>11997</size>
            <attacher name="Devin Rousso">hi</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IGI0NWFiMjI4NjdkYzNlZTU5YzA0MTI2NzY2Y2Fm
NjU1NzY1ZjcyZDYuLjhmOWZjNGJjMzMzNDIzY2FlYzNkYjlhZTAzNTRkZjJmYTlkMjI4YTkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMwIEBACisyMDE5LTEyLTA2ICBEZXZp
biBSb3Vzc28gIDxkcm91c3NvQGFwcGxlLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBu
b24tcmVnZXggTG9jYWwgT3ZlcnJpZGVzIGFuZCBTY3JpcHQgQmxhY2tib3hpbmcgc2hvdWxkbid0
IGFwcGx5IHRvIHNjcmlwdHMgdGhhdCBqdXN0IGNvbnRhaW4gdGhlIFVSTAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA0OTU0CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgorCisgICAgICAgIElmIGBpc1JlZ2V4YCBpcyBmYWxz
ZSwgYWRkIGBeYCBhbmQgYCRgIHRvIHRoZSBiZWdpbm5pbmcgYW5kIGVuZCBvZiB0aGUgc2VhcmNo
IHN0cmluZyB0bworICAgICAgICBlbnN1cmUgdGhhdCB0aGUgc2VhcmNoIHN0cmluZyBpcyBleGFj
dGx5IG1hdGNoZWQsIG5vdCBqdXN0IGNvbnRhaW5lZCB3aXRoaW4gdGhlIHBvdGVudGlhbGx5Cisg
ICAgICAgIGludGVyY2VwdGVkIFVSTC4KKworICAgICAgICBUaGlzIGRvZXNuJ3QgYWN0dWFsbHkg
Y2hhbmdlIGZ1bmN0aW9uYWxpdHkgYmVjYXVzZSB0aGUgV2ViIEluc3BlY3RvciBmcm9udGVuZCB3
b3VsZG4ndAorICAgICAgICByZXBsYWNlIHRoZSBuZXR3b3JrIHJlc3BvbnNlIGZvciB0aGVzZSBj
b250YWluaW5nIG1hdGNoZXMsIGFzIHRoZSBmcm9udGVuZCBKYXZhU2NyaXB0CisgICAgICAgIGFs
cmVhZHkgY29ycmVjdGx5IHBlcmZvcm1lZCB0aGlzIGxvZ2ljLCBhbmQgd291bGQgdGhlcmVmb3Jl
IGBOZXR3b3JrLmludGVyY2VwdENvbnRpbnVlYC4KKworICAgICAgICAqIGluc3BlY3Rvci9Db250
ZW50U2VhcmNoVXRpbGl0aWVzLmg6CisgICAgICAgICogaW5zcGVjdG9yL0NvbnRlbnRTZWFyY2hV
dGlsaXRpZXMuY3BwOgorICAgICAgICAoSW5zcGVjdG9yOjpDb250ZW50U2VhcmNoVXRpbGl0aWVz
Ojplc2NhcGVTdHJpbmdGb3JSZWd1bGFyRXhwcmVzc2lvblNvdXJjZSk6IEFkZGVkLgorICAgICAg
ICAoSW5zcGVjdG9yOjpDb250ZW50U2VhcmNoVXRpbGl0aWVzOjpjcmVhdGVSZWd1bGFyRXhwcmVz
c2lvbkZvclNlYXJjaFN0cmluZyk6IEFkZGVkLgorICAgICAgICAoSW5zcGVjdG9yOjpDb250ZW50
U2VhcmNoVXRpbGl0aWVzOjpzZWFyY2hJblRleHRCeUxpbmVzKToKKyAgICAgICAgKEluc3BlY3Rv
cjo6Q29udGVudFNlYXJjaFV0aWxpdGllczo6Y3JlYXRlU2VhcmNoUmVnZXhTb3VyY2UpOiBEZWxl
dGVkLgorICAgICAgICAoSW5zcGVjdG9yOjpDb250ZW50U2VhcmNoVXRpbGl0aWVzOjpjcmVhdGVT
ZWFyY2hSZWdleCk6IERlbGV0ZWQuCisgICAgICAgIFJlbmFtZSBmdW5jdGlvbnMgZm9yIGNsYXJp
dHkuCisKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQu
Y3BwOgorICAgICAgICAoSW5zcGVjdG9yOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzaG91bGRC
bGFja2JveFVSTCBjb25zdCk6CisKIDIwMTktMTItMDYgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtp
QGFwcGxlLmNvbT4KIAogICAgICAgICBbSlNDXSBQdXQgTW9kdWxlUmVjb3JkcyBpbiBJc29TdWJz
cGFjZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCmluZGV4IDJhMmIxZDc5Nzg3ZTJkNTAzYjY0MDRlNjhhOWRhOWIyNDk5OTUy
MWUuLmI5YWQ3MTIzZmNmNzkwOWI2ZTk5YjlkZjg0MTFjMWM5ZmZhMGJlYTIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwyNyBAQAorMjAxOS0xMi0wNiAgRGV2aW4gUm91c3NvICA8ZHJvdXNzb0BhcHBs
ZS5jb20+CisKKyAgICAgICAgV2ViIEluc3BlY3Rvcjogbm9uLXJlZ2V4IExvY2FsIE92ZXJyaWRl
cyBhbmQgU2NyaXB0IEJsYWNrYm94aW5nIHNob3VsZG4ndCBhcHBseSB0byBzY3JpcHRzIHRoYXQg
anVzdCBjb250YWluIHRoZSBVUkwKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIwNDk1NAorCisgICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFy
by4KKworICAgICAgICBJZiBgaXNSZWdleGAgaXMgZmFsc2UsIGFkZCBgXmAgYW5kIGAkYCB0byB0
aGUgYmVnaW5uaW5nIGFuZCBlbmQgb2YgdGhlIHNlYXJjaCBzdHJpbmcgdG8KKyAgICAgICAgZW5z
dXJlIHRoYXQgdGhlIHNlYXJjaCBzdHJpbmcgaXMgZXhhY3RseSBtYXRjaGVkLCBub3QganVzdCBj
b250YWluZWQgd2l0aGluIHRoZSBwb3RlbnRpYWxseQorICAgICAgICBpbnRlcmNlcHRlZCBVUkwu
CisKKyAgICAgICAgVGhpcyBkb2Vzbid0IGFjdHVhbGx5IGNoYW5nZSBmdW5jdGlvbmFsaXR5IGJl
Y2F1c2UgdGhlIFdlYiBJbnNwZWN0b3IgZnJvbnRlbmQgd291bGRuJ3QKKyAgICAgICAgcmVwbGFj
ZSB0aGUgbmV0d29yayByZXNwb25zZSBmb3IgdGhlc2UgY29udGFpbmluZyBtYXRjaGVzLCBhcyB0
aGUgZnJvbnRlbmQgSmF2YVNjcmlwdAorICAgICAgICBhbHJlYWR5IGNvcnJlY3RseSBwZXJmb3Jt
ZWQgdGhpcyBsb2dpYywgYW5kIHdvdWxkIHRoZXJlZm9yZSBgTmV0d29yay5pbnRlcmNlcHRDb250
aW51ZWAuCisKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rvck5ldHdvcmtBZ2Vu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OnNob3VsZElu
dGVyY2VwdCk6CisKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ6OmJyZWFr
T25VUkxJZk5lZWRlZCk6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JQYWdl
QWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUGFnZUFnZW50OjpzZWFyY2hJ
blJlc291cmNlcyk6CisgICAgICAgIFVzZSByZW5hbWVkIGBDb250ZW50U2VhcmNoVXRpbGl0aWVz
YCBmdW5jdGlvbi4KKwogMjAxOS0xMi0wNiAgWmFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29t
PgogCiAgICAgICAgIFtMRkNdW0lGQ10gUmVuYW1lIENvbnRlbnRCcmVhayB0byBDb250ZW50V3Jh
cHBpbmdSdWxlIGFuZCBDb250ZW50QnJlYWs6OndyYXAgdG8gQ29udGVudFdyYXBwaW5nUnVsZTo6
cHVzaApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9Db250ZW50
U2VhcmNoVXRpbGl0aWVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvQ29u
dGVudFNlYXJjaFV0aWxpdGllcy5jcHAKaW5kZXggZjc5MTQwNjk5MWY0NDA1ZGMyOTFlNjE0Y2U5
YWM4OTBhMjNkZjA1YS4uMTI1MTA0MzhiMmZjOWI0Njg2YTZjNTg3YzVhODZkNGU4M2EzOTE0NSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9Db250ZW50U2VhcmNo
VXRpbGl0aWVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0NvbnRl
bnRTZWFyY2hVdGlsaXRpZXMuY3BwCkBAIC00NSw3ICs0NSw3IEBAIG5hbWVzcGFjZSBDb250ZW50
U2VhcmNoVXRpbGl0aWVzIHsKIAogc3RhdGljIGNvbnN0IGNoYXIgcmVnZXhTcGVjaWFsQ2hhcmFj
dGVyc1tdID0gIltdKCl7fSstKi4sP1xcXiR8IjsKIAotc3RhdGljIFN0cmluZyBjcmVhdGVTZWFy
Y2hSZWdleFNvdXJjZShjb25zdCBTdHJpbmcmIHRleHQpCitzdGF0aWMgU3RyaW5nIGVzY2FwZVN0
cmluZ0ZvclJlZ3VsYXJFeHByZXNzaW9uU291cmNlKGNvbnN0IFN0cmluZyYgdGV4dCkKIHsKICAg
ICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKIApAQCAtMTI5LDkgKzEyOSwyMSBAQCBzdGF0aWMgUmVm
PFByb3RvY29sOjpHZW5lcmljVHlwZXM6OlNlYXJjaE1hdGNoPiBidWlsZE9iamVjdEZvclNlYXJj
aE1hdGNoKHNpemVfdAogICAgICAgICAucmVsZWFzZSgpOwogfQogCi1SZWd1bGFyRXhwcmVzc2lv
biBjcmVhdGVTZWFyY2hSZWdleChjb25zdCBTdHJpbmcmIHF1ZXJ5LCBib29sIGNhc2VTZW5zaXRp
dmUsIGJvb2wgaXNSZWdleCkKK1JlZ3VsYXJFeHByZXNzaW9uIGNyZWF0ZVJlZ3VsYXJFeHByZXNz
aW9uRm9yU2VhcmNoU3RyaW5nKGNvbnN0IFN0cmluZyYgc2VhcmNoU3RyaW5nLCBib29sIGNhc2VT
ZW5zaXRpdmUsIFNlYXJjaFN0cmluZ1R5cGUgdHlwZSkKIHsKLSAgICByZXR1cm4gUmVndWxhckV4
cHJlc3Npb24geyBpc1JlZ2V4ID8gcXVlcnkgOiBjcmVhdGVTZWFyY2hSZWdleFNvdXJjZShxdWVy
eSksIGNhc2VTZW5zaXRpdmUgPyBUZXh0Q2FzZVNlbnNpdGl2ZSA6IFRleHRDYXNlSW5zZW5zaXRp
dmUgfTsKKyAgICBTdHJpbmcgcGF0dGVybjsKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNl
IFNlYXJjaFN0cmluZ1R5cGU6OlJlZ2V4OgorICAgICAgICBwYXR0ZXJuID0gc2VhcmNoU3RyaW5n
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFNlYXJjaFN0cmluZ1R5cGU6OkV4YWN0U3RyaW5n
OgorICAgICAgICBwYXR0ZXJuID0gbWFrZVN0cmluZygnXicsIGVzY2FwZVN0cmluZ0ZvclJlZ3Vs
YXJFeHByZXNzaW9uU291cmNlKHNlYXJjaFN0cmluZyksICckJyk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgU2VhcmNoU3RyaW5nVHlwZTo6Q29udGFpbnNTdHJpbmc6CisgICAgICAgIHBhdHRl
cm4gPSBlc2NhcGVTdHJpbmdGb3JSZWd1bGFyRXhwcmVzc2lvblNvdXJjZShzZWFyY2hTdHJpbmcp
OworICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIFJlZ3VsYXJFeHByZXNzaW9uKHBh
dHRlcm4sIGNhc2VTZW5zaXRpdmUgPyBUZXh0Q2FzZVNlbnNpdGl2ZSA6IFRleHRDYXNlSW5zZW5z
aXRpdmUpOwogfQogCiBpbnQgY291bnRSZWd1bGFyRXhwcmVzc2lvbk1hdGNoZXMoY29uc3QgUmVn
dWxhckV4cHJlc3Npb24mIHJlZ2V4LCBjb25zdCBTdHJpbmcmIGNvbnRlbnQpCkBAIC0xNTYsNyAr
MTY4LDggQEAgaW50IGNvdW50UmVndWxhckV4cHJlc3Npb25NYXRjaGVzKGNvbnN0IFJlZ3VsYXJF
eHByZXNzaW9uJiByZWdleCwgY29uc3QgU3RyaW5nJgogUmVmPEpTT046OkFycmF5T2Y8UHJvdG9j
b2w6OkdlbmVyaWNUeXBlczo6U2VhcmNoTWF0Y2g+PiBzZWFyY2hJblRleHRCeUxpbmVzKGNvbnN0
IFN0cmluZyYgdGV4dCwgY29uc3QgU3RyaW5nJiBxdWVyeSwgY29uc3QgYm9vbCBjYXNlU2Vuc2l0
aXZlLCBjb25zdCBib29sIGlzUmVnZXgpCiB7CiAgICAgYXV0byByZXN1bHQgPSBKU09OOjpBcnJh
eU9mPFByb3RvY29sOjpHZW5lcmljVHlwZXM6OlNlYXJjaE1hdGNoPjo6Y3JlYXRlKCk7Ci0gICAg
YXV0byByZWdleCA9IENvbnRlbnRTZWFyY2hVdGlsaXRpZXM6OmNyZWF0ZVNlYXJjaFJlZ2V4KHF1
ZXJ5LCBjYXNlU2Vuc2l0aXZlLCBpc1JlZ2V4KTsKKyAgICBhdXRvIHNlYXJjaFN0cmluZ1R5cGUg
PSBpc1JlZ2V4ID8gQ29udGVudFNlYXJjaFV0aWxpdGllczo6U2VhcmNoU3RyaW5nVHlwZTo6UmVn
ZXggOiBDb250ZW50U2VhcmNoVXRpbGl0aWVzOjpTZWFyY2hTdHJpbmdUeXBlOjpDb250YWluc1N0
cmluZzsKKyAgICBhdXRvIHJlZ2V4ID0gQ29udGVudFNlYXJjaFV0aWxpdGllczo6Y3JlYXRlUmVn
dWxhckV4cHJlc3Npb25Gb3JTZWFyY2hTdHJpbmcocXVlcnksIGNhc2VTZW5zaXRpdmUsIHNlYXJj
aFN0cmluZ1R5cGUpOwogICAgIGZvciAoY29uc3QgYXV0byYgbWF0Y2ggOiBnZXRSZWd1bGFyRXhw
cmVzc2lvbk1hdGNoZXNCeUxpbmVzKHJlZ2V4LCB0ZXh0KSkKICAgICAgICAgcmVzdWx0LT5hZGRJ
dGVtKGJ1aWxkT2JqZWN0Rm9yU2VhcmNoTWF0Y2gobWF0Y2guZmlyc3QsIG1hdGNoLnNlY29uZCkp
OwogICAgIHJldHVybiByZXN1bHQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL0NvbnRlbnRTZWFyY2hVdGlsaXRpZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvQ29udGVudFNlYXJjaFV0aWxpdGllcy5oCmluZGV4IGQyZWE4ZWUwZWVjZjU3
MjNiMzQ2NDBlYTlkMmFmM2E3YmExMmI2YTEuLjdlN2EwY2E0M2YzOTVjN2VlYTU5MDAyMTEzODhh
NWNlYmQ3ZDgxYjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
Q29udGVudFNlYXJjaFV0aWxpdGllcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3IvQ29udGVudFNlYXJjaFV0aWxpdGllcy5oCkBAIC0zOSw3ICszOSw5IEBAIG5hbWVzcGFj
ZSBJbnNwZWN0b3IgewogCiBuYW1lc3BhY2UgQ29udGVudFNlYXJjaFV0aWxpdGllcyB7CiAKLUpT
X0VYUE9SVF9QUklWQVRFIEpTQzo6WWFycjo6UmVndWxhckV4cHJlc3Npb24gY3JlYXRlU2VhcmNo
UmVnZXgoY29uc3QgU3RyaW5nJiBxdWVyeSwgYm9vbCBjYXNlU2Vuc2l0aXZlLCBib29sIGlzUmVn
ZXgpOworZW51bSBjbGFzcyBTZWFyY2hTdHJpbmdUeXBlIHsgUmVnZXgsIEV4YWN0U3RyaW5nLCBD
b250YWluc1N0cmluZyB9OworSlNfRVhQT1JUX1BSSVZBVEUgSlNDOjpZYXJyOjpSZWd1bGFyRXhw
cmVzc2lvbiBjcmVhdGVSZWd1bGFyRXhwcmVzc2lvbkZvclNlYXJjaFN0cmluZyhjb25zdCBTdHJp
bmcmIHNlYXJjaFN0cmluZywgYm9vbCBjYXNlU2Vuc2l0aXZlLCBTZWFyY2hTdHJpbmdUeXBlKTsK
KwogSlNfRVhQT1JUX1BSSVZBVEUgaW50IGNvdW50UmVndWxhckV4cHJlc3Npb25NYXRjaGVzKGNv
bnN0IEpTQzo6WWFycjo6UmVndWxhckV4cHJlc3Npb24mLCBjb25zdCBTdHJpbmcmKTsKIEpTX0VY
UE9SVF9QUklWQVRFIFJlZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpHZW5lcmljVHlwZXM6OlNl
YXJjaE1hdGNoPj4gc2VhcmNoSW5UZXh0QnlMaW5lcyhjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0
IFN0cmluZyYgcXVlcnksIGNvbnN0IGJvb2wgY2FzZVNlbnNpdGl2ZSwgY29uc3QgYm9vbCBpc1Jl
Z2V4KTsKIEpTX0VYUE9SVF9QUklWQVRFIFRleHRQb3NpdGlvbiB0ZXh0UG9zaXRpb25Gcm9tT2Zm
c2V0KHNpemVfdCBvZmZzZXQsIGNvbnN0IFZlY3RvcjxzaXplX3Q+JiBsaW5lRW5kaW5ncyk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0
b3JEZWJ1Z2dlckFnZW50LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdl
bnRzL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwCmluZGV4IDQ0Njg3NTdlYTU2MTY4MTM3NzZj
MTI0NGE5YjZjNDkyYzVjOWY0YmEuLjQ1Y2VlODZiMDA3MzliOTc3NmNkMzgzMDQ1ZWNiNzYwNDYy
MDhjYTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRz
L0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwCkBAIC05MjYsNyArOTI2
LDggQEAgYm9vbCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzaG91bGRCbGFja2JveFVSTChjb25z
dCBTdHJpbmcmIHVybCkgY29uc3QKIHsKICAgICBpZiAoIXVybC5pc0VtcHR5KCkpIHsKICAgICAg
ICAgZm9yIChjb25zdCBhdXRvJiBibGFja2JveENvbmZpZyA6IG1fYmxhY2tib3hlZFVSTHMpIHsK
LSAgICAgICAgICAgIGF1dG8gcmVnZXggPSBDb250ZW50U2VhcmNoVXRpbGl0aWVzOjpjcmVhdGVT
ZWFyY2hSZWdleChibGFja2JveENvbmZpZy51cmwsIGJsYWNrYm94Q29uZmlnLmNhc2VTZW5zaXRp
dmUsIGJsYWNrYm94Q29uZmlnLmlzUmVnZXgpOworICAgICAgICAgICAgYXV0byBzZWFyY2hTdHJp
bmdUeXBlID0gYmxhY2tib3hDb25maWcuaXNSZWdleCA/IENvbnRlbnRTZWFyY2hVdGlsaXRpZXM6
OlNlYXJjaFN0cmluZ1R5cGU6OlJlZ2V4IDogQ29udGVudFNlYXJjaFV0aWxpdGllczo6U2VhcmNo
U3RyaW5nVHlwZTo6RXhhY3RTdHJpbmc7CisgICAgICAgICAgICBhdXRvIHJlZ2V4ID0gQ29udGVu
dFNlYXJjaFV0aWxpdGllczo6Y3JlYXRlUmVndWxhckV4cHJlc3Npb25Gb3JTZWFyY2hTdHJpbmco
YmxhY2tib3hDb25maWcudXJsLCBibGFja2JveENvbmZpZy5jYXNlU2Vuc2l0aXZlLCBzZWFyY2hT
dHJpbmdUeXBlKTsKICAgICAgICAgICAgIGlmIChyZWdleC5tYXRjaCh1cmwpICE9IC0xKQogICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQuY3BwIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50
LmNwcAppbmRleCBjNmRjMjE5ZjMzMGQ1NjVmODQ3YmY2NTQ5OWE3ZWUxODE3N2Q1NWU2Li40ZmYw
MDQwZjVhNGM0NWNjM2JiY2JkOWVlYjcwMTBmYzBhN2JhYThhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NRGVidWdnZXJB
Z2VudC5jcHAKQEAgLTI5OCwxMCArMjk4LDEwIEBAIHZvaWQgSW5zcGVjdG9yRE9NRGVidWdnZXJB
Z2VudDo6YnJlYWtPblVSTElmTmVlZGVkKGNvbnN0IFN0cmluZyYgdXJsLCBVUkxCcmVha3BvCiAg
ICAgaWYgKG1fcGF1c2VPbkFsbFVSTHNFbmFibGVkKQogICAgICAgICBicmVha3BvaW50VVJMID0g
ZW1wdHlTdHJpbmcoKTsKICAgICBlbHNlIHsKLSAgICAgICAgZm9yIChhdXRvJiBlbnRyeSA6IG1f
dXJsQnJlYWtwb2ludHMpIHsKLSAgICAgICAgICAgIGNvbnN0IGF1dG8mIHF1ZXJ5ID0gZW50cnku
a2V5OwotICAgICAgICAgICAgYm9vbCBpc1JlZ2V4ID0gZW50cnkudmFsdWUgPT0gVVJMQnJlYWtw
b2ludFR5cGU6OlJlZ3VsYXJFeHByZXNzaW9uOwotICAgICAgICAgICAgYXV0byByZWdleCA9IENv
bnRlbnRTZWFyY2hVdGlsaXRpZXM6OmNyZWF0ZVNlYXJjaFJlZ2V4KHF1ZXJ5LCBmYWxzZSwgaXNS
ZWdleCk7CisgICAgICAgIGZvciAoYXV0byYgW3F1ZXJ5LCB0eXBlXSA6IG1fdXJsQnJlYWtwb2lu
dHMpIHsKKyAgICAgICAgICAgIGJvb2wgaXNSZWdleCA9IHR5cGUgPT0gVVJMQnJlYWtwb2ludFR5
cGU6OlJlZ3VsYXJFeHByZXNzaW9uOworICAgICAgICAgICAgYXV0byBzZWFyY2hTdHJpbmdUeXBl
ID0gaXNSZWdleCA/IENvbnRlbnRTZWFyY2hVdGlsaXRpZXM6OlNlYXJjaFN0cmluZ1R5cGU6OlJl
Z2V4IDogQ29udGVudFNlYXJjaFV0aWxpdGllczo6U2VhcmNoU3RyaW5nVHlwZTo6Q29udGFpbnNT
dHJpbmc7CisgICAgICAgICAgICBhdXRvIHJlZ2V4ID0gQ29udGVudFNlYXJjaFV0aWxpdGllczo6
Y3JlYXRlUmVndWxhckV4cHJlc3Npb25Gb3JTZWFyY2hTdHJpbmcocXVlcnksIGZhbHNlLCBzZWFy
Y2hTdHJpbmdUeXBlKTsKICAgICAgICAgICAgIGlmIChyZWdleC5tYXRjaCh1cmwpICE9IC0xKSB7
CiAgICAgICAgICAgICAgICAgYnJlYWtwb2ludFVSTCA9IHF1ZXJ5OwogICAgICAgICAgICAgICAg
IGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNw
ZWN0b3JOZXR3b3JrQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9J
bnNwZWN0b3JOZXR3b3JrQWdlbnQuY3BwCmluZGV4IDhlZWQ0MWRhZGI2OTEzYTIzODM2ZGVmYjA2
MDc1MjRlYjBjNzczM2IuLmNhOGYxNjlkMThhNjk3YTRkZWE0MDVjOTMzMzk4ZTY3ZmVlZjAxYzYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yTmV0
d29ya0FnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3Bl
Y3Rvck5ldHdvcmtBZ2VudC5jcHAKQEAgLTg1Miw3ICs4NTIsOCBAQCBib29sIEluc3BlY3Rvck5l
dHdvcmtBZ2VudDo6c2hvdWxkSW50ZXJjZXB0KFVSTCB1cmwpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAogICAgIGZvciAoYXV0byYgaW50ZXJjZXB0IDogbV9pbnRlcmNlcHRzKSB7Ci0gICAgICAg
IGF1dG8gcmVnZXggPSBDb250ZW50U2VhcmNoVXRpbGl0aWVzOjpjcmVhdGVTZWFyY2hSZWdleChp
bnRlcmNlcHQudXJsLCBpbnRlcmNlcHQuY2FzZVNlbnNpdGl2ZSwgaW50ZXJjZXB0LmlzUmVnZXgp
OworICAgICAgICBhdXRvIHNlYXJjaFN0cmluZ1R5cGUgPSBpbnRlcmNlcHQuaXNSZWdleCA/IENv
bnRlbnRTZWFyY2hVdGlsaXRpZXM6OlNlYXJjaFN0cmluZ1R5cGU6OlJlZ2V4IDogQ29udGVudFNl
YXJjaFV0aWxpdGllczo6U2VhcmNoU3RyaW5nVHlwZTo6RXhhY3RTdHJpbmc7CisgICAgICAgIGF1
dG8gcmVnZXggPSBDb250ZW50U2VhcmNoVXRpbGl0aWVzOjpjcmVhdGVSZWd1bGFyRXhwcmVzc2lv
bkZvclNlYXJjaFN0cmluZyhpbnRlcmNlcHQudXJsLCBpbnRlcmNlcHQuY2FzZVNlbnNpdGl2ZSwg
c2VhcmNoU3RyaW5nVHlwZSk7CiAgICAgICAgIGlmIChyZWdleC5tYXRjaCh1cmxTdHJpbmcpICE9
IC0xKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCmluZGV4IGYy
ZTIyOGI3Zjc0NDJkODQzZjhiNmZlY2U3MDRjYzQwMDM0Y2JiMDIuLjAxZWRkMDA2MGRlMzYyYzFh
YjdiNzAyNDc1YWU4MzgyMjI3OWE4MDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvSW5zcGVjdG9yUGFnZUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAKQEAgLTY0NCw5ICs2NDQsMTEg
QEAgdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNlYXJjaEluUmVzb3VyY2VzKEVycm9yU3RyaW5n
JiwgY29uc3QgU3RyaW5nJiB0ZXh0LCBjb24KIHsKICAgICByZXN1bHQgPSBKU09OOjpBcnJheU9m
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OlNlYXJjaFJlc3VsdD46OmNyZWF0ZSgpOwogCi0g
ICAgYm9vbCBpc1JlZ2V4ID0gb3B0aW9uYWxJc1JlZ2V4ID8gKm9wdGlvbmFsSXNSZWdleCA6IGZh
bHNlOwogICAgIGJvb2wgY2FzZVNlbnNpdGl2ZSA9IG9wdGlvbmFsQ2FzZVNlbnNpdGl2ZSA/ICpv
cHRpb25hbENhc2VTZW5zaXRpdmUgOiBmYWxzZTsKLSAgICBKU0M6OllhcnI6OlJlZ3VsYXJFeHBy
ZXNzaW9uIHJlZ2V4ID0gQ29udGVudFNlYXJjaFV0aWxpdGllczo6Y3JlYXRlU2VhcmNoUmVnZXgo
dGV4dCwgY2FzZVNlbnNpdGl2ZSwgaXNSZWdleCk7CisgICAgYm9vbCBpc1JlZ2V4ID0gb3B0aW9u
YWxJc1JlZ2V4ID8gKm9wdGlvbmFsSXNSZWdleCA6IGZhbHNlOworCisgICAgYXV0byBzZWFyY2hT
dHJpbmdUeXBlID0gaXNSZWdleCA/IENvbnRlbnRTZWFyY2hVdGlsaXRpZXM6OlNlYXJjaFN0cmlu
Z1R5cGU6OlJlZ2V4IDogQ29udGVudFNlYXJjaFV0aWxpdGllczo6U2VhcmNoU3RyaW5nVHlwZTo6
Q29udGFpbnNTdHJpbmc7CisgICAgYXV0byByZWdleCA9IENvbnRlbnRTZWFyY2hVdGlsaXRpZXM6
OmNyZWF0ZVJlZ3VsYXJFeHByZXNzaW9uRm9yU2VhcmNoU3RyaW5nKHRleHQsIGNhc2VTZW5zaXRp
dmUsIHNlYXJjaFN0cmluZ1R5cGUpOwogCiAgICAgZm9yIChGcmFtZSogZnJhbWUgPSAmbV9pbnNw
ZWN0ZWRQYWdlLm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZl
cnNlTmV4dCgpKSB7CiAgICAgICAgIGZvciAoYXV0byogY2FjaGVkUmVzb3VyY2UgOiBjYWNoZWRS
ZXNvdXJjZXNGb3JGcmFtZShmcmFtZSkpIHsK
</data>

          </attachment>
      

    </bug>

</bugzilla>