<?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>93607</bug_id>
          
          <creation_ts>2012-08-09 05:21:39 -0700</creation_ts>
          <short_desc>Web Inspector: [JSC] Caught exception is treated as uncaught</short_desc>
          <delta_ts>2013-09-10 14:00:08 -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 Inspector (Deprecated)</component>
          <version>528+ (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>P1</priority>
          <bug_severity>Critical</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Clark">clarkli</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>graouts</cc>
    
    <cc>joepeck</cc>
    
    <cc>mark.lam</cc>
    
    <cc>oliver</cc>
    
    <cc>paul+bugs</cc>
    
    <cc>timothy</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>691410</commentid>
    <comment_count>0</comment_count>
    <who name="Clark">clarkli</who>
    <bug_when>2012-08-09 05:21:39 -0700</bug_when>
    <thetext>Webkit Version: r125153

With the flag &quot;All Uncaught Exception&quot; ON, show Error Console. Load the attached file.

Actual: It paused in the &quot;throw&quot; line.

Expected: Since the &quot;throw&quot; is within a try...catch, it should not be treated as an uncaught exception.

This case is ok.===========================
try {
    throw new Error(&quot;x&quot;);
} catch (e) {

}

This case is bad: ===========================
try {
    function f() {
      throw new Error(&quot;x&quot;);
    }
    f();
} catch (e) {

}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>695744</commentid>
    <comment_count>1</comment_count>
    <who name="Deirdre Saoirse Moen">desamo</who>
    <bug_when>2012-08-14 22:31:53 -0700</bug_when>
    <thetext>rdar://problem/12101592</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>897475</commentid>
    <comment_count>2</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2013-06-05 10:59:23 -0700</bug_when>
    <thetext>*** Bug 117215 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>926978</commentid>
    <comment_count>3</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2013-09-09 16:06:15 -0700</bug_when>
    <thetext>Yep, this looks like a JSC issue.

ScriptDebugServer::execution is getting called with &quot;hasHandler&quot; being false. We would expect this to be true, because there is an eventual exception handler up the stack. I suspect this is a regression that happened a while ago.


---

(lldb) b ScriptDebugServer::exception

(lldb) c
* thread #1: tid = 0x8da30a, 0x00000001124613f7 WebCore`WebCore::ScriptDebugServer::exception(this=0x00007f948310b130, debuggerCallFrame=0x00007fff51742118, sourceID=1, lineNumber=14, columnNumber=0, hasHandler=false) + 39 at ScriptDebugServer.cpp:529, queue = &apos;com.apple.main-thread, stop reason = breakpoint 2.1
    frame #0: 0x00000001124613f7 WebCore`WebCore::ScriptDebugServer::exception(this=0x00007f948310b130, debuggerCallFrame=0x00007fff51742118, sourceID=1, lineNumber=14, columnNumber=0, hasHandler=false) + 39 at ScriptDebugServer.cpp:529
   526 	
   527 	void ScriptDebugServer::exception(const DebuggerCallFrame&amp; debuggerCallFrame, intptr_t sourceID, int lineNumber, int columnNumber, bool hasHandler)
   528 	{
-&gt; 529 	    if (m_paused)
   530 	        return;
   531 	
   532 	    if (m_pauseOnExceptionsState == PauseOnAllExceptions || (m_pauseOnExceptionsState == PauseOnUncaughtExceptions &amp;&amp; !hasHandler))

(lldb) p hasHandler
(bool) $8 = false

(lldb) bt
* thread #1: tid = 0x8da30a, 0x00000001124613f7 WebCore`WebCore::ScriptDebugServer::exception(this=0x00007f948310b130, debuggerCallFrame=0x00007fff51742118, sourceID=1, lineNumber=14, columnNumber=0, hasHandler=false) + 39 at ScriptDebugServer.cpp:529, queue = &apos;com.apple.main-thread, stop reason = breakpoint 2.1
    frame #0: 0x00000001124613f7 WebCore`WebCore::ScriptDebugServer::exception(this=0x00007f948310b130, debuggerCallFrame=0x00007fff51742118, sourceID=1, lineNumber=14, columnNumber=0, hasHandler=false) + 39 at ScriptDebugServer.cpp:529
    frame #1: 0x000000010fe92b3f JavaScriptCore`JSC::Interpreter::unwind(this=0x00007f9483464d50, callFrame=0x00007fff517421f0, exceptionValue=0x00007fff517421e8, bytecodeOffset=29) + 847 at Interpreter.cpp:633
    frame #2: 0x000000010feb359e JavaScriptCore`JSC::genericUnwind(vm=0x00007f9482821400, callFrame=0x0000000118f600c8, exceptionValue=JSValue at 0x00007fff517421e8, vPCIndex=29) + 110 at JITExceptions.cpp:73
    frame #3: 0x000000010ffc0e08 JavaScriptCore`doThrow(exec=0x0000000118f600c8, pc=0x00007f948303a970) + 136 at LLIntExceptions.cpp:51
    frame #4: 0x000000010ffc0d6d JavaScriptCore`JSC::LLInt::returnToThrow(exec=0x0000000118f600c8, pc=0x00007f948303a970) + 29 at LLIntExceptions.cpp:60
    frame #5: 0x000000010ffc89c5 JavaScriptCore`llint_slow_path_get_from_scope(exec=0x0000000118f600c8, pc=0x00007f948303a970) + 469 at LLIntSlowPaths.cpp:1295
    frame #6: 0x000000010ffce851 JavaScriptCore`llint_op_get_from_scope + 494</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>926981</commentid>
    <comment_count>4</comment_count>
      <attachid>211111</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2013-09-09 16:09:29 -0700</bug_when>
    <thetext>Created attachment 211111
[TEST] Test Case

Here is a manual test case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>927044</commentid>
    <comment_count>5</comment_count>
      <attachid>211132</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2013-09-09 19:10:07 -0700</bug_when>
    <thetext>Created attachment 211132
[PATCH] Proposed Fix

Check the entire call stack for exception handlers, instead of just the local call frame.

Added tests that cover this and other Inspector pause on exception states.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>927068</commentid>
    <comment_count>6</comment_count>
      <attachid>211132</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-09-09 20:09:52 -0700</bug_when>
    <thetext>Comment on attachment 211132
[PATCH] Proposed Fix

The Interpreter.cpp changes LGTM.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>927103</commentid>
    <comment_count>7</comment_count>
      <attachid>211132</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-09-09 21:23:53 -0700</bug_when>
    <thetext>Comment on attachment 211132
[PATCH] Proposed Fix

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

Thanks, Joe!

r=me, but please fix the logic error below, and add a test for it.

&gt; Source/JavaScriptCore/interpreter/Interpreter.cpp:582
&gt; +        if (!codeBlock)
&gt; +            return StackVisitor::Done;

I think you want StackVisitor::Continue here.

Consider this stack:
    js function with try/catch scope =&gt; Array.prototype.map =&gt; js function =&gt; throw
CodeBlock is null for host functions. Therefore, when you see Array.prototype.map, you&apos;ll return StackVisitor::Done and conclude that there&apos;s no handler. But there is a handler, in the function that called map.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>927106</commentid>
    <comment_count>8</comment_count>
    <who name="Paul Miller">paul+bugs</who>
    <bug_when>2013-09-09 21:26:19 -0700</bug_when>
    <thetext>*** Bug 121010 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>927183</commentid>
    <comment_count>9</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2013-09-10 00:09:44 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 211132 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=211132&amp;action=review
&gt; 
&gt; Thanks, Joe!
&gt; 
&gt; r=me, but please fix the logic error below, and add a test for it.
&gt; 
&gt; &gt; Source/JavaScriptCore/interpreter/Interpreter.cpp:582
&gt; &gt; +        if (!codeBlock)
&gt; &gt; +            return StackVisitor::Done;
&gt; 
&gt; I think you want StackVisitor::Continue here.
&gt; 
&gt; Consider this stack:
&gt;     js function with try/catch scope =&gt; Array.prototype.map =&gt; js function =&gt; throw
&gt; CodeBlock is null for host functions. Therefore, when you see Array.prototype.map, you&apos;ll return StackVisitor::Done and conclude that there&apos;s no handler. But there is a handler, in the function that called map.

Good catch and thanks for the example! That indeed fixes a issue. It also uncovered a somewhat surprising double pause.

Given:

    function exceptionInHostFunction()
    {
        [1].map(function(x) {
            throw &quot;exception in host function&quot;;
        });
    }

Setting the inspector to break on all exceptions, and evaluating: setTimeout(exceptionHostFunction, 0);

The inspector pauses twice:

  1. At the throw line. Continuing in Web Inspector goes to (2)
  2. At the [].map line. Continuing in Web Inspector no longer pauses.

I&apos;ll take a brief look at this. It exists separate from this issue/patch, but affects the tests I&apos;m writing for this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>927402</commentid>
    <comment_count>10</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2013-09-10 11:57:54 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; I&apos;ll take a brief look at this. It exists separate from this issue/patch, but affects the tests I&apos;m writing for this patch.

Filed: &lt;https://webkit.org/b/121108&gt; Web Inspector gets paused twice when there is an exception in host function

I added a workaround in these tests to expect an extra pause.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>927475</commentid>
    <comment_count>11</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2013-09-10 14:00:08 -0700</bug_when>
    <thetext>Committed &lt;http://trac.webkit.org/changeset/155471&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>211111</attachid>
            <date>2013-09-09 16:09:29 -0700</date>
            <delta_ts>2013-09-09 16:09:29 -0700</delta_ts>
            <desc>[TEST] Test Case</desc>
            <filename>exception.html</filename>
            <type>text/html</type>
            <size>659</size>
            <attacher name="Joseph Pecoraro">joepeck</attacher>
            
              <data encoding="base64">PHA+T3BlbiB0aGUgSW5zcGVjdG9yLCBFbmFibGUganVzdCB0aGUgIkFsbCBVbmNhdWdodCBFeGNl
cHRpb25zIiBicmVha3BvaW50IGFuZCBjbGljayB0aGUgYnV0dG9ucyBiZWxvdy4gTmVpdGhlciBz
aG91bGQgdHJpZ2dlciB0aGUgZGVidWdnZXIuPC9wPgoKPGJ1dHRvbiBpZD0ieDEiPkNhdWdodCBF
eGNlcHRpb24gQmFzaWMgKHdvcmtzKTwvYnV0dG9uPjxicj4KPGJ1dHRvbiBpZD0ieDIiPkNhdWdo
dCBFeGNlcHRpb24gT3RoZXIgKGZhaWxzKTwvYnV0dG9uPgoKPHNjcmlwdD4KZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoIngxIikuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCBmdW5jdGlvbihldmVu
dCkgewogICAgdHJ5IHsKICAgICAgICBhLmIuYy5kCiAgICB9IGNhdGNoIChlKSB7CiAgICAgICAg
Y29uc29sZS5sb2coImNhdWdodCBleGNlcHRpb24iLCBlKTsKICAgIH0KfSk7CgpmdW5jdGlvbiBm
b28oKSB7CiAgICBhLmIuYy5kCn0KCmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ4MiIpLmFkZEV2
ZW50TGlzdGVuZXIoImNsaWNrIiwgZnVuY3Rpb24oZXZlbnQpIHsKICAgIHRyeSB7CiAgICAgICAg
Zm9vKCk7CiAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgY29uc29sZS5sb2coImNhdWdodCBleGNl
cHRpb24iLCBlKTsKICAgIH0KfSk7Cjwvc2NyaXB0Pgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>211132</attachid>
            <date>2013-09-09 19:10:07 -0700</date>
            <delta_ts>2013-09-09 21:23:53 -0700</delta_ts>
            <desc>[PATCH] Proposed Fix</desc>
            <filename>hasHandler.patch</filename>
            <type>text/plain</type>
            <size>23092</size>
            <attacher name="Joseph Pecoraro">joepeck</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA3YmM4ZTE3Li43ZTA5ZDE3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTMtMDkt
MDkgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KKworICAgICAgICBXZWIg
SW5zcGVjdG9yOiBbSlNDXSBDYXVnaHQgZXhjZXB0aW9uIGlzIHRyZWF0ZWQgYXMgdW5jYXVnaHQK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkzNjA3CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHRlc3Rz
IGZvciBkaWZmZXJlbnQgaW5zcGVjdG9yIHBhdXNlIG9uIGV4Y2VwdGlvbnMgc3RhdGVzLgorCisg
ICAgICAgICogaW5zcGVjdG9yLXByb3RvY29sL2RlYnVnZ2VyL3Jlc291cmNlcy9leGNlcHRpb24u
anM6IEFkZGVkLgorICAgICAgICAqIGluc3BlY3Rvci1wcm90b2NvbC9kZWJ1Z2dlci9zZXRQYXVz
ZU9uRXhjZXB0aW9ucy1hbGwtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0
b3ItcHJvdG9jb2wvZGVidWdnZXIvc2V0UGF1c2VPbkV4Y2VwdGlvbnMtYWxsLmh0bWw6IEFkZGVk
LgorICAgICAgICAqIGluc3BlY3Rvci1wcm90b2NvbC9kZWJ1Z2dlci9zZXRQYXVzZU9uRXhjZXB0
aW9ucy1ub25lLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogaW5zcGVjdG9yLXByb3Rv
Y29sL2RlYnVnZ2VyL3NldFBhdXNlT25FeGNlcHRpb25zLW5vbmUuaHRtbDogQWRkZWQuCisgICAg
ICAgICogaW5zcGVjdG9yLXByb3RvY29sL2RlYnVnZ2VyL3NldFBhdXNlT25FeGNlcHRpb25zLXVu
Y2F1Z2h0LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogaW5zcGVjdG9yLXByb3RvY29s
L2RlYnVnZ2VyL3NldFBhdXNlT25FeGNlcHRpb25zLXVuY2F1Z2h0Lmh0bWw6IEFkZGVkLgorCiAy
MDEzLTA5LTA2ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIElu
dGVybmFscyBzaG91bGQgYWx3YXlzIGNhdXNlIGEgbGF5b3V0IGJlZm9yZSBjYWxsaW5nIGludG8g
VGV4dEl0ZXJhdG9yCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3ItcHJvdG9jb2wv
ZGVidWdnZXIvcmVzb3VyY2VzL2V4Y2VwdGlvbi5qcyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci1w
cm90b2NvbC9kZWJ1Z2dlci9yZXNvdXJjZXMvZXhjZXB0aW9uLmpzCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLmRlMjcxOTUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9pbnNwZWN0b3ItcHJvdG9jb2wvZGVidWdnZXIvcmVzb3VyY2VzL2V4Y2VwdGlvbi5qcwpAQCAt
MCwwICsxLDM5IEBACitmdW5jdGlvbiBleGNlcHRpb25CYXNpYygpCit7CisgICAgKHt9KS5hLmIu
Yy5kOworfQorCitmdW5jdGlvbiBleGNlcHRpb25ET00oKQoreworICAgIGRvY3VtZW50LmJvZHku
YXBwZW5kQ2hpbGQoMCk7Cit9CisKK2Z1bmN0aW9uIHRocm93U3RyaW5nKCkKK3sKKyAgICB0aHJv
dyAiZXhjZXB0aW9uIHN0cmluZyI7Cit9CisKK2Z1bmN0aW9uIHRocm93UGFyYW0obykKK3sKKyAg
ICB0aHJvdyBvOworfQorCitmdW5jdGlvbiBjYXRjaE5lc3RlZChmdW5jLCBkZXB0aCAvKiBvcHRp
b25hbEFyZ3NUb0Z1bmMuLi4gKi8pCit7CisgICAgaWYgKGRlcHRoID4gMSkgeworICAgICAgICB2
YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMCk7CisgICAg
ICAgIC0tYXJnc1sxXTsKKyAgICAgICAgY2F0Y2hOZXN0ZWQuYXBwbHkodGhpcywgYXJncyk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGZ1bmMuYXBwbHkodGhpcywg
QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKSk7CisgICAgICAgIH0gY2F0
Y2ggKGUpIHsKKyAgICAgICAgICAgIGNvbnNvbGUubG9nKCJjYXRjaE5lc3RlZCBjYXVnaHQgZXhj
ZXB0aW9uOiAiICsgSlNPTi5zdHJpbmdpZnkoZSkpOworICAgICAgICB9CisgICAgfQorfQorCitm
dW5jdGlvbiBub0V4Y2VwdGlvbigpCit7CisgICAgcmV0dXJuICJubyBleGNlcHRpb24iOworfQpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yLXByb3RvY29sL2RlYnVnZ2VyL3NldFBh
dXNlT25FeGNlcHRpb25zLWFsbC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3It
cHJvdG9jb2wvZGVidWdnZXIvc2V0UGF1c2VPbkV4Y2VwdGlvbnMtYWxsLWV4cGVjdGVkLnR4dApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTIxZTFmCi0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yLXByb3RvY29sL2RlYnVnZ2VyL3NldFBhdXNlT25F
eGNlcHRpb25zLWFsbC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw0MiBAQAorQ09OU09MRSBNRVNT
QUdFOiBsaW5lIDE6IGNhdWdodCBpbmxpbmU6IHsibGluZSI6MSwiY29sdW1uIjozNn0KK0NPTlNP
TEUgTUVTU0FHRTogbGluZSAzMTogY2F0Y2hOZXN0ZWQgY2F1Z2h0IGV4Y2VwdGlvbjogeyJsaW5l
IjozLCJjb2x1bW4iOjExLCJzb3VyY2VVUkwiOiJleGNlcHRpb24uanMifQorQ09OU09MRSBNRVNT
QUdFOiBsaW5lIDMxOiBjYXRjaE5lc3RlZCBjYXVnaHQgZXhjZXB0aW9uOiB7ImNvZGUiOjgsIm1l
c3NhZ2UiOiJOb3RGb3VuZEVycm9yOiBET00gRXhjZXB0aW9uIDgiLCJuYW1lIjoiTm90Rm91bmRF
cnJvciIsImxpbmUiOjgsImNvbHVtbiI6MzAsInNvdXJjZVVSTCI6ImV4Y2VwdGlvbi5qcyJ9CitD
T05TT0xFIE1FU1NBR0U6IGxpbmUgMzE6IGNhdGNoTmVzdGVkIGNhdWdodCBleGNlcHRpb246ICJl
eGNlcHRpb24gc3RyaW5nIgorQ09OU09MRSBNRVNTQUdFOiBsaW5lIDMxOiBjYXRjaE5lc3RlZCBj
YXVnaHQgZXhjZXB0aW9uOiB7ImxpbmUiOjE4LCJjb2x1bW4iOjEyLCJzb3VyY2VVUkwiOiJleGNl
cHRpb24uanMifQorQ09OU09MRSBNRVNTQUdFOiBsaW5lIDE6IFR5cGVFcnJvcjogdW5kZWZpbmVk
IGlzIG5vdCBhbiBvYmplY3QgKGV2YWx1YXRpbmcgJyh7fSkuYS5iJykKK0NPTlNPTEUgTUVTU0FH
RTogbGluZSAzOiBUeXBlRXJyb3I6IHVuZGVmaW5lZCBpcyBub3QgYW4gb2JqZWN0IChldmFsdWF0
aW5nICcoe30pLmEuYicpCitDT05TT0xFIE1FU1NBR0U6IGxpbmUgODogTm90Rm91bmRFcnJvcjog
RE9NIEV4Y2VwdGlvbiA4OiBBbiBhdHRlbXB0IHdhcyBtYWRlIHRvIHJlZmVyZW5jZSBhIE5vZGUg
aW4gYSBjb250ZXh0IHdoZXJlIGl0IGRvZXMgbm90IGV4aXN0LgorQ09OU09MRSBNRVNTQUdFOiBs
aW5lIDEzOiBleGNlcHRpb24gc3RyaW5nCitDT05TT0xFIE1FU1NBR0U6IGxpbmUgMTg6IFtvYmpl
Y3QgT2JqZWN0XQorQ09OU09MRSBNRVNTQUdFOiBsaW5lIDE4OiBFcnJvcjogZXJyb3IgbWVzc2Fn
ZQorRGVidWdnZXIuc2V0UGF1c2VPbkV4Y2VwdGlvbnMgYWxsCisKK0JyZWFrcG9pbnRzIEVuYWJs
ZWQKK0RlYnVnZ2VyLnNldFBhdXNlT25FeGNlcHRpb25zIC0gYWxsCitQQVNTIC0gZGlkIG5vdCBw
YXVzZSBvbiBub24tZXhjZXB0aW9uIHN0YXRlbWVudHMKK1BhdXNlZCEKK1Jlc3VtZWQKK1BhdXNl
ZCEKK1Jlc3VtZWQKK1BhdXNlZCEKK1Jlc3VtZWQKK1BhdXNlZCEKK1Jlc3VtZWQKK1BhdXNlZCEK
K1Jlc3VtZWQKK1BBU1MgLSBwYXVzZWQgZm9yIGVhY2ggY2F1Z2h0IGV4Y2VwdGlvbgorUGF1c2Vk
IQorUmVzdW1lZAorUGF1c2VkIQorUmVzdW1lZAorUGF1c2VkIQorUmVzdW1lZAorUGF1c2VkIQor
UmVzdW1lZAorUGF1c2VkIQorUmVzdW1lZAorUGF1c2VkIQorUmVzdW1lZAorUEFTUyAtIHBhdXNl
ZCBmb3IgZWFjaCB1bmNhdWdodCBleGNlcHRpb24KK1BBU1MgLSBkaWQgbm90IHBhdXNlIG9uIG5v
bi1leGNlcHRpb24gc3RhdGVtZW50cworCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0
b3ItcHJvdG9jb2wvZGVidWdnZXIvc2V0UGF1c2VPbkV4Y2VwdGlvbnMtYWxsLmh0bWwgYi9MYXlv
dXRUZXN0cy9pbnNwZWN0b3ItcHJvdG9jb2wvZGVidWdnZXIvc2V0UGF1c2VPbkV4Y2VwdGlvbnMt
YWxsLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQ0NjJkZQotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci1wcm90b2NvbC9kZWJ1Z2dlci9z
ZXRQYXVzZU9uRXhjZXB0aW9ucy1hbGwuaHRtbApAQCAtMCwwICsxLDEyNyBAQAorPGh0bWw+Cis8
aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9odHRwL3Rlc3RzL2luc3BlY3Rvci1wcm90b2NvbC9y
ZXNvdXJjZXMvcHJvdG9jb2wtdGVzdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3Vy
Y2VzL2V4Y2VwdGlvbi5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorZnVuY3Rpb24gdGVzdCgpCit7
CisgICAgdmFyIGV4cGVjdFBhdXNlID0gdHJ1ZTsKKworICAgIHZhciBzdGF0ZW1lbnRzV2l0aG91
dEV4Y2VwdGlvbnMgPSBbCisgICAgICAgICIxKzE7IiwKKyAgICAgICAgIm5vRXhjZXB0aW9uKCk7
IiwKKyAgICAgICAgImNhdGNoTmVzdGVkKG5vRXhjZXB0aW9uLCA3KTsiCisgICAgXTsKKworICAg
IHZhciBjdXJyZW50Q2F1Z2h0RXhjZXB0aW9uU3RhdGVtZW50ID0gMDsKKyAgICB2YXIgc3RhdGVt
ZW50c1dpdGhDYXVnaHRFeGNlcHRpb25zID0gWworICAgICAgICAidHJ5eyAoe30pLmEuYi5jLmQg
fSBjYXRjaCAoZSkgeyBjb25zb2xlLmxvZygnY2F1Z2h0IGlubGluZTogJyArIEpTT04uc3RyaW5n
aWZ5KGUpKTsgfSIsCisgICAgICAgICJjYXRjaE5lc3RlZChleGNlcHRpb25CYXNpYywgMSk7IiwK
KyAgICAgICAgImNhdGNoTmVzdGVkKGV4Y2VwdGlvbkRPTSwgMik7IiwKKyAgICAgICAgImNhdGNo
TmVzdGVkKHRocm93U3RyaW5nLCAxMCk7IiwKKyAgICAgICAgImNhdGNoTmVzdGVkKHRocm93UGFy
YW0sIDUsIG5ldyBFcnJvcignZXJyb3IgbWVzc2FnZScpKTsiLAorICAgIF07CisKKyAgICB2YXIg
Y3VycmVudFVuY2F1Z2h0RXhjZXB0aW9uU3RhdGVtZW50ID0gMDsKKyAgICB2YXIgc3RhdGVtZW50
c1dpdGhVbmNhdWdodEV4Y2VwdGlvbnMgPSBbCisgICAgICAgICIoe30pLmEuYi5jLmQ7IiwKKyAg
ICAgICAgImV4Y2VwdGlvbkJhc2ljKCk7IiwKKyAgICAgICAgImV4Y2VwdGlvbkRPTSgpOyIsCisg
ICAgICAgICJ0aHJvd1N0cmluZygpOyIsCisgICAgICAgICJ0aHJvd1BhcmFtKHt4OjF9KTsiLAor
ICAgICAgICAidGhyb3dQYXJhbShuZXcgRXJyb3IoJ2Vycm9yIG1lc3NhZ2UnKSk7IgorICAgIF07
CisKKyAgICBmdW5jdGlvbiBldmFsdWF0ZVN0YXRlbWVudHMobGlzdCwgY2FsbGJhY2spCisgICAg
eworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyArK2kpIHsKKyAgICAg
ICAgICAgIHZhciBzdGF0ZW1lbnQgPSBsaXN0W2ldOworICAgICAgICAgICAgdmFyIGxhc3QgPSBp
ID09PSBsaXN0Lmxlbmd0aCAtIDE7CisgICAgICAgICAgICB2YXIgcmVzcG9uc2VDYWxsYmFjayA9
IGxhc3QgPyBmdW5jdGlvbigpIHsgc2V0VGltZW91dChjYWxsYmFjaywgMTApOyB9IDogZnVuY3Rp
b24oKXt9OworICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5zZW5kQ29tbWFuZCgiUnVudGltZS5l
dmFsdWF0ZSIsIHtleHByZXNzaW9uOiAic2V0VGltZW91dChmdW5jdGlvbigpIHsgIiArIHN0YXRl
bWVudCArICIgfSwgMCk7In0sIHJlc3BvbnNlQ2FsbGJhY2spOworICAgICAgICB9CisgICAgfQor
CisgICAgZnVuY3Rpb24gZXZhbHVhdGVFeHBlY3RlZE5vUGF1c2VzKGNhbGxiYWNrKQorICAgIHsK
KyAgICAgICAgdmFyIHN0YXRlbWVudHMgPSBzdGF0ZW1lbnRzV2l0aG91dEV4Y2VwdGlvbnM7Cisg
ICAgICAgIGV2YWx1YXRlU3RhdGVtZW50cyhzdGF0ZW1lbnRzLCBmdW5jdGlvbigpIHsKKyAgICAg
ICAgICAgIEluc3BlY3RvclRlc3QubG9nKCJQQVNTIC0gZGlkIG5vdCBwYXVzZSBvbiBub24tZXhj
ZXB0aW9uIHN0YXRlbWVudHMiKTsKKyAgICAgICAgICAgIGNhbGxiYWNrKCk7CisgICAgICAgIH0p
OworICAgIH0KKworCisgICAgdmFyIHRyaWdnZXJOZXh0ID0gdHJpZ2dlck5leHRDYXVnaHRFeGNl
cHRpb247CisKKyAgICBmdW5jdGlvbiB0cmlnZ2VyTmV4dENhdWdodEV4Y2VwdGlvbigpCisgICAg
eworICAgICAgICAvLyBFdmFsdWF0ZSBzdGF0ZW1lbnQgYW5kIGV4cGVjdCB0byBwYXVzZS4KKyAg
ICAgICAgaWYgKGN1cnJlbnRDYXVnaHRFeGNlcHRpb25TdGF0ZW1lbnQgPCBzdGF0ZW1lbnRzV2l0
aENhdWdodEV4Y2VwdGlvbnMubGVuZ3RoKSB7CisgICAgICAgICAgICB2YXIgc3RhdGVtZW50ID0g
c3RhdGVtZW50c1dpdGhDYXVnaHRFeGNlcHRpb25zW2N1cnJlbnRDYXVnaHRFeGNlcHRpb25TdGF0
ZW1lbnQrK107CisgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LnNlbmRDb21tYW5kKCJSdW50aW1l
LmV2YWx1YXRlIiwge2V4cHJlc3Npb246ICJzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyAiICsgc3Rh
dGVtZW50ICsgIiB9LCAwKTsifSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwor
ICAgICAgICAvLyBEb25lIGV2YWx1YXRpbmcgY2F1Z2h0IGV4Y2VwdGlvbnMgc3RhdGVtZW50cy4g
TW92ZSBvbiB0byB1bmNhdWdodCBleGNlcHRpb25zLgorICAgICAgICBJbnNwZWN0b3JUZXN0Lmxv
ZygiUEFTUyAtIHBhdXNlZCBmb3IgZWFjaCBjYXVnaHQgZXhjZXB0aW9uIik7CisgICAgICAgIHRy
aWdnZXJOZXh0ID0gdHJpZ2dlck5leHRVbmNhdWdodEV4Y2VwdGlvbjsKKyAgICAgICAgdHJpZ2dl
ck5leHQoKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiB0cmlnZ2VyTmV4dFVuY2F1Z2h0RXhjZXB0
aW9uKCkKKyAgICB7CisgICAgICAgIC8vIEV2YWx1YXRlIHN0YXRlbWVudCBhbmQgZXhwZWN0IHRv
IHBhdXNlLgorICAgICAgICBpZiAoY3VycmVudFVuY2F1Z2h0RXhjZXB0aW9uU3RhdGVtZW50IDwg
c3RhdGVtZW50c1dpdGhVbmNhdWdodEV4Y2VwdGlvbnMubGVuZ3RoKSB7CisgICAgICAgICAgICB2
YXIgc3RhdGVtZW50ID0gc3RhdGVtZW50c1dpdGhVbmNhdWdodEV4Y2VwdGlvbnNbY3VycmVudFVu
Y2F1Z2h0RXhjZXB0aW9uU3RhdGVtZW50KytdOworICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5z
ZW5kQ29tbWFuZCgiUnVudGltZS5ldmFsdWF0ZSIsIHtleHByZXNzaW9uOiAic2V0VGltZW91dChm
dW5jdGlvbigpIHsgIiArIHN0YXRlbWVudCArICIgfSwgMCk7In0pOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisKKyAgICAgICAgLy8gRG9uZSBldmFsdWF0aW5nIHN0YXRlbWVudHMg
dG8gcGF1c2UuIEV2YWx1YXRlIHNvbWUgbW9yZSB3ZSBkbyBub3QgZXhwZWN0IHRvIHBhdXNlLgor
ICAgICAgICBJbnNwZWN0b3JUZXN0LmxvZygiUEFTUyAtIHBhdXNlZCBmb3IgZWFjaCB1bmNhdWdo
dCBleGNlcHRpb24iKTsKKyAgICAgICAgZXhwZWN0UGF1c2UgPSBmYWxzZTsKKyAgICAgICAgZXZh
bHVhdGVFeHBlY3RlZE5vUGF1c2VzKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgSW5zcGVjdG9y
VGVzdC5jb21wbGV0ZVRlc3QoKTsKKyAgICAgICAgfSk7CisgICAgfQorCisKKyAgICBJbnNwZWN0
b3JUZXN0LnNlbmRDb21tYW5kKCJEZWJ1Z2dlci5lbmFibGUiLCB7fSk7CisgICAgSW5zcGVjdG9y
VGVzdC5zZW5kQ29tbWFuZCgiRGVidWdnZXIuc2V0QnJlYWtwb2ludHNBY3RpdmUiLCB7YWN0aXZl
OiB0cnVlfSwgZnVuY3Rpb24oKSB7CisgICAgICAgIEluc3BlY3RvclRlc3QubG9nKCJCcmVha3Bv
aW50cyBFbmFibGVkIik7CisgICAgICAgIEluc3BlY3RvclRlc3Quc2VuZENvbW1hbmQoIkRlYnVn
Z2VyLnNldFBhdXNlT25FeGNlcHRpb25zIiwge3N0YXRlOiAiYWxsIn0sIGZ1bmN0aW9uKHJlc3Bv
bnNlT2JqZWN0KSB7CisgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmNoZWNrRm9yRXJyb3IocmVz
cG9uc2VPYmplY3QpOworICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5sb2coIkRlYnVnZ2VyLnNl
dFBhdXNlT25FeGNlcHRpb25zIC0gYWxsIik7CisgICAgICAgICAgICBldmFsdWF0ZUV4cGVjdGVk
Tm9QYXVzZXMoZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgZXhwZWN0UGF1c2UgPSB0cnVl
OworICAgICAgICAgICAgICAgIHRyaWdnZXJOZXh0KCk7CisgICAgICAgICAgICB9KTsKKyAgICAg
ICAgfSk7CisgICAgfSk7CisKKyAgICBJbnNwZWN0b3JUZXN0LmV2ZW50SGFuZGxlclsiRGVidWdn
ZXIucGF1c2VkIl0gPSBmdW5jdGlvbihtZXNzYWdlT2JqZWN0KQorICAgIHsKKyAgICAgICAgSW5z
cGVjdG9yVGVzdC5sb2coIlBhdXNlZCEiKTsKKworICAgICAgICBpZiAoIWV4cGVjdFBhdXNlKSB7
CisgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmxvZygiRkFJTCAtIGRlYnVnZ2VyIHBhdXNlZCB3
aGVuIHdlIGRpZCBub3QgZXhwZWN0IHRvIik7CisgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmNv
bXBsZXRlVGVzdCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAg
SW5zcGVjdG9yVGVzdC5zZW5kQ29tbWFuZCgiRGVidWdnZXIucmVzdW1lIiwge30pOworICAgIH0K
KworICAgIEluc3BlY3RvclRlc3QuZXZlbnRIYW5kbGVyWyJEZWJ1Z2dlci5yZXN1bWVkIl0gPSBm
dW5jdGlvbihtZXNzYWdlT2JqZWN0KQorICAgIHsKKyAgICAgICAgSW5zcGVjdG9yVGVzdC5sb2co
IlJlc3VtZWQiKTsKKyAgICAgICAgdHJpZ2dlck5leHQoKTsKKyAgICB9Cit9Cis8L3NjcmlwdD4K
KzwvaGVhZD4KKzxib2R5IG9ubG9hZD0icnVuVGVzdCgpIj4KKzxwPkRlYnVnZ2VyLnNldFBhdXNl
T25FeGNlcHRpb25zIGFsbDwvcD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2luc3BlY3Rvci1wcm90b2NvbC9kZWJ1Z2dlci9zZXRQYXVzZU9uRXhjZXB0aW9ucy1u
b25lLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2luc3BlY3Rvci1wcm90b2NvbC9kZWJ1Z2dl
ci9zZXRQYXVzZU9uRXhjZXB0aW9ucy1ub25lLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi45MGU0ZWZmCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVz
dHMvaW5zcGVjdG9yLXByb3RvY29sL2RlYnVnZ2VyL3NldFBhdXNlT25FeGNlcHRpb25zLW5vbmUt
ZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTYgQEAKK0NPTlNPTEUgTUVTU0FHRTogbGluZSAxOiBj
YXVnaHQgaW5saW5lOiB7ImxpbmUiOjEsImNvbHVtbiI6MzZ9CitDT05TT0xFIE1FU1NBR0U6IGxp
bmUgMzE6IGNhdGNoTmVzdGVkIGNhdWdodCBleGNlcHRpb246IHsibGluZSI6MywiY29sdW1uIjox
MSwic291cmNlVVJMIjoiZXhjZXB0aW9uLmpzIn0KK0NPTlNPTEUgTUVTU0FHRTogbGluZSAzMTog
Y2F0Y2hOZXN0ZWQgY2F1Z2h0IGV4Y2VwdGlvbjogeyJjb2RlIjo4LCJtZXNzYWdlIjoiTm90Rm91
bmRFcnJvcjogRE9NIEV4Y2VwdGlvbiA4IiwibmFtZSI6Ik5vdEZvdW5kRXJyb3IiLCJsaW5lIjo4
LCJjb2x1bW4iOjMwLCJzb3VyY2VVUkwiOiJleGNlcHRpb24uanMifQorQ09OU09MRSBNRVNTQUdF
OiBsaW5lIDMxOiBjYXRjaE5lc3RlZCBjYXVnaHQgZXhjZXB0aW9uOiAiZXhjZXB0aW9uIHN0cmlu
ZyIKK0NPTlNPTEUgTUVTU0FHRTogbGluZSAzMTogY2F0Y2hOZXN0ZWQgY2F1Z2h0IGV4Y2VwdGlv
bjogeyJsaW5lIjoxOCwiY29sdW1uIjoxMiwic291cmNlVVJMIjoiZXhjZXB0aW9uLmpzIn0KK0NP
TlNPTEUgTUVTU0FHRTogbGluZSAzOiBUeXBlRXJyb3I6IHVuZGVmaW5lZCBpcyBub3QgYW4gb2Jq
ZWN0IChldmFsdWF0aW5nICcoe30pLmEuYicpCitDT05TT0xFIE1FU1NBR0U6IGxpbmUgODogTm90
Rm91bmRFcnJvcjogRE9NIEV4Y2VwdGlvbiA4OiBBbiBhdHRlbXB0IHdhcyBtYWRlIHRvIHJlZmVy
ZW5jZSBhIE5vZGUgaW4gYSBjb250ZXh0IHdoZXJlIGl0IGRvZXMgbm90IGV4aXN0LgorQ09OU09M
RSBNRVNTQUdFOiBsaW5lIDEzOiBleGNlcHRpb24gc3RyaW5nCitDT05TT0xFIE1FU1NBR0U6IGxp
bmUgMTg6IFtvYmplY3QgT2JqZWN0XQorQ09OU09MRSBNRVNTQUdFOiBsaW5lIDE4OiBFcnJvcjog
ZXJyb3IgbWVzc2FnZQorRGVidWdnZXIuc2V0UGF1c2VPbkV4Y2VwdGlvbnMgbm9uZQorCitCcmVh
a3BvaW50cyBFbmFibGVkCitEZWJ1Z2dlci5zZXRQYXVzZU9uRXhjZXB0aW9ucyAtIG5vbmUKK1BB
U1M6IE5vIHBhdXNlcworCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3ItcHJvdG9j
b2wvZGVidWdnZXIvc2V0UGF1c2VPbkV4Y2VwdGlvbnMtbm9uZS5odG1sIGIvTGF5b3V0VGVzdHMv
aW5zcGVjdG9yLXByb3RvY29sL2RlYnVnZ2VyL3NldFBhdXNlT25FeGNlcHRpb25zLW5vbmUuaHRt
bApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zM2Y3M2E4Ci0tLSAvZGV2L251
bGwKKysrIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yLXByb3RvY29sL2RlYnVnZ2VyL3NldFBhdXNl
T25FeGNlcHRpb25zLW5vbmUuaHRtbApAQCAtMCwwICsxLDQ4IEBACis8aHRtbD4KKzxoZWFkPgor
PHNjcmlwdCBzcmM9Ii4uLy4uL2h0dHAvdGVzdHMvaW5zcGVjdG9yLXByb3RvY29sL3Jlc291cmNl
cy9wcm90b2NvbC10ZXN0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvZXhj
ZXB0aW9uLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CitmdW5jdGlvbiB0ZXN0KCkKK3sKKyAgICBJ
bnNwZWN0b3JUZXN0LnNlbmRDb21tYW5kKCJEZWJ1Z2dlci5lbmFibGUiLCB7fSk7CisgICAgSW5z
cGVjdG9yVGVzdC5zZW5kQ29tbWFuZCgiRGVidWdnZXIuc2V0QnJlYWtwb2ludHNBY3RpdmUiLCB7
YWN0aXZlOiB0cnVlfSwgZnVuY3Rpb24oKSB7CisgICAgICAgIEluc3BlY3RvclRlc3QubG9nKCJC
cmVha3BvaW50cyBFbmFibGVkIik7CisgICAgICAgIEluc3BlY3RvclRlc3Quc2VuZENvbW1hbmQo
IkRlYnVnZ2VyLnNldFBhdXNlT25FeGNlcHRpb25zIiwge3N0YXRlOiAibm9uZSJ9LCBmdW5jdGlv
bihyZXNwb25zZU9iamVjdCkgeworICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5jaGVja0ZvckVy
cm9yKHJlc3BvbnNlT2JqZWN0KTsKKyAgICAgICAgICAgIEluc3BlY3RvclRlc3QubG9nKCJEZWJ1
Z2dlci5zZXRQYXVzZU9uRXhjZXB0aW9ucyAtIG5vbmUiKTsKKyAgICAgICAgICAgIEluc3BlY3Rv
clRlc3Quc2VuZENvbW1hbmQoIlJ1bnRpbWUuZXZhbHVhdGUiLCB7ZXhwcmVzc2lvbjogInNldFRp
bWVvdXQoZnVuY3Rpb24oKSB7IDErMTsgfSwgMCk7In0pOworICAgICAgICAgICAgSW5zcGVjdG9y
VGVzdC5zZW5kQ29tbWFuZCgiUnVudGltZS5ldmFsdWF0ZSIsIHtleHByZXNzaW9uOiAic2V0VGlt
ZW91dChmdW5jdGlvbigpIHsgbm9FeGNlcHRpb24oKTsgfSwgMCk7In0pOworICAgICAgICAgICAg
SW5zcGVjdG9yVGVzdC5zZW5kQ29tbWFuZCgiUnVudGltZS5ldmFsdWF0ZSIsIHtleHByZXNzaW9u
OiAic2V0VGltZW91dChmdW5jdGlvbigpIHsgY2F0Y2hOZXN0ZWQobm9FeGNlcHRpb24sIDcpOyB9
LCAwKTsifSk7CisgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LnNlbmRDb21tYW5kKCJSdW50aW1l
LmV2YWx1YXRlIiwge2V4cHJlc3Npb246ICJzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyB0cnl7ICh7
fSkuYS5iLmMuZCB9IGNhdGNoIChlKSB7IGNvbnNvbGUubG9nKCdjYXVnaHQgaW5saW5lOiAnICsg
SlNPTi5zdHJpbmdpZnkoZSkpOyB9IH0sIDApOyJ9KTsKKyAgICAgICAgICAgIEluc3BlY3RvclRl
c3Quc2VuZENvbW1hbmQoIlJ1bnRpbWUuZXZhbHVhdGUiLCB7ZXhwcmVzc2lvbjogInNldFRpbWVv
dXQoZnVuY3Rpb24oKSB7IGNhdGNoTmVzdGVkKGV4Y2VwdGlvbkJhc2ljLCAxKTsgfSwgMCk7In0p
OworICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5zZW5kQ29tbWFuZCgiUnVudGltZS5ldmFsdWF0
ZSIsIHtleHByZXNzaW9uOiAic2V0VGltZW91dChmdW5jdGlvbigpIHsgY2F0Y2hOZXN0ZWQoZXhj
ZXB0aW9uRE9NLCAyKTsgfSwgMCk7In0pOworICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5zZW5k
Q29tbWFuZCgiUnVudGltZS5ldmFsdWF0ZSIsIHtleHByZXNzaW9uOiAic2V0VGltZW91dChmdW5j
dGlvbigpIHsgY2F0Y2hOZXN0ZWQodGhyb3dTdHJpbmcsIDEwKTsgfSwgMCk7In0pOworICAgICAg
ICAgICAgSW5zcGVjdG9yVGVzdC5zZW5kQ29tbWFuZCgiUnVudGltZS5ldmFsdWF0ZSIsIHtleHBy
ZXNzaW9uOiAic2V0VGltZW91dChmdW5jdGlvbigpIHsgY2F0Y2hOZXN0ZWQodGhyb3dQYXJhbSwg
NSwgbmV3IEVycm9yKCdlcnJvciBtZXNzYWdlJykpOyB9LCAwKTsifSk7CisgICAgICAgICAgICBJ
bnNwZWN0b3JUZXN0LnNlbmRDb21tYW5kKCJSdW50aW1lLmV2YWx1YXRlIiwge2V4cHJlc3Npb246
ICJzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyB7fS5hLmIuYy5kOyB9LCAwKTsifSk7CisgICAgICAg
ICAgICBJbnNwZWN0b3JUZXN0LnNlbmRDb21tYW5kKCJSdW50aW1lLmV2YWx1YXRlIiwge2V4cHJl
c3Npb246ICJzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyBleGNlcHRpb25CYXNpYygpOyB9LCAwKTsi
fSk7CisgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LnNlbmRDb21tYW5kKCJSdW50aW1lLmV2YWx1
YXRlIiwge2V4cHJlc3Npb246ICJzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyBleGNlcHRpb25ET00o
KTsgfSwgMCk7In0pOworICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5zZW5kQ29tbWFuZCgiUnVu
dGltZS5ldmFsdWF0ZSIsIHtleHByZXNzaW9uOiAic2V0VGltZW91dChmdW5jdGlvbigpIHsgdGhy
b3dTdHJpbmcoKTsgfSwgMCk7In0pOworICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5zZW5kQ29t
bWFuZCgiUnVudGltZS5ldmFsdWF0ZSIsIHtleHByZXNzaW9uOiAic2V0VGltZW91dChmdW5jdGlv
bigpIHsgdGhyb3dQYXJhbSh7eDoxfSk7IH0sIDApOyJ9KTsKKyAgICAgICAgICAgIEluc3BlY3Rv
clRlc3Quc2VuZENvbW1hbmQoIlJ1bnRpbWUuZXZhbHVhdGUiLCB7ZXhwcmVzc2lvbjogInNldFRp
bWVvdXQoZnVuY3Rpb24oKSB7IHRocm93UGFyYW0obmV3IEVycm9yKCdlcnJvciBtZXNzYWdlJykp
OyB9LCAwKTsifSwgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5j
dGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5sb2coIlBBU1M6IE5v
IHBhdXNlcyIpOworICAgICAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmNvbXBsZXRlVGVz
dCgpOworICAgICAgICAgICAgICAgIH0sIDEwKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9
KTsKKyAgICB9KTsKKworICAgIEluc3BlY3RvclRlc3QuZXZlbnRIYW5kbGVyWyJEZWJ1Z2dlci5w
YXVzZWQiXSA9IGZ1bmN0aW9uKG1lc3NhZ2VPYmplY3QpCisgICAgeworICAgICAgICBJbnNwZWN0
b3JUZXN0LmxvZygiUGF1c2VkISIpOworICAgICAgICBJbnNwZWN0b3JUZXN0LmxvZygiRkFJTCIp
OworICAgICAgICBJbnNwZWN0b3JUZXN0LmNvbXBsZXRlVGVzdCgpOworICAgIH0KK30KKzwvc2Ny
aXB0PgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJydW5UZXN0KCkiPgorPHA+RGVidWdnZXIuc2V0
UGF1c2VPbkV4Y2VwdGlvbnMgbm9uZTwvcD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2luc3BlY3Rvci1wcm90b2NvbC9kZWJ1Z2dlci9zZXRQYXVzZU9uRXhjZXB0
aW9ucy11bmNhdWdodC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3ItcHJvdG9j
b2wvZGVidWdnZXIvc2V0UGF1c2VPbkV4Y2VwdGlvbnMtdW5jYXVnaHQtZXhwZWN0ZWQudHh0Cm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1NjljZjkKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3ItcHJvdG9jb2wvZGVidWdnZXIvc2V0UGF1c2VPbkV4
Y2VwdGlvbnMtdW5jYXVnaHQtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMzcgQEAKK0NPTlNPTEUg
TUVTU0FHRTogbGluZSAxOiBjYXVnaHQgaW5saW5lOiB7ImxpbmUiOjEsImNvbHVtbiI6MzZ9CitD
T05TT0xFIE1FU1NBR0U6IGxpbmUgMzE6IGNhdGNoTmVzdGVkIGNhdWdodCBleGNlcHRpb246IHsi
bGluZSI6MywiY29sdW1uIjoxMSwic291cmNlVVJMIjoiZXhjZXB0aW9uLmpzIn0KK0NPTlNPTEUg
TUVTU0FHRTogbGluZSAzMTogY2F0Y2hOZXN0ZWQgY2F1Z2h0IGV4Y2VwdGlvbjogeyJjb2RlIjo4
LCJtZXNzYWdlIjoiTm90Rm91bmRFcnJvcjogRE9NIEV4Y2VwdGlvbiA4IiwibmFtZSI6Ik5vdEZv
dW5kRXJyb3IiLCJsaW5lIjo4LCJjb2x1bW4iOjMwLCJzb3VyY2VVUkwiOiJleGNlcHRpb24uanMi
fQorQ09OU09MRSBNRVNTQUdFOiBsaW5lIDMxOiBjYXRjaE5lc3RlZCBjYXVnaHQgZXhjZXB0aW9u
OiAiZXhjZXB0aW9uIHN0cmluZyIKK0NPTlNPTEUgTUVTU0FHRTogbGluZSAzMTogY2F0Y2hOZXN0
ZWQgY2F1Z2h0IGV4Y2VwdGlvbjogeyJsaW5lIjoxOCwiY29sdW1uIjoxMiwic291cmNlVVJMIjoi
ZXhjZXB0aW9uLmpzIn0KK0NPTlNPTEUgTUVTU0FHRTogbGluZSAxOiBUeXBlRXJyb3I6IHVuZGVm
aW5lZCBpcyBub3QgYW4gb2JqZWN0IChldmFsdWF0aW5nICcoe30pLmEuYicpCitDT05TT0xFIE1F
U1NBR0U6IGxpbmUgMzogVHlwZUVycm9yOiB1bmRlZmluZWQgaXMgbm90IGFuIG9iamVjdCAoZXZh
bHVhdGluZyAnKHt9KS5hLmInKQorQ09OU09MRSBNRVNTQUdFOiBsaW5lIDg6IE5vdEZvdW5kRXJy
b3I6IERPTSBFeGNlcHRpb24gODogQW4gYXR0ZW1wdCB3YXMgbWFkZSB0byByZWZlcmVuY2UgYSBO
b2RlIGluIGEgY29udGV4dCB3aGVyZSBpdCBkb2VzIG5vdCBleGlzdC4KK0NPTlNPTEUgTUVTU0FH
RTogbGluZSAxMzogZXhjZXB0aW9uIHN0cmluZworQ09OU09MRSBNRVNTQUdFOiBsaW5lIDE4OiBb
b2JqZWN0IE9iamVjdF0KK0NPTlNPTEUgTUVTU0FHRTogbGluZSAxODogRXJyb3I6IGVycm9yIG1l
c3NhZ2UKK0NPTlNPTEUgTUVTU0FHRTogbGluZSAxOiBjYXVnaHQgaW5saW5lOiB7ImxpbmUiOjEs
ImNvbHVtbiI6MzZ9CitDT05TT0xFIE1FU1NBR0U6IGxpbmUgMzE6IGNhdGNoTmVzdGVkIGNhdWdo
dCBleGNlcHRpb246IHsibGluZSI6MywiY29sdW1uIjoxMSwic291cmNlVVJMIjoiZXhjZXB0aW9u
LmpzIn0KK0NPTlNPTEUgTUVTU0FHRTogbGluZSAzMTogY2F0Y2hOZXN0ZWQgY2F1Z2h0IGV4Y2Vw
dGlvbjogeyJjb2RlIjo4LCJtZXNzYWdlIjoiTm90Rm91bmRFcnJvcjogRE9NIEV4Y2VwdGlvbiA4
IiwibmFtZSI6Ik5vdEZvdW5kRXJyb3IiLCJsaW5lIjo4LCJjb2x1bW4iOjMwLCJzb3VyY2VVUkwi
OiJleGNlcHRpb24uanMifQorQ09OU09MRSBNRVNTQUdFOiBsaW5lIDMxOiBjYXRjaE5lc3RlZCBj
YXVnaHQgZXhjZXB0aW9uOiAiZXhjZXB0aW9uIHN0cmluZyIKK0NPTlNPTEUgTUVTU0FHRTogbGlu
ZSAzMTogY2F0Y2hOZXN0ZWQgY2F1Z2h0IGV4Y2VwdGlvbjogeyJsaW5lIjoxOCwiY29sdW1uIjox
Miwic291cmNlVVJMIjoiZXhjZXB0aW9uLmpzIn0KK0RlYnVnZ2VyLnNldFBhdXNlT25FeGNlcHRp
b25zIHVuY2F1Z2h0CisKK0JyZWFrcG9pbnRzIEVuYWJsZWQKK0RlYnVnZ2VyLnNldFBhdXNlT25F
eGNlcHRpb25zIC0gdW5jYXVnaHQKK1BBU1MgLSBkaWQgbm90IHBhdXNlIG9uIG5vbi1leGNlcHRp
b24gc3RhdGVtZW50cyBvciBjYXVnaHQgZXhjZXB0aW9uIHN0YXRlbWVudHMKK1BhdXNlZCEKK1Jl
c3VtZWQKK1BhdXNlZCEKK1Jlc3VtZWQKK1BhdXNlZCEKK1Jlc3VtZWQKK1BhdXNlZCEKK1Jlc3Vt
ZWQKK1BhdXNlZCEKK1Jlc3VtZWQKK1BhdXNlZCEKK1Jlc3VtZWQKK1BBU1MgLSBwYXVzZWQgZm9y
IGVhY2ggdW5jYXVnaHQgZXhjZXB0aW9uCitQQVNTIC0gZGlkIG5vdCBwYXVzZSBvbiBub24tZXhj
ZXB0aW9uIHN0YXRlbWVudHMgb3IgY2F1Z2h0IGV4Y2VwdGlvbiBzdGF0ZW1lbnRzCitQQVNTCisK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci1wcm90b2NvbC9kZWJ1Z2dlci9zZXRQ
YXVzZU9uRXhjZXB0aW9ucy11bmNhdWdodC5odG1sIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yLXBy
b3RvY29sL2RlYnVnZ2VyL3NldFBhdXNlT25FeGNlcHRpb25zLXVuY2F1Z2h0Lmh0bWwKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGMyODlmZAotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL2luc3BlY3Rvci1wcm90b2NvbC9kZWJ1Z2dlci9zZXRQYXVzZU9uRXhjZXB0
aW9ucy11bmNhdWdodC5odG1sCkBAIC0wLDAgKzEsMTA5IEBACis8aHRtbD4KKzxoZWFkPgorPHNj
cmlwdCBzcmM9Ii4uLy4uL2h0dHAvdGVzdHMvaW5zcGVjdG9yLXByb3RvY29sL3Jlc291cmNlcy9w
cm90b2NvbC10ZXN0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvZXhjZXB0
aW9uLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CitmdW5jdGlvbiB0ZXN0KCkKK3sKKyAgICB2YXIg
ZXhwZWN0UGF1c2UgPSBmYWxzZTsKKworICAgIHZhciBzdGF0ZW1lbnRzV2l0aG91dEV4Y2VwdGlv
bnMgPSBbCisgICAgICAgICIxKzE7IiwKKyAgICAgICAgIm5vRXhjZXB0aW9uKCk7IiwKKyAgICAg
ICAgImNhdGNoTmVzdGVkKG5vRXhjZXB0aW9uLCA3KTsiCisgICAgXTsKKworICAgIHZhciBzdGF0
ZW1lbnRzV2l0aENhdWdodEV4Y2VwdGlvbnMgPSBbCisgICAgICAgICJ0cnl7ICh7fSkuYS5iLmMu
ZCB9IGNhdGNoIChlKSB7IGNvbnNvbGUubG9nKCdjYXVnaHQgaW5saW5lOiAnICsgSlNPTi5zdHJp
bmdpZnkoZSkpOyB9IiwKKyAgICAgICAgImNhdGNoTmVzdGVkKGV4Y2VwdGlvbkJhc2ljLCAxKTsi
LAorICAgICAgICAiY2F0Y2hOZXN0ZWQoZXhjZXB0aW9uRE9NLCAyKTsiLAorICAgICAgICAiY2F0
Y2hOZXN0ZWQodGhyb3dTdHJpbmcsIDEwKTsiLAorICAgICAgICAiY2F0Y2hOZXN0ZWQodGhyb3dQ
YXJhbSwgNSwgbmV3IEVycm9yKCdlcnJvciBtZXNzYWdlJykpOyIsCisgICAgXTsKKworICAgIHZh
ciBjdXJyZW50VW5jYXVnaHRFeGNlcHRpb25TdGF0ZW1lbnQgPSAwOworICAgIHZhciBzdGF0ZW1l
bnRzV2l0aFVuY2F1Z2h0RXhjZXB0aW9ucyA9IFsKKyAgICAgICAgIih7fSkuYS5iLmMuZDsiLAor
ICAgICAgICAiZXhjZXB0aW9uQmFzaWMoKTsiLAorICAgICAgICAiZXhjZXB0aW9uRE9NKCk7IiwK
KyAgICAgICAgInRocm93U3RyaW5nKCk7IiwKKyAgICAgICAgInRocm93UGFyYW0oe3g6MX0pOyIs
CisgICAgICAgICJ0aHJvd1BhcmFtKG5ldyBFcnJvcignZXJyb3IgbWVzc2FnZScpKTsiCisgICAg
XTsKKworICAgIGZ1bmN0aW9uIGV2YWx1YXRlU3RhdGVtZW50cyhsaXN0LCBjYWxsYmFjaykKKyAg
ICB7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7ICsraSkgeworICAg
ICAgICAgICAgdmFyIHN0YXRlbWVudCA9IGxpc3RbaV07CisgICAgICAgICAgICB2YXIgbGFzdCA9
IGkgPT09IGxpc3QubGVuZ3RoIC0gMTsKKyAgICAgICAgICAgIHZhciByZXNwb25zZUNhbGxiYWNr
ID0gbGFzdCA/IGZ1bmN0aW9uKCkgeyBzZXRUaW1lb3V0KGNhbGxiYWNrLCAxMCk7IH0gOiBmdW5j
dGlvbigpe307CisgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LnNlbmRDb21tYW5kKCJSdW50aW1l
LmV2YWx1YXRlIiwge2V4cHJlc3Npb246ICJzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyAiICsgc3Rh
dGVtZW50ICsgIiB9LCAwKTsifSwgcmVzcG9uc2VDYWxsYmFjayk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBmdW5jdGlvbiBldmFsdWF0ZUV4cGVjdGVkTm9QYXVzZXMoY2FsbGJhY2spCisgICAg
eworICAgICAgICB2YXIgc3RhdGVtZW50cyA9IHN0YXRlbWVudHNXaXRob3V0RXhjZXB0aW9ucy5j
b25jYXQoc3RhdGVtZW50c1dpdGhDYXVnaHRFeGNlcHRpb25zKTsKKyAgICAgICAgZXZhbHVhdGVT
dGF0ZW1lbnRzKHN0YXRlbWVudHMsIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgSW5zcGVjdG9y
VGVzdC5sb2coIlBBU1MgLSBkaWQgbm90IHBhdXNlIG9uIG5vbi1leGNlcHRpb24gc3RhdGVtZW50
cyBvciBjYXVnaHQgZXhjZXB0aW9uIHN0YXRlbWVudHMiKTsKKyAgICAgICAgICAgIGNhbGxiYWNr
KCk7CisgICAgICAgIH0pOworICAgIH0KKworICAgIGZ1bmN0aW9uIHRyaWdnZXJOZXh0VW5jYXVn
aHRFeGNlcHRpb24oKQorICAgIHsKKyAgICAgICAgLy8gRXZhbHVhdGUgc3RhdGVtZW50IGFuZCBl
eHBlY3QgdG8gcGF1c2UuCisgICAgICAgIGlmIChjdXJyZW50VW5jYXVnaHRFeGNlcHRpb25TdGF0
ZW1lbnQgPCBzdGF0ZW1lbnRzV2l0aFVuY2F1Z2h0RXhjZXB0aW9ucy5sZW5ndGgpIHsKKyAgICAg
ICAgICAgIHZhciBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRzV2l0aFVuY2F1Z2h0RXhjZXB0aW9uc1tj
dXJyZW50VW5jYXVnaHRFeGNlcHRpb25TdGF0ZW1lbnQrK107CisgICAgICAgICAgICBJbnNwZWN0
b3JUZXN0LnNlbmRDb21tYW5kKCJSdW50aW1lLmV2YWx1YXRlIiwge2V4cHJlc3Npb246ICJzZXRU
aW1lb3V0KGZ1bmN0aW9uKCkgeyAiICsgc3RhdGVtZW50ICsgIiB9LCAwKTsifSk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICAvLyBEb25lIGV2YWx1YXRpbmcgc3Rh
dGVtZW50cyB0byBwYXVzZS4gRXZhbHVhdGUgc29tZSBtb3JlIHdlIGRvIG5vdCBleHBlY3QgdG8g
cGF1c2UuCisgICAgICAgIEluc3BlY3RvclRlc3QubG9nKCJQQVNTIC0gcGF1c2VkIGZvciBlYWNo
IHVuY2F1Z2h0IGV4Y2VwdGlvbiIpOworICAgICAgICBleHBlY3RQYXVzZSA9IGZhbHNlOworICAg
ICAgICBldmFsdWF0ZUV4cGVjdGVkTm9QYXVzZXMoZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBJ
bnNwZWN0b3JUZXN0LmxvZygiUEFTUyIpOworICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5jb21w
bGV0ZVRlc3QoKTsKKyAgICAgICAgfSk7CisgICAgfQorCisKKyAgICBJbnNwZWN0b3JUZXN0LnNl
bmRDb21tYW5kKCJEZWJ1Z2dlci5lbmFibGUiLCB7fSk7CisgICAgSW5zcGVjdG9yVGVzdC5zZW5k
Q29tbWFuZCgiRGVidWdnZXIuc2V0QnJlYWtwb2ludHNBY3RpdmUiLCB7YWN0aXZlOiB0cnVlfSwg
ZnVuY3Rpb24oKSB7CisgICAgICAgIEluc3BlY3RvclRlc3QubG9nKCJCcmVha3BvaW50cyBFbmFi
bGVkIik7CisgICAgICAgIEluc3BlY3RvclRlc3Quc2VuZENvbW1hbmQoIkRlYnVnZ2VyLnNldFBh
dXNlT25FeGNlcHRpb25zIiwge3N0YXRlOiAidW5jYXVnaHQifSwgZnVuY3Rpb24ocmVzcG9uc2VP
YmplY3QpIHsKKyAgICAgICAgICAgIEluc3BlY3RvclRlc3QuY2hlY2tGb3JFcnJvcihyZXNwb25z
ZU9iamVjdCk7CisgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmxvZygiRGVidWdnZXIuc2V0UGF1
c2VPbkV4Y2VwdGlvbnMgLSB1bmNhdWdodCIpOworICAgICAgICAgICAgZXZhbHVhdGVFeHBlY3Rl
ZE5vUGF1c2VzKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIGV4cGVjdFBhdXNlID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICB0cmlnZ2VyTmV4dFVuY2F1Z2h0RXhjZXB0aW9uKCk7CisgICAg
ICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgfSk7CisKKyAgICBJbnNwZWN0b3JUZXN0LmV2
ZW50SGFuZGxlclsiRGVidWdnZXIucGF1c2VkIl0gPSBmdW5jdGlvbihtZXNzYWdlT2JqZWN0KQor
ICAgIHsKKyAgICAgICAgSW5zcGVjdG9yVGVzdC5sb2coIlBhdXNlZCEiKTsKKworICAgICAgICBp
ZiAoIWV4cGVjdFBhdXNlKSB7CisgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmxvZygiRkFJTCAt
IGRlYnVnZ2VyIHBhdXNlZCB3aGVuIHdlIGRpZCBub3QgZXhwZWN0IHRvIik7CisgICAgICAgICAg
ICBJbnNwZWN0b3JUZXN0LmNvbXBsZXRlVGVzdCgpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisKKyAgICAgICAgSW5zcGVjdG9yVGVzdC5zZW5kQ29tbWFuZCgiRGVidWdnZXIucmVz
dW1lIiwge30pOworICAgIH0KKworICAgIEluc3BlY3RvclRlc3QuZXZlbnRIYW5kbGVyWyJEZWJ1
Z2dlci5yZXN1bWVkIl0gPSBmdW5jdGlvbihtZXNzYWdlT2JqZWN0KQorICAgIHsKKyAgICAgICAg
SW5zcGVjdG9yVGVzdC5sb2coIlJlc3VtZWQiKTsKKyAgICAgICAgdHJpZ2dlck5leHRVbmNhdWdo
dEV4Y2VwdGlvbigpOworICAgIH0KK30KKzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgb25sb2Fk
PSJydW5UZXN0KCkiPgorPHA+RGVidWdnZXIuc2V0UGF1c2VPbkV4Y2VwdGlvbnMgdW5jYXVnaHQ8
L3A+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Q2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA2MzY1NWFm
Li45MWVhNzNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAx
My0wOS0wOSAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgorCisgICAgICAg
IFdlYiBJbnNwZWN0b3I6IFtKU0NdIENhdWdodCBleGNlcHRpb24gaXMgdHJlYXRlZCBhcyB1bmNh
dWdodAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTM2
MDcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDaGVj
ayB1cCB0aGUgZW50aXJlIGNhbGwgc3RhY2sgdG8gc2VlIGlmIHRoZXJlIGlzIGFuIGV4Y2VwdGlv
biBoYW5kbGVyLgorCisgICAgICAgICogaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwOgorICAg
ICAgICAoSlNDOjpHZXRFeGNlcHRpb25IYW5kbGVyRnVuY3Rvcjo6R2V0RXhjZXB0aW9uSGFuZGxl
ckZ1bmN0b3IpOgorICAgICAgICAoSlNDOjpHZXRFeGNlcHRpb25IYW5kbGVyRnVuY3Rvcjo6aGFu
ZGxlcik6CisgICAgICAgIChKU0M6OkdldEV4Y2VwdGlvbkhhbmRsZXJGdW5jdG9yOjpvcGVyYXRv
cigpKToKKwogMjAxMy0wOS0wOCAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29t
PgogCiAgICAgICAgIEJlZ2luIG1vdmluZyBvZmYgb2YgVHlwZVRyYWl0cy5oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAppbmRleCAwYzkw
NDM0Li4wNDY1NmZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0
ZXIvSW50ZXJwcmV0ZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9JbnRlcnByZXRlci5jcHAKQEAgLTU2Niw2ICs1NjYsMzMgQEAgSlNTdHJpbmcqIEludGVycHJl
dGVyOjpzdGFja1RyYWNlQXNTdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBWZWN0b3I8U3RhY2tGcmFt
ZT4gc3QKICAgICByZXR1cm4ganNTdHJpbmcoJmV4ZWMtPnZtKCksIGJ1aWxkZXIudG9TdHJpbmco
KSk7CiB9CiAKK2NsYXNzIEdldEV4Y2VwdGlvbkhhbmRsZXJGdW5jdG9yIHsKK3B1YmxpYzoKKyAg
ICBHZXRFeGNlcHRpb25IYW5kbGVyRnVuY3RvcigpCisgICAgICAgIDogbV9oYW5kbGVyKDApCisg
ICAgeworICAgIH0KKworICAgIEhhbmRsZXJJbmZvKiBoYW5kbGVyKCkgeyByZXR1cm4gbV9oYW5k
bGVyOyB9CisKKyAgICBTdGFja1Zpc2l0b3I6OlN0YXR1cyBvcGVyYXRvcigpKFN0YWNrVmlzaXRv
ciYgdmlzaXRvcikKKyAgICB7CisgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gdmlzaXRv
ci0+Y29kZUJsb2NrKCk7CisgICAgICAgIGlmICghY29kZUJsb2NrKQorICAgICAgICAgICAgcmV0
dXJuIFN0YWNrVmlzaXRvcjo6RG9uZTsKKworICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNl
dCA9IHZpc2l0b3ItPmJ5dGVjb2RlT2Zmc2V0KCk7CisgICAgICAgIG1faGFuZGxlciA9IGNvZGVC
bG9jay0+aGFuZGxlckZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KTsKKyAgICAgICAg
aWYgKG1faGFuZGxlcikKKyAgICAgICAgICAgIHJldHVybiBTdGFja1Zpc2l0b3I6OkRvbmU7CisK
KyAgICAgICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6Q29udGludWU7CisgICAgfQorCitwcml2YXRl
OgorICAgIEhhbmRsZXJJbmZvKiBtX2hhbmRsZXI7Cit9OworCiBjbGFzcyBVbndpbmRGdW5jdG9y
IHsKIHB1YmxpYzoKICAgICBVbndpbmRGdW5jdG9yKENhbGxGcmFtZSomIGNhbGxGcmFtZSwgSlNW
YWx1ZSYgZXhjZXB0aW9uVmFsdWUsIGJvb2wgaXNUZXJtaW5hdGlvbiwgQ29kZUJsb2NrKiYgY29k
ZUJsb2NrLCBIYW5kbGVySW5mbyomIGhhbmRsZXIpCkBAIC02MjcsOSArNjU0LDE3IEBAIE5FVkVS
X0lOTElORSBIYW5kbGVySW5mbyogSW50ZXJwcmV0ZXI6OnVud2luZChDYWxsRnJhbWUqJiBjYWxs
RnJhbWUsIEpTVmFsdWUmIGV4CiAgICAgICAgIC8vIFdlIG5lZWQgdG8gY2xlYXIgdGhlIGV4Y2Vw
dGlvbiBhbmQgdGhlIGV4Y2VwdGlvbiBzdGFjayBoZXJlIGluIG9yZGVyIHRvIHNlZSBpZiBhIG5l
dyBleGNlcHRpb24gaGFwcGVucy4KICAgICAgICAgLy8gQWZ0ZXJ3YXJkcywgdGhlIHZhbHVlcyBh
cmUgcHV0IGJhY2sgdG8gY29udGludWUgcHJvY2Vzc2luZyB0aGlzIGVycm9yLgogICAgICAgICBD
bGVhckV4Y2VwdGlvblNjb3BlIHNjb3BlKCZjYWxsRnJhbWUtPnZtKCkpOwotICAgICAgICAKICAg
ICAgICAgRGVidWdnZXJDYWxsRnJhbWUgZGVidWdnZXJDYWxsRnJhbWUoY2FsbEZyYW1lLCBleGNl
cHRpb25WYWx1ZSk7Ci0gICAgICAgIGJvb2wgaGFzSGFuZGxlciA9IGNvZGVCbG9jay0+aGFuZGxl
ckZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KTsKKworICAgICAgICBib29sIGhhc0hh
bmRsZXI7CisgICAgICAgIGlmIChpc1Rlcm1pbmF0aW9uKQorICAgICAgICAgICAgaGFzSGFuZGxl
ciA9IGZhbHNlOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIEdldEV4Y2VwdGlvbkhhbmRs
ZXJGdW5jdG9yIGZ1bmN0b3I7CisgICAgICAgICAgICBjYWxsRnJhbWUtPml0ZXJhdGUoZnVuY3Rv
cik7CisgICAgICAgICAgICBoYXNIYW5kbGVyID0gISFmdW5jdG9yLmhhbmRsZXIoKTsKKyAgICAg
ICAgfQorCiAgICAgICAgIGRlYnVnZ2VyLT5leGNlcHRpb24oZGVidWdnZXJDYWxsRnJhbWUsIGNv
ZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCktPnNvdXJjZUlEKCksIGNvZGVCbG9jay0+bGluZU51
bWJlckZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KSwgMCwgaGFzSGFuZGxlcik7CiAg
ICAgfQogCg==
</data>
<flag name="review"
          id="233183"
          type_id="1"
          status="+"
          setter="ggaren"
    />
    <flag name="commit-queue"
          id="233184"
          type_id="3"
          status="-"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>