<?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>85009</bug_id>
          
          <creation_ts>2012-04-26 14:47:19 -0700</creation_ts>
          <short_desc>ScriptStateProtectedPtr should not keep a strong reference to the context</short_desc>
          <delta_ts>2012-04-28 03:30:53 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter>jochen</reporter>
          <assigned_to name="Yury Semikhatsky">yurys</assigned_to>
          <cc>antonm</cc>
    
    <cc>gustavo</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pnormand</cc>
    
    <cc>xan.lopez</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>611003</commentid>
    <comment_count>0</comment_count>
    <who name="">jochen</who>
    <bug_when>2012-04-26 14:47:19 -0700</bug_when>
    <thetext>ScriptStateProtectedPtr keeps a strong ref to the javascript context. It&apos;s only used from the Inspector to store script arguments of console messages. While only a certain amount of console message (1000) are kept, this can keep up to 1000 different contexts alive which might easily exceed the available memory.

I think instead, the ScriptStateProtectedPtr should keep a weak reference, and the inspector should cope with the arguments being gone when the context died.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>611312</commentid>
    <comment_count>1</comment_count>
    <who name="">jochen</who>
    <bug_when>2012-04-27 01:49:11 -0700</bug_when>
    <thetext>+pavel

I see three ways to fix this:

1) discard console messages when the context goes away
2) keep the console messages, but cope with the script arguments maybe not being there
3) instead of retaining the whole context, only retain the individual arguments

I think 2) would be best, wdyt?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>611348</commentid>
    <comment_count>2</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2012-04-27 03:12:30 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; +pavel
&gt; 
&gt; I see three ways to fix this:
&gt; 
&gt; 1) discard console messages when the context goes away
&gt; 2) keep the console messages, but cope with the script arguments maybe not being there
&gt; 3) instead of retaining the whole context, only retain the individual arguments
&gt; 
&gt; I think 2) would be best, wdyt?

I was under the impression that (2) was already taking place. I&apos;ll defer to Yury since he was implementing it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>611401</commentid>
    <comment_count>3</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2012-04-27 05:22:35 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; I was under the impression that (2) was already taking place. I&apos;ll defer to Yury since he was implementing it.

