<?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>223380</bug_id>
          
          <creation_ts>2021-03-17 08:40:50 -0700</creation_ts>
          <short_desc>Regression(r273542) Degraded ScriptProcessorNode performance/quality for (14.0.3+ and iOS 14.4.1+)</short_desc>
          <delta_ts>2021-04-07 10:48:16 -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>Web Audio</component>
          <version>Safari 14</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.chromium.org/p/chromium/issues/detail?id=1187016</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=224279</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Critical</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jack Schaedler">jwschaedler</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>cdumez</cc>
    
    <cc>darin</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>eyal</cc>
    
    <cc>ggaren</cc>
    
    <cc>glenn</cc>
    
    <cc>jer.noble</cc>
    
    <cc>philipj</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1740712</commentid>
    <comment_count>0</comment_count>
    <who name="Jack Schaedler">jwschaedler</who>
    <bug_when>2021-03-17 08:40:50 -0700</bug_when>
    <thetext>After updating to Safari 14.0.3 or iOS 14.4.1, the audio quality on pages that use ScriptProcessorNode has degraded quite dramatically. This can be observed by visiting a page like  https://learningsynths.ableton.com/playground.

To reproduce: Grab one of the sliders and slowly drag it back and forth.

Prior to 14.0.3 and iOS14.4.1, the audio playback on this site was very smooth, even for devices like an iPhone 5s. After updating, desktop Safari (MacBook Pro 2015) crackles and pops intermittently (~every 1-3 seconds). The situation is a bit worse for iOS devices, where the audio is almost constantly glitchy on a 2020 iPhone SE.

An interesting finding:
Increasing the ScriptProcessorNode&apos;s buffer size does not mitigate the problem. Rather, at certain buffer sizes the glitching becomes very repetitive and almost periodic, leading one to believe that the issue is likely not due to the DSP failing to complete processing on time, but may have to do with the implementation of ScriptProcessorNode.

The site works well/smoothly on other browsers which support AudioWorklet: Firefox, Chrome, and Safari Tech Preview. Viewing the site in 14.0.3 or iOS 14.4.1 will trigger a fallback to ScriptProcessorNode since AudioWorklet is not yet supported there, and this will lead to the issues described above.

If the fallback to ScriptProcessorNode is forced on Chrome, similar glitching occurs with the latest stable version.

When considering mitigation strategies, it would be helpful to know if there&apos;s a timeframe for the release of AudioWorklet in stable builds of Safari. However, I do understand that this sort of information is usually not disclosed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1740713</commentid>
    <comment_count>1</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-03-17 08:42:57 -0700</bug_when>
    <thetext>Potential regression from http://trac.webkit.org/r273542.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1740753</commentid>
    <comment_count>2</comment_count>
      <attachid>423499</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-03-17 09:58:41 -0700</bug_when>
    <thetext>Created attachment 423499
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1740754</commentid>
    <comment_count>3</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-03-17 10:00:09 -0700</bug_when>
    <thetext>&lt;rdar://problem/75530910&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1740773</commentid>
    <comment_count>4</comment_count>
      <attachid>423499</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2021-03-17 10:34:56 -0700</bug_when>
    <thetext>Comment on attachment 423499
Patch

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

r=me

&gt; Source/WebCore/Modules/webaudio/ScriptProcessorNode.cpp:162
&gt;      // Get input and output buffers. We double-buffer both the input and output sides.
&gt;      unsigned doubleBufferIndex = this-&gt;doubleBufferIndex();
&gt;      bool isDoubleBufferIndexGood = doubleBufferIndex &lt; 2 &amp;&amp; doubleBufferIndex &lt; m_inputBuffers.size() &amp;&amp; doubleBufferIndex &lt; m_outputBuffers.size();
&gt;      ASSERT(isDoubleBufferIndexGood);
&gt;      if (!isDoubleBufferIndexGood)
&gt;          return;

This code made it hard for me to understand that doubleBufferIndex is always 0 or 1, and is a simple buffer swapper. It made me think that there are some conditions under which we choose to set doubleBufferIndex to some other value, and those conditions are just not reachable at this point of this function. Which is not true. Since we already have a helper function for doubleBufferIndex(), if we really want to do validation, let&apos;s do it in doubleBufferIndex(). For example, we can change doubleBufferIndex() to return std::min(m_doubleBufferIndex, 1). Or we can just remove this nonsense because it is nonsense.