The message arguments should be discarded on window navigation. See ConsoleMessage::windowCleared: http://code.google.com/p/chromium/source/search?q=ConsoleMessage%3A%3AwindowCleared Any evidences that it doesn&apos;t happen?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>611406</commentid>
    <comment_count>4</comment_count>
    <who name="">jochen</who>
    <bug_when>2012-04-27 05:32:49 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (In reply to comment #2)
&gt; &gt; I was under the impression that (2) was already taking place. I&apos;ll defer to Yury since he was implementing it.
&gt; 
&gt; The message arguments should be discarded on window navigation. See ConsoleMessage::windowCleared: http://code.google.com/p/chromium/source/search?q=ConsoleMessage%3A%3AwindowCleared Any evidences that it doesn&apos;t happen?

If I&apos;m reading this correctly, that code path is only invoked when page is detached, but not when an iframe navigates?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>611408</commentid>
    <comment_count>5</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2012-04-27 05:35:58 -0700</bug_when>
    <thetext>Also all messages are cleared on the main frame navigation. Closing the bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>611419</commentid>
    <comment_count>6</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2012-04-27 06:01:12 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (In reply to comment #3)
&gt; &gt; (In reply to comment #2)
&gt; If I&apos;m reading this correctly, that code path is only invoked when page is detached, but not when an iframe navigates?

It should be called on navigation as well but as you pointed out offline there is a scenario when we won&apos;t clear the argument and return early from ConsoleMessage::windowCleared because of the following code:

if (domWindowFromScriptState(m_arguments-&gt;globalState()) != window)
    return;

Reopening the bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>611424</commentid>
    <comment_count>7</comment_count>
    <who name="">jochen</who>
    <bug_when>2012-04-27 06:05:00 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #4)
&gt; &gt; (In reply to comment #3)
&gt; &gt; &gt; (In reply to comment #2)
&gt; &gt; If I&apos;m reading this correctly, that code path is only invoked when page is detached, but not when an iframe navigates?
&gt; 
&gt; It should be called on navigation as well but as you pointed out offline there is a scenario when we won&apos;t clear the argument and return early from ConsoleMessage::windowCleared because of the following code:
&gt; 
&gt; if (domWindowFromScriptState(m_arguments-&gt;globalState()) != window)
&gt;     return;


I added fprintf(stderr, &quot;window cleared\n&quot;); to ConsoleMessage::windowCleared and ran LayoutTests/http/tests/inspector-enabled/console-log-before-frame-navigation.html, however, the fprintf wasn&apos;t triggered during the test.

I think binding the clearing of messages to the page destruction can&apos;t work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>611451</commentid>
    <comment_count>8</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2012-04-27 06:51:15 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; +pavel
&gt; 
&gt; I see three ways to fix this:
&gt; 
&gt; 1) discard console messages when the context goes away
&gt; 2) keep the console messages, but cope with the script arguments maybe not being there
&gt; 3) instead of retaining the whole context, only retain the individual arguments
&gt; 
The problem is that we need to get the context while formatting the message. Also an argument may well keep reference to the context and keeping strong reference to the argument would keep the context alive. So it doesn&apos;t seem to make sense to have weak ref to the context and strong refs to the arguments. At the same time having weak refs to the arguments we cannot be sure that they are not collected. So the current approach when we discard arguments along with the context on frame navigation and clear all messages on the main frame navigation seems ok. We need to fix the scenario described above though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>611696</commentid>
    <comment_count>9</comment_count>
      <attachid>139235</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2012-04-27 11:11:39 -0700</bug_when>
    <thetext>Created attachment 139235
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>611720</commentid>
    <comment_count>10</comment_count>
      <attachid>139235</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2012-04-27 11:27:02 -0700</bug_when>
    <thetext>Comment on attachment 139235
Patch

Attachment 139235 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/12566127</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>611742</commentid>
    <comment_count>11</comment_count>
      <attachid>139235</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-04-27 11:49:54 -0700</bug_when>
    <thetext>Comment on attachment 139235
Patch

Attachment 139235 did not pass win-ews (win):
Output: http://queues.webkit.org/results/12548281</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>611768</commentid>
    <comment_count>12</comment_count>
      <attachid>139235</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-04-27 12:06:17 -0700</bug_when>
    <thetext>Comment on attachment 139235
Patch

Attachment 139235 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/12558284</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>612193</commentid>
    <comment_count>13</comment_count>
      <attachid>139235</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2012-04-28 00:35:04 -0700</bug_when>
    <thetext>Comment on attachment 139235
Patch

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

&gt; Source/WebCore/inspector/ConsoleMessage.cpp:166
&gt; +

Please revert

&gt; Source/WebCore/inspector/ConsoleMessage.cpp:204
&gt; +

Please revert</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>612200</commentid>
    <comment_count>14</comment_count>
      <attachid>139235</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2012-04-28 01:18:46 -0700</bug_when>
    <thetext>Comment on attachment 139235
Patch

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

&gt;&gt; Source/WebCore/inspector/ConsoleMessage.cpp:166
&gt;&gt; +
&gt; 
&gt; Please revert

Done.

&gt;&gt; Source/WebCore/inspector/ConsoleMessage.cpp:204
&gt;&gt; +
&gt; 
&gt; Please revert

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>612201</commentid>
    <comment_count>15</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2012-04-28 01:19:46 -0700</bug_when>
    <thetext>Committed r115553: &lt;http://trac.webkit.org/changeset/115553&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>612226</commentid>
    <comment_count>16</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-04-28 03:22:42 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; Committed r115553: &lt;http://trac.webkit.org/changeset/115553&gt;

Why was this landed knowing 3 (yes, 3!) EWS bots _failed_ build this patch?
And no follow-up build fix either?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>612227</commentid>
    <comment_count>17</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-04-28 03:30:53 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; (In reply to comment #15)
&gt; &gt; Committed r115553: &lt;http://trac.webkit.org/changeset/115553&gt;
&gt; 
&gt; Why was this landed knowing 3 (yes, 3!) EWS bots _failed_ build this patch?
&gt; And no follow-up build fix either?

Ok there are build fixes indeed. But still, landing with red EWS is bad, IMHO.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>139235</attachid>
            <date>2012-04-27 11:11:39 -0700</date>
            <delta_ts>2012-04-28 01:18:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-85009-20120427221137.patch</filename>
            <type>text/plain</type>
            <size>17585</size>
            <attacher name="Yury Semikhatsky">yurys</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE1NDE4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWY0ZTg1N2RhOTRhZGNh
Yzk5MTJiNDRmNGE4YzA3MjFhZjRmYTlhZS4uNTAwZWVjYjRlZGFlMjQzNzg4ZWVlM2M5MzllYTJj
YjQ3MDc3OWVjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM3IEBACisyMDEyLTA0LTI3ICBZdXJ5
IFNlbWlraGF0c2t5ICA8eXVyeXNAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFNjcmlwdFN0YXRl
UHJvdGVjdGVkUHRyIHNob3VsZCBub3Qga2VlcCBhIHN0cm9uZyByZWZlcmVuY2UgdG8gdGhlIGNv
bnRleHQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg1
MDA5CisKKyAgICAgICAgRGVsZXRlIGNvbnNvbGUgbWVzc2FnZSBhcmd1bWVudHMgd2hlbiBET01X
aW5kb3cgd2hlcmUgdGhlIG1lc3NhZ2VzIHdlcmUgY3JlYXRlZAorICAgICAgICBpcyByZXNldCBv
biBpdHMgZnJhbWUuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgVGVzdDogaHR0cC90ZXN0cy9pbnNwZWN0b3ItZW5hYmxlZC9jb25zb2xlLWNsZWFyLWFy
Z3VtZW50cy1vbi1mcmFtZS1uYXZpZ2F0aW9uLmh0bWwKKworICAgICAgICAqIGluc3BlY3Rvci9D
b25zb2xlTWVzc2FnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb25zb2xlTWVzc2FnZTo6YWRk
VG9Gcm9udGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpDb25zb2xlTWVzc2FnZTo6d2luZG93Q2xl
YXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpDb25zb2xlTWVzc2FnZTo6YXJndW1lbnRDb3VudCk6
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvQ29uc29sZU1lc3NhZ2Uu
aDoKKyAgICAgICAgKENvbnNvbGVNZXNzYWdlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVj
dG9yQ29uc29sZUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnNvbGVB
Z2VudDo6Y29uc29sZU1lc3NhZ2VBcmd1bWVudENvdW50cyk6CisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29uc29sZUFnZW50Lmg6CisgICAgICAgIChJ
bnNwZWN0b3JDb25zb2xlQWdlbnQpOgorICAgICAgICAqIHBhZ2UvRnJhbWUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWU6OmNsZWFyRE9NV2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lOjpzZXRET01XaW5kb3cpOgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpjb25zb2xlTWVz
c2FnZUFyZ3VtZW50Q291bnRzKToKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5oOgorICAg
ICAgICAoSW50ZXJuYWxzKToKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5pZGw6CisKIDIw
MTItMDQtMjYgIEFsZXhhbmRlciBQYXZsb3YgIDxhcGF2bG92QGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBXZWIgSW5zcGVjdG9yOiBJbXBsZW1lbnQgdGhlICJEaXNhYmxlIEphdmFTY3JpcHQiIG9w
dGlvbiBpbiB0aGUgc2V0dGluZ3MgZGlhbG9nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvQ29uc29sZU1lc3NhZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0Nv
bnNvbGVNZXNzYWdlLmNwcAppbmRleCBhY2JkZGU3NTg3Mjg2NTk4OTU2ZWM2MjYwNmZhMTRkNjM0
MzdmMWRmLi4zNDA4ZjZjZGVjYTk4NGIwNDE2ZjBiMTBjN2NhYzRjZWUyMTU4ZTFhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29uc29sZU1lc3NhZ2UuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db25zb2xlTWVzc2FnZS5jcHAKQEAgLTE2Myw2ICsxNjMs
NyBAQCB2b2lkIENvbnNvbGVNZXNzYWdlOjphZGRUb0Zyb250ZW5kKEluc3BlY3RvckZyb250ZW5k
OjpDb25zb2xlKiBmcm9udGVuZCwgSW5qZWN0ZQogICAgIH0KICAgICBpZiAobV9jYWxsU3RhY2sp
CiAgICAgICAgIGpzb25PYmotPnNldFN0YWNrVHJhY2UobV9jYWxsU3RhY2stPmJ1aWxkSW5zcGVj
dG9yQXJyYXkoKSk7CisKICAgICBmcm9udGVuZC0+bWVzc2FnZUFkZGVkKGpzb25PYmopOwogfQog
CkBAIC0yMDAsMTEgKzIwMSwxOSBAQCB2b2lkIENvbnNvbGVNZXNzYWdlOjp3aW5kb3dDbGVhcmVk
KERPTVdpbmRvdyogd2luZG93KQogICAgICAgICByZXR1cm47CiAgICAgaWYgKGRvbVdpbmRvd0Zy
b21TY3JpcHRTdGF0ZShtX2FyZ3VtZW50cy0+Z2xvYmFsU3RhdGUoKSkgIT0gd2luZG93KQogICAg
ICAgICByZXR1cm47CisKICAgICBpZiAoIW1fbWVzc2FnZSkKICAgICAgICAgbV9tZXNzYWdlID0g
IjxtZXNzYWdlIGNvbGxlY3RlZD4iOwogICAgIG1fYXJndW1lbnRzLmNsZWFyKCk7CiB9CiAKK3Vu
c2lnbmVkIENvbnNvbGVNZXNzYWdlOjphcmd1bWVudENvdW50KCkKK3sKKyAgICBpZiAobV9hcmd1
bWVudHMpCisgICAgICAgIHJldHVybiBtX2FyZ3VtZW50cy0+YXJndW1lbnRDb3VudCgpOworICAg
IHJldHVybiAwOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFC
TEUoSU5TUEVDVE9SKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvbnNv
bGVNZXNzYWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29uc29sZU1lc3NhZ2UuaApp
bmRleCAzOGY2NWM3MWRjMDI5MDY0NmQ1ZDEzNzQwZWM5YzRlMTY1NTNhYWNlLi5iZDFhYmY1OTM5
ZmI0N2FhNWFjNTg4NDc1YzA5OTczNjA2MDMxNDllIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvQ29uc29sZU1lc3NhZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvQ29uc29sZU1lc3NhZ2UuaApAQCAtNjcsNiArNjcsOCBAQCBwdWJsaWM6CiAKICAgICB2b2lk
IHdpbmRvd0NsZWFyZWQoRE9NV2luZG93Kik7CiAKKyAgICB1bnNpZ25lZCBhcmd1bWVudENvdW50
KCk7CisKIHByaXZhdGU6CiAgICAgTWVzc2FnZVNvdXJjZSBtX3NvdXJjZTsKICAgICBNZXNzYWdl
VHlwZSBtX3R5cGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yQ29uc29sZUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JD
b25zb2xlQWdlbnQuY3BwCmluZGV4IDE2YzkwOWU0ZDA1N2I5ZWY5MDVmMTgzMDlhOWZjOWFlYzg1
MzkyYWQuLjI3MGM0YWVhMDNiMWUxOTdlZjMyNzk0MzczOWQwMmU4NjE0ZDc5YjggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb25zb2xlQWdlbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb25zb2xlQWdlbnQuY3BwCkBA
IC0xNDgsNiArMTQ4LDE0IEBAIHZvaWQgSW5zcGVjdG9yQ29uc29sZUFnZW50OjphZGRNZXNzYWdl
VG9Db25zb2xlKE1lc3NhZ2VTb3VyY2Ugc291cmNlLCBNZXNzYWdlVHlwCiAgICAgYWRkQ29uc29s
ZU1lc3NhZ2UoYWRvcHRQdHIobmV3IENvbnNvbGVNZXNzYWdlKHNvdXJjZSwgdHlwZSwgbGV2ZWws
IG1lc3NhZ2UsIHNjcmlwdElkLCBsaW5lTnVtYmVyKSkpOwogfQogCitWZWN0b3I8dW5zaWduZWQ+
IEluc3BlY3RvckNvbnNvbGVBZ2VudDo6Y29uc29sZU1lc3NhZ2VBcmd1bWVudENvdW50cygpCit7
CisgICAgVmVjdG9yPHVuc2lnbmVkPiByZXN1bHQobV9jb25zb2xlTWVzc2FnZXMuc2l6ZSgpKTsK
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fY29uc29sZU1lc3NhZ2VzLnNpemUoKTsgaSsr
KQorICAgICAgICByZXN1bHRbaV0gPSBtX2NvbnNvbGVNZXNzYWdlc1tpXS0+YXJndW1lbnRDb3Vu
dCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIHZvaWQgSW5zcGVjdG9yQ29uc29sZUFnZW50
OjpzdGFydFRpbWluZyhjb25zdCBTdHJpbmcmIHRpdGxlKQogewogICAgIC8vIEZvbGxvdyBGaXJl
YnVnJ3MgYmVoYXZpb3Igb2YgcmVxdWlyaW5nIGEgdGl0bGUgdGhhdCBpcyBub3QgbnVsbCBvcgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnNvbGVBZ2Vu
dC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnNvbGVBZ2VudC5oCmlu
ZGV4IDRiYTRhYWEyZDZiYjYzZWJjOTk5MTlmOTA2YjQ3MWJkOTBlYjQ4NTQuLmFmN2JkN2I4MTll
YmM0OTUyN2NjN2U4MjY2NDRlNDhmYmYxYmIzMTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JDb25zb2xlQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yQ29uc29sZUFnZW50LmgKQEAgLTY5LDYgKzY5LDcgQEAgcHVibGlj
OgogCiAgICAgdm9pZCBhZGRNZXNzYWdlVG9Db25zb2xlKE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VU
eXBlLCBNZXNzYWdlTGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgUGFzc1JlZlB0cjxTY3Jp
cHRBcmd1bWVudHM+LCBQYXNzUmVmUHRyPFNjcmlwdENhbGxTdGFjaz4pOwogICAgIHZvaWQgYWRk
TWVzc2FnZVRvQ29uc29sZShNZXNzYWdlU291cmNlLCBNZXNzYWdlVHlwZSwgTWVzc2FnZUxldmVs
LCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgc2NyaXB0SWQsIHVuc2lnbmVk
IGxpbmVOdW1iZXIpOworICAgIFZlY3Rvcjx1bnNpZ25lZD4gY29uc29sZU1lc3NhZ2VBcmd1bWVu
dENvdW50cygpOwogCiAgICAgdm9pZCBzdGFydFRpbWluZyhjb25zdCBTdHJpbmcmIHRpdGxlKTsK
ICAgICB2b2lkIHN0b3BUaW1pbmcoY29uc3QgU3RyaW5nJiB0aXRsZSwgUGFzc1JlZlB0cjxTY3Jp
cHRDYWxsU3RhY2s+KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKaW5kZXggNWI5YmZlODAwODdkZWQzNjVi
MjA1YjRlZmYwNjc0NTc5MDNjMDNmNy4uYTBhODIxMWQ5MjllYmZiNDk5Mzk2ZmE3ODZlYTIxNmFh
Mjg2MTg2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKQEAgLTU5Miw4ICs1OTIsMTAgQEAgdm9pZCBG
cmFtZTo6aW5qZWN0VXNlclNjcmlwdHNGb3JXb3JsZChET01XcmFwcGVyV29ybGQqIHdvcmxkLCBj
b25zdCBVc2VyU2NyaXB0VmUKIAogdm9pZCBGcmFtZTo6Y2xlYXJET01XaW5kb3coKQogewotICAg
IGlmIChtX2RvbVdpbmRvdykKKyAgICBpZiAobV9kb21XaW5kb3cpIHsKKyAgICAgICAgSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uOjpmcmFtZVdpbmRvd0Rpc2NhcmRlZCh0aGlzLCBtX2RvbVdpbmRv
dy5nZXQoKSk7CiAgICAgICAgIG1fZG9tV2luZG93LT5jbGVhcigpOworICAgIH0KICAgICBtX2Rv
bVdpbmRvdyA9IDA7CiB9CiAKQEAgLTY1OCw4ICs2NjAsMTAgQEAgdm9pZCBGcmFtZTo6Y2xlYXJU
aW1lcnMoKQogCiB2b2lkIEZyYW1lOjpzZXRET01XaW5kb3coRE9NV2luZG93KiBkb21XaW5kb3cp
CiB7Ci0gICAgaWYgKG1fZG9tV2luZG93KQorICAgIGlmIChtX2RvbVdpbmRvdykgeworICAgICAg
ICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmZyYW1lV2luZG93RGlzY2FyZGVkKHRoaXMsIG1f
ZG9tV2luZG93LmdldCgpKTsKICAgICAgICAgbV9kb21XaW5kb3ctPmNsZWFyKCk7CisgICAgfQog
ICAgIG1fZG9tV2luZG93ID0gZG9tV2luZG93OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVy
bmFscy5jcHAKaW5kZXggMjA1YjYyM2QyOGQzYzRjMmRmYmRhNzEzYmZkYWQ1ZTVkYTcwM2FjNy4u
NGMxZDAyYzBmZTZjMjdiZjc2MjlhN2JkYTBlMDU5YmRmYTI5YmM5NyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rl
c3RpbmcvSW50ZXJuYWxzLmNwcApAQCAtNDIsOSArNDIsMTEgQEAKICNpbmNsdWRlICJIVE1MSW5w
dXRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSFRNTFRleHRB
cmVhRWxlbWVudC5oIgorI2luY2x1ZGUgIkluc3BlY3RvckNvbnNvbGVBZ2VudC5oIgogI2luY2x1
ZGUgIkluc3BlY3RvckNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JDb3VudGVycy5o
IgogI2luY2x1ZGUgIkluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIgorI2luY2x1ZGUgIkluc3Ry
dW1lbnRpbmdBZ2VudHMuaCIKICNpbmNsdWRlICJJbnRlcm5hbFNldHRpbmdzLmgiCiAjaW5jbHVk
ZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIkxhbmd1YWdlLmgiCkBAIC05NTYsNiArOTU4LDIxIEBA
IHVuc2lnbmVkIEludGVybmFsczo6bnVtYmVyT2ZMaXZlRG9jdW1lbnRzKCkgY29uc3QKIHsKICAg
ICByZXR1cm4gSW5zcGVjdG9yQ291bnRlcnM6OmNvdW50ZXJWYWx1ZShJbnNwZWN0b3JDb3VudGVy
czo6RG9jdW1lbnRDb3VudGVyKTsKIH0KKworVmVjdG9yPFN0cmluZz4gSW50ZXJuYWxzOjpjb25z
b2xlTWVzc2FnZUFyZ3VtZW50Q291bnRzKERvY3VtZW50KiBkb2N1bWVudCkgY29uc3QKK3sKKyAg
ICBJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzID0gaW5zdHJ1bWVudGF0
aW9uRm9yUGFnZShkb2N1bWVudC0+cGFnZSgpKTsKKyAgICBpZiAoIWluc3RydW1lbnRpbmdBZ2Vu
dHMpCisgICAgICAgIHJldHVybiBWZWN0b3I8U3RyaW5nPigpOworICAgIEluc3BlY3RvckNvbnNv
bGVBZ2VudCogY29uc29sZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy0+aW5zcGVjdG9yQ29u
c29sZUFnZW50KCk7CisgICAgaWYgKCFjb25zb2xlQWdlbnQpCisgICAgICAgIHJldHVybiBWZWN0
b3I8U3RyaW5nPigpOworICAgIFZlY3Rvcjx1bnNpZ25lZD4gY291bnRzID0gY29uc29sZUFnZW50
LT5jb25zb2xlTWVzc2FnZUFyZ3VtZW50Q291bnRzKCk7CisgICAgVmVjdG9yPFN0cmluZz4gcmVz
dWx0KGNvdW50cy5zaXplKCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnRzLnNp
emUoKTsgaSsrKQorICAgICAgICByZXN1bHRbaV0gPSBTdHJpbmc6Om51bWJlcihjb3VudHNbaV0p
OworICAgIHJldHVybiByZXN1bHQ7Cit9CiAjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKIAog
Ym9vbCBJbnRlcm5hbHM6Omhhc0dyYW1tYXJNYXJrZXIoRG9jdW1lbnQqIGRvY3VtZW50LCBpbnQg
ZnJvbSwgaW50IGxlbmd0aCwgRXhjZXB0aW9uQ29kZSYpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS90ZXN0aW5nL0ludGVybmFscy5oIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5h
bHMuaAppbmRleCA1MTZkZGViMzliMTkyNDNiYzFiZDExZTI0M2UxMzFkZWQxNjM2MjMxLi41MTJm
NGQyNmMwZWMzNjIwYzFjOWU3MjBiNDlkYmQ1ZGFlZmVjNmUwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3Rpbmcv
SW50ZXJuYWxzLmgKQEAgLTE2NCw2ICsxNjQsNyBAQCBwdWJsaWM6CiAjaWYgRU5BQkxFKElOU1BF
Q1RPUikKICAgICB1bnNpZ25lZCBudW1iZXJPZkxpdmVOb2RlcygpIGNvbnN0OwogICAgIHVuc2ln
bmVkIG51bWJlck9mTGl2ZURvY3VtZW50cygpIGNvbnN0OworICAgIFZlY3RvcjxTdHJpbmc+IGNv
bnNvbGVNZXNzYWdlQXJndW1lbnRDb3VudHMoRG9jdW1lbnQqKSBjb25zdDsKICNlbmRpZgogCiAj
aWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVz
dGluZy9JbnRlcm5hbHMuaWRsIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaWRs
CmluZGV4IDlmYWYzNGViNDI5MWU3NTFiMGRjZWVjMDM4YTYxYTE5ZWQ1YWU4N2UuLjdiNGJlYjE3
N2NlNDkzYjM5NDc2MmRlYWNlYzU3NTg2NTIxZTQ4NzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0lu
dGVybmFscy5pZGwKQEAgLTE0MCw2ICsxNDAsNyBAQCBtb2R1bGUgd2luZG93IHsKIAogICAgICAg
ICBbQ29uZGl0aW9uYWw9SU5TUEVDVE9SXSB1bnNpZ25lZCBsb25nIG51bWJlck9mTGl2ZU5vZGVz
KCk7CiAgICAgICAgIFtDb25kaXRpb25hbD1JTlNQRUNUT1JdIHVuc2lnbmVkIGxvbmcgbnVtYmVy
T2ZMaXZlRG9jdW1lbnRzKCk7CisgICAgICAgIFtDb25kaXRpb25hbD1JTlNQRUNUT1JdIHNlcXVl
bmNlPFN0cmluZz4gY29uc29sZU1lc3NhZ2VBcmd1bWVudENvdW50cyhpbiBEb2N1bWVudCBkb2N1
bWVudCk7CiAKICNpZiBkZWZpbmVkKEVOQUJMRV9GVUxMU0NSRUVOX0FQSSkgJiYgRU5BQkxFX0ZV
TExTQ1JFRU5fQVBJCiAgICAgICAgIHZvaWQgd2Via2l0V2lsbEVudGVyRnVsbFNjcmVlbkZvckVs
ZW1lbnQoaW4gRG9jdW1lbnQgZG9jdW1lbnQsIGluIEVsZW1lbnQgZWxlbWVudCk7CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXgg
ZjQxNmQxYWE3NWNhNDJlMzNlMzEwZTA5ZmZhMDg3NzU3MDc2ZDlhOC4uNTJmOWM0MzhlN2Y5MjUz
YTg1MzI5OWYwZDBiMjc2NmI0OTNkZTg3MSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI1IEBACisyMDEyLTA0
LTI3ICBZdXJ5IFNlbWlraGF0c2t5ICA8eXVyeXNAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFNj
cmlwdFN0YXRlUHJvdGVjdGVkUHRyIHNob3VsZCBub3Qga2VlcCBhIHN0cm9uZyByZWZlcmVuY2Ug
dG8gdGhlIGNvbnRleHQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTg1MDA5CisKKyAgICAgICAgVGVzdCB0aGF0IGFmdGVyIGZyYW1lIG5hdmlnYXRpb24g
YWxsIGFyZ3VtZW50cyBwYXNzZWQgdG8gdGhlIGNvbnNvbGUgbWVzc2FnZXMKKyAgICAgICAgY3Jl
YXRlZCBpbiB0aGF0IGZyYW1lIHdpbGwgYmUgZGlzY2FyZGVkIGFuZCBub3QgcHJldmVudCB0aGUg
ZnJhbWUgY29udGV4dCBmcm9tCisgICAgICAgIGJlaW5nIEdDJ2VkLgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogaHR0cC90ZXN0cy9pbnNwZWN0b3It
ZW5hYmxlZC9jb25zb2xlLWNsZWFyLWFyZ3VtZW50cy1vbi1mcmFtZS1uYXZpZ2F0aW9uLWV4cGVj
dGVkLnR4dDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9pbnNwZWN0b3ItZW5hYmxlZC9j
b25zb2xlLWNsZWFyLWFyZ3VtZW50cy1vbi1mcmFtZS1uYXZpZ2F0aW9uLmh0bWw6IEFkZGVkLgor
ICAgICAgICAqIGh0dHAvdGVzdHMvaW5zcGVjdG9yLWVuYWJsZWQvY29uc29sZS1jbGVhci1hcmd1
bWVudHMtb24tZnJhbWUtcmVtb3ZlLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBodHRwL3Rlc3Rz
L2luc3BlY3Rvci1lbmFibGVkL2NvbnNvbGUtY2xlYXItYXJndW1lbnRzLW9uLWZyYW1lLXJlbW92
ZS5odG1sOgorICAgICAgICAqIGh0dHAvdGVzdHMvaW5zcGVjdG9yLWVuYWJsZWQvcmVzb3VyY2Vz
L2NvbnNvbGUtY2xlYXItYXJndW1lbnRzLXRlc3QuanM6IEFkZGVkLgorICAgICAgICAocHJpbnQp
OgorICAgICAgICAoZHVtcENvbnNvbGVNZXNzYWdlQXJndW1lbnRDb3VudHMpOgorICAgICAgICAq
IGh0dHAvdGVzdHMvaW5zcGVjdG9yL2NvbnNvbGUtdGVzdC5qczoKKyAgICAgICAgKGluaXRpYWxp
emVfQ29uc29sZVRlc3QuSW5zcGVjdG9yVGVzdC5jaGVja0NvbnNvbGVNZXNzYWdlc0RvbnRIYXZl
UGFyYW1ldGVycyk6CisgICAgICAgIChpbml0aWFsaXplX0NvbnNvbGVUZXN0KToKKwogMjAxMi0w
NC0yNiAgQWxleGFuZGVyIFBhdmxvdiAgPGFwYXZsb3ZAY2hyb21pdW0ub3JnPgogCiAgICAgICAg
IFdlYiBJbnNwZWN0b3I6IEltcGxlbWVudCB0aGUgIkRpc2FibGUgSmF2YVNjcmlwdCIgb3B0aW9u
IGluIHRoZSBzZXR0aW5ncyBkaWFsb2cKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVz
dHMvaW5zcGVjdG9yLWVuYWJsZWQvY29uc29sZS1jbGVhci1hcmd1bWVudHMtb24tZnJhbWUtbmF2
aWdhdGlvbi1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2luc3BlY3Rvci1l
bmFibGVkL2NvbnNvbGUtY2xlYXItYXJndW1lbnRzLW9uLWZyYW1lLW5hdmlnYXRpb24tZXhwZWN0
ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjU5ZDViYmIxN2RiZWY4MTc5NmE4ZThjNjA4YTYyMDQzY2QwYmQ1
NTQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2luc3BlY3Rvci1l
bmFibGVkL2NvbnNvbGUtY2xlYXItYXJndW1lbnRzLW9uLWZyYW1lLW5hdmlnYXRpb24tZXhwZWN0
ZWQudHh0CkBAIC0wLDAgKzEsMTAgQEAKK0NPTlNPTEUgTUVTU0FHRTogbGluZSAyOiBBIG1lc3Nh
Z2Ugd2l0aCBmaXJzdCBhcmd1bWVudCBzdHJpbmcKK0NPTlNPTEUgTUVTU0FHRTogbGluZSAzOiAy
MDExCitDT05TT0xFIE1FU1NBR0U6IGxpbmUgNDogW29iamVjdCBXaW5kb3ddCitUZXN0cyB0aGF0
IFdlYiBJbnNwZWN0b3Igd2lsbCBkaXNjYXJkIGNvbnNvbGUgbWVzc2FnZSBhcmd1bWVudHMgd2hl
biBpZnJhbWUgd2hlcmUgdGhlIG1lc3NhZ2Ugd2FzIGxvZ2dlZCBpcyBuYXZpZ2F0ZWQgdG8gYSBk
aWZmZXJlbnQgcGFnZS4KKworCitQQVNTRUQ6IGZvdW5kIGFyZ3VtZW50IGNvdW50cyBmb3IgMyBt
ZXNzYWdlcworUEFTU0VEOiBtZXNzYWdlICMwIGhhcyBubyBhcmd1bWVudHMuCitQQVNTRUQ6IG1l
c3NhZ2UgIzEgaGFzIG5vIGFyZ3VtZW50cy4KK1BBU1NFRDogbWVzc2FnZSAjMiBoYXMgbm8gYXJn
dW1lbnRzLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0b3ItZW5h
YmxlZC9jb25zb2xlLWNsZWFyLWFyZ3VtZW50cy1vbi1mcmFtZS1uYXZpZ2F0aW9uLmh0bWwgYi9M
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL2luc3BlY3Rvci1lbmFibGVkL2NvbnNvbGUtY2xlYXItYXJn
dW1lbnRzLW9uLWZyYW1lLW5hdmlnYXRpb24uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mNTg3YmEwNzdlY2Vl
NjNiYjJlYjY1NzFlODQ4MjJjOTIzNGNlYjEzCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy9pbnNwZWN0b3ItZW5hYmxlZC9jb25zb2xlLWNsZWFyLWFyZ3VtZW50cy1v
bi1mcmFtZS1uYXZpZ2F0aW9uLmh0bWwKQEAgLTAsMCArMSwzNiBAQAorPGh0bWw+Cis8aGVhZD4K
KzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvY29uc29sZS1jbGVhci1hcmd1bWVudHMtdGVzdC5qcyI+
PC9zY3JpcHQ+Cis8c2NyaXB0PgorCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7
CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgIGxheW91dFRl
c3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKK30KKwordmFyIGxvYWRDb3VudCA9IDA7CitmdW5j
dGlvbiBmcmFtZUxvYWRlZChldmVudCkgeworICAgICsrbG9hZENvdW50OworICAgIGlmIChsb2Fk
Q291bnQgPT09IDEpIHsKKyAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RoZUZyYW1l
Jykuc3JjID0gImFib3V0OmJsYW5rIjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGR1
bXBDb25zb2xlTWVzc2FnZUFyZ3VtZW50Q291bnRzKCk7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRU
ZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgp
OworfQorCis8L3NjcmlwdD4KKworPC9oZWFkPgorPGJvZHk+Cis8cD4KK1Rlc3RzIHRoYXQgV2Vi
IEluc3BlY3RvciB3aWxsIGRpc2NhcmQgY29uc29sZSBtZXNzYWdlIGFyZ3VtZW50cyB3aGVuIGlm
cmFtZSB3aGVyZSB0aGUgbWVzc2FnZSB3YXMKK2xvZ2dlZCBpcyBuYXZpZ2F0ZWQgdG8gYSBkaWZm
ZXJlbnQgcGFnZS4KKzwvcD4KKzxpZnJhbWUgaWQ9InRoZUZyYW1lIiBvbmxvYWQ9ImZyYW1lTG9h
ZGVkKGV2ZW50KSIgc3JjPSJyZXNvdXJjZXMvY29uc29sZS1jbGVhci1hcmd1bWVudHMtaWZyYW1l
Lmh0bWwiPjwvaWZyYW1lPgorPGRpdiBpZD0ib3V0cHV0Ij48L2Rpdj4KKzwvYm9keT4KKzwvaHRt
bD4KKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0b3ItZW5hYmxl
ZC9jb25zb2xlLWNsZWFyLWFyZ3VtZW50cy1vbi1mcmFtZS1yZW1vdmUtZXhwZWN0ZWQudHh0IGIv
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0b3ItZW5hYmxlZC9jb25zb2xlLWNsZWFyLWFy
Z3VtZW50cy1vbi1mcmFtZS1yZW1vdmUtZXhwZWN0ZWQudHh0CmluZGV4IDcxZTQ4MjJlZWVjMmU5
YzI2Yjg3ZWNkOGFmOTk3Y2Q5OTZkMzk5NjUuLjUyOGM1MmFlNzdjNTIzMzhhYTg0MWIxODdhZThm
NGEwMzhlMmFhYWEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9y
LWVuYWJsZWQvY29uc29sZS1jbGVhci1hcmd1bWVudHMtb24tZnJhbWUtcmVtb3ZlLWV4cGVjdGVk
LnR4dAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2luc3BlY3Rvci1lbmFibGVkL2NvbnNv
bGUtY2xlYXItYXJndW1lbnRzLW9uLWZyYW1lLXJlbW92ZS1leHBlY3RlZC50eHQKQEAgLTMsNyAr
Myw3IEBAIENPTlNPTEUgTUVTU0FHRTogbGluZSAzOiAyMDExCiBDT05TT0xFIE1FU1NBR0U6IGxp
bmUgNDogW29iamVjdCBXaW5kb3ddCiBUZXN0cyB0aGF0IGNvbnNvbGUgbWVzc2FnZSBhcmd1bWVu
dHMgd2lsbCBiZSBjbGVhcmVkIHdoZW4gaWZyYW1lIHdoZXJlIHRoZSBtZXNzYWdlcyB3ZXJlIGNy
ZWF0ZWQgaXMgcmVtb3ZlZC4KIAotQSBtZXNzYWdlIHdpdGggZmlyc3QgYXJndW1lbnQgc3RyaW5n
IHJlc291cmNlcy9jb25zb2xlLWNsZWFyLWFyZ3VtZW50cy1pZnJhbWUuaHRtbDoyCi0yMDExIHJl
c291cmNlcy9jb25zb2xlLWNsZWFyLWFyZ3VtZW50cy1pZnJhbWUuaHRtbDozCi1bb2JqZWN0IFdp
bmRvd10gcmVzb3VyY2VzL2NvbnNvbGUtY2xlYXItYXJndW1lbnRzLWlmcmFtZS5odG1sOjQKLQor
UEFTU0VEOiBmb3VuZCBhcmd1bWVudCBjb3VudHMgZm9yIDMgbWVzc2FnZXMKK1BBU1NFRDogbWVz
c2FnZSAjMCBoYXMgbm8gYXJndW1lbnRzLgorUEFTU0VEOiBtZXNzYWdlICMxIGhhcyBubyBhcmd1
bWVudHMuCitQQVNTRUQ6IG1lc3NhZ2UgIzIgaGFzIG5vIGFyZ3VtZW50cy4KZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9yLWVuYWJsZWQvY29uc29sZS1jbGVhci1h
cmd1bWVudHMtb24tZnJhbWUtcmVtb3ZlLmh0bWwgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2lu
c3BlY3Rvci1lbmFibGVkL2NvbnNvbGUtY2xlYXItYXJndW1lbnRzLW9uLWZyYW1lLXJlbW92ZS5o
dG1sCmluZGV4IGU0MjBmZTEzZTI4Yjc2MTlhOGU0YzZkMTQ0YTk3YzFkMDdlMDU0ZjEuLjBjYTYz
OTc1ZWE2ZDhjYmEzMGQ4MDcwMGUwNTg5NDRmN2RiOTExZDcgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9yLWVuYWJsZWQvY29uc29sZS1jbGVhci1hcmd1bWVudHMt
b24tZnJhbWUtcmVtb3ZlLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0
b3ItZW5hYmxlZC9jb25zb2xlLWNsZWFyLWFyZ3VtZW50cy1vbi1mcmFtZS1yZW1vdmUuaHRtbApA
QCAtMSwxMCArMSwxMSBAQAogPGh0bWw+CiA8aGVhZD4KLTxzY3JpcHQgc3JjPSIuLi9pbnNwZWN0
b3IvaW5zcGVjdG9yLXRlc3QuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Ii4uL2luc3BlY3Rv
ci9jb25zb2xlLXRlc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9jb25z
b2xlLWNsZWFyLWFyZ3VtZW50cy10ZXN0LmpzIj48L3NjcmlwdD4KIDxzY3JpcHQ+Ci1pZiAod2lu
ZG93LmxheW91dFRlc3RDb250cm9sbGVyKQoraWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxl
cikgewogICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICBsYXlv
dXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7Cit9CiAKIGZ1bmN0aW9uIHJlbW92ZUlGcmFt
ZSgpCiB7CkBAIC0xNCw5ICsxNSw5IEBAIGZ1bmN0aW9uIHJlbW92ZUlGcmFtZSgpCiAgICAgICAg
IGNvbnRhaW5lci5yZW1vdmVDaGlsZChjaGlsZCk7CiAgICAgICAgIGNoaWxkID0gY29udGFpbmVy
LmZpcnN0Q2hpbGQ7CiAgICAgfQorICAgIGR1bXBDb25zb2xlTWVzc2FnZUFyZ3VtZW50Q291bnRz
KCk7CiAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKLSAgICAgICAgbGF5b3V0
VGVzdENvbnRyb2xsZXIuc2hvd1dlYkluc3BlY3RvcigpOwotICAgIHJ1blRlc3QoKTsKKyAgICAg
ICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOwogfQogCiBmdW5jdGlvbiBjcmVh
dGVJRnJhbWUoKQpAQCAtMjcsMTMgKzI4LDYgQEAgZnVuY3Rpb24gY3JlYXRlSUZyYW1lKCkKICAg
ICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29udGFpbmVyJykuYXBwZW5kQ2hpbGQoaWZyYW1l
KTsKIH0KIAotZnVuY3Rpb24gdGVzdCgpCi17Ci0gICAgSW5zcGVjdG9yVGVzdC5leHBhbmRDb25z
b2xlTWVzc2FnZXMoKTsKLSAgICBJbnNwZWN0b3JUZXN0LmR1bXBDb25zb2xlTWVzc2FnZXMoKTsK
LSAgICBJbnNwZWN0b3JUZXN0LmNvbXBsZXRlVGVzdCgpOwotfQotCiA8L3NjcmlwdD4KIDwvaGVh
ZD4KIDxib2R5IG9ubG9hZD0iY3JlYXRlSUZyYW1lKCkiPgpAQCAtNDEsNiArMzUsNyBAQCBmdW5j
dGlvbiB0ZXN0KCkKIFRlc3RzIHRoYXQgY29uc29sZSBtZXNzYWdlIGFyZ3VtZW50cyB3aWxsIGJl
IGNsZWFyZWQgd2hlbiBpZnJhbWUgd2hlcmUgdGhlIG1lc3NhZ2VzIHdlcmUKIGNyZWF0ZWQgaXMg
cmVtb3ZlZC4KIDwvcD4KLTxkaXYgaWQ9ImNvbnRhaW5lciIvPgorPGRpdiBpZD0iY29udGFpbmVy
Ij48L2Rpdj4KKzxkaXYgaWQ9Im91dHB1dCI+PC9kaXY+CiA8L2JvZHk+CiA8L2h0bWw+CmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2luc3BlY3Rvci1lbmFibGVkL3Jlc291cmNl
cy9jb25zb2xlLWNsZWFyLWFyZ3VtZW50cy10ZXN0LmpzIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0
cy9pbnNwZWN0b3ItZW5hYmxlZC9yZXNvdXJjZXMvY29uc29sZS1jbGVhci1hcmd1bWVudHMtdGVz
dC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5iMDA0NmRkNjVkMjVkNDExMjdmMWVkNzQxYzc1YjMxZWQ1NDAyNmRl
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0b3ItZW5h
YmxlZC9yZXNvdXJjZXMvY29uc29sZS1jbGVhci1hcmd1bWVudHMtdGVzdC5qcwpAQCAtMCwwICsx
LDI0IEBACitmdW5jdGlvbiBwcmludCh0ZXh0KQoreworICAgIHZhciBvdXRwdXQgPSBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgib3V0cHV0Iik7CisgICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQoImRpdiIpOworICAgIGRpdi50ZXh0Q29udGVudCA9IHRleHQ7CisgICAgb3V0cHV0
LmFwcGVuZENoaWxkKGRpdik7Cit9CisKK2Z1bmN0aW9uIGR1bXBDb25zb2xlTWVzc2FnZUFyZ3Vt
ZW50Q291bnRzKCkKK3sKKyAgICB2YXIgY29uc29sZU1lc3NhZ2VBcmd1bWVudENvdW50cyA9IHdp
bmRvdy5pbnRlcm5hbHMuY29uc29sZU1lc3NhZ2VBcmd1bWVudENvdW50cyhkb2N1bWVudCk7Cisg
ICAgaWYgKGNvbnNvbGVNZXNzYWdlQXJndW1lbnRDb3VudHMubGVuZ3RoID09PSAzKQorICAgICAg
ICBwcmludCgiUEFTU0VEOiBmb3VuZCBhcmd1bWVudCBjb3VudHMgZm9yIDMgbWVzc2FnZXMiKTsK
KyAgICBlbHNlCisgICAgICAgIHByaW50KCJGQUlMRUQ6IHVuZXhwZWN0ZWQgbnVtYmVyIG9mIG1l
c3NhZ2VzOiAiICsgY29uc29sZU1lc3NhZ2VBcmd1bWVudENvdW50cy5sZW5ndGgpOworCisgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBjb25zb2xlTWVzc2FnZUFyZ3VtZW50Q291bnRzLmxlbmd0aDsg
aSsrKSB7CisgICAgICAgIHZhciBjb3VudCA9IGNvbnNvbGVNZXNzYWdlQXJndW1lbnRDb3VudHNb
aV07CisgICAgICAgIGlmIChjb3VudCA9PSAwKQorICAgICAgICAgICAgcHJpbnQoIlBBU1NFRDog
bWVzc2FnZSAjIiArIGkgKyAiIGhhcyBubyBhcmd1bWVudHMuIik7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHByaW50KCJGQUlMRUQ6IG1lc3NhZ2UgIyIgKyBpICsgIiBoYXMgIiArIGNvdW50
ICsgIiBhcmd1bWVudHMuIik7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy9pbnNwZWN0b3IvY29uc29sZS10ZXN0LmpzIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0
cy9pbnNwZWN0b3IvY29uc29sZS10ZXN0LmpzCmluZGV4IGM1ZjAxNjRiOTJlMzNjNzAzNTY2NWE2
NWY3MDgzYmQ2MTdjYjk0NmUuLjg5MjU5Y2I3OWJjMTFhNGUxMDI3MTA0MjkxODlhYWNhZTcwMTll
NzkgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9yL2NvbnNvbGUt
dGVzdC5qcworKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2luc3BlY3Rvci9jb25zb2xlLXRl
c3QuanMKQEAgLTQ0LDQgKzQ0LDIyIEBAIEluc3BlY3RvclRlc3QuZXhwYW5kQ29uc29sZU1lc3Nh
Z2VzID0gZnVuY3Rpb24oKQogICAgIH0KIH0KIAorSW5zcGVjdG9yVGVzdC5jaGVja0NvbnNvbGVN
ZXNzYWdlc0RvbnRIYXZlUGFyYW1ldGVycyA9IGZ1bmN0aW9uKCkKK3sKKyAgICB2YXIgbWVzc2Fn
ZXMgPSBXZWJJbnNwZWN0b3IuY29uc29sZS5tZXNzYWdlczsKKyAgICBmb3IgKHZhciBpID0gMDsg
aSA8IG1lc3NhZ2VzLmxlbmd0aDsgKytpKSB7CisgICAgICAgIHZhciBtID0gbWVzc2FnZXNbaV07
CisgICAgICAgIEluc3BlY3RvclRlc3QuYWRkUmVzdWx0KCJNZXNzYWdlWyIgKyBpICsgIl06Iik7
CisgICAgICAgIEluc3BlY3RvclRlc3QuYWRkUmVzdWx0KCJNZXNzYWdlOiAiICsgV2ViSW5zcGVj
dG9yLmRpc3BsYXlOYW1lRm9yVVJMKG0udXJsKSArICI6IiArIG0ubGluZSArICIgIiArIG0ubWVz
c2FnZSk7CisgICAgICAgIGlmICgiX3BhcmFtZXRlcnMiIGluIG0pIHsKKyAgICAgICAgICAgIGlm
IChtLl9wYXJhbWV0ZXJzKQorICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QuYWRkUmVzdWx0
KCJGQUlMRUQ6IG1lc3NhZ2UgcGFyYW1ldGVycyBsaXN0IGlzIG5vdCBlbXB0eTogIiArIG0uX3Bh
cmFtZXRlcnMpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIEluc3BlY3RvclRl
c3QuYWRkUmVzdWx0KCJTVUNDRVNTOiBtZXNzYWdlIHBhcmFtZXRlcnMgbGlzdCBpcyBlbXB0eS4g
Iik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmFkZFJlc3Vs
dCgiRkFJTEVEOiBkaWRuJ3QgZmluZCBfcGFyYW1ldGVycyBmaWVsZCBpbiB0aGUgbWVzc2FnZS4i
KTsKKyAgICAgICAgfQorICAgIH0KK30KKwogfQo=
</data>
<flag name="review"
          id="144815"
          type_id="1"
          status="+"
          setter="pfeldman"
    />
    <flag name="commit-queue"
          id="144823"
          type_id="3"
          status="-"
          setter="gustavo"
    />
          </attachment>
      

    </bug>

</bugzilla>