&gt; Source/WebCore/Modules/webaudio/ScriptProcessorNode.cpp:225
&gt;              callOnMainThread([this, doubleBufferIndex = m_doubleBufferIndex, protector = makeRef(*this)] {
&gt; -                auto locker = holdLock(m_processLock);
&gt; +                auto locker = holdLock(m_bufferLocks[doubleBufferIndex]);
&gt;                  fireProcessEvent(doubleBufferIndex);

It&apos;s not ideal to re-read m_doubleBufferIndex here (and a few lines above). Better to capture the local variable doubleBufferIndex instead. They&apos;ll always be the same in practice - but capturing the local helps to clarify that we&apos;re definitely holding the same lock. (Also kinda funny that we do all that nonsense validation of doubleBufferIndex above and then ignore it here!)

&gt; Source/WebCore/Modules/webaudio/ScriptProcessorNode.h:93
&gt;      Vector&lt;RefPtr&lt;AudioBuffer&gt;&gt; m_inputBuffers;
&gt;      Vector&lt;RefPtr&lt;AudioBuffer&gt;&gt; m_outputBuffers;

Let&apos;s change these Vectors to optional&lt;std::array&lt;2&gt;&gt;, to clarify their relationship to the 2 locks and their use in double buffering.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1740784</commentid>
    <comment_count>5</comment_count>
      <attachid>423503</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-03-17 10:54:48 -0700</bug_when>
    <thetext>Created attachment 423503
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1740788</commentid>
    <comment_count>6</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-03-17 11:08:09 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #5)
&gt; Created attachment 423503 [details]
&gt; Patch

Requesting review again due to substantial changes based on Geoff&apos;s feedback.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1740823</commentid>
    <comment_count>7</comment_count>
      <attachid>423503</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2021-03-17 11:46:43 -0700</bug_when>
    <thetext>Comment on attachment 423503
Patch

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

r=me

I really like this.

&gt; Source/WebCore/Modules/webaudio/ScriptProcessorNode.cpp:132
&gt; +    for (unsigned i = 0; i &lt; bufferCount; ++i) {
&gt; +        auto locker = holdLock(m_bufferLocks[i]);
&gt; +        m_inputBuffers[i] = nullptr;
&gt; +        m_outputBuffers[i] = nullptr;
&gt; +    }

Nice!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1740827</commentid>
    <comment_count>8</comment_count>
      <attachid>423503</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-03-17 11:54:51 -0700</bug_when>
    <thetext>Comment on attachment 423503
Patch

Clearing flags on attachment: 423503

Committed r274573 (235418@main): &lt;https://commits.webkit.org/235418@main&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1740828</commentid>
    <comment_count>9</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-03-17 11:54:54 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1742243</commentid>
    <comment_count>10</comment_count>
    <who name="Eyal Cohen">eyal</who>
    <bug_when>2021-03-22 08:43:43 -0700</bug_when>
    <thetext>This is a critical issue for us, our web application makes extensive use of ScriptProcessorNode. 

Do you have an ETA for this fix?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1747966</commentid>
    <comment_count>11</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-04-07 10:48:16 -0700</bug_when>
    <thetext>(In reply to Eyal Cohen from comment #10)
&gt; This is a critical issue for us, our web application makes extensive use of
&gt; ScriptProcessorNode. 
&gt; 
&gt; Do you have an ETA for this fix?

I am not 100% sure but I think this script processor node fix is indeed in iOS 14.5 beta 7.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>423499</attachid>
            <date>2021-03-17 09:58:41 -0700</date>
            <delta_ts>2021-03-17 10:54:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-223380-20210317095840.patch</filename>
            <type>text/plain</type>
            <size>5125</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc0NTU4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGI2MzViMTMzMjMwNzZh
NzY2NWU3NTkwYjViMTg3OGJkODQzNWY4ZS4uNTVkNzZiN2M4Y2JjMWUwZDljZjBhN2RlYmU1NmIw
YTIxZDJkYzhmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI1IEBACisyMDIxLTAzLTE3ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgRGVncmFkZWQgU2NyaXB0UHJv
Y2Vzc29yTm9kZSBwZXJmb3JtYW5jZS9xdWFsaXR5IGZvciAoMTQuMC4zKyBhbmQgaU9TIDE0LjQu
MSspCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjMz
ODAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBCeSBl
eHRlbmRpbmcgdGhlIHNjb3BlIG9mIHRoZSBsb2NrIGluIFNjcmlwdFByb2Nlc3Nvck5vZGU6OnBy
b2Nlc3MoKSwgcjI3MzU0MiBlc3NlbnRpYWxseQorICAgICAgICBkaXNhYmxlZCBkb3VibGUtYnVm
ZmVyaW5nIGFuZCB0aHVzIG5lZ2F0aXZlbHkgaW1wYWN0ZWQgcmVuZGVyaW5nIHF1YWxpdHkuCisK
KyAgICAgICAgVG8gYWRkcmVzcyB0aGUgaXNzdWUsIHdlIG5vdyBoYXZlIDIgbG9ja3MsIG9uZSBw
ZXIgcmVuZGVyaW5nIGJ1ZmZlciAoc2luY2Ugd2UncmUgdXNpbmcKKyAgICAgICAgZG91YmxlIGJ1
ZmZlcmluZykgYW5kIG9ubHkgZ3JhYiB0aGUgbG9jayB3ZSByZXF1aXJlIHdoZW4gaW50ZXJhY3Rp
bmcgd2l0aCB0aGUgYnVmZmVycworICAgICAgICBmb3IgdGhpcyBpbmRleC4gVGhpcyBtYWludGFp
bnMgdGhyZWFkLXNhZmV0eSB3aGlsZSByZS1lbmFibGluZyBkb3VibGUgYnVmZmVyaW5nLgorCisg
ICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9TY3JpcHRQcm9jZXNzb3JOb2RlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcmlwdFByb2Nlc3Nvck5vZGU6OmNyZWF0ZUlucHV0QnVmZmVyRm9ySlMg
Y29uc3QpOgorICAgICAgICBBdm9pZCBkdXBsaWNhdGUgY2FsbCB0byB0b3BvbG9neU1hdGNoZXMo
KSBzaW5jZSBjb3B5VG8oKSBhbHJlYWR5IGNhbGxzIGl0IGludGVybmFsbHkKKyAgICAgICAgYW5k
IHJldHVybnMgZmFsc2Ugd2hlbiAhdG9wb2xvZ3lNYXRjaGVzKCkuCisKKyAgICAgICAgKFdlYkNv
cmU6OlNjcmlwdFByb2Nlc3Nvck5vZGU6OnByb2Nlc3MpOgorICAgICAgICAqIE1vZHVsZXMvd2Vi
YXVkaW8vU2NyaXB0UHJvY2Vzc29yTm9kZS5oOgorCiAyMDIxLTAzLTE3ICBLaW1tbyBLaW5udW5l
biAgPGtraW5udW5lbkBhcHBsZS5jb20+CiAKICAgICAgICAgU2h1dGRvd24gQU5HTEUgb24gR1BV
IHByb2Nlc3Mgd2hlbiBsYXN0IFdlYkdMIGNvbnRleHQgaXMgZGVzdHJveWVkCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL1NjcmlwdFByb2Nlc3Nvck5vZGUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9TY3JpcHRQcm9jZXNzb3JOb2RlLmNw
cAppbmRleCBiODhlNjg4OGU3M2NiNDMwYWViNTVlMWExOGU4MzQ5YmFmNzkyN2U4Li40ZmNmNTQ3
NDliNzU4NTk1MGJmN2ZiYmRjNTkzZDJlNTM1NjdlMzEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmF1ZGlvL1NjcmlwdFByb2Nlc3Nvck5vZGUuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vU2NyaXB0UHJvY2Vzc29yTm9kZS5jcHAKQEAgLTEw
NiwxMCArMTA2LDggQEAgUmVmUHRyPEF1ZGlvQnVmZmVyPiBTY3JpcHRQcm9jZXNzb3JOb2RlOjpj
cmVhdGVJbnB1dEJ1ZmZlckZvckpTKEF1ZGlvQnVmZmVyKiBpbnAKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAKICAgICAvLyBBcyBhbiBvcHRpbWl6YXRpb24sIHdlIHJldXNlIHRoZSBzYW1lIGJ1
ZmZlciBhcyBsYXN0IHRpbWUgd2hlbiBwb3NzaWJsZS4KLSAgICBpZiAoIW1fY2FjaGVkSW5wdXRC
dWZmZXJGb3JKUyB8fCAhbV9jYWNoZWRJbnB1dEJ1ZmZlckZvckpTLT50b3BvbG9neU1hdGNoZXMo
KmlucHV0QnVmZmVyKSkKKyAgICBpZiAoIW1fY2FjaGVkSW5wdXRCdWZmZXJGb3JKUyB8fCAhaW5w
dXRCdWZmZXItPmNvcHlUbygqbV9jYWNoZWRJbnB1dEJ1ZmZlckZvckpTKSkKICAgICAgICAgbV9j
YWNoZWRJbnB1dEJ1ZmZlckZvckpTID0gaW5wdXRCdWZmZXItPmNsb25lKCk7Ci0gICAgZWxzZQot
ICAgICAgICBpbnB1dEJ1ZmZlci0+Y29weVRvKCptX2NhY2hlZElucHV0QnVmZmVyRm9ySlMpOwog
CiAgICAgcmV0dXJuIG1fY2FjaGVkSW5wdXRCdWZmZXJGb3JKUzsKIH0KQEAgLTE1NiwyMCArMTU0
LDIwIEBAIHZvaWQgU2NyaXB0UHJvY2Vzc29yTm9kZTo6cHJvY2VzcyhzaXplX3QgZnJhbWVzVG9Q
cm9jZXNzKQogICAgIEF1ZGlvQnVzKiBpbnB1dEJ1cyA9IHRoaXMtPmlucHV0KDApLT5idXMoKTsK
ICAgICBBdWRpb0J1cyogb3V0cHV0QnVzID0gdGhpcy0+b3V0cHV0KDApLT5idXMoKTsKIAotICAg
IGF1dG8gbG9ja2VyID0gdHJ5SG9sZExvY2sobV9wcm9jZXNzTG9jayk7Ci0gICAgaWYgKCFsb2Nr
ZXIpIHsKLSAgICAgICAgLy8gV2UncmUgbGF0ZSBpbiBoYW5kbGluZyB0aGUgcHJldmlvdXMgcmVx
dWVzdC4gVGhlIG1haW4gdGhyZWFkIG11c3QgYmUKLSAgICAgICAgLy8gdmVyeSBidXN5LiBUaGUg
YmVzdCB3ZSBjYW4gZG8gaXMgY2xlYXIgb3V0IHRoZSBidWZmZXIgb3Vyc2VsZiBoZXJlLgotICAg
ICAgICBvdXRwdXRCdXMtPnplcm8oKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIC8v
IEdldCBpbnB1dCBhbmQgb3V0cHV0IGJ1ZmZlcnMuIFdlIGRvdWJsZS1idWZmZXIgYm90aCB0aGUg
aW5wdXQgYW5kIG91dHB1dCBzaWRlcy4KICAgICB1bnNpZ25lZCBkb3VibGVCdWZmZXJJbmRleCA9
IHRoaXMtPmRvdWJsZUJ1ZmZlckluZGV4KCk7CiAgICAgYm9vbCBpc0RvdWJsZUJ1ZmZlckluZGV4
R29vZCA9IGRvdWJsZUJ1ZmZlckluZGV4IDwgMiAmJiBkb3VibGVCdWZmZXJJbmRleCA8IG1faW5w
dXRCdWZmZXJzLnNpemUoKSAmJiBkb3VibGVCdWZmZXJJbmRleCA8IG1fb3V0cHV0QnVmZmVycy5z
aXplKCk7CiAgICAgQVNTRVJUKGlzRG91YmxlQnVmZmVySW5kZXhHb29kKTsKICAgICBpZiAoIWlz
RG91YmxlQnVmZmVySW5kZXhHb29kKQogICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIGxvY2tl
ciA9IHRyeUhvbGRMb2NrKG1fYnVmZmVyTG9ja3NbZG91YmxlQnVmZmVySW5kZXhdKTsKKyAgICBp
ZiAoIWxvY2tlcikgeworICAgICAgICAvLyBXZSdyZSBsYXRlIGluIGhhbmRsaW5nIHRoZSBwcmV2
aW91cyByZXF1ZXN0LiBUaGUgbWFpbiB0aHJlYWQgbXVzdCBiZQorICAgICAgICAvLyB2ZXJ5IGJ1
c3kuIFRoZSBiZXN0IHdlIGNhbiBkbyBpcyBjbGVhciBvdXQgdGhlIGJ1ZmZlciBvdXJzZWxmIGhl
cmUuCisgICAgICAgIG91dHB1dEJ1cy0+emVybygpOworICAgICAgICByZXR1cm47CisgICAgfQog
ICAgIAogICAgIEF1ZGlvQnVmZmVyKiBpbnB1dEJ1ZmZlciA9IG1faW5wdXRCdWZmZXJzW2RvdWJs
ZUJ1ZmZlckluZGV4XS5nZXQoKTsKICAgICBBdWRpb0J1ZmZlciogb3V0cHV0QnVmZmVyID0gbV9v
dXRwdXRCdWZmZXJzW2RvdWJsZUJ1ZmZlckluZGV4XS5nZXQoKTsKQEAgLTIyMyw3ICsyMjEsNyBA
QCB2b2lkIFNjcmlwdFByb2Nlc3Nvck5vZGU6OnByb2Nlc3Moc2l6ZV90IGZyYW1lc1RvUHJvY2Vz
cykKICAgICAgICAgICAgIH0pOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgY2FsbE9u
TWFpblRocmVhZChbdGhpcywgZG91YmxlQnVmZmVySW5kZXggPSBtX2RvdWJsZUJ1ZmZlckluZGV4
LCBwcm90ZWN0b3IgPSBtYWtlUmVmKCp0aGlzKV0gewotICAgICAgICAgICAgICAgIGF1dG8gbG9j
a2VyID0gaG9sZExvY2sobV9wcm9jZXNzTG9jayk7CisgICAgICAgICAgICAgICAgYXV0byBsb2Nr
ZXIgPSBob2xkTG9jayhtX2J1ZmZlckxvY2tzW2RvdWJsZUJ1ZmZlckluZGV4XSk7CiAgICAgICAg
ICAgICAgICAgZmlyZVByb2Nlc3NFdmVudChkb3VibGVCdWZmZXJJbmRleCk7CiAgICAgICAgICAg
ICB9KTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJh
dWRpby9TY3JpcHRQcm9jZXNzb3JOb2RlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1
ZGlvL1NjcmlwdFByb2Nlc3Nvck5vZGUuaAppbmRleCA0ZTk3MTI4Njk0ZTRkYjdmYzI5NWFhODJi
MTE3ZjkzMWM2NWMwMjUzLi43YzBiYjYzOGU0ZDVkNzgwOTEzZjcxM2FhOTdmODExMzJjMjNhZGJl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL1NjcmlwdFByb2Nl
c3Nvck5vZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL1NjcmlwdFBy
b2Nlc3Nvck5vZGUuaApAQCAtODYsNyArODYsOSBAQCBwcml2YXRlOgogICAgIC8vIERvdWJsZSBi
dWZmZXJpbmcKICAgICB1bnNpZ25lZCBkb3VibGVCdWZmZXJJbmRleCgpIGNvbnN0IHsgcmV0dXJu
IG1fZG91YmxlQnVmZmVySW5kZXg7IH0KICAgICB2b2lkIHN3YXBCdWZmZXJzKCkgeyBtX2RvdWJs
ZUJ1ZmZlckluZGV4ID0gMSAtIG1fZG91YmxlQnVmZmVySW5kZXg7IH0KKwogICAgIHVuc2lnbmVk
IG1fZG91YmxlQnVmZmVySW5kZXggeyAwIH07CisgICAgc3RkOjphcnJheTxMb2NrLCAyPiBtX2J1
ZmZlckxvY2tzOwogICAgIFZlY3RvcjxSZWZQdHI8QXVkaW9CdWZmZXI+PiBtX2lucHV0QnVmZmVy
czsKICAgICBWZWN0b3I8UmVmUHRyPEF1ZGlvQnVmZmVyPj4gbV9vdXRwdXRCdWZmZXJzOwogICAg
IG11dGFibGUgUmVmUHRyPEF1ZGlvQnVmZmVyPiBtX2NhY2hlZElucHV0QnVmZmVyRm9ySlM7CkBA
IC0xMDAsNyArMTAyLDYgQEAgcHJpdmF0ZToKIAogICAgIFJlZlB0cjxBdWRpb0J1cz4gbV9pbnRl
cm5hbElucHV0QnVzOwogICAgIFJlZlB0cjxQZW5kaW5nQWN0aXZpdHk8U2NyaXB0UHJvY2Vzc29y
Tm9kZT4+IG1fcGVuZGluZ0FjdGl2aXR5OwotICAgIExvY2sgbV9wcm9jZXNzTG9jazsKICAgICBi
b29sIG1faGFzQXVkaW9Qcm9jZXNzRXZlbnRMaXN0ZW5lciB7IGZhbHNlIH07CiB9OwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>423503</attachid>
            <date>2021-03-17 10:54:48 -0700</date>
            <delta_ts>2021-03-17 11:54:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-223380-20210317105447.patch</filename>
            <type>text/plain</type>
            <size>9194</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc0NTU4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGI2MzViMTMzMjMwNzZh
NzY2NWU3NTkwYjViMTg3OGJkODQzNWY4ZS4uNTVkNzZiN2M4Y2JjMWUwZDljZjBhN2RlYmU1NmIw
YTIxZDJkYzhmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI1IEBACisyMDIxLTAzLTE3ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgRGVncmFkZWQgU2NyaXB0UHJv
Y2Vzc29yTm9kZSBwZXJmb3JtYW5jZS9xdWFsaXR5IGZvciAoMTQuMC4zKyBhbmQgaU9TIDE0LjQu
MSspCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjMz
ODAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBCeSBl
eHRlbmRpbmcgdGhlIHNjb3BlIG9mIHRoZSBsb2NrIGluIFNjcmlwdFByb2Nlc3Nvck5vZGU6OnBy
b2Nlc3MoKSwgcjI3MzU0MiBlc3NlbnRpYWxseQorICAgICAgICBkaXNhYmxlZCBkb3VibGUtYnVm
ZmVyaW5nIGFuZCB0aHVzIG5lZ2F0aXZlbHkgaW1wYWN0ZWQgcmVuZGVyaW5nIHF1YWxpdHkuCisK
KyAgICAgICAgVG8gYWRkcmVzcyB0aGUgaXNzdWUsIHdlIG5vdyBoYXZlIDIgbG9ja3MsIG9uZSBw
ZXIgcmVuZGVyaW5nIGJ1ZmZlciAoc2luY2Ugd2UncmUgdXNpbmcKKyAgICAgICAgZG91YmxlIGJ1
ZmZlcmluZykgYW5kIG9ubHkgZ3JhYiB0aGUgbG9jayB3ZSByZXF1aXJlIHdoZW4gaW50ZXJhY3Rp
bmcgd2l0aCB0aGUgYnVmZmVycworICAgICAgICBmb3IgdGhpcyBpbmRleC4gVGhpcyBtYWludGFp
bnMgdGhyZWFkLXNhZmV0eSB3aGlsZSByZS1lbmFibGluZyBkb3VibGUgYnVmZmVyaW5nLgorCisg
ICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9TY3JpcHRQcm9jZXNzb3JOb2RlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcmlwdFByb2Nlc3Nvck5vZGU6OmNyZWF0ZUlucHV0QnVmZmVyRm9ySlMg
Y29uc3QpOgorICAgICAgICBBdm9pZCBkdXBsaWNhdGUgY2FsbCB0byB0b3BvbG9neU1hdGNoZXMo
KSBzaW5jZSBjb3B5VG8oKSBhbHJlYWR5IGNhbGxzIGl0IGludGVybmFsbHkKKyAgICAgICAgYW5k
IHJldHVybnMgZmFsc2Ugd2hlbiAhdG9wb2xvZ3lNYXRjaGVzKCkuCisKKyAgICAgICAgKFdlYkNv
cmU6OlNjcmlwdFByb2Nlc3Nvck5vZGU6OnByb2Nlc3MpOgorICAgICAgICAqIE1vZHVsZXMvd2Vi
YXVkaW8vU2NyaXB0UHJvY2Vzc29yTm9kZS5oOgorCiAyMDIxLTAzLTE3ICBLaW1tbyBLaW5udW5l
biAgPGtraW5udW5lbkBhcHBsZS5jb20+CiAKICAgICAgICAgU2h1dGRvd24gQU5HTEUgb24gR1BV
IHByb2Nlc3Mgd2hlbiBsYXN0IFdlYkdMIGNvbnRleHQgaXMgZGVzdHJveWVkCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL1NjcmlwdFByb2Nlc3Nvck5vZGUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9TY3JpcHRQcm9jZXNzb3JOb2RlLmNw
cAppbmRleCBiODhlNjg4OGU3M2NiNDMwYWViNTVlMWExOGU4MzQ5YmFmNzkyN2U4Li5iNDg0M2M0
NDFmM2NjZDYzY2Y3MjY5OWUwODI1YTc5M2M0MTA2NThhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmF1ZGlvL1NjcmlwdFByb2Nlc3Nvck5vZGUuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vU2NyaXB0UHJvY2Vzc29yTm9kZS5jcHAKQEAgLTg4
LDEzICs4OCwxMCBAQCB2b2lkIFNjcmlwdFByb2Nlc3Nvck5vZGU6OmluaXRpYWxpemUoKQogCiAg
ICAgLy8gQ3JlYXRlIGRvdWJsZSBidWZmZXJzIG9uIGJvdGggdGhlIGlucHV0IGFuZCBvdXRwdXQg
c2lkZXMuCiAgICAgLy8gVGhlc2UgQXVkaW9CdWZmZXJzIHdpbGwgYmUgZGlyZWN0bHkgYWNjZXNz
ZWQgaW4gdGhlIG1haW4gdGhyZWFkIGJ5IEphdmFTY3JpcHQuCi0gICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IDI7ICsraSkgeworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBidWZmZXJD
b3VudDsgKytpKSB7CiAgICAgICAgIC8vIFdlIHByZXZlbnQgZGV0YWNoaW5nIHRoZSBBdWRpb0J1
ZmZlcnMgaGVyZSBzaW5jZSB3ZSBwYXNzIHRob3NlIHRvIEpTIGFuZCByZXVzZSB0aGVtLgotICAg
ICAgICBhdXRvIGlucHV0QnVmZmVyID0gbV9udW1iZXJPZklucHV0Q2hhbm5lbHMgPyBBdWRpb0J1
ZmZlcjo6Y3JlYXRlKG1fbnVtYmVyT2ZJbnB1dENoYW5uZWxzLCBidWZmZXJTaXplKCksIHNhbXBs
ZVJhdGUsIEF1ZGlvQnVmZmVyOjpMZWdhY3lQcmV2ZW50RGV0YWNoaW5nOjpZZXMpIDogMDsKLSAg
ICAgICAgYXV0byBvdXRwdXRCdWZmZXIgPSBtX251bWJlck9mT3V0cHV0Q2hhbm5lbHMgPyBBdWRp
b0J1ZmZlcjo6Y3JlYXRlKG1fbnVtYmVyT2ZPdXRwdXRDaGFubmVscywgYnVmZmVyU2l6ZSgpLCBz
YW1wbGVSYXRlLCBBdWRpb0J1ZmZlcjo6TGVnYWN5UHJldmVudERldGFjaGluZzo6WWVzKSA6IDA7
Ci0KLSAgICAgICAgbV9pbnB1dEJ1ZmZlcnMuYXBwZW5kKGlucHV0QnVmZmVyKTsKLSAgICAgICAg
bV9vdXRwdXRCdWZmZXJzLmFwcGVuZChvdXRwdXRCdWZmZXIpOworICAgICAgICBtX2lucHV0QnVm
ZmVyc1tpXSA9IG1fbnVtYmVyT2ZJbnB1dENoYW5uZWxzID8gQXVkaW9CdWZmZXI6OmNyZWF0ZSht
X251bWJlck9mSW5wdXRDaGFubmVscywgYnVmZmVyU2l6ZSgpLCBzYW1wbGVSYXRlLCBBdWRpb0J1
ZmZlcjo6TGVnYWN5UHJldmVudERldGFjaGluZzo6WWVzKSA6IDA7CisgICAgICAgIG1fb3V0cHV0
QnVmZmVyc1tpXSA9IG1fbnVtYmVyT2ZPdXRwdXRDaGFubmVscyA/IEF1ZGlvQnVmZmVyOjpjcmVh
dGUobV9udW1iZXJPZk91dHB1dENoYW5uZWxzLCBidWZmZXJTaXplKCksIHNhbXBsZVJhdGUsIEF1
ZGlvQnVmZmVyOjpMZWdhY3lQcmV2ZW50RGV0YWNoaW5nOjpZZXMpIDogMDsKICAgICB9CiAKICAg
ICBBdWRpb05vZGU6OmluaXRpYWxpemUoKTsKQEAgLTEwNiwxMCArMTAzLDggQEAgUmVmUHRyPEF1
ZGlvQnVmZmVyPiBTY3JpcHRQcm9jZXNzb3JOb2RlOjpjcmVhdGVJbnB1dEJ1ZmZlckZvckpTKEF1
ZGlvQnVmZmVyKiBpbnAKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICAvLyBBcyBhbiBv
cHRpbWl6YXRpb24sIHdlIHJldXNlIHRoZSBzYW1lIGJ1ZmZlciBhcyBsYXN0IHRpbWUgd2hlbiBw
b3NzaWJsZS4KLSAgICBpZiAoIW1fY2FjaGVkSW5wdXRCdWZmZXJGb3JKUyB8fCAhbV9jYWNoZWRJ
bnB1dEJ1ZmZlckZvckpTLT50b3BvbG9neU1hdGNoZXMoKmlucHV0QnVmZmVyKSkKKyAgICBpZiAo
IW1fY2FjaGVkSW5wdXRCdWZmZXJGb3JKUyB8fCAhaW5wdXRCdWZmZXItPmNvcHlUbygqbV9jYWNo
ZWRJbnB1dEJ1ZmZlckZvckpTKSkKICAgICAgICAgbV9jYWNoZWRJbnB1dEJ1ZmZlckZvckpTID0g
aW5wdXRCdWZmZXItPmNsb25lKCk7Ci0gICAgZWxzZQotICAgICAgICBpbnB1dEJ1ZmZlci0+Y29w
eVRvKCptX2NhY2hlZElucHV0QnVmZmVyRm9ySlMpOwogCiAgICAgcmV0dXJuIG1fY2FjaGVkSW5w
dXRCdWZmZXJGb3JKUzsKIH0KQEAgLTEzMCw4ICsxMjUsMTEgQEAgdm9pZCBTY3JpcHRQcm9jZXNz
b3JOb2RlOjp1bmluaXRpYWxpemUoKQogICAgIGlmICghaXNJbml0aWFsaXplZCgpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBtX2lucHV0QnVmZmVycy5jbGVhcigpOwotICAgIG1fb3V0cHV0QnVm
ZmVycy5jbGVhcigpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBidWZmZXJDb3VudDsg
KytpKSB7CisgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9idWZmZXJMb2Nrc1tpXSk7
CisgICAgICAgIG1faW5wdXRCdWZmZXJzW2ldID0gbnVsbHB0cjsKKyAgICAgICAgbV9vdXRwdXRC
dWZmZXJzW2ldID0gbnVsbHB0cjsKKyAgICB9CiAKICAgICBBdWRpb05vZGU6OnVuaW5pdGlhbGl6
ZSgpOwogfQpAQCAtMTU2LDIzICsxNTQsMjAgQEAgdm9pZCBTY3JpcHRQcm9jZXNzb3JOb2RlOjpw
cm9jZXNzKHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpCiAgICAgQXVkaW9CdXMqIGlucHV0QnVzID0g
dGhpcy0+aW5wdXQoMCktPmJ1cygpOwogICAgIEF1ZGlvQnVzKiBvdXRwdXRCdXMgPSB0aGlzLT5v
dXRwdXQoMCktPmJ1cygpOwogCi0gICAgYXV0byBsb2NrZXIgPSB0cnlIb2xkTG9jayhtX3Byb2Nl
c3NMb2NrKTsKKyAgICAvLyBHZXQgaW5wdXQgYW5kIG91dHB1dCBidWZmZXJzLiBXZSBkb3VibGUt
YnVmZmVyIGJvdGggdGhlIGlucHV0IGFuZCBvdXRwdXQgc2lkZXMuCisgICAgdW5zaWduZWQgYnVm
ZmVySW5kZXggPSB0aGlzLT5idWZmZXJJbmRleCgpOworICAgIEFTU0VSVChidWZmZXJJbmRleCA8
IGJ1ZmZlckNvdW50KTsKKworICAgIGF1dG8gbG9ja2VyID0gdHJ5SG9sZExvY2sobV9idWZmZXJM
b2Nrc1tidWZmZXJJbmRleF0pOwogICAgIGlmICghbG9ja2VyKSB7CiAgICAgICAgIC8vIFdlJ3Jl
IGxhdGUgaW4gaGFuZGxpbmcgdGhlIHByZXZpb3VzIHJlcXVlc3QuIFRoZSBtYWluIHRocmVhZCBt
dXN0IGJlCiAgICAgICAgIC8vIHZlcnkgYnVzeS4gVGhlIGJlc3Qgd2UgY2FuIGRvIGlzIGNsZWFy
IG91dCB0aGUgYnVmZmVyIG91cnNlbGYgaGVyZS4KICAgICAgICAgb3V0cHV0QnVzLT56ZXJvKCk7
CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0KLSAgICAvLyBHZXQgaW5wdXQgYW5kIG91dHB1dCBi
dWZmZXJzLiBXZSBkb3VibGUtYnVmZmVyIGJvdGggdGhlIGlucHV0IGFuZCBvdXRwdXQgc2lkZXMu
Ci0gICAgdW5zaWduZWQgZG91YmxlQnVmZmVySW5kZXggPSB0aGlzLT5kb3VibGVCdWZmZXJJbmRl
eCgpOwotICAgIGJvb2wgaXNEb3VibGVCdWZmZXJJbmRleEdvb2QgPSBkb3VibGVCdWZmZXJJbmRl
eCA8IDIgJiYgZG91YmxlQnVmZmVySW5kZXggPCBtX2lucHV0QnVmZmVycy5zaXplKCkgJiYgZG91
YmxlQnVmZmVySW5kZXggPCBtX291dHB1dEJ1ZmZlcnMuc2l6ZSgpOwotICAgIEFTU0VSVChpc0Rv
dWJsZUJ1ZmZlckluZGV4R29vZCk7Ci0gICAgaWYgKCFpc0RvdWJsZUJ1ZmZlckluZGV4R29vZCkK
LSAgICAgICAgcmV0dXJuOwogICAgIAotICAgIEF1ZGlvQnVmZmVyKiBpbnB1dEJ1ZmZlciA9IG1f
aW5wdXRCdWZmZXJzW2RvdWJsZUJ1ZmZlckluZGV4XS5nZXQoKTsKLSAgICBBdWRpb0J1ZmZlciog
b3V0cHV0QnVmZmVyID0gbV9vdXRwdXRCdWZmZXJzW2RvdWJsZUJ1ZmZlckluZGV4XS5nZXQoKTsK
KyAgICBBdWRpb0J1ZmZlciogaW5wdXRCdWZmZXIgPSBtX2lucHV0QnVmZmVyc1tidWZmZXJJbmRl
eF0uZ2V0KCk7CisgICAgQXVkaW9CdWZmZXIqIG91dHB1dEJ1ZmZlciA9IG1fb3V0cHV0QnVmZmVy
c1tidWZmZXJJbmRleF0uZ2V0KCk7CiAKICAgICAvLyBDaGVjayB0aGUgY29uc2lzdGVuY3kgb2Yg
aW5wdXQgYW5kIG91dHB1dCBidWZmZXJzLgogICAgIHVuc2lnbmVkIG51bWJlck9mSW5wdXRDaGFu
bmVscyA9IG1faW50ZXJuYWxJbnB1dEJ1cy0+bnVtYmVyT2ZDaGFubmVscygpOwpAQCAtMjE4LDEz
ICsyMTMsMTMgQEAgdm9pZCBTY3JpcHRQcm9jZXNzb3JOb2RlOjpwcm9jZXNzKHNpemVfdCBmcmFt
ZXNUb1Byb2Nlc3MpCiAgICAgICAgIC8vIFJlZmVyZW5jZSBvdXJzZWxmIHNvIHdlIGRvbid0IGFj
Y2lkZW50YWxseSBnZXQgZGVsZXRlZCBiZWZvcmUgZmlyZVByb2Nlc3NFdmVudCgpIGdldHMgY2Fs
bGVkLgogICAgICAgICAvLyBXZSBvbmx5IHdhaXQgZm9yIHNjcmlwdCBjb2RlIGV4ZWN1dGlvbiB3
aGVuIHRoZSBjb250ZXh0IGlzIGFuIG9mZmxpbmUgb25lIGZvciBwZXJmb3JtYW5jZSByZWFzb25z
LgogICAgICAgICBpZiAoY29udGV4dCgpLmlzT2ZmbGluZUNvbnRleHQoKSkgewotICAgICAgICAg
ICAgY2FsbE9uTWFpblRocmVhZEFuZFdhaXQoW3RoaXMsIGRvdWJsZUJ1ZmZlckluZGV4ID0gbV9k
b3VibGVCdWZmZXJJbmRleCwgcHJvdGVjdG9yID0gbWFrZVJlZigqdGhpcyldIHsKLSAgICAgICAg
ICAgICAgICBmaXJlUHJvY2Vzc0V2ZW50KGRvdWJsZUJ1ZmZlckluZGV4KTsKKyAgICAgICAgICAg
IGNhbGxPbk1haW5UaHJlYWRBbmRXYWl0KFt0aGlzLCBidWZmZXJJbmRleCwgcHJvdGVjdG9yID0g
bWFrZVJlZigqdGhpcyldIHsKKyAgICAgICAgICAgICAgICBmaXJlUHJvY2Vzc0V2ZW50KGJ1ZmZl
ckluZGV4KTsKICAgICAgICAgICAgIH0pOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
Y2FsbE9uTWFpblRocmVhZChbdGhpcywgZG91YmxlQnVmZmVySW5kZXggPSBtX2RvdWJsZUJ1ZmZl
ckluZGV4LCBwcm90ZWN0b3IgPSBtYWtlUmVmKCp0aGlzKV0gewotICAgICAgICAgICAgICAgIGF1
dG8gbG9ja2VyID0gaG9sZExvY2sobV9wcm9jZXNzTG9jayk7Ci0gICAgICAgICAgICAgICAgZmly
ZVByb2Nlc3NFdmVudChkb3VibGVCdWZmZXJJbmRleCk7CisgICAgICAgICAgICBjYWxsT25NYWlu
VGhyZWFkKFt0aGlzLCBidWZmZXJJbmRleCwgcHJvdGVjdG9yID0gbWFrZVJlZigqdGhpcyldIHsK
KyAgICAgICAgICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fYnVmZmVyTG9ja3NbYnVm
ZmVySW5kZXhdKTsKKyAgICAgICAgICAgICAgICBmaXJlUHJvY2Vzc0V2ZW50KGJ1ZmZlckluZGV4
KTsKICAgICAgICAgICAgIH0pOwogICAgICAgICB9CiAKQEAgLTIzMiwxNyArMjI3LDEyIEBAIHZv
aWQgU2NyaXB0UHJvY2Vzc29yTm9kZTo6cHJvY2VzcyhzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKQog
ICAgIH0KIH0KIAotdm9pZCBTY3JpcHRQcm9jZXNzb3JOb2RlOjpmaXJlUHJvY2Vzc0V2ZW50KHVu
c2lnbmVkIGRvdWJsZUJ1ZmZlckluZGV4KQordm9pZCBTY3JpcHRQcm9jZXNzb3JOb2RlOjpmaXJl
UHJvY2Vzc0V2ZW50KHVuc2lnbmVkIGJ1ZmZlckluZGV4KQogewogICAgIEFTU0VSVChpc01haW5U
aHJlYWQoKSk7Ci0gICAgCi0gICAgYm9vbCBpc0luZGV4R29vZCA9IGRvdWJsZUJ1ZmZlckluZGV4
IDwgMjsKLSAgICBBU1NFUlQoaXNJbmRleEdvb2QpOwotICAgIGlmICghaXNJbmRleEdvb2QpCi0g
ICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgQXVkaW9CdWZmZXIqIGlucHV0QnVmZmVyID0g
bV9pbnB1dEJ1ZmZlcnNbZG91YmxlQnVmZmVySW5kZXhdLmdldCgpOwotICAgIEF1ZGlvQnVmZmVy
KiBvdXRwdXRCdWZmZXIgPSBtX291dHB1dEJ1ZmZlcnNbZG91YmxlQnVmZmVySW5kZXhdLmdldCgp
OworCisgICAgQXVkaW9CdWZmZXIqIGlucHV0QnVmZmVyID0gbV9pbnB1dEJ1ZmZlcnNbYnVmZmVy
SW5kZXhdLmdldCgpOworICAgIEF1ZGlvQnVmZmVyKiBvdXRwdXRCdWZmZXIgPSBtX291dHB1dEJ1
ZmZlcnNbYnVmZmVySW5kZXhdLmdldCgpOwogICAgIEFTU0VSVChvdXRwdXRCdWZmZXIpOwogICAg
IGlmICghb3V0cHV0QnVmZmVyKQogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL1NjcmlwdFByb2Nlc3Nvck5vZGUuaCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vU2NyaXB0UHJvY2Vzc29yTm9kZS5oCmluZGV4IDRlOTcx
Mjg2OTRlNGRiN2ZjMjk1YWE4MmIxMTdmOTMxYzY1YzAyNTMuLjFhOTJiYzkxYjAzZGQ3OTgxZWUw
ZWU3M2FiYTM2ZjcxYWUwOGM2ZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViYXVkaW8vU2NyaXB0UHJvY2Vzc29yTm9kZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViYXVkaW8vU2NyaXB0UHJvY2Vzc29yTm9kZS5oCkBAIC03OCwxNyArNzgsMjAgQEAgcHJp
dmF0ZToKIAogICAgIGJvb2wgdmlydHVhbEhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0IGZpbmFs
OwogICAgIHZvaWQgZXZlbnRMaXN0ZW5lcnNEaWRDaGFuZ2UoKSBmaW5hbDsKLSAgICB2b2lkIGZp
cmVQcm9jZXNzRXZlbnQodW5zaWduZWQgZG91YmxlQnVmZmVySW5kZXgpOworICAgIHZvaWQgZmly
ZVByb2Nlc3NFdmVudCh1bnNpZ25lZCBidWZmZXJJbmRleCk7CiAKICAgICBSZWZQdHI8QXVkaW9C
dWZmZXI+IGNyZWF0ZUlucHV0QnVmZmVyRm9ySlMoQXVkaW9CdWZmZXIqKSBjb25zdDsKICAgICBS
ZWZQdHI8QXVkaW9CdWZmZXI+IGNyZWF0ZU91dHB1dEJ1ZmZlckZvckpTKEF1ZGlvQnVmZmVyJikg
Y29uc3Q7CiAKLSAgICAvLyBEb3VibGUgYnVmZmVyaW5nCi0gICAgdW5zaWduZWQgZG91YmxlQnVm
ZmVySW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2RvdWJsZUJ1ZmZlckluZGV4OyB9Ci0gICAgdm9p
ZCBzd2FwQnVmZmVycygpIHsgbV9kb3VibGVCdWZmZXJJbmRleCA9IDEgLSBtX2RvdWJsZUJ1ZmZl
ckluZGV4OyB9Ci0gICAgdW5zaWduZWQgbV9kb3VibGVCdWZmZXJJbmRleCB7IDAgfTsKLSAgICBW
ZWN0b3I8UmVmUHRyPEF1ZGlvQnVmZmVyPj4gbV9pbnB1dEJ1ZmZlcnM7Ci0gICAgVmVjdG9yPFJl
ZlB0cjxBdWRpb0J1ZmZlcj4+IG1fb3V0cHV0QnVmZmVyczsKKyAgICAvLyBEb3VibGUgYnVmZmVy
aW5nLgorICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgYnVmZmVyQ291bnQgPSAyOworICAg
IHVuc2lnbmVkIGJ1ZmZlckluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9idWZmZXJJbmRleDsgfQor
ICAgIHZvaWQgc3dhcEJ1ZmZlcnMoKSB7IG1fYnVmZmVySW5kZXggPSAobV9idWZmZXJJbmRleCAr
IDEpICUgYnVmZmVyQ291bnQ7IH0KKworICAgIHVuc2lnbmVkIG1fYnVmZmVySW5kZXggeyAwIH07
CisgICAgc3RkOjphcnJheTxMb2NrLCBidWZmZXJDb3VudD4gbV9idWZmZXJMb2NrczsKKyAgICBz
dGQ6OmFycmF5PFJlZlB0cjxBdWRpb0J1ZmZlcj4sIGJ1ZmZlckNvdW50PiBtX2lucHV0QnVmZmVy
czsKKyAgICBzdGQ6OmFycmF5PFJlZlB0cjxBdWRpb0J1ZmZlcj4sIGJ1ZmZlckNvdW50PiBtX291
dHB1dEJ1ZmZlcnM7CiAgICAgbXV0YWJsZSBSZWZQdHI8QXVkaW9CdWZmZXI+IG1fY2FjaGVkSW5w
dXRCdWZmZXJGb3JKUzsKICAgICBtdXRhYmxlIFJlZlB0cjxBdWRpb0J1ZmZlcj4gbV9jYWNoZWRP
dXRwdXRCdWZmZXJGb3JKUzsKIApAQCAtMTAwLDcgKzEwMyw2IEBAIHByaXZhdGU6CiAKICAgICBS
ZWZQdHI8QXVkaW9CdXM+IG1faW50ZXJuYWxJbnB1dEJ1czsKICAgICBSZWZQdHI8UGVuZGluZ0Fj
dGl2aXR5PFNjcmlwdFByb2Nlc3Nvck5vZGU+PiBtX3BlbmRpbmdBY3Rpdml0eTsKLSAgICBMb2Nr
IG1fcHJvY2Vzc0xvY2s7CiAgICAgYm9vbCBtX2hhc0F1ZGlvUHJvY2Vzc0V2ZW50TGlzdGVuZXIg
eyBmYWxzZSB9OwogfTsKIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>