<?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>40952</bug_id>
          
          <creation_ts>2010-06-21 16:15:04 -0700</creation_ts>
          <short_desc>Onloadend event is not supported in XMLHttpRequest</short_desc>
          <delta_ts>2012-01-03 11:54:51 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>XML</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></keywords>
          <priority>P2</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Stuart Ng">sng</reporter>
          <assigned_to name="Hans Muller">giles_joplin</assigned_to>
          <cc>abarth</cc>
    
    <cc>ap</cc>
    
    <cc>dglazkov</cc>
    
    <cc>giles_joplin</cc>
    
    <cc>japhet</cc>
    
    <cc>jarred</cc>
    
    <cc>jchaffraix</cc>
    
    <cc>joenotcharles</cc>
    
    <cc>ojan</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>240942</commentid>
    <comment_count>0</comment_count>
    <who name="Stuart Ng">sng</who>
    <bug_when>2010-06-21 16:15:04 -0700</bug_when>
    <thetext>- Send XHR request for website that should return OK
- Check that load and loadstart event handler was fired
- onloadend event handler was never fired. According to W3C Spec onloadend event should fired upon successful completion of XHR request.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>240991</commentid>
    <comment_count>1</comment_count>
    <who name="Joe Mason">joenotcharles</who>
    <bug_when>2010-06-21 17:12:06 -0700</bug_when>
    <thetext>http://atg05-yyz/html5/xhrasync/stateTest.htm shows this bug.  (I can&apos;t seem to add it to the url field.  Guess I don&apos;t have access?)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>241002</commentid>
    <comment_count>2</comment_count>
    <who name="Joe Mason">joenotcharles</who>
    <bug_when>2010-06-21 17:23:10 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; http://atg05-yyz/html5/xhrasync/stateTest.htm shows this bug.  (I can&apos;t seem to add it to the url field.  Guess I don&apos;t have access?)

Oops, that&apos;s not a public url.  Ignore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>516687</commentid>
    <comment_count>3</comment_count>
    <who name="Hans Muller">giles_joplin</who>
    <bug_when>2011-12-07 09:53:59 -0800</bug_when>
    <thetext>Per the W3C XMLHttpRequest2 Working Draft, http://www.w3.org/TR/XMLHttpRequest2, the loadend ProgressEvent should be dispatched by the XMLHttpRequest or it&apos;s XMLHttpRequestUpload after the load, error, and abort events for requests that have successfully completed, failed, or been aborted respectively.

Support for loadend requires a small number of changes:
- adding an onloadend EventListener attribute to Source/WebCore/xml/XMLHttpRequest.idl,XMLHttpRequestUpload.idl
- Similarly defining the event listener in Source/WebCore/xml/XMLHttpRequest.h, XMLHttpRequestUpload.h
- Dispatching the loadend after load/error/abort events are dispatched in Source/WebCore/xml/XMLHttpRequest.cpp</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>518289</commentid>
    <comment_count>4</comment_count>
      <attachid>118587</attachid>
    <who name="Hans Muller">giles_joplin</who>
    <bug_when>2011-12-09 09:15:23 -0800</bug_when>
    <thetext>Created attachment 118587
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>518291</commentid>
    <comment_count>5</comment_count>
    <who name="Hans Muller">giles_joplin</who>
    <bug_when>2011-12-09 09:17:00 -0800</bug_when>
    <thetext>I&apos;ve attached a patch that adds the feature as proposed in comment #3.  I&apos;ve included five tests which verify that the loadend progress event is dispatched last, as specfied in the XMLHttpRequest2 spec.  The tests haven&apos;t been combined to keep them simple and because they test independent code paths.   I did not include a test that verifies that upload error progress events are followed by a loadend because I wasn&apos;t sure how to generate a network error in that scenario.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>518292</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-09 09:18:20 -0800</bug_when>
    <thetext>Attachment 118587 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/http...&quot; exit_code: 1

LayoutTests/ChangeLog:8:  Line contains tab character.  [whitespace/tab] [5]
Source/WebCore/ChangeLog:9:  Line contains tab character.  [whitespace/tab] [5]
Total errors found: 2 in 18 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>518303</commentid>
    <comment_count>7</comment_count>
      <attachid>118587</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2011-12-09 09:43:49 -0800</bug_when>
    <thetext>Comment on attachment 118587
Patch

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

You are going in the right direction, some comments inlined. Also you are only testing half of the change: what happened to the synchronous case.

&gt; Source/WebCore/ChangeLog:15
&gt; +

The ChangeLog should have some information on the exact change you did. Here is an example of what you could write:

Patches the different sites where we dispatch a &apos;load&apos;, &apos;error&apos; or &apos;abort&apos; event to also dispatch a &apos;loadend&apos; event. Also added the plumbing for the new &apos;loadend&apos; event.

You can also put the details next to the lines below too (some reviewers prefer it this way but it is not mandated by our coding style).

&gt; Source/WebCore/xml/XMLHttpRequest.cpp:346
&gt; +        m_progressEventThrottle.dispatchEvent(XMLHttpRequestProgressEvent::create(eventNames().loadendEvent));

It would actually be more bullet proof for you to patch XMLHttpRequestProgressEventThrottle and XMLHttpRequestUpload. It&apos;s super easy to forget to add the loadend event at one call site and we would like to avoid that.

&gt; LayoutTests/http/tests/xmlhttprequest/onloadend-event-after-abort-expected.txt:7
&gt; +XHR Events: loadstart readyState=DONE abort loadend

Global remarks on the tests: it looks like the result could be checked automatically by the script and just print PASSED instead of the string. It would make the output a passing case a lot more readable. You would have to do some simple post-processing though. 

There are some examples in the same directory that follow this format, see xmlhttprequest-multiple-open.html for example.

&gt; LayoutTests/http/tests/xmlhttprequest/upload-onloadend-event-after-abort.html:7
&gt; +&lt;p&gt; Verify that a loadend ProgressEvent is dispatched after the error ProgressEvent when an async upload request is aborted.&lt;/p&gt;

looks like this description is not up to date as you are not expecting any errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>518424</commentid>
    <comment_count>8</comment_count>
    <who name="Hans Muller">giles_joplin</who>
    <bug_when>2011-12-09 12:52:38 -0800</bug_when>
    <thetext>I&apos;ve made all of the changes you suggested.   I added dispatchEventAndLoadEnd() methods to XMLHttpRequestUpload and XMLHttpRequestProgressEventThrottle which ensures that a loadend progress event is dispatched so long as the ...AndLoadEnd() method is called.  I could make the existing dispatchEvent() methods do as much automtically but that seems a presumptious, since the (I guess) the progress event protocol might not always pair events in this way?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>518708</commentid>
    <comment_count>9</comment_count>
      <attachid>118587</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-09 18:08:00 -0800</bug_when>
    <thetext>Comment on attachment 118587
Patch

Attachment 118587 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/10828488

New failing tests:
media/event-attributes.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>518797</commentid>
    <comment_count>10</comment_count>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2011-12-10 08:08:33 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; I added dispatchEventAndLoadEnd() methods to XMLHttpRequestUpload and XMLHttpRequestProgressEventThrottle which ensures that a loadend progress event is dispatched so long as the ...AndLoadEnd() method is called.

Great!

&gt; I could make the existing dispatchEvent() methods do as much automtically but that seems a presumptious, since the (I guess) the progress event protocol might not always pair events in this way?

I agree with you on this one. Not necessarily based on the ordering argument but more on the fact that it would be confusing for dispatchEvent() to have this side effect. dispatchEvent() should be just about properly filling an Event and dispatching it in the DOM.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>519214</commentid>
    <comment_count>11</comment_count>
      <attachid>118792</attachid>
    <who name="Hans Muller">giles_joplin</who>
    <bug_when>2011-12-12 08:34:05 -0800</bug_when>
    <thetext>Created attachment 118792
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>519799</commentid>
    <comment_count>12</comment_count>
      <attachid>118792</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2011-12-12 19:27:54 -0800</bug_when>
    <thetext>Comment on attachment 118792
Patch

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

I still don&apos;t see the synchronous case covered even if you mentioned it in the patch description.

&gt; Source/WebCore/ChangeLog:10
&gt; +        and XMLHttpRequestUpload to foolproof the common case of dispatching a load,abort,error

Space after the comma.

&gt; Source/WebCore/xml/XMLHttpRequest.cpp:772
&gt; +        if (m_upload &amp;&amp; m_uploadEventsAllowed) 

Trailing whitespace.

&gt; Source/WebCore/xml/XMLHttpRequest.cpp:784
&gt; +        if (m_upload &amp;&amp; m_uploadEventsAllowed) 

Ditto.

&gt; Source/WebCore/xml/XMLHttpRequestProgressEventThrottle.cpp:84
&gt; +void XMLHttpRequestProgressEventThrottle::dispatchEventAndLoadEnd(PassRefPtr&lt;Event&gt; event, ProgressEventAction progressEventAction)

This is really not much more fool-proof than calling the 2 methods together at the call sites. We really want to prevent people from mis-using the API as much as we could so at least white-listing the events you expect here with an ASSERT is a minimum.

It would be really neat to have some checks at the dispatchEvent level to prevent people from forgetting dispatchEventAndLoadEnd. I would really love to see your patch handle that properly. It would involve having 2 code path in dispatchEvent (2 functions like dispatchEvent and dispatchEventWithoutLoadEnd - in which case dispatchEventWithLoadEnd would be a better fit for this function), one common to every one and one specific for events that don&apos;t need a &apos;loadend&apos;. The latter would black-list the events we expect to go through dispatchEventAndLoadEnd. You may see some issues with this approach, feel free to push back in this case.

&gt; Source/WebCore/xml/XMLHttpRequestProgressEventThrottle.h:53
&gt; +    void dispatchEventAndLoadEnd(PassRefPtr&lt;Event&gt;, ProgressEventAction = DoNotFlushProgressEvent);

I did not see any call sites passing |ProgressEventAction| so let&apos;s just remove it and pass this value down to dispatchEvent.

&gt; LayoutTests/http/tests/xmlhttprequest/onloadend-event-after-abort.html:59
&gt; +    xhr.open(&quot;GET&quot;, &quot;resources/get.txt&quot;);

Nit: for consistency it would be nice to put |true| here (also for people who don&apos;t know that the default is true).

&gt; LayoutTests/http/tests/xmlhttprequest/onloadend-event-after-error.html:58
&gt; +    xhr.open(&quot;GET&quot;, &quot;resources/infinite-loop.php&quot;);

Ditto.

&gt; LayoutTests/http/tests/xmlhttprequest/onloadend-event-after-load.html:57
&gt; +    xhr.open(&quot;GET&quot;, &quot;resources/get.txt&quot;); 

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>520085</commentid>
    <comment_count>13</comment_count>
      <attachid>119020</attachid>
    <who name="Hans Muller">giles_joplin</who>
    <bug_when>2011-12-13 08:19:29 -0800</bug_when>
    <thetext>Created attachment 119020
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>520094</commentid>
    <comment_count>14</comment_count>
    <who name="Hans Muller">giles_joplin</who>
    <bug_when>2011-12-13 08:35:40 -0800</bug_when>
    <thetext>Sorry about leaving out the new sync tests, I&apos;m still getting used to git addition.  

I&apos;ve made all of the changes you suggested except for the one about the new dispatchEventAndLoadEnd() methods.  Assuming I&apos;m understanding you correctly, adding an ASSERT to the two new methods which verifies that the event parameter is either abort, error, or load, makes sense.    The other approach you suggested, if I&apos;m likewise understanding what you meant, would mean adding dispatch methods for each progress event type, where the abort, error, and load event methods would be aptly named because they would dispatch a loadend event too.   Then, so long as XMLHttpRequest.cpp did not call dispatchEvent() directly, it might be a little clearer that the implementation wasn&apos;t dispatching unpaired xx/loadend events.   Perhaps I&apos;m not seeing the point, but this seems like a lot of defensive code to diminish the probability of one kind of error?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>520101</commentid>
    <comment_count>15</comment_count>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2011-12-13 08:50:34 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; Sorry about leaving out the new sync tests, I&apos;m still getting used to git addition.  
&gt; 
&gt; Assuming I&apos;m understanding you correctly, adding an ASSERT to the two new methods which verifies that the event parameter is either abort, error, or load, makes sense.  

You&apos;re understanding correctly.

&gt;  Perhaps I&apos;m not seeing the point, but this seems like a lot of defensive code to diminish the probability of one kind of error?

But an extremely easy to make. If we decide to refactor our code to support some new XHR feature, you could end up just calling dispatchEvent([...].errorEvent). That&apos;s the use case I am trying to prevent.

I don&apos;t deny that it will be some work to get that implemented. I still think it would be worthwhile but if that doesn&apos;t cut, then I am OK to go without that check.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521388</commentid>
    <comment_count>16</comment_count>
    <who name="Hans Muller">giles_joplin</who>
    <bug_when>2011-12-14 15:52:10 -0800</bug_when>
    <thetext>I&apos;ve refactored the changes to reduce the probability of dispatching a solitary load, error, timeout, or abort event.  Events are no longer dispatched directly (with dispatchEvent()) in XMLHttpRequest. If this sounds like what you wanted, let me know and I&apos;ll upload a new patch.  Having done this, it doesn&apos;t seem to me like the extra complexity balances the added safety, however I&apos;m new to the code.

- Added the following public methods to XMLHttpRequestUpload.  Upload 

    void dispatchLoadStartProgressEvent();
    void dispatchProgressEvent(bool lengthComputable, unsigned long long loaded, unsigned long long total);
    void dispatchFinalProgressEvent(PassRefPtr&lt;Event&gt;); // ASSERTs that event is load, abort, error, or timeout


- Added similar public methods to XMLHttpRequestProgressEventThrottle as well as a method to dispatch the readystatechange event.   Note that XMLHttpRequestProgressEventThrottle::dispatchProgressEvent() was already defined.

    void dispatchReadyStateChangeEvent(ProgressEventAction = DoNotFlushProgressEvent);
    void dispatchLoadStartProgressEvent();
    void dispatchFinalProgressEvent(PassRefPtr&lt;Event&gt;); // ASSERTs that event is load, abort, error, or timeout

I&apos;ve overridden the dispatchEvent() methods with an ASSERT that the event parameter is *not* load, abort, error, or timeout.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>522641</commentid>
    <comment_count>17</comment_count>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2011-12-16 02:14:59 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; I&apos;ve refactored the changes to reduce the probability of dispatching a solitary load, error, timeout, or abort event.  Events are no longer dispatched directly (with dispatchEvent()) in XMLHttpRequest. If this sounds like what you wanted, let me know and I&apos;ll upload a new patch. 
 
It was exactly what I wanted. I would be happy to look at such a patch (even if it is rough just to assess the added complexity).

&gt; Having done this, it doesn&apos;t seem to me like the extra complexity balances the added safety, however I&apos;m new to the code.

Let me look at that and tell you if your gut feeling is OK.

Thanks for following up!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>522852</commentid>
    <comment_count>18</comment_count>
      <attachid>119636</attachid>
    <who name="Hans Muller">giles_joplin</who>
    <bug_when>2011-12-16 11:09:55 -0800</bug_when>
    <thetext>Created attachment 119636
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>522853</commentid>
    <comment_count>19</comment_count>
    <who name="Hans Muller">giles_joplin</who>
    <bug_when>2011-12-16 11:10:43 -0800</bug_when>
    <thetext>I&apos;ve uploaded a version of the patch that implements the changes I specified in comment #16 except for the XMLHttpRequestUpload::dispatchEvent() override.  This patch is just for the sake of review:

- The XMLHttpRequestUpload::dispatchEvent() override is needed.

- XMLHttpRequestProgressEventThrottle::dispatchEvent() should probably &quot;black list&quot; the events that should be dispatched with dispatchFinalProgressEvent() rather than asserting which events are OK.

- The ChangeLogs haven&apos;t been updated yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524557</commentid>
    <comment_count>20</comment_count>
      <attachid>119636</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2011-12-20 05:48:34 -0800</bug_when>
    <thetext>Comment on attachment 119636
Patch

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

OK, I think your gut feeling was right, If you just upload something along the line of the previous patch with the different comments addressed and the synchronous test cases from this patch, it should be fine by me. Thanks.

&gt; Source/WebCore/ChangeLog:11
&gt; +        or error event followed by a loadend event.

ChangeLog not up-to-date as mentioned.

&gt; Source/WebCore/loader/ImageLoader.cpp:1
&gt; +

Unrelated (bad) change.

&gt; Source/WebCore/xml/XMLHttpRequest.cpp:345
&gt; +        m_progressEventThrottle.dispatchFinalProgressEvent(XMLHttpRequestProgressEvent::create(eventNames().loadEvent));

You are subtly changing the semantics of the willLoadXHR / didLoadXHR here as we now include 2 events instead of one. I would rather see that the loadendEvent is dispatched after didLoadXHR was called and a bug filed about giving access to the &quot;loadend&quot; event from the WebInspector.

&gt; Source/WebCore/xml/XMLHttpRequestProgressEventThrottle.h:51
&gt; +    virtual void dispatchEvent(PassRefPtr&lt;Event&gt;, ProgressEventAction = DoNotFlushProgressEvent);

It shouldn&apos;t be virtual.

&gt; Source/WebCore/xml/XMLHttpRequestUpload.h:68
&gt; +        void dispatchProgressEvent(bool lengthComputable, unsigned long long loaded, unsigned long long total);

Those 2 should be removed as they don&apos;t seem to add much. Same remarks for the XHR throttle.

&gt; Source/WebCore/xml/XMLHttpRequestUpload.h:69
&gt; +        void dispatchFinalProgressEvent(PassRefPtr&lt;Event&gt;);

I think I preferred the old name dispatchEventAndLoadendEvent(). ProgressEvent hints a the &quot;progress&quot; event and yet you allow other type of events.

&gt; LayoutTests/http/tests/xmlhttprequest/onloadend-event-after-sync-requests.html:93
&gt; +    xhr.open(&quot;GET&quot;, &quot;resources/get.txt&quot;, false); 

Great that you added the synchronous case! For coherency, it would be better to have those splitted but it&apos;s not a strong requirement.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524739</commentid>
    <comment_count>21</comment_count>
      <attachid>120053</attachid>
    <who name="Hans Muller">giles_joplin</who>
    <bug_when>2011-12-20 12:00:35 -0800</bug_when>
    <thetext>Created attachment 120053
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524741</commentid>
    <comment_count>22</comment_count>
    <who name="Hans Muller">giles_joplin</who>
    <bug_when>2011-12-20 12:01:38 -0800</bug_when>
    <thetext>This patch is the same as one uploaded on 2011-12-13 08:19 PST, with the following additional changes:

Added ASSERT to XMLHttpRequestProgressEventThrottle::dispatchEventAndLoadEnd(), XMLHttpRequestProgressEventUpload::dispatchEventAndLoadEnd():

    ASSERT(event-&gt;type() == eventNames().loadEvent || event-&gt;type() == eventNames().abortEvent || event-&gt;type() == eventNames().errorEvent || event-&gt;type() == eventNames().timeoutEvent);

Removed use of dispatchEventAndLoadEnd() from XMLHttpRequest::callReadyStateChangeListener() to avoid subtly changing the semantics of InspectorInstrumentation:: willLoadXHR()/didLoadXHR().  Will file a bug per (review) comment #20.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>525175</commentid>
    <comment_count>23</comment_count>
      <attachid>120053</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2011-12-21 00:58:41 -0800</bug_when>
    <thetext>Comment on attachment 120053
Patch

Please don&apos;t forget to file a WebInspector bug about supporting loadend.

Also if you want your patch to be committed, you should set for the cq flag to &apos;?&apos;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526086</commentid>
    <comment_count>24</comment_count>
      <attachid>120053</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-22 00:55:21 -0800</bug_when>
    <thetext>Comment on attachment 120053
Patch

Clearing flags on attachment: 120053

Committed r103502: &lt;http://trac.webkit.org/changeset/103502&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>526087</commentid>
    <comment_count>25</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-22 00:55:27 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>528931</commentid>
    <comment_count>26</comment_count>
    <who name="Hans Muller">giles_joplin</who>
    <bug_when>2012-01-03 11:54:51 -0800</bug_when>
    <thetext>(In reply to comment #23)
&gt; (From update of attachment 120053 [details])
&gt; Please don&apos;t forget to file a WebInspector bug about supporting loadend.

Sorry about the delay, it&apos;s https://bugs.webkit.org/show_bug.cgi?id=75483</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>118587</attachid>
            <date>2011-12-09 09:15:23 -0800</date>
            <delta_ts>2011-12-12 08:34:01 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-40952-20111209091522.patch</filename>
            <type>text/plain</type>
            <size>23746</size>
            <attacher name="Hans Muller">giles_joplin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAyMzkwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDYyMjM1MDUxZWFkODY5
ZDIzYzlkYTQ5YmJmZDYxYzBkYjI4MzNhNS4uZmVhNGJhOWM4ZTU0ODkzZTA5YzVhNTY2MTE1ZTk4
ODZjMDYwODIwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDExLTEyLTA5ICBIYW5z
IE11bGxlciAgPGhtdWxsZXJAYWRvYmUuY29tPgorCisgICAgICAgIE9ubG9hZGVuZCBldmVudCBp
cyBub3Qgc3VwcG9ydGVkIGluIFhNTEh0dHBSZXF1ZXN0CisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MDk1MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIHN1cHBvcnQgZm9yIHRoZSBsb2FkZW5kIFBy
b2dyZXNFdmVudCB0byBYTUxIdHRwUmVxdWVzdCBhbmQgWE1MSHR0cFJlcXVlc3RVcGxvYWQuCisJ
CisgICAgICAgIFRlc3RzOiBodHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L29ubG9hZGVuZC1ldmVu
dC1hZnRlci1hYm9ydC5odG1sCisgICAgICAgICAgICAgICBodHRwL3Rlc3RzL3htbGh0dHByZXF1
ZXN0L29ubG9hZGVuZC1ldmVudC1hZnRlci1lcnJvci5odG1sCisgICAgICAgICAgICAgICBodHRw
L3Rlc3RzL3htbGh0dHByZXF1ZXN0L29ubG9hZGVuZC1ldmVudC1hZnRlci1sb2FkLmh0bWwKKyAg
ICAgICAgICAgICAgIGh0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvdXBsb2FkLW9ubG9hZGVuZC1l
dmVudC1hZnRlci1hYm9ydC5odG1sCisgICAgICAgICAgICAgICBodHRwL3Rlc3RzL3htbGh0dHBy
ZXF1ZXN0L3VwbG9hZC1vbmxvYWRlbmQtZXZlbnQtYWZ0ZXItbG9hZC5odG1sCisKKyAgICAgICAg
KiB4bWwvWE1MSHR0cFJlcXVlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVl
c3Q6OmNhbGxSZWFkeVN0YXRlQ2hhbmdlTGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6WE1M
SHR0cFJlcXVlc3Q6OmFib3J0KToKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0Ojpu
ZXR3b3JrRXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6OmFib3J0RXJy
b3IpOgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6OmRpZFNlbmREYXRhKToKKyAg
ICAgICAgKiB4bWwvWE1MSHR0cFJlcXVlc3QuaDoKKyAgICAgICAgKiB4bWwvWE1MSHR0cFJlcXVl
c3QuaWRsOgorICAgICAgICAqIHhtbC9YTUxIdHRwUmVxdWVzdFVwbG9hZC5oOgorICAgICAgICAq
IHhtbC9YTUxIdHRwUmVxdWVzdFVwbG9hZC5pZGw6CisKIDIwMTEtMTItMDggIFRpbSBIb3J0b24g
IDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CiAKICAgICAgICAgRW5hYmxlIGFuaW1hdGlvbnMg
b2YgQ1NTIGltYWdlcyB1c2luZyAtd2Via2l0LWNyb3NzLWZhZGUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWE1M
SHR0cFJlcXVlc3QuY3BwCmluZGV4IDA1OTBhNDNkNjU1N2ZiYzUwNWRlZjAwNjBkNTJjYWM5MmQy
ZGZlYjguLjBjZmUzZTJlODEwYWM2MzFiODZmNWE3Y2NiMjUwYzdlNTA0NzU0ZjEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcApAQCAtMzQzLDYgKzM0Myw3IEBAIHZvaWQgWE1M
SHR0cFJlcXVlc3Q6OmNhbGxSZWFkeVN0YXRlQ2hhbmdlTGlzdGVuZXIoKQogICAgIGlmIChtX3N0
YXRlID09IERPTkUgJiYgIW1fZXJyb3IpIHsKICAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uQ29va2llIGNvb2tpZSA9IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbExvYWRYSFIo
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCB0aGlzKTsKICAgICAgICAgbV9wcm9ncmVzc0V2ZW50
VGhyb3R0bGUuZGlzcGF0Y2hFdmVudChYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnQ6OmNyZWF0
ZShldmVudE5hbWVzKCkubG9hZEV2ZW50KSk7CisgICAgICAgIG1fcHJvZ3Jlc3NFdmVudFRocm90
dGxlLmRpc3BhdGNoRXZlbnQoWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50OjpjcmVhdGUoZXZl
bnROYW1lcygpLmxvYWRlbmRFdmVudCkpOwogICAgICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b246OmRpZExvYWRYSFIoY29va2llKTsKICAgICB9CiB9CkBAIC03MDMsMTAgKzcwNCwxMyBAQCB2
b2lkIFhNTEh0dHBSZXF1ZXN0OjphYm9ydCgpCiAgICAgfQogCiAgICAgbV9wcm9ncmVzc0V2ZW50
VGhyb3R0bGUuZGlzcGF0Y2hFdmVudChYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnQ6OmNyZWF0
ZShldmVudE5hbWVzKCkuYWJvcnRFdmVudCkpOworICAgIG1fcHJvZ3Jlc3NFdmVudFRocm90dGxl
LmRpc3BhdGNoRXZlbnQoWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50OjpjcmVhdGUoZXZlbnRO
YW1lcygpLmxvYWRlbmRFdmVudCkpOwogICAgIGlmICghbV91cGxvYWRDb21wbGV0ZSkgewogICAg
ICAgICBtX3VwbG9hZENvbXBsZXRlID0gdHJ1ZTsKLSAgICAgICAgaWYgKG1fdXBsb2FkICYmIG1f
dXBsb2FkRXZlbnRzQWxsb3dlZCkKKyAgICAgICAgaWYgKG1fdXBsb2FkICYmIG1fdXBsb2FkRXZl
bnRzQWxsb3dlZCkgewogICAgICAgICAgICAgbV91cGxvYWQtPmRpc3BhdGNoRXZlbnQoWE1MSHR0
cFJlcXVlc3RQcm9ncmVzc0V2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmFib3J0RXZlbnQpKTsK
KyAgICAgICAgICAgIG1fdXBsb2FkLT5kaXNwYXRjaEV2ZW50KFhNTEh0dHBSZXF1ZXN0UHJvZ3Jl
c3NFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5sb2FkZW5kRXZlbnQpKTsKKyAgICAgICAgfQog
ICAgIH0KIH0KIApAQCAtNzY3LDEwICs3NzEsMTMgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6bmV0
d29ya0Vycm9yKCkKIHsKICAgICBnZW5lcmljRXJyb3IoKTsKICAgICBtX3Byb2dyZXNzRXZlbnRU
aHJvdHRsZS5kaXNwYXRjaEV2ZW50KFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudDo6Y3JlYXRl
KGV2ZW50TmFtZXMoKS5lcnJvckV2ZW50KSk7CisgICAgbV9wcm9ncmVzc0V2ZW50VGhyb3R0bGUu
ZGlzcGF0Y2hFdmVudChYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnQ6OmNyZWF0ZShldmVudE5h
bWVzKCkubG9hZGVuZEV2ZW50KSk7CiAgICAgaWYgKCFtX3VwbG9hZENvbXBsZXRlKSB7CiAgICAg
ICAgIG1fdXBsb2FkQ29tcGxldGUgPSB0cnVlOwotICAgICAgICBpZiAobV91cGxvYWQgJiYgbV91
cGxvYWRFdmVudHNBbGxvd2VkKQorICAgICAgICBpZiAobV91cGxvYWQgJiYgbV91cGxvYWRFdmVu
dHNBbGxvd2VkKSB7CiAgICAgICAgICAgICBtX3VwbG9hZC0+ZGlzcGF0Y2hFdmVudChYTUxIdHRw
UmVxdWVzdFByb2dyZXNzRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuZXJyb3JFdmVudCkpOwor
ICAgICAgICAgICAgbV91cGxvYWQtPmRpc3BhdGNoRXZlbnQoWE1MSHR0cFJlcXVlc3RQcm9ncmVz
c0V2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmxvYWRlbmRFdmVudCkpOworICAgICAgICB9CiAg
ICAgfQogICAgIGludGVybmFsQWJvcnQoKTsKIH0KQEAgLTc3OSwxMCArNzg2LDEzIEBAIHZvaWQg
WE1MSHR0cFJlcXVlc3Q6OmFib3J0RXJyb3IoKQogewogICAgIGdlbmVyaWNFcnJvcigpOwogICAg
IG1fcHJvZ3Jlc3NFdmVudFRocm90dGxlLmRpc3BhdGNoRXZlbnQoWE1MSHR0cFJlcXVlc3RQcm9n
cmVzc0V2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmFib3J0RXZlbnQpKTsKKyAgICBtX3Byb2dy
ZXNzRXZlbnRUaHJvdHRsZS5kaXNwYXRjaEV2ZW50KFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVu
dDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5sb2FkZW5kRXZlbnQpKTsKICAgICBpZiAoIW1fdXBsb2Fk
Q29tcGxldGUpIHsKICAgICAgICAgbV91cGxvYWRDb21wbGV0ZSA9IHRydWU7Ci0gICAgICAgIGlm
IChtX3VwbG9hZCAmJiBtX3VwbG9hZEV2ZW50c0FsbG93ZWQpCisgICAgICAgIGlmIChtX3VwbG9h
ZCAmJiBtX3VwbG9hZEV2ZW50c0FsbG93ZWQpIHsKICAgICAgICAgICAgIG1fdXBsb2FkLT5kaXNw
YXRjaEV2ZW50KFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMo
KS5hYm9ydEV2ZW50KSk7CisgICAgICAgICAgICBtX3VwbG9hZC0+ZGlzcGF0Y2hFdmVudChYTUxI
dHRwUmVxdWVzdFByb2dyZXNzRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkubG9hZGVuZEV2ZW50
KSk7CisgICAgICAgIH0KICAgICB9CiB9CiAKQEAgLTEwMjEsOCArMTAzMSwxMCBAQCB2b2lkIFhN
TEh0dHBSZXF1ZXN0OjpkaWRTZW5kRGF0YSh1bnNpZ25lZCBsb25nIGxvbmcgYnl0ZXNTZW50LCB1
bnNpZ25lZCBsb25nIGxvbgogCiAgICAgaWYgKGJ5dGVzU2VudCA9PSB0b3RhbEJ5dGVzVG9CZVNl
bnQgJiYgIW1fdXBsb2FkQ29tcGxldGUpIHsKICAgICAgICAgbV91cGxvYWRDb21wbGV0ZSA9IHRy
dWU7Ci0gICAgICAgIGlmIChtX3VwbG9hZEV2ZW50c0FsbG93ZWQpCisgICAgICAgIGlmIChtX3Vw
bG9hZEV2ZW50c0FsbG93ZWQpIHsKICAgICAgICAgICAgIG1fdXBsb2FkLT5kaXNwYXRjaEV2ZW50
KFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5sb2FkRXZl
bnQpKTsKKyAgICAgICAgICAgIG1fdXBsb2FkLT5kaXNwYXRjaEV2ZW50KFhNTEh0dHBSZXF1ZXN0
UHJvZ3Jlc3NFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5sb2FkZW5kRXZlbnQpKTsKKyAgICAg
ICAgfQogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBS
ZXF1ZXN0LmggYi9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuaAppbmRleCA2NzE5
MjVlMzcwZmQyOTM5MWJiYTdiYzM0MzJjNjE3MWZiNTU4MjAwLi4xNGM5NDkxNGI0ZmNhNDc3MWZh
OTYxZjBlMGQ0NzE4NzkzZmZhMmEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94bWwvWE1M
SHR0cFJlcXVlc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuaApA
QCAtMTMzLDYgKzEzMyw3IEBAIHB1YmxpYzoKICAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJ
U1RFTkVSKGFib3J0KTsKICAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKGVycm9y
KTsKICAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKGxvYWQpOworICAgIERFRklO
RV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIobG9hZGVuZCk7CiAgICAgREVGSU5FX0FUVFJJQlVU
RV9FVkVOVF9MSVNURU5FUihsb2Fkc3RhcnQpOwogICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRf
TElTVEVORVIocHJvZ3Jlc3MpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94bWwvWE1M
SHR0cFJlcXVlc3QuaWRsIGIvU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmlkbApp
bmRleCA4MjZkMTAxMjY3YmQwZGQ5YzUyM2QyYzk1ZTI3ODIzN2NkN2RhZmQ1Li42ZmI0ZGZkNzJh
MzQzNDU2YTVlNTU1OTBkYjIzZGJmZTYwMGVhYmE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS94bWwvWE1MSHR0cFJlcXVlc3QuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRw
UmVxdWVzdC5pZGwKQEAgLTQyLDYgKzQyLDcgQEAgbW9kdWxlIHhtbCB7CiAgICAgICAgIGF0dHJp
YnV0ZSBFdmVudExpc3RlbmVyIG9uYWJvcnQ7CiAgICAgICAgIGF0dHJpYnV0ZSBFdmVudExpc3Rl
bmVyIG9uZXJyb3I7CiAgICAgICAgIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9ubG9hZDsKKyAg
ICAgICAgYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIgb25sb2FkZW5kOwogICAgICAgICBhdHRyaWJ1
dGUgRXZlbnRMaXN0ZW5lciBvbmxvYWRzdGFydDsKICAgICAgICAgYXR0cmlidXRlIEV2ZW50TGlz
dGVuZXIgb25wcm9ncmVzczsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUveG1sL1hNTEh0
dHBSZXF1ZXN0VXBsb2FkLmggYi9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3RVcGxv
YWQuaAppbmRleCA3ZjQ1ODYxNzEwZGIxY2QzZGRhNmMzNDE1YjViODUzZWRmZDMzZjRkLi5hNTkw
N2FmNDg0NDIxMWNlMTMyMzQ0MGFhYzk1ZjcwZDlmZmU0MmViIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3RVcGxvYWQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS94
bWwvWE1MSHR0cFJlcXVlc3RVcGxvYWQuaApAQCAtNjAsNiArNjAsNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIoYWJvcnQpOwog
ICAgICAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKGVycm9yKTsKICAgICAgICAg
REVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihsb2FkKTsKKyAgICAgICAgREVGSU5FX0FU
VFJJQlVURV9FVkVOVF9MSVNURU5FUihsb2FkZW5kKTsKICAgICAgICAgREVGSU5FX0FUVFJJQlVU
RV9FVkVOVF9MSVNURU5FUihsb2Fkc3RhcnQpOwogICAgICAgICBERUZJTkVfQVRUUklCVVRFX0VW
RU5UX0xJU1RFTkVSKHByb2dyZXNzKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUveG1s
L1hNTEh0dHBSZXF1ZXN0VXBsb2FkLmlkbCBiL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVx
dWVzdFVwbG9hZC5pZGwKaW5kZXggNzM0OTM5ZDg5ZDZhM2FjZGYwNTlkOTMxZWQ2MjdhNmJlYTQ5
OThkYS4uNWY5OGNiNzdmZWZlZDRiOWY2MjAzMDE3NjE5YjViYjNhNDIwYTYyMiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0VXBsb2FkLmlkbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3RVcGxvYWQuaWRsCkBAIC0zOCw2ICszOCw3IEBA
IG1vZHVsZSB4bWwgewogICAgICAgICBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbmFib3J0Owog
ICAgICAgICBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbmVycm9yOwogICAgICAgICBhdHRyaWJ1
dGUgRXZlbnRMaXN0ZW5lciBvbmxvYWQ7CisgICAgICAgIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVy
IG9ubG9hZGVuZDsKICAgICAgICAgYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIgb25sb2Fkc3RhcnQ7
CiAgICAgICAgIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9ucHJvZ3Jlc3M7CiAKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA0
NzcwMGI5ZDIzODE2YWY1OTEwYzUxMzFmOGY0ZjRhMDU2ZDgwZWZkLi4xZDk0NjFkNGU1YWVmZDg5
MzBlYjc4N2U3NTRhNDUwYzFlNDQ1Mzg0IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjQgQEAKKzIwMTEtMTIt
MDkgIEhhbnMgTXVsbGVyICA8aG11bGxlckBhZG9iZS5jb20+CisKKyAgICAgICAgT25sb2FkZW5k
IGV2ZW50IGlzIG5vdCBzdXBwb3J0ZWQgaW4gWE1MSHR0cFJlcXVlc3QKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQwOTUyCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKwlBZGRlZCBzdXBwb3J0IGZvciB0aGUgbG9hZGVuZCBQ
cm9ncmVzRXZlbnQgdG8gWE1MSHR0cFJlcXVlc3QgYW5kIFhNTEh0dHBSZXF1ZXN0VXBsb2FkLgor
CisgICAgICAgICogaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9vbmxvYWRlbmQtZXZlbnQtYWZ0
ZXItYWJvcnQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3htbGh0
dHByZXF1ZXN0L29ubG9hZGVuZC1ldmVudC1hZnRlci1hYm9ydC5odG1sOiBBZGRlZC4KKyAgICAg
ICAgKiBodHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L29ubG9hZGVuZC1ldmVudC1hZnRlci1lcnJv
ci1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMveG1saHR0cHJlcXVl
c3Qvb25sb2FkZW5kLWV2ZW50LWFmdGVyLWVycm9yLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGh0
dHAvdGVzdHMveG1saHR0cHJlcXVlc3Qvb25sb2FkZW5kLWV2ZW50LWFmdGVyLWxvYWQtZXhwZWN0
ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L29ubG9h
ZGVuZC1ldmVudC1hZnRlci1sb2FkLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMv
eG1saHR0cHJlcXVlc3QvdXBsb2FkLW9ubG9hZGVuZC1ldmVudC1hZnRlci1hYm9ydC1leHBlY3Rl
ZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvdXBsb2Fk
LW9ubG9hZGVuZC1ldmVudC1hZnRlci1hYm9ydC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBodHRw
L3Rlc3RzL3htbGh0dHByZXF1ZXN0L3VwbG9hZC1vbmxvYWRlbmQtZXZlbnQtYWZ0ZXItbG9hZC1l
eHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMveG1saHR0cHJlcXVlc3Qv
dXBsb2FkLW9ubG9hZGVuZC1ldmVudC1hZnRlci1sb2FkLmh0bWw6IEFkZGVkLgorICAgICAgICAq
IGh0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QveG1saHR0cHJlcXVlc3Qtc3luYy1uby1wcm9ncmVz
cy1ldmVudHMtZXhwZWN0ZWQudHh0OgorCiAyMDExLTEyLTA4ICBUb255IENoYW5nICA8dG9ueUBj
aHJvbWl1bS5vcmc+CiAKICAgICAgICAgTWFyayB0ZXN0cyBhZGRlZCBpbiByMTAyMzg4IGFzIGZh
aWxpbmcgb24gQ2hyb21pdW0uICBGaXggdGhlIGNyb3NzIHBsYXRmb3JtCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L29ubG9hZGVuZC1ldmVudC1hZnRl
ci1hYm9ydC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1
ZXN0L29ubG9hZGVuZC1ldmVudC1hZnRlci1hYm9ydC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ZTAwOWE0YzQ4OTU1ZTA4ZTIxY2U1N2EzZmIzZDQ3N2U1ZTZkMmFkYwotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3Qvb25sb2FkZW5kLWV2ZW50
LWFmdGVyLWFib3J0LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDcgQEAKK1Rlc3QgY2FzZSBmb3Ig
YnVnIDQwOTUyOiBPbmxvYWRlbmQgZXZlbnQgaXMgbm90IHN1cHBvcnRlZCBpbiBYTUxIdHRwUmVx
dWVzdAorCitWZXJpZnkgdGhhdCBhIGxvYWRlbmQgUHJvZ3Jlc3NFdmVudCBpcyBkaXNwYXRjaGVk
IGFmdGVyIHRoZSBlcnJvciBQcm9ncmVzc0V2ZW50IHdoZW4gYW4gYXN5bmMgcmVxdWVzdCBpcyBh
Ym9ydGVkLgorCitUaGUgZm9sbG93aW5nIGxpbmUgc2hvdWxkIGFwcGVhciBiZWxvdzogWEhSIEV2
ZW50czogbG9hZHN0YXJ0IHJlYWR5U3RhdGU9RE9ORSBhYm9ydCBsb2FkZW5kCisKK1hIUiBFdmVu
dHM6IGxvYWRzdGFydCByZWFkeVN0YXRlPURPTkUgYWJvcnQgbG9hZGVuZApkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9vbmxvYWRlbmQtZXZlbnQtYWZ0
ZXItYWJvcnQuaHRtbCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3Qvb25s
b2FkZW5kLWV2ZW50LWFmdGVyLWFib3J0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzZjYTQ2NTVhZTM4Y2Rl
MWI3YThlZTE4NjZjMWE0Mjg4ZmE2N2I1ZAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3Qvb25sb2FkZW5kLWV2ZW50LWFmdGVyLWFib3J0Lmh0
bWwKQEAgLTAsMCArMSw2MCBAQAorPGh0bWw+Cis8aGVhZD4KKzx0aXRsZT5UZXN0IGNhc2UgZm9y
IGJ1ZyA0MDk1MjwvdGl0bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwPiBUZXN0IGNhc2UgZm9yIDxh
IGhyZWY9Imh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MDk1MiI+IGJ1
ZyA0MDk1MjwvYT46IE9ubG9hZGVuZCBldmVudCBpcyBub3Qgc3VwcG9ydGVkIGluIFhNTEh0dHBS
ZXF1ZXN0PC9wPgorPHA+IFZlcmlmeSB0aGF0IGEgbG9hZGVuZCBQcm9ncmVzc0V2ZW50IGlzIGRp
c3BhdGNoZWQgYWZ0ZXIgdGhlIGVycm9yIFByb2dyZXNzRXZlbnQgd2hlbiBhbiBhc3luYyByZXF1
ZXN0IGlzIGFib3J0ZWQuPC9wPgorPHA+VGhlIGZvbGxvd2luZyBsaW5lIHNob3VsZCBhcHBlYXIg
YmVsb3c6IFhIUiBFdmVudHM6IGxvYWRzdGFydCByZWFkeVN0YXRlPURPTkUgYWJvcnQgbG9hZGVu
ZDwvcD4KKzxwIGlkPWNvbnNvbGU+PC9wPgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQi
PgoraWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgIGxheW91dFRlc3RDb250
cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxE
b25lKCk7Cit9CisKK2Z1bmN0aW9uIGxvZyhtZXNzYWdlKQoreworICAgIHZhciBjb25zb2xlRWx0
ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnNvbGUiKTsKKyAgICBjb25zb2xlRWx0LmFw
cGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG1lc3NhZ2UpKTsKK30KKwordmFyIHho
ciA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOworCitmdW5jdGlvbiBsb2dQcm9ncmVzc0V2ZW50KGUp
IHsKKyAgICBsb2coIiAiICsgZS50eXBlKTsKK30KKworZnVuY3Rpb24gbG9nVW5leHBlY3RlZFBy
b2dyZXNzRXZlbnQoZSkgeworICAgIGxvZygiIFt1bmV4cGVjdGVkIFByb2dyZXNzRXZlbnQ6ICIg
KyBlLnR5cGUgKyAiXSIpOworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisg
ICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKK30KKworZnVuY3Rpb24g
dGVzdCgpCit7CisgICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKGUpIHsKKyAg
ICAgICAgaWYgKHhoci5yZWFkeVN0YXRlID09IHhoci5ET05FKQorICAgICAgICAgICAgbG9nKCIg
cmVhZHlTdGF0ZT1ET05FIik7CisgICAgICAgIGVsc2UgaWYgKHhoci5yZWFkeVN0YXRlID4geGhy
Lk9QRU5FRCkKKyAgICAgICAgICAgIHhoci5hYm9ydCgpOworICAgIH0KKyAgICB4aHIub25sb2Fk
c3RhcnQgPSBsb2dQcm9ncmVzc0V2ZW50OworICAgIHhoci5vbmFib3J0ID0gbG9nUHJvZ3Jlc3NF
dmVudDsKKyAgICB4aHIub25lcnJvciA9IGxvZ1VuZXhwZWN0ZWRQcm9ncmVzc0V2ZW50OworICAg
IHhoci5vbmxvYWQgPSBsb2dVbmV4cGVjdGVkUHJvZ3Jlc3NFdmVudDsKKyAgICB4aHIub25sb2Fk
ZW5kID0gZnVuY3Rpb24oZSkgeworICAgICAgICBsb2dQcm9ncmVzc0V2ZW50KGUpOworICAgICAg
ICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICAgICAgbGF5b3V0VGVz
dENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgIH0KKworICAgIGxvZygiWEhSIEV2ZW50czoi
KTsKKyAgICB4aHIub3BlbigiR0VUIiwgInJlc291cmNlcy9nZXQudHh0Iik7CisgICAgeGhyLnNl
bmQoKTsKK30KKwordGVzdCgpOworCis8L3NjcmlwdD4KKzwvYm9keT4KZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3Qvb25sb2FkZW5kLWV2ZW50LWFmdGVy
LWVycm9yLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVl
c3Qvb25sb2FkZW5kLWV2ZW50LWFmdGVyLWVycm9yLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5j
OTAyMTk3NGY3NGM5NWUyN2Q0MDRmMjdjZWQ4ZWMzNDI5ZTg0MjQ0Ci0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9vbmxvYWRlbmQtZXZlbnQt
YWZ0ZXItZXJyb3ItZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNyBAQAorVGVzdCBjYXNlIGZvciBi
dWcgNDA5NTI6IE9ubG9hZGVuZCBldmVudCBpcyBub3Qgc3VwcG9ydGVkIGluIFhNTEh0dHBSZXF1
ZXN0CisKK1ZlcmlmeSB0aGF0IGEgbG9hZGVuZCBQcm9ncmVzc0V2ZW50IGlzIGRpc3BhdGNoZWQg
YWZ0ZXIgdGhlIGVycm9yIFByb2dyZXNzRXZlbnQgd2hlbiBhbiBhc3luYyByZXF1ZXN0IGZhaWxz
LgorCitUaGUgZm9sbG93aW5nIGxpbmUgc2hvdWxkIGFwcGVhciBiZWxvdzogWEhSIEV2ZW50czog
bG9hZHN0YXJ0IHJlYWR5U3RhdGU9RE9ORSBlcnJvciBsb2FkZW5kCisKK1hIUiBFdmVudHM6IGxv
YWRzdGFydCByZWFkeVN0YXRlPURPTkUgZXJyb3IgbG9hZGVuZApkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9vbmxvYWRlbmQtZXZlbnQtYWZ0ZXItZXJy
b3IuaHRtbCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3Qvb25sb2FkZW5k
LWV2ZW50LWFmdGVyLWVycm9yLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmE1ZjgxZTQ2MWVmNDA0ZjY1ZjQx
NjU3MDg4NzdjY2ZhMTBmNjQ2OQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAv
dGVzdHMveG1saHR0cHJlcXVlc3Qvb25sb2FkZW5kLWV2ZW50LWFmdGVyLWVycm9yLmh0bWwKQEAg
LTAsMCArMSw1OSBAQAorPGh0bWw+Cis8aGVhZD4KKzx0aXRsZT5UZXN0IGNhc2UgZm9yIGJ1ZyA0
MDk1MjwvdGl0bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwPiBUZXN0IGNhc2UgZm9yIDxhIGhyZWY9
Imh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MDk1MiI+IGJ1ZyA0MDk1
MjwvYT46IE9ubG9hZGVuZCBldmVudCBpcyBub3Qgc3VwcG9ydGVkIGluIFhNTEh0dHBSZXF1ZXN0
PC9wPgorPHA+IFZlcmlmeSB0aGF0IGEgbG9hZGVuZCBQcm9ncmVzc0V2ZW50IGlzIGRpc3BhdGNo
ZWQgYWZ0ZXIgdGhlIGVycm9yIFByb2dyZXNzRXZlbnQgd2hlbiBhbiBhc3luYyByZXF1ZXN0IGZh
aWxzLjwvcD4KKzxwPlRoZSBmb2xsb3dpbmcgbGluZSBzaG91bGQgYXBwZWFyIGJlbG93OiBYSFIg
RXZlbnRzOiBsb2Fkc3RhcnQgcmVhZHlTdGF0ZT1ET05FIGVycm9yIGxvYWRlbmQ8L3A+Cis8cCBp
ZD1jb25zb2xlPjwvcD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KK2lmICh3aW5k
b3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1w
QXNUZXh0KCk7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworfQor
CitmdW5jdGlvbiBsb2cobWVzc2FnZSkKK3sKKyAgICB2YXIgY29uc29sZUVsdCA9IGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCJjb25zb2xlIik7CisgICAgY29uc29sZUVsdC5hcHBlbmRDaGlsZChk
b2N1bWVudC5jcmVhdGVUZXh0Tm9kZShtZXNzYWdlKSk7Cit9CisKK3ZhciB4aHIgPSBuZXcgWE1M
SHR0cFJlcXVlc3QoKTsKKworZnVuY3Rpb24gbG9nUHJvZ3Jlc3NFdmVudChlKSB7CisgICAgbG9n
KCIgIiArIGUudHlwZSk7Cit9CisKK2Z1bmN0aW9uIGxvZ1VuZXhwZWN0ZWRQcm9ncmVzc0V2ZW50
KGUpIHsKKyAgICBsb2coIiBbdW5leHBlY3RlZCBQcm9ncmVzc0V2ZW50OiAiICsgZS50eXBlICsg
Il0iKTsKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICBsYXlv
dXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cit9CisKK2Z1bmN0aW9uIHRlc3QoKQorewor
ICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbihlKSB7CisgICAgICAgIGlmICh4
aHIucmVhZHlTdGF0ZSA9PSB4aHIuRE9ORSkKKyAgICAgICAgICAgIGxvZygiIHJlYWR5U3RhdGU9
RE9ORSIpOworICAgIH0KKyAgICB4aHIub25sb2Fkc3RhcnQgPSBsb2dQcm9ncmVzc0V2ZW50Owor
ICAgIHhoci5vbmFib3J0ID0gbG9nVW5leHBlY3RlZFByb2dyZXNzRXZlbnQ7CisgICAgeGhyLm9u
ZXJyb3IgPSBsb2dQcm9ncmVzc0V2ZW50OworICAgIHhoci5vbmxvYWQgPSBsb2dVbmV4cGVjdGVk
UHJvZ3Jlc3NFdmVudDsKKyAgICB4aHIub25sb2FkZW5kID0gZnVuY3Rpb24oZSkgeworICAgICAg
ICBsb2dQcm9ncmVzc0V2ZW50KGUpOworICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250
cm9sbGVyKQorICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOwor
ICAgIH0KKworICAgIGxvZygiWEhSIEV2ZW50czoiKTsKKyAgICB4aHIub3BlbigiR0VUIiwgInJl
c291cmNlcy9pbmZpbml0ZS1sb29wLnBocCIpOworICAgIHhoci5zZW5kKCk7Cit9CisKK3Rlc3Qo
KTsgCisKKzwvc2NyaXB0PgorPC9ib2R5PgorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL3htbGh0dHByZXF1ZXN0L29ubG9hZGVuZC1ldmVudC1hZnRlci1sb2FkLWV4cGVjdGVk
LnR4dCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3Qvb25sb2FkZW5kLWV2
ZW50LWFmdGVyLWxvYWQtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZlNDgwYmRjNzg4NTI1ZmYz
MDc1OTQ2ZWJlYTIxNGY2MjQzZmVkZjIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L29ubG9hZGVuZC1ldmVudC1hZnRlci1sb2FkLWV4cGVj
dGVkLnR4dApAQCAtMCwwICsxLDcgQEAKK1Rlc3QgY2FzZSBmb3IgYnVnIDQwOTUyOiBPbmxvYWRl
bmQgZXZlbnQgaXMgbm90IHN1cHBvcnRlZCBpbiBYTUxIdHRwUmVxdWVzdAorCitWZXJpZnkgdGhh
dCBhIGxvYWRlbmQgUHJvZ3Jlc3NFdmVudCBpcyBkaXNwYXRjaGVkIGFmdGVyIHRoZSBsb2FkIFBy
b2dyZXNzRXZlbnQgd2hlbiBhbiBhc3luYyByZXF1ZXN0IGNvbXBsZXRlcyBub3JtYWxseS4KKwor
VGhlIGZvbGxvd2luZyBsaW5lIHNob3VsZCBhcHBlYXIgYmVsb3c6IFhIUiBFdmVudHM6IGxvYWRz
dGFydCByZWFkeVN0YXRlPURPTkUgbG9hZCBsb2FkZW5kCisKK1hIUiBFdmVudHM6IGxvYWRzdGFy
dCByZWFkeVN0YXRlPURPTkUgbG9hZCBsb2FkZW5kCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L29ubG9hZGVuZC1ldmVudC1hZnRlci1sb2FkLmh0bWwg
Yi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L29ubG9hZGVuZC1ldmVudC1h
ZnRlci1sb2FkLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmUzNTZiZjRmYjcyNmJhMmZiMDQ0NzU1NWFiMGRm
MDllNWUzN2Y4YQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMveG1s
aHR0cHJlcXVlc3Qvb25sb2FkZW5kLWV2ZW50LWFmdGVyLWxvYWQuaHRtbApAQCAtMCwwICsxLDU4
IEBACis8SFRNTD4KKzxoZWFkPgorPHRpdGxlPlRlc3QgY2FzZSBmb3IgYnVnIDQwOTUyPC90aXRs
ZT4KKzwvaGVhZD4KKzxib2R5PgorPHA+IFRlc3QgY2FzZSBmb3IgPGEgaHJlZj0iaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQwOTUyIj4gYnVnIDQwOTUyPC9hPjogT25s
b2FkZW5kIGV2ZW50IGlzIG5vdCBzdXBwb3J0ZWQgaW4gWE1MSHR0cFJlcXVlc3Q8L3A+Cis8cD4g
VmVyaWZ5IHRoYXQgYSBsb2FkZW5kIFByb2dyZXNzRXZlbnQgaXMgZGlzcGF0Y2hlZCBhZnRlciB0
aGUgbG9hZCBQcm9ncmVzc0V2ZW50IHdoZW4gYW4gYXN5bmMgcmVxdWVzdCBjb21wbGV0ZXMgbm9y
bWFsbHkuPC9wPgorPHA+VGhlIGZvbGxvd2luZyBsaW5lIHNob3VsZCBhcHBlYXIgYmVsb3c6IFhI
UiBFdmVudHM6IGxvYWRzdGFydCByZWFkeVN0YXRlPURPTkUgbG9hZCBsb2FkZW5kPC9wPgorPHAg
aWQ9Y29uc29sZT48L3A+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CitpZiAod2lu
ZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVt
cEFzVGV4dCgpOworICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKK30K
KworZnVuY3Rpb24gbG9nKG1lc3NhZ2UpCit7CisgICAgdmFyIGNvbnNvbGVFbHQgPSBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgiY29uc29sZSIpOworICAgIGNvbnNvbGVFbHQuYXBwZW5kQ2hpbGQo
ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobWVzc2FnZSkpOworfQorCit2YXIgeGhyID0gbmV3IFhN
TEh0dHBSZXF1ZXN0KCk7CisKK2Z1bmN0aW9uIGxvZ1Byb2dyZXNzRXZlbnQoZSkgeworICAgIGxv
ZygiICIgKyBlLnR5cGUpOworfQorCitmdW5jdGlvbiBsb2dVbmV4cGVjdGVkUHJvZ3Jlc3NFdmVu
dChlKSB7CisgICAgbG9nKCIgW3VuZXhwZWN0ZWQgUHJvZ3Jlc3NFdmVudDogIiArIGUudHlwZSAr
ICJdIik7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5
b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworfQorCitmdW5jdGlvbiB0ZXN0KCkgCit7
CisgICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgaWYg
KHhoci5yZWFkeVN0YXRlID09IHhoci5ET05FKQorICAgICAgICAgICAgbG9nKCIgcmVhZHlTdGF0
ZT1ET05FIik7CisgICAgfQorICAgIHhoci5vbmxvYWRzdGFydCA9IGxvZ1Byb2dyZXNzRXZlbnQ7
CisgICAgeGhyLm9uYWJvcnQgPSBsb2dVbmV4cGVjdGVkUHJvZ3Jlc3NFdmVudDsKKyAgICB4aHIu
b25lcnJvciA9IGxvZ1VuZXhwZWN0ZWRQcm9ncmVzc0V2ZW50OworICAgIHhoci5vbmxvYWQgPSBs
b2dQcm9ncmVzc0V2ZW50OworICAgIHhoci5vbmxvYWRlbmQgPSBmdW5jdGlvbihlKSB7CisgICAg
ICAgIGxvZ1Byb2dyZXNzRXZlbnQoZSk7CisgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENv
bnRyb2xsZXIpCisgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7
CisgICAgfQorCisgICAgbG9nKCJYSFIgRXZlbnRzOiIpOworICAgIHhoci5vcGVuKCJHRVQiLCAi
cmVzb3VyY2VzL2dldC50eHQiKTsgCisgICAgeGhyLnNlbmQoKTsKK30KKwordGVzdCgpOyAKKwor
PC9zY3JpcHQ+Cis8L2JvZHk+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3ht
bGh0dHByZXF1ZXN0L3VwbG9hZC1vbmxvYWRlbmQtZXZlbnQtYWZ0ZXItYWJvcnQtZXhwZWN0ZWQu
dHh0IGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC91cGxvYWQtb25sb2Fk
ZW5kLWV2ZW50LWFmdGVyLWFib3J0LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wNDc3NWJlZmIy
ZjRhMzc5ZTlkMTc3ZmEyZjM3M2I1NTg2ZGEzYmY0Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC91cGxvYWQtb25sb2FkZW5kLWV2ZW50LWFm
dGVyLWFib3J0LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDcgQEAKK1Rlc3QgY2FzZSBmb3IgYnVn
IDQwOTUyOiBPbmxvYWRlbmQgZXZlbnQgaXMgbm90IHN1cHBvcnRlZCBpbiBYTUxIdHRwUmVxdWVz
dAorCitWZXJpZnkgdGhhdCBhIGxvYWRlbmQgUHJvZ3Jlc3NFdmVudCBpcyBkaXNwYXRjaGVkIGFm
dGVyIHRoZSBlcnJvciBQcm9ncmVzc0V2ZW50IHdoZW4gYW4gYXN5bmMgdXBsb2FkIHJlcXVlc3Qg
aXMgYWJvcnRlZC4KKworVGhlIGZvbGxvd2luZyBsaW5lIHNob3VsZCBhcHBlYXIgYmVsb3c6IFhI
UiBFdmVudHM6IHByb2dyZXNzIGFib3J0IGxvYWRlbmQKKworWEhSIEV2ZW50czogcHJvZ3Jlc3Mg
YWJvcnQgbG9hZGVuZApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRw
cmVxdWVzdC91cGxvYWQtb25sb2FkZW5kLWV2ZW50LWFmdGVyLWFib3J0Lmh0bWwgYi9MYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3VwbG9hZC1vbmxvYWRlbmQtZXZlbnQtYWZ0
ZXItYWJvcnQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41ZTc3NGUzZGFlNjNkZDE5MjNiMzU2MTNmOWFmNmZh
NTEzNTk0ZDc2Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxo
dHRwcmVxdWVzdC91cGxvYWQtb25sb2FkZW5kLWV2ZW50LWFmdGVyLWFib3J0Lmh0bWwKQEAgLTAs
MCArMSw1OCBAQAorPGh0bWw+Cis8aGVhZD4KKzx0aXRsZT5UZXN0IGNhc2UgZm9yIGJ1ZyA0MDk1
MjwvdGl0bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwPiBUZXN0IGNhc2UgZm9yIDxhIGhyZWY9Imh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MDk1MiI+IGJ1ZyA0MDk1Mjwv
YT46IE9ubG9hZGVuZCBldmVudCBpcyBub3Qgc3VwcG9ydGVkIGluIFhNTEh0dHBSZXF1ZXN0PC9w
PgorPHA+IFZlcmlmeSB0aGF0IGEgbG9hZGVuZCBQcm9ncmVzc0V2ZW50IGlzIGRpc3BhdGNoZWQg
YWZ0ZXIgdGhlIGVycm9yIFByb2dyZXNzRXZlbnQgd2hlbiBhbiBhc3luYyB1cGxvYWQgcmVxdWVz
dCBpcyBhYm9ydGVkLjwvcD4KKzxwPlRoZSBmb2xsb3dpbmcgbGluZSBzaG91bGQgYXBwZWFyIGJl
bG93OiBYSFIgRXZlbnRzOiBwcm9ncmVzcyBhYm9ydCBsb2FkZW5kPC9wPgorPHAgaWQ9Y29uc29s
ZT48L3A+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CitpZiAod2luZG93LmxheW91
dFRlc3RDb250cm9sbGVyKSB7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgp
OworICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKK30KKworZnVuY3Rp
b24gbG9nKG1lc3NhZ2UpCit7CisgICAgdmFyIGNvbnNvbGVFbHQgPSBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgiY29uc29sZSIpOworICAgIGNvbnNvbGVFbHQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQu
Y3JlYXRlVGV4dE5vZGUobWVzc2FnZSkpOworfQorCit2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1
ZXN0KCk7CisKK2Z1bmN0aW9uIGxvZ1Byb2dyZXNzRXZlbnQoZSkgeworICAgIGxvZygiICIgKyBl
LnR5cGUpOworfQorCitmdW5jdGlvbiBsb2dVbmV4cGVjdGVkUHJvZ3Jlc3NFdmVudChlKSB7Cisg
ICAgbG9nKCIgW3VuZXhwZWN0ZWQgUHJvZ3Jlc3NFdmVudDogIiArIGUudHlwZSArICJdIik7Cisg
ICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIubm90aWZ5RG9uZSgpOworfQorCitmdW5jdGlvbiB0ZXN0KCkKK3sKKyAgICB4aHIu
dXBsb2FkLm9ucHJvZ3Jlc3MgPSBmdW5jdGlvbihlKSB7CisgICAgICAgIGxvZ1Byb2dyZXNzRXZl
bnQoZSk7CisgICAgICAgIHhoci5hYm9ydCgpOworICAgIH0KKyAgICB4aHIudXBsb2FkLm9uYWJv
cnQgPSBsb2dQcm9ncmVzc0V2ZW50OworICAgIHhoci51cGxvYWQub25lcnJvciA9IGxvZ1VuZXhw
ZWN0ZWRQcm9ncmVzc0V2ZW50OworICAgIHhoci51cGxvYWQub25sb2FkID0gbG9nVW5leHBlY3Rl
ZFByb2dyZXNzRXZlbnQ7CisgICAgeGhyLnVwbG9hZC5vbmxvYWRlbmQgPSBmdW5jdGlvbihlKSB7
CisgICAgICAgIGxvZ1Byb2dyZXNzRXZlbnQoZSk7CisgICAgICAgIGlmICh3aW5kb3cubGF5b3V0
VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlE
b25lKCk7CisgICAgfQorCisgICAgbG9nKCJYSFIgRXZlbnRzOiIpOworICAgIHhoci5vcGVuKCJQ
T1NUIiwgInJlc291cmNlcy9wb3N0LWVjaG8uY2dpIiwgdHJ1ZSk7CisgICAgeGhyLnNlbmQoImRh
dGEiKTsKK30KKwordGVzdCgpOworCis8L3NjcmlwdD4KKzwvYm9keT4KKwpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC91cGxvYWQtb25sb2FkZW5kLWV2
ZW50LWFmdGVyLWxvYWQtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxo
dHRwcmVxdWVzdC91cGxvYWQtb25sb2FkZW5kLWV2ZW50LWFmdGVyLWxvYWQtZXhwZWN0ZWQudHh0
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjlhOWMzYmE4NGJiZWNiZGE5ODk5MmJlYmFlNzI3ZTI5YWM3NjAwZGIKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3Vw
bG9hZC1vbmxvYWRlbmQtZXZlbnQtYWZ0ZXItbG9hZC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw3
IEBACitUZXN0IGNhc2UgZm9yIGJ1ZyA0MDk1MjogT25sb2FkZW5kIGV2ZW50IGlzIG5vdCBzdXBw
b3J0ZWQgaW4gWE1MSHR0cFJlcXVlc3QKKworVmVyaWZ5IHRoYXQgYSBsb2FkZW5kIFByb2dyZXNz
RXZlbnQgaXMgZGlzcGF0Y2hlZCBhZnRlciB0aGUgbG9hZCBQcm9ncmVzc0V2ZW50IHdoZW4gYW4g
YXN5bmMgdXBsb2FkIHJlcXVlc3QgY29tcGxldGVzIG5vcm1hbGx5LgorCitUaGUgZm9sbG93aW5n
IGxpbmUgc2hvdWxkIGFwcGVhciBiZWxvdzogWEhSIEV2ZW50czogbG9hZHN0YXJ0IGxvYWQgbG9h
ZGVuZAorCitYSFIgRXZlbnRzOiBsb2Fkc3RhcnQgbG9hZCBsb2FkZW5kCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3VwbG9hZC1vbmxvYWRlbmQtZXZl
bnQtYWZ0ZXItbG9hZC5odG1sIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVz
dC91cGxvYWQtb25sb2FkZW5kLWV2ZW50LWFmdGVyLWxvYWQuaHRtbApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xYWEw
NDNiZTJiN2U1MTIxZGUwZWUwMTE3Zjc4Zjc2NTg4NTk5ZjUwCi0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC91cGxvYWQtb25sb2FkZW5kLWV2
ZW50LWFmdGVyLWxvYWQuaHRtbApAQCAtMCwwICsxLDU2IEBACis8aHRtbD4KKzxoZWFkPgorPHRp
dGxlPlRlc3QgY2FzZSBmb3IgYnVnIDQwOTUyPC90aXRsZT4KKzwvaGVhZD4KKzxib2R5PgorPHA+
IFRlc3QgY2FzZSBmb3IgPGEgaHJlZj0iaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTQwOTUyIj4gYnVnIDQwOTUyPC9hPjogT25sb2FkZW5kIGV2ZW50IGlzIG5vdCBzdXBw
b3J0ZWQgaW4gWE1MSHR0cFJlcXVlc3Q8L3A+Cis8cD4gVmVyaWZ5IHRoYXQgYSBsb2FkZW5kIFBy
b2dyZXNzRXZlbnQgaXMgZGlzcGF0Y2hlZCBhZnRlciB0aGUgbG9hZCBQcm9ncmVzc0V2ZW50IHdo
ZW4gYW4gYXN5bmMgdXBsb2FkIHJlcXVlc3QgY29tcGxldGVzIG5vcm1hbGx5LjwvcD4KKzxwPlRo
ZSBmb2xsb3dpbmcgbGluZSBzaG91bGQgYXBwZWFyIGJlbG93OiBYSFIgRXZlbnRzOiBsb2Fkc3Rh
cnQgbG9hZCBsb2FkZW5kPC9wPgorPHAgaWQ9Y29uc29sZT48L3A+Cis8c2NyaXB0IHR5cGU9InRl
eHQvamF2YXNjcmlwdCI+CitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAg
bGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgIGxheW91dFRlc3RDb250cm9s
bGVyLndhaXRVbnRpbERvbmUoKTsKK30KKworZnVuY3Rpb24gbG9nKG1lc3NhZ2UpCit7CisgICAg
dmFyIGNvbnNvbGVFbHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29uc29sZSIpOworICAg
IGNvbnNvbGVFbHQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobWVzc2FnZSkp
OworfQorCit2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CisKK2Z1bmN0aW9uIGxvZ1By
b2dyZXNzRXZlbnQoZSkgeworICAgIGxvZygiICIgKyBlLnR5cGUpOworfQorCitmdW5jdGlvbiBs
b2dVbmV4cGVjdGVkUHJvZ3Jlc3NFdmVudChlKSB7CisgICAgbG9nKCIgW3VuZXhwZWN0ZWQgUHJv
Z3Jlc3NFdmVudDogIiArIGUudHlwZSArICJdIik7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0
Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOwor
fQorCitmdW5jdGlvbiB0ZXN0KCkKK3sKKyAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVu
Y3Rpb24oZSkgeworICAgICAgICBpZiAoeGhyLnJlYWR5U3RhdGUgPT0geGhyLkRPTkUpIHsKKyAg
ICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAgICAg
ICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAgICAgICB9CisgICAgfQor
ICAgIHhoci51cGxvYWQub25sb2Fkc3RhcnQgPSBsb2dQcm9ncmVzc0V2ZW50OworICAgIHhoci51
cGxvYWQub25hYm9ydCA9IGxvZ1VuZXhwZWN0ZWRQcm9ncmVzc0V2ZW50OworICAgIHhoci51cGxv
YWQub25lcnJvciA9IGxvZ1VuZXhwZWN0ZWRQcm9ncmVzc0V2ZW50OworICAgIHhoci51cGxvYWQu
b25sb2FkID0gbG9nUHJvZ3Jlc3NFdmVudDsKKyAgICB4aHIudXBsb2FkLm9ubG9hZGVuZCA9IGxv
Z1Byb2dyZXNzRXZlbnQ7CisKKyAgICBsb2coIlhIUiBFdmVudHM6Iik7CisgICAgeGhyLm9wZW4o
IlBPU1QiLCAicmVzb3VyY2VzL3Bvc3QtZWNoby5jZ2kiLCB0cnVlKTsKKyAgICB4aHIuc2VuZCgi
ZGF0YSIpOworfQorCit0ZXN0KCk7CisKKzwvc2NyaXB0PgorPC9ib2R5PgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC94bWxodHRwcmVxdWVzdC1zeW5j
LW5vLXByb2dyZXNzLWV2ZW50cy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L3htbGh0dHByZXF1ZXN0L3htbGh0dHByZXF1ZXN0LXN5bmMtbm8tcHJvZ3Jlc3MtZXZlbnRzLWV4
cGVjdGVkLnR4dAppbmRleCAyNDVkM2MwM2MzNzBlYTgwNjE3ZTRiNDZhMzA5NTlhNjQ3OWUxYmVm
Li5hNTEyNmFhZGI1OWMzZjcwYmUwMzhiNjc4ZTFkMWYzNGQwNWJmMjA5IDEwMDY0NAotLS0gYS9M
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3htbGh0dHByZXF1ZXN0LXN5bmMt
bm8tcHJvZ3Jlc3MtZXZlbnRzLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL3htbGh0dHByZXF1ZXN0L3htbGh0dHByZXF1ZXN0LXN5bmMtbm8tcHJvZ3Jlc3MtZXZlbnRz
LWV4cGVjdGVkLnR4dApAQCAtNiwxNyArNiwyMSBAQCBidWcgMTc1MDI6IEFzc2VydGlvbiBmYWls
dXJlIHdoZW4gdHJ5aW5nIHRvIHJlc3RhcnQgYSBzeW5jIFhNTEh0dHBSZXF1ZXN0IGFzIGFuCiAg
U3RlcCAxOiBTYW1lIG9yaWdpbiByZXF1ZXN0CiByZWFkeXN0YXRlY2hhbmdlIDQKIGxvYWQKK2xv
YWRlbmQKIAogU3RlcCAyOiBDcm9zcyBvcmlnaW4gcmVxdWVzdCwgZGlzYWxsb3dlZAogcmVhZHlz
dGF0ZWNoYW5nZSA0CiBlcnJvcgorbG9hZGVuZAogRXJyb3I6IE5FVFdPUktfRVJSOiBYTUxIdHRw
UmVxdWVzdCBFeGNlcHRpb24gMTAxCiAKIFN0ZXAgMzogQ3Jvc3Mgb3JpZ2luIHJlcXVlc3QsIGFs
bG93ZWQKIHJlYWR5c3RhdGVjaGFuZ2UgNAogbG9hZAorbG9hZGVuZAogCiBTdGVwIDQ6IENyb3Nz
IG9yaWdpbiByZXF1ZXN0LCBjaGVjayB0aGF0IHByZWZsaWdodCBpc24ndCBhdHRlbXB0ZWQKIHJl
YWR5c3RhdGVjaGFuZ2UgNAogbG9hZAorbG9hZGVuZAogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>118792</attachid>
            <date>2011-12-12 08:34:05 -0800</date>
            <delta_ts>2011-12-13 08:19:23 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-40952-20111212083404.patch</filename>
            <type>text/plain</type>
            <size>26577</size>
            <attacher name="Hans Muller">giles_joplin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAyMzkwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDYyMjM1MDUxZWFkODY5
ZDIzYzlkYTQ5YmJmZDYxYzBkYjI4MzNhNS4uZjE3ZGI3ZDg2NDU4MWUzNDhmNzgyMGVkMjBjZWVi
MjY5ZmM1NTEyZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBACisyMDExLTEyLTA5ICBIYW5z
IE11bGxlciAgPGhtdWxsZXJAYWRvYmUuY29tPgorCisgICAgICAgIE9ubG9hZGVuZCBldmVudCBp
cyBub3Qgc3VwcG9ydGVkIGluIFhNTEh0dHBSZXF1ZXN0CisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MDk1MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIHN1cHBvcnQgZm9yIHRoZSBsb2FkZW5kIFBy
b2dyZXNzRXZlbnQgdG8gWE1MSHR0cFJlcXVlc3QgYW5kIFhNTEh0dHBSZXF1ZXN0VXBsb2FkLgor
ICAgICAgICBBIG5ldyBtZXRob2QsIGRpc3BhdGNoRXZlbnRBbmRMb2FkRW5kKCksIHdhcyBhZGRl
ZCB0byBYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZQorICAgICAgICBhbmQgWE1M
SHR0cFJlcXVlc3RVcGxvYWQgdG8gZm9vbHByb29mIHRoZSBjb21tb24gY2FzZSBvZiBkaXNwYXRj
aGluZyBhIGxvYWQsYWJvcnQsZXJyb3IKKyAgICAgICAgZXZlbnQgZm9sbG93ZWQgYnkgYSBsb2Fk
ZW5kIGV2ZW50LgorCisgICAgICAgIFRlc3RzOiBodHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L29u
bG9hZGVuZC1ldmVudC1hZnRlci1hYm9ydC5odG1sCisgICAgICAgICAgICAgICBodHRwL3Rlc3Rz
L3htbGh0dHByZXF1ZXN0L29ubG9hZGVuZC1ldmVudC1hZnRlci1lcnJvci5odG1sCisgICAgICAg
ICAgICAgICBodHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L29ubG9hZGVuZC1ldmVudC1hZnRlci1s
b2FkLmh0bWwKKyAgICAgICAgICAgICAgIGh0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvdXBsb2Fk
LW9ubG9hZGVuZC1ldmVudC1hZnRlci1hYm9ydC5odG1sCisgICAgICAgICAgICAgICBodHRwL3Rl
c3RzL3htbGh0dHByZXF1ZXN0L3VwbG9hZC1vbmxvYWRlbmQtZXZlbnQtYWZ0ZXItbG9hZC5odG1s
CisKKyAgICAgICAgKiB4bWwvWE1MSHR0cFJlcXVlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
WE1MSHR0cFJlcXVlc3Q6OmNhbGxSZWFkeVN0YXRlQ2hhbmdlTGlzdGVuZXIpOgorICAgICAgICAo
V2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6OmFib3J0KToKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0
dHBSZXF1ZXN0OjpuZXR3b3JrRXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVl
c3Q6OmFib3J0RXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6OmRpZFNl
bmREYXRhKToKKyAgICAgICAgKiB4bWwvWE1MSHR0cFJlcXVlc3QuaDoKKyAgICAgICAgKiB4bWwv
WE1MSHR0cFJlcXVlc3QuaWRsOgorICAgICAgICAqIHhtbC9YTUxIdHRwUmVxdWVzdFVwbG9hZC5o
OgorICAgICAgICAqIHhtbC9YTUxIdHRwUmVxdWVzdFVwbG9hZC5pZGw6CisKIDIwMTEtMTItMDgg
IFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CiAKICAgICAgICAgRW5hYmxl
IGFuaW1hdGlvbnMgb2YgQ1NTIGltYWdlcyB1c2luZyAtd2Via2l0LWNyb3NzLWZhZGUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCmluZGV4IDA1OTBhNDNkNjU1N2ZiYzUwNWRlZjAw
NjBkNTJjYWM5MmQyZGZlYjguLjU5OTAxZGEwMTliMzM0YTE0YzNlOThjMzkwZDhlYmZmYTIzMTQy
MGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcApAQCAtMzQyLDcgKzM0Miw3
IEBAIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OmNhbGxSZWFkeVN0YXRlQ2hhbmdlTGlzdGVuZXIoKQog
CiAgICAgaWYgKG1fc3RhdGUgPT0gRE9ORSAmJiAhbV9lcnJvcikgewogICAgICAgICBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb25Db29raWUgY29va2llID0gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
Ojp3aWxsTG9hZFhIUihzY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIHRoaXMpOwotICAgICAgICBt
X3Byb2dyZXNzRXZlbnRUaHJvdHRsZS5kaXNwYXRjaEV2ZW50KFhNTEh0dHBSZXF1ZXN0UHJvZ3Jl
c3NFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5sb2FkRXZlbnQpKTsKKyAgICAgICAgbV9wcm9n
cmVzc0V2ZW50VGhyb3R0bGUuZGlzcGF0Y2hFdmVudEFuZExvYWRFbmQoWE1MSHR0cFJlcXVlc3RQ
cm9ncmVzc0V2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmxvYWRFdmVudCkpOwogICAgICAgICBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZExvYWRYSFIoY29va2llKTsKICAgICB9CiB9CkBA
IC03MDIsMTEgKzcwMiwxMSBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0OjphYm9ydCgpCiAgICAgICAg
IG1fc3RhdGUgPSBVTlNFTlQ7CiAgICAgfQogCi0gICAgbV9wcm9ncmVzc0V2ZW50VGhyb3R0bGUu
ZGlzcGF0Y2hFdmVudChYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnQ6OmNyZWF0ZShldmVudE5h
bWVzKCkuYWJvcnRFdmVudCkpOworICAgIG1fcHJvZ3Jlc3NFdmVudFRocm90dGxlLmRpc3BhdGNo
RXZlbnRBbmRMb2FkRW5kKFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudDo6Y3JlYXRlKGV2ZW50
TmFtZXMoKS5hYm9ydEV2ZW50KSk7CiAgICAgaWYgKCFtX3VwbG9hZENvbXBsZXRlKSB7CiAgICAg
ICAgIG1fdXBsb2FkQ29tcGxldGUgPSB0cnVlOwogICAgICAgICBpZiAobV91cGxvYWQgJiYgbV91
cGxvYWRFdmVudHNBbGxvd2VkKQotICAgICAgICAgICAgbV91cGxvYWQtPmRpc3BhdGNoRXZlbnQo
WE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmFib3J0RXZl
bnQpKTsKKyAgICAgICAgICAgIG1fdXBsb2FkLT5kaXNwYXRjaEV2ZW50QW5kTG9hZEVuZChYTUxI
dHRwUmVxdWVzdFByb2dyZXNzRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuYWJvcnRFdmVudCkp
OwogICAgIH0KIH0KIApAQCAtNzY2LDExICs3NjYsMTEgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6
Z2VuZXJpY0Vycm9yKCkKIHZvaWQgWE1MSHR0cFJlcXVlc3Q6Om5ldHdvcmtFcnJvcigpCiB7CiAg
ICAgZ2VuZXJpY0Vycm9yKCk7Ci0gICAgbV9wcm9ncmVzc0V2ZW50VGhyb3R0bGUuZGlzcGF0Y2hF
dmVudChYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuZXJy
b3JFdmVudCkpOworICAgIG1fcHJvZ3Jlc3NFdmVudFRocm90dGxlLmRpc3BhdGNoRXZlbnRBbmRM
b2FkRW5kKFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5l
cnJvckV2ZW50KSk7CiAgICAgaWYgKCFtX3VwbG9hZENvbXBsZXRlKSB7CiAgICAgICAgIG1fdXBs
b2FkQ29tcGxldGUgPSB0cnVlOwotICAgICAgICBpZiAobV91cGxvYWQgJiYgbV91cGxvYWRFdmVu
dHNBbGxvd2VkKQotICAgICAgICAgICAgbV91cGxvYWQtPmRpc3BhdGNoRXZlbnQoWE1MSHR0cFJl
cXVlc3RQcm9ncmVzc0V2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmVycm9yRXZlbnQpKTsKKyAg
ICAgICAgaWYgKG1fdXBsb2FkICYmIG1fdXBsb2FkRXZlbnRzQWxsb3dlZCkgCisgICAgICAgICAg
ICBtX3VwbG9hZC0+ZGlzcGF0Y2hFdmVudEFuZExvYWRFbmQoWE1MSHR0cFJlcXVlc3RQcm9ncmVz
c0V2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmVycm9yRXZlbnQpKTsKICAgICB9CiAgICAgaW50
ZXJuYWxBYm9ydCgpOwogfQpAQCAtNzc4LDExICs3NzgsMTEgQEAgdm9pZCBYTUxIdHRwUmVxdWVz
dDo6bmV0d29ya0Vycm9yKCkKIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OmFib3J0RXJyb3IoKQogewog
ICAgIGdlbmVyaWNFcnJvcigpOwotICAgIG1fcHJvZ3Jlc3NFdmVudFRocm90dGxlLmRpc3BhdGNo
RXZlbnQoWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmFi
b3J0RXZlbnQpKTsKKyAgICBtX3Byb2dyZXNzRXZlbnRUaHJvdHRsZS5kaXNwYXRjaEV2ZW50QW5k
TG9hZEVuZChYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCku
YWJvcnRFdmVudCkpOwogICAgIGlmICghbV91cGxvYWRDb21wbGV0ZSkgewogICAgICAgICBtX3Vw
bG9hZENvbXBsZXRlID0gdHJ1ZTsKLSAgICAgICAgaWYgKG1fdXBsb2FkICYmIG1fdXBsb2FkRXZl
bnRzQWxsb3dlZCkKLSAgICAgICAgICAgIG1fdXBsb2FkLT5kaXNwYXRjaEV2ZW50KFhNTEh0dHBS
ZXF1ZXN0UHJvZ3Jlc3NFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5hYm9ydEV2ZW50KSk7Cisg
ICAgICAgIGlmIChtX3VwbG9hZCAmJiBtX3VwbG9hZEV2ZW50c0FsbG93ZWQpIAorICAgICAgICAg
ICAgbV91cGxvYWQtPmRpc3BhdGNoRXZlbnRBbmRMb2FkRW5kKFhNTEh0dHBSZXF1ZXN0UHJvZ3Jl
c3NFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5hYm9ydEV2ZW50KSk7CiAgICAgfQogfQogCkBA
IC0xMDIyLDcgKzEwMjIsNyBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpkaWRTZW5kRGF0YSh1bnNp
Z25lZCBsb25nIGxvbmcgYnl0ZXNTZW50LCB1bnNpZ25lZCBsb25nIGxvbgogICAgIGlmIChieXRl
c1NlbnQgPT0gdG90YWxCeXRlc1RvQmVTZW50ICYmICFtX3VwbG9hZENvbXBsZXRlKSB7CiAgICAg
ICAgIG1fdXBsb2FkQ29tcGxldGUgPSB0cnVlOwogICAgICAgICBpZiAobV91cGxvYWRFdmVudHNB
bGxvd2VkKQotICAgICAgICAgICAgbV91cGxvYWQtPmRpc3BhdGNoRXZlbnQoWE1MSHR0cFJlcXVl
c3RQcm9ncmVzc0V2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmxvYWRFdmVudCkpOworICAgICAg
ICAgICAgbV91cGxvYWQtPmRpc3BhdGNoRXZlbnRBbmRMb2FkRW5kKFhNTEh0dHBSZXF1ZXN0UHJv
Z3Jlc3NFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5sb2FkRXZlbnQpKTsKICAgICB9CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5oIGIvU291cmNl
L1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmgKaW5kZXggNjcxOTI1ZTM3MGZkMjkzOTFiYmE3
YmMzNDMyYzYxNzFmYjU1ODIwMC4uMTRjOTQ5MTRiNGZjYTQ3NzFmYTk2MWYwZTBkNDcxODc5M2Zm
YTJhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmgKKysr
IGIvU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmgKQEAgLTEzMyw2ICsxMzMsNyBA
QCBwdWJsaWM6CiAgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihhYm9ydCk7CiAg
ICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihlcnJvcik7CiAgICAgREVGSU5FX0FU
VFJJQlVURV9FVkVOVF9MSVNURU5FUihsb2FkKTsKKyAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5U
X0xJU1RFTkVSKGxvYWRlbmQpOwogICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIo
bG9hZHN0YXJ0KTsKICAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKHByb2dyZXNz
KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmlkbCBi
L1NvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5pZGwKaW5kZXggODI2ZDEwMTI2N2Jk
MGRkOWM1MjNkMmM5NWUyNzgyMzdjZDdkYWZkNS4uNmZiNGRmZDcyYTM0MzQ1NmE1ZTU1NTkwZGIy
M2RiZmU2MDBlYWJhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1
ZXN0LmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuaWRsCkBAIC00
Miw2ICs0Miw3IEBAIG1vZHVsZSB4bWwgewogICAgICAgICBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5l
ciBvbmFib3J0OwogICAgICAgICBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbmVycm9yOwogICAg
ICAgICBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbmxvYWQ7CisgICAgICAgIGF0dHJpYnV0ZSBF
dmVudExpc3RlbmVyIG9ubG9hZGVuZDsKICAgICAgICAgYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIg
b25sb2Fkc3RhcnQ7CiAgICAgICAgIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9ucHJvZ3Jlc3M7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdFByb2dyZXNz
RXZlbnRUaHJvdHRsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3RQcm9n
cmVzc0V2ZW50VGhyb3R0bGUuY3BwCmluZGV4IDVkNGFmYTMyOGI3YmIwNTRiNDc1ZmFkMjU4NGNm
OTA5NTU0NDYwZTMuLmFkYTk3ZDVlOGNiYzg3YTFjMGI1ZDg5MjU4MzY3NDI5OTYwNzI1NzggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRU
aHJvdHRsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0UHJvZ3Jl
c3NFdmVudFRocm90dGxlLmNwcApAQCAtODEsNiArODEsMTIgQEAgdm9pZCBYTUxIdHRwUmVxdWVz
dFByb2dyZXNzRXZlbnRUaHJvdHRsZTo6ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBl
dmVudCwKICAgICBtX3RhcmdldC0+ZGlzcGF0Y2hFdmVudChldmVudCk7CiB9CiAKK3ZvaWQgWE1M
SHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGU6OmRpc3BhdGNoRXZlbnRBbmRMb2FkRW5k
KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50LCBQcm9ncmVzc0V2ZW50QWN0aW9uIHByb2dyZXNzRXZl
bnRBY3Rpb24pCit7CisgICAgZGlzcGF0Y2hFdmVudChldmVudCwgcHJvZ3Jlc3NFdmVudEFjdGlv
bik7CisgICAgZGlzcGF0Y2hFdmVudChYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnQ6OmNyZWF0
ZShldmVudE5hbWVzKCkubG9hZGVuZEV2ZW50KSk7Cit9CisKIHZvaWQgWE1MSHR0cFJlcXVlc3RQ
cm9ncmVzc0V2ZW50VGhyb3R0bGU6OmZsdXNoUHJvZ3Jlc3NFdmVudCgpCiB7CiAgICAgaWYgKCFo
YXNFdmVudFRvRGlzcGF0Y2goKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxI
dHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZS5oIGIvU291cmNlL1dlYkNvcmUveG1sL1hN
TEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlLmgKaW5kZXggMDM2OTA1ZTdlMjJjZmFl
ODAzZTAxNGRjYjc1NDg5ZWNmZDRhZjFkYS4uYjZiNzE1NDEzOTczMzA2ZWM2M2M1MzA5N2FmOTky
OGYzNDVkZTA0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0
UHJvZ3Jlc3NFdmVudFRocm90dGxlLmgKKysrIGIvU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBS
ZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlLmgKQEAgLTUwLDYgKzUwLDcgQEAgcHVibGljOgog
CiAgICAgdm9pZCBkaXNwYXRjaFByb2dyZXNzRXZlbnQoYm9vbCBsZW5ndGhDb21wdXRhYmxlLCB1
bnNpZ25lZCBsb25nIGxvbmcgbG9hZGVkLCB1bnNpZ25lZCBsb25nIGxvbmcgdG90YWwpOwogICAg
IHZvaWQgZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiwgUHJvZ3Jlc3NFdmVudEFjdGlv
biA9IERvTm90Rmx1c2hQcm9ncmVzc0V2ZW50KTsKKyAgICB2b2lkIGRpc3BhdGNoRXZlbnRBbmRM
b2FkRW5kKFBhc3NSZWZQdHI8RXZlbnQ+LCBQcm9ncmVzc0V2ZW50QWN0aW9uID0gRG9Ob3RGbHVz
aFByb2dyZXNzRXZlbnQpOwogCiAgICAgdm9pZCBzdXNwZW5kKCk7CiAgICAgdm9pZCByZXN1bWUo
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdFVwbG9hZC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3RVcGxvYWQuY3BwCmluZGV4IDNm
MWNhZmFkMjg5ODg4M2I2ZDRlYmQ4YTU4N2VhZGQzOWJlYzQwZDcuLmMwYTQ0MTRhYjFiYTgxZWUx
MzBiZmU3YzljOWU0NTZlNzc4Y2U1NGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3htbC9Y
TUxIdHRwUmVxdWVzdFVwbG9hZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBS
ZXF1ZXN0VXBsb2FkLmNwcApAQCAtNjEsNCArNjEsMTIgQEAgRXZlbnRUYXJnZXREYXRhKiBYTUxI
dHRwUmVxdWVzdFVwbG9hZDo6ZW5zdXJlRXZlbnRUYXJnZXREYXRhKCkKICAgICByZXR1cm4gJm1f
ZXZlbnRUYXJnZXREYXRhOwogfQogCit2b2lkIFhNTEh0dHBSZXF1ZXN0VXBsb2FkOjpkaXNwYXRj
aEV2ZW50QW5kTG9hZEVuZChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCkKK3sKKyAgICBkaXNwYXRj
aEV2ZW50KGV2ZW50KTsKKyAgICBkaXNwYXRjaEV2ZW50KFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NF
dmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5sb2FkZW5kRXZlbnQpKTsKK30KKworCisKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRw
UmVxdWVzdFVwbG9hZC5oIGIvU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0VXBsb2Fk
LmgKaW5kZXggN2Y0NTg2MTcxMGRiMWNkM2RkYTZjMzQxNWI1Yjg1M2VkZmQzM2Y0ZC4uYTYyYTE3
NTQ1ZWY5ZDQ1N2I3ZmRjNzQxMzgyNmEyNjkwNTRmN2U1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0VXBsb2FkLmgKKysrIGIvU291cmNlL1dlYkNvcmUveG1s
L1hNTEh0dHBSZXF1ZXN0VXBsb2FkLmgKQEAgLTYwLDkgKzYwLDEyIEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihhYm9ydCk7CiAg
ICAgICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIoZXJyb3IpOwogICAgICAgICBE
RUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKGxvYWQpOworICAgICAgICBERUZJTkVfQVRU
UklCVVRFX0VWRU5UX0xJU1RFTkVSKGxvYWRlbmQpOwogICAgICAgICBERUZJTkVfQVRUUklCVVRF
X0VWRU5UX0xJU1RFTkVSKGxvYWRzdGFydCk7CiAgICAgICAgIERFRklORV9BVFRSSUJVVEVfRVZF
TlRfTElTVEVORVIocHJvZ3Jlc3MpOwogCisgICAgICAgIHZvaWQgZGlzcGF0Y2hFdmVudEFuZExv
YWRFbmQoUGFzc1JlZlB0cjxFdmVudD4pOworCiAgICAgcHJpdmF0ZToKICAgICAgICAgWE1MSHR0
cFJlcXVlc3RVcGxvYWQoWE1MSHR0cFJlcXVlc3QqKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0VXBsb2FkLmlkbCBiL1NvdXJjZS9XZWJDb3JlL3htbC9Y
TUxIdHRwUmVxdWVzdFVwbG9hZC5pZGwKaW5kZXggNzM0OTM5ZDg5ZDZhM2FjZGYwNTlkOTMxZWQ2
MjdhNmJlYTQ5OThkYS4uNWY5OGNiNzdmZWZlZDRiOWY2MjAzMDE3NjE5YjViYjNhNDIwYTYyMiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0VXBsb2FkLmlkbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3RVcGxvYWQuaWRsCkBAIC0zOCw2
ICszOCw3IEBAIG1vZHVsZSB4bWwgewogICAgICAgICBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBv
bmFib3J0OwogICAgICAgICBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbmVycm9yOwogICAgICAg
ICBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbmxvYWQ7CisgICAgICAgIGF0dHJpYnV0ZSBFdmVu
dExpc3RlbmVyIG9ubG9hZGVuZDsKICAgICAgICAgYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIgb25s
b2Fkc3RhcnQ7CiAgICAgICAgIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9ucHJvZ3Jlc3M7CiAK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA0NzcwMGI5ZDIzODE2YWY1OTEwYzUxMzFmOGY0ZjRhMDU2ZDgwZWZkLi45ZDY0ZTY4
NzZlOGQ2ZmM1NmI0Mjg1YzRiYTdiYWQ0ZmRjOTkzNjI2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjYgQEAK
KzIwMTEtMTItMDkgIEhhbnMgTXVsbGVyICA8aG11bGxlckBhZG9iZS5jb20+CisKKyAgICAgICAg
T25sb2FkZW5kIGV2ZW50IGlzIG5vdCBzdXBwb3J0ZWQgaW4gWE1MSHR0cFJlcXVlc3QKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQwOTUyCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgc3VwcG9ydCBm
b3IgdGhlIGxvYWRlbmQgUHJvZ3Jlc0V2ZW50IHRvIFhNTEh0dHBSZXF1ZXN0IGFuZCBYTUxIdHRw
UmVxdWVzdFVwbG9hZC4KKyAgICAgICAgVGhlIG5ldyB0ZXN0cyB2ZXJpZnkgdGhhdCBhIGxvYWRl
bmQgcHJvZ3Jlc3MgZXZlbnQgaXMgZGlzcGF0Y2hlZCBhZnRlciBhIGxvYWQsIGFib3J0LCAKKyAg
ICAgICAgb3IgZXJyb3IgcHJvZ3Jlc3MgZXZlbnQgZm9yIGJvdGggc3luY2hyb25vdXMgYW5kIGFz
eW5jaHJvbm91cyByZXF1ZXN0cy4KKworICAgICAgICAqIGh0dHAvdGVzdHMveG1saHR0cHJlcXVl
c3Qvb25sb2FkZW5kLWV2ZW50LWFmdGVyLWFib3J0LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAg
ICAgICogaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9vbmxvYWRlbmQtZXZlbnQtYWZ0ZXItYWJv
cnQuaHRtbDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9vbmxv
YWRlbmQtZXZlbnQtYWZ0ZXItZXJyb3ItZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBo
dHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L29ubG9hZGVuZC1ldmVudC1hZnRlci1lcnJvci5odG1s
OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L29ubG9hZGVuZC1l
dmVudC1hZnRlci1sb2FkLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0
cy94bWxodHRwcmVxdWVzdC9vbmxvYWRlbmQtZXZlbnQtYWZ0ZXItbG9hZC5odG1sOiBBZGRlZC4K
KyAgICAgICAgKiBodHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3VwbG9hZC1vbmxvYWRlbmQtZXZl
bnQtYWZ0ZXItYWJvcnQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3Rz
L3htbGh0dHByZXF1ZXN0L3VwbG9hZC1vbmxvYWRlbmQtZXZlbnQtYWZ0ZXItYWJvcnQuaHRtbDog
QWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC91cGxvYWQtb25sb2Fk
ZW5kLWV2ZW50LWFmdGVyLWxvYWQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBodHRw
L3Rlc3RzL3htbGh0dHByZXF1ZXN0L3VwbG9hZC1vbmxvYWRlbmQtZXZlbnQtYWZ0ZXItbG9hZC5o
dG1sOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3htbGh0dHBy
ZXF1ZXN0LXN5bmMtbm8tcHJvZ3Jlc3MtZXZlbnRzLWV4cGVjdGVkLnR4dDoKKwogMjAxMS0xMi0w
OCAgVG9ueSBDaGFuZyAgPHRvbnlAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIE1hcmsgdGVzdHMg
YWRkZWQgaW4gcjEwMjM4OCBhcyBmYWlsaW5nIG9uIENocm9taXVtLiAgRml4IHRoZSBjcm9zcyBw
bGF0Zm9ybQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVz
dC9vbmxvYWRlbmQtZXZlbnQtYWZ0ZXItYWJvcnQtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9vbmxvYWRlbmQtZXZlbnQtYWZ0ZXItYWJvcnQtZXhw
ZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZmMGU3MTVjMzJjZTEzOTNjOTY5ZTM3YzY5ZjhmMGVhYmRj
MmY5ZGEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHBy
ZXF1ZXN0L29ubG9hZGVuZC1ldmVudC1hZnRlci1hYm9ydC1leHBlY3RlZC50eHQKQEAgLTAsMCAr
MSw3IEBACitUZXN0IGNhc2UgZm9yIGJ1ZyA0MDk1MjogT25sb2FkZW5kIGV2ZW50IGlzIG5vdCBz
dXBwb3J0ZWQgaW4gWE1MSHR0cFJlcXVlc3QKKworVmVyaWZ5IHRoYXQgYSBsb2FkZW5kIFByb2dy
ZXNzRXZlbnQgaXMgZGlzcGF0Y2hlZCBhZnRlciB0aGUgYWJvcnQgUHJvZ3Jlc3NFdmVudCB3aGVu
IGFuIGFzeW5jIHJlcXVlc3QgaXMgYWJvcnRlZC4KKworUEFTUyBzaG91bGQgYXBwZWFyIGJlbG93
OgorCitQQVNTCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1
ZXN0L29ubG9hZGVuZC1ldmVudC1hZnRlci1hYm9ydC5odG1sIGIvTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy94bWxodHRwcmVxdWVzdC9vbmxvYWRlbmQtZXZlbnQtYWZ0ZXItYWJvcnQuaHRtbApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi43ZTQ4OTAwZjQ5OWQ1Zjk0N2YxZTUyYzkxNmM2YWQ0NzgxYjExODE3Ci0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9vbmxvYWRl
bmQtZXZlbnQtYWZ0ZXItYWJvcnQuaHRtbApAQCAtMCwwICsxLDY2IEBACis8aHRtbD4KKzxoZWFk
PgorPHRpdGxlPlRlc3QgY2FzZSBmb3IgYnVnIDQwOTUyPC90aXRsZT4KKzwvaGVhZD4KKzxib2R5
PgorPHA+VGVzdCBjYXNlIGZvciA8YSBocmVmPSJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NDA5NTIiPiBidWcgNDA5NTI8L2E+OiBPbmxvYWRlbmQgZXZlbnQgaXMgbm90
IHN1cHBvcnRlZCBpbiBYTUxIdHRwUmVxdWVzdDwvcD4KKzxwPlZlcmlmeSB0aGF0IGEgbG9hZGVu
ZCBQcm9ncmVzc0V2ZW50IGlzIGRpc3BhdGNoZWQgYWZ0ZXIgdGhlIGFib3J0IFByb2dyZXNzRXZl
bnQgd2hlbiBhbiBhc3luYyByZXF1ZXN0IGlzIGFib3J0ZWQuPC9wPgorPHA+UEFTUyBzaG91bGQg
YXBwZWFyIGJlbG93OjwvcD4KKzxwIGlkPWNvbnNvbGU+PC9wPgorPHNjcmlwdCB0eXBlPSJ0ZXh0
L2phdmFzY3JpcHQiPgoraWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgIGxh
eW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxl
ci53YWl0VW50aWxEb25lKCk7Cit9CisKK2Z1bmN0aW9uIGxvZyhtZXNzYWdlKQoreworICAgIHZh
ciBjb25zb2xlRWx0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnNvbGUiKTsKKyAgICBj
b25zb2xlRWx0LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG1lc3NhZ2UpKTsK
K30KKwordmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOwordmFyIHJlc3VsdHMgPSAiIjsK
K3ZhciBleHBlY3RlZCA9ICIgbG9hZHN0YXJ0IHJlYWR5U3RhdGU9RE9ORSBhYm9ydCBsb2FkZW5k
IjsKKworZnVuY3Rpb24gbG9nUHJvZ3Jlc3NFdmVudChlKSB7CisgICAgcmVzdWx0cyArPSAiICIg
KyBlLnR5cGU7Cit9CisKK2Z1bmN0aW9uIGxvZ1VuZXhwZWN0ZWRQcm9ncmVzc0V2ZW50KGUpIHsK
KyAgICByZXN1bHRzICs9ICIgW3VuZXhwZWN0ZWQgUHJvZ3Jlc3NFdmVudDogIiArIGUudHlwZSAr
ICJdIjsKKyAgICBjb21wbGV0ZVRlc3QoKTsgICAKK30KKworZnVuY3Rpb24gY29tcGxldGVUZXN0
KCkKK3sKKyAgICBsb2cocmVzdWx0cyA9PSBleHBlY3RlZCA/ICJQQVNTIiA6ICJGQUlMRUQgcmVz
dWx0cyA6ICciICsgcmVzdWx0cyArICInLCBleHBlY3RlZCA6ICciICsgZXhwZWN0ZWQgKyAiJyIp
OworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGxheW91dFRl
c3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKK30KKworZnVuY3Rpb24gdGVzdCgpCit7CisgICAg
eGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgaWYgKHhoci5y
ZWFkeVN0YXRlID09IHhoci5ET05FKQorICAgICAgICAgICAgcmVzdWx0cyArPSAiIHJlYWR5U3Rh
dGU9RE9ORSI7CisgICAgICAgIGVsc2UgaWYgKHhoci5yZWFkeVN0YXRlID4geGhyLk9QRU5FRCkK
KyAgICAgICAgICAgIHhoci5hYm9ydCgpOworICAgIH0KKyAgICB4aHIub25sb2Fkc3RhcnQgPSBs
b2dQcm9ncmVzc0V2ZW50OworICAgIHhoci5vbmFib3J0ID0gbG9nUHJvZ3Jlc3NFdmVudDsKKyAg
ICB4aHIub25lcnJvciA9IGxvZ1VuZXhwZWN0ZWRQcm9ncmVzc0V2ZW50OworICAgIHhoci5vbmxv
YWQgPSBsb2dVbmV4cGVjdGVkUHJvZ3Jlc3NFdmVudDsKKyAgICB4aHIub25sb2FkZW5kID0gZnVu
Y3Rpb24oZSkgeworICAgICAgICBsb2dQcm9ncmVzc0V2ZW50KGUpOworICAgICAgICBjb21wbGV0
ZVRlc3QoKTsKKyAgICB9CisKKyAgICB4aHIub3BlbigiR0VUIiwgInJlc291cmNlcy9nZXQudHh0
Iik7CisgICAgeGhyLnNlbmQoKTsKK30KKwordGVzdCgpOworCis8L3NjcmlwdD4KKzwvYm9keT4K
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3Qvb25sb2Fk
ZW5kLWV2ZW50LWFmdGVyLWVycm9yLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2h0dHAvdGVz
dHMveG1saHR0cHJlcXVlc3Qvb25sb2FkZW5kLWV2ZW50LWFmdGVyLWVycm9yLWV4cGVjdGVkLnR4
dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi41YjY0YzFhZmQ0ZTA5ZjA0YmFiMTZhNjQxYThjZWUyNzBlN2JiNzQ1Ci0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9v
bmxvYWRlbmQtZXZlbnQtYWZ0ZXItZXJyb3ItZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNyBAQAor
VGVzdCBjYXNlIGZvciBidWcgNDA5NTI6IE9ubG9hZGVuZCBldmVudCBpcyBub3Qgc3VwcG9ydGVk
IGluIFhNTEh0dHBSZXF1ZXN0CisKK1ZlcmlmeSB0aGF0IGEgbG9hZGVuZCBQcm9ncmVzc0V2ZW50
IGlzIGRpc3BhdGNoZWQgYWZ0ZXIgdGhlIGVycm9yIFByb2dyZXNzRXZlbnQgd2hlbiBhbiBhc3lu
YyByZXF1ZXN0IGZhaWxzLgorCitQQVNTIHNob3VsZCBhcHBlYXIgYmVsb3c6CisKK1BBU1MKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3Qvb25sb2FkZW5k
LWV2ZW50LWFmdGVyLWVycm9yLmh0bWwgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHBy
ZXF1ZXN0L29ubG9hZGVuZC1ldmVudC1hZnRlci1lcnJvci5odG1sCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJhODU4
ODU4NTc0MjM1ODNjNDI4MmY3ZWE5MmYxZmEzMzAxMzU4YjIKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L29ubG9hZGVuZC1ldmVudC1hZnRl
ci1lcnJvci5odG1sCkBAIC0wLDAgKzEsNjYgQEAKKzxodG1sPgorPGhlYWQ+Cis8dGl0bGU+VGVz
dCBjYXNlIGZvciBidWcgNDA5NTI8L3RpdGxlPgorPC9oZWFkPgorPGJvZHk+Cis8cD4gVGVzdCBj
YXNlIGZvciA8YSBocmVmPSJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NDA5NTIiPiBidWcgNDA5NTI8L2E+OiBPbmxvYWRlbmQgZXZlbnQgaXMgbm90IHN1cHBvcnRlZCBp
biBYTUxIdHRwUmVxdWVzdDwvcD4KKzxwPiBWZXJpZnkgdGhhdCBhIGxvYWRlbmQgUHJvZ3Jlc3NF
dmVudCBpcyBkaXNwYXRjaGVkIGFmdGVyIHRoZSBlcnJvciBQcm9ncmVzc0V2ZW50IHdoZW4gYW4g
YXN5bmMgcmVxdWVzdCBmYWlscy48L3A+Cis8cD5QQVNTIHNob3VsZCBhcHBlYXIgYmVsb3c6PC9w
PgorPHAgaWQ9Y29uc29sZT48L3A+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Citp
ZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgbGF5b3V0VGVzdENvbnRyb2xs
ZXIuZHVtcEFzVGV4dCgpOworICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUo
KTsKK30KKworZnVuY3Rpb24gbG9nKG1lc3NhZ2UpCit7CisgICAgdmFyIGNvbnNvbGVFbHQgPSBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29uc29sZSIpOworICAgIGNvbnNvbGVFbHQuYXBwZW5k
Q2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobWVzc2FnZSkpOworfQorCit2YXIgeGhyID0g
bmV3IFhNTEh0dHBSZXF1ZXN0KCk7Cit2YXIgcmVzdWx0cyA9ICIiOwordmFyIGV4cGVjdGVkID0g
IiBsb2Fkc3RhcnQgcmVhZHlTdGF0ZT1ET05FIGVycm9yIGxvYWRlbmQiOworCisKK2Z1bmN0aW9u
IGxvZ1Byb2dyZXNzRXZlbnQoZSkgeworICAgIHJlc3VsdHMgKz0gIiAiICsgZS50eXBlOworfQor
CitmdW5jdGlvbiBsb2dVbmV4cGVjdGVkUHJvZ3Jlc3NFdmVudChlKSB7CisgICAgcmVzdWx0cyAr
PSAiIFt1bmV4cGVjdGVkIFByb2dyZXNzRXZlbnQ6ICIgKyBlLnR5cGUgKyAiXSI7CisgICAgY29t
cGxldGVUZXN0KCk7ICAgCit9CisKK2Z1bmN0aW9uIGNvbXBsZXRlVGVzdCgpCit7CisgICAgbG9n
KHJlc3VsdHMgPT0gZXhwZWN0ZWQgPyAiUEFTUyIgOiAiRkFJTEVEIHJlc3VsdHMgOiAnIiArIHJl
c3VsdHMgKyAiJywgZXhwZWN0ZWQgOiAnIiArIGV4cGVjdGVkICsgIiciKTsKKyAgICBpZiAod2lu
ZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5u
b3RpZnlEb25lKCk7Cit9CisKK2Z1bmN0aW9uIHRlc3QoKQoreworICAgIHhoci5vbnJlYWR5c3Rh
dGVjaGFuZ2UgPSBmdW5jdGlvbihlKSB7CisgICAgICAgIGlmICh4aHIucmVhZHlTdGF0ZSA9PSB4
aHIuRE9ORSkKKyAgICAgICAgICAgIHJlc3VsdHMgKz0gIiByZWFkeVN0YXRlPURPTkUiOworICAg
IH0KKyAgICB4aHIub25sb2Fkc3RhcnQgPSBsb2dQcm9ncmVzc0V2ZW50OworICAgIHhoci5vbmFi
b3J0ID0gbG9nVW5leHBlY3RlZFByb2dyZXNzRXZlbnQ7CisgICAgeGhyLm9uZXJyb3IgPSBsb2dQ
cm9ncmVzc0V2ZW50OworICAgIHhoci5vbmxvYWQgPSBsb2dVbmV4cGVjdGVkUHJvZ3Jlc3NFdmVu
dDsKKyAgICB4aHIub25sb2FkZW5kID0gZnVuY3Rpb24oZSkgeworICAgICAgICBsb2dQcm9ncmVz
c0V2ZW50KGUpOworICAgICAgICBjb21wbGV0ZVRlc3QoKTsKKyAgICB9CisKKyAgICB4aHIub3Bl
bigiR0VUIiwgInJlc291cmNlcy9pbmZpbml0ZS1sb29wLnBocCIpOworICAgIHhoci5zZW5kKCk7
Cit9CisKK3Rlc3QoKTsgCisKKzwvc2NyaXB0PgorPC9ib2R5PgorCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L29ubG9hZGVuZC1ldmVudC1hZnRlci1s
b2FkLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3Qv
b25sb2FkZW5kLWV2ZW50LWFmdGVyLWxvYWQtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg5OTc2
YzAxMGY1OTA0NjdjZDg5ZTliMmNhNWU0MjZkYjQ0MjBkNDcKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L29ubG9hZGVuZC1ldmVudC1hZnRl
ci1sb2FkLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDcgQEAKK1Rlc3QgY2FzZSBmb3IgYnVnIDQw
OTUyOiBPbmxvYWRlbmQgZXZlbnQgaXMgbm90IHN1cHBvcnRlZCBpbiBYTUxIdHRwUmVxdWVzdAor
CitWZXJpZnkgdGhhdCBhIGxvYWRlbmQgUHJvZ3Jlc3NFdmVudCBpcyBkaXNwYXRjaGVkIGFmdGVy
IHRoZSBsb2FkIFByb2dyZXNzRXZlbnQgd2hlbiBhbiBhc3luYyByZXF1ZXN0IGNvbXBsZXRlcyBu
b3JtYWxseS4KKworUEFTUyBzaG91bGQgYXBwZWFyIGJlbG93OgorCitQQVNTCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L29ubG9hZGVuZC1ldmVudC1h
ZnRlci1sb2FkLmh0bWwgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L29u
bG9hZGVuZC1ldmVudC1hZnRlci1sb2FkLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWFiMzAxMWRkOWI1Yzgw
MDQ1Yjk4MzhiYjI4MWU2MzQ2NGU3YjFlNAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3Qvb25sb2FkZW5kLWV2ZW50LWFmdGVyLWxvYWQuaHRt
bApAQCAtMCwwICsxLDY0IEBACis8SFRNTD4KKzxoZWFkPgorPHRpdGxlPlRlc3QgY2FzZSBmb3Ig
YnVnIDQwOTUyPC90aXRsZT4KKzwvaGVhZD4KKzxib2R5PgorPHA+IFRlc3QgY2FzZSBmb3IgPGEg
aHJlZj0iaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQwOTUyIj4gYnVn
IDQwOTUyPC9hPjogT25sb2FkZW5kIGV2ZW50IGlzIG5vdCBzdXBwb3J0ZWQgaW4gWE1MSHR0cFJl
cXVlc3Q8L3A+Cis8cD4gVmVyaWZ5IHRoYXQgYSBsb2FkZW5kIFByb2dyZXNzRXZlbnQgaXMgZGlz
cGF0Y2hlZCBhZnRlciB0aGUgbG9hZCBQcm9ncmVzc0V2ZW50IHdoZW4gYW4gYXN5bmMgcmVxdWVz
dCBjb21wbGV0ZXMgbm9ybWFsbHkuPC9wPgorPHA+UEFTUyBzaG91bGQgYXBwZWFyIGJlbG93Ojwv
cD4KKzxwIGlkPWNvbnNvbGU+PC9wPgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgor
aWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgIGxheW91dFRlc3RDb250cm9s
bGVyLmR1bXBBc1RleHQoKTsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25l
KCk7Cit9CisKK2Z1bmN0aW9uIGxvZyhtZXNzYWdlKQoreworICAgIHZhciBjb25zb2xlRWx0ID0g
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnNvbGUiKTsKKyAgICBjb25zb2xlRWx0LmFwcGVu
ZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG1lc3NhZ2UpKTsKK30KKwordmFyIHhociA9
IG5ldyBYTUxIdHRwUmVxdWVzdCgpOwordmFyIHJlc3VsdHMgPSAiIjsKK3ZhciBleHBlY3RlZCA9
ICIgbG9hZHN0YXJ0IHJlYWR5U3RhdGU9RE9ORSBsb2FkIGxvYWRlbmQiOworCitmdW5jdGlvbiBs
b2dQcm9ncmVzc0V2ZW50KGUpIHsKKyAgICByZXN1bHRzICs9ICIgIiArIGUudHlwZTsKK30KKwor
ZnVuY3Rpb24gbG9nVW5leHBlY3RlZFByb2dyZXNzRXZlbnQoZSkgeworICAgIHJlc3VsdHMgKz0g
IiBbdW5leHBlY3RlZCBQcm9ncmVzc0V2ZW50OiAiICsgZS50eXBlICsgIl0iOworICAgIGNvbXBs
ZXRlVGVzdCgpOyAgIAorfQorCitmdW5jdGlvbiBjb21wbGV0ZVRlc3QoKQoreworICAgIGxvZyhy
ZXN1bHRzID09IGV4cGVjdGVkID8gIlBBU1MiIDogIkZBSUxFRCByZXN1bHRzIDogJyIgKyByZXN1
bHRzICsgIicsIGV4cGVjdGVkIDogJyIgKyBleHBlY3RlZCArICInIik7CisgICAgaWYgKHdpbmRv
dy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90
aWZ5RG9uZSgpOworfQorCitmdW5jdGlvbiB0ZXN0KCkgCit7CisgICAgeGhyLm9ucmVhZHlzdGF0
ZWNoYW5nZSA9IGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgaWYgKHhoci5yZWFkeVN0YXRlID09IHho
ci5ET05FKQorICAgICAgICAgICAgcmVzdWx0cyArPSAiIHJlYWR5U3RhdGU9RE9ORSI7CisgICAg
fQorICAgIHhoci5vbmxvYWRzdGFydCA9IGxvZ1Byb2dyZXNzRXZlbnQ7CisgICAgeGhyLm9uYWJv
cnQgPSBsb2dVbmV4cGVjdGVkUHJvZ3Jlc3NFdmVudDsKKyAgICB4aHIub25lcnJvciA9IGxvZ1Vu
ZXhwZWN0ZWRQcm9ncmVzc0V2ZW50OworICAgIHhoci5vbmxvYWQgPSBsb2dQcm9ncmVzc0V2ZW50
OworICAgIHhoci5vbmxvYWRlbmQgPSBmdW5jdGlvbihlKSB7CisgICAgICAgIGxvZ1Byb2dyZXNz
RXZlbnQoZSk7CisgICAgICAgIGNvbXBsZXRlVGVzdCgpOworICAgIH0KKworICAgIHhoci5vcGVu
KCJHRVQiLCAicmVzb3VyY2VzL2dldC50eHQiKTsgCisgICAgeGhyLnNlbmQoKTsKK30KKwordGVz
dCgpOyAKKworPC9zY3JpcHQ+Cis8L2JvZHk+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL3htbGh0dHByZXF1ZXN0L3VwbG9hZC1vbmxvYWRlbmQtZXZlbnQtYWZ0ZXItYWJvcnQt
ZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC91cGxv
YWQtb25sb2FkZW5kLWV2ZW50LWFmdGVyLWFib3J0LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4x
NjVlMWQ3NTE0M2MxOWQwOTBjMTE5MjE5OWE3MWIyODE5N2Y1ZjhkCi0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC91cGxvYWQtb25sb2FkZW5k
LWV2ZW50LWFmdGVyLWFib3J0LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDcgQEAKK1Rlc3QgY2Fz
ZSBmb3IgYnVnIDQwOTUyOiBPbmxvYWRlbmQgZXZlbnQgaXMgbm90IHN1cHBvcnRlZCBpbiBYTUxI
dHRwUmVxdWVzdAorCitWZXJpZnkgdGhhdCBhIGxvYWRlbmQgUHJvZ3Jlc3NFdmVudCBpcyBkaXNw
YXRjaGVkIGFmdGVyIHRoZSBhYm9ydCBQcm9ncmVzc0V2ZW50IHdoZW4gYW4gYXN5bmMgdXBsb2Fk
IHJlcXVlc3QgaXMgYWJvcnRlZC4KKworUEFTUyBzaG91bGQgYXBwZWFyIGJlbG93OgorCitQQVNT
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3VwbG9h
ZC1vbmxvYWRlbmQtZXZlbnQtYWZ0ZXItYWJvcnQuaHRtbCBiL0xheW91dFRlc3RzL2h0dHAvdGVz
dHMveG1saHR0cHJlcXVlc3QvdXBsb2FkLW9ubG9hZGVuZC1ldmVudC1hZnRlci1hYm9ydC5odG1s
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjg5NGQ1YjRlZTM3NzlmODY5MzZlZjIxN2JiYTQ2ODA4YWQ0NzViOTAKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3Vw
bG9hZC1vbmxvYWRlbmQtZXZlbnQtYWZ0ZXItYWJvcnQuaHRtbApAQCAtMCwwICsxLDY0IEBACis8
aHRtbD4KKzxoZWFkPgorPHRpdGxlPlRlc3QgY2FzZSBmb3IgYnVnIDQwOTUyPC90aXRsZT4KKzwv
aGVhZD4KKzxib2R5PgorPHA+IFRlc3QgY2FzZSBmb3IgPGEgaHJlZj0iaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQwOTUyIj4gYnVnIDQwOTUyPC9hPjogT25sb2FkZW5k
IGV2ZW50IGlzIG5vdCBzdXBwb3J0ZWQgaW4gWE1MSHR0cFJlcXVlc3Q8L3A+Cis8cD4gVmVyaWZ5
IHRoYXQgYSBsb2FkZW5kIFByb2dyZXNzRXZlbnQgaXMgZGlzcGF0Y2hlZCBhZnRlciB0aGUgYWJv
cnQgUHJvZ3Jlc3NFdmVudCB3aGVuIGFuIGFzeW5jIHVwbG9hZCByZXF1ZXN0IGlzIGFib3J0ZWQu
PC9wPgorPHA+UEFTUyBzaG91bGQgYXBwZWFyIGJlbG93OjwvcD4KKzxwIGlkPWNvbnNvbGU+PC9w
PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoraWYgKHdpbmRvdy5sYXlvdXRUZXN0
Q29udHJvbGxlcikgeworICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAg
ICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7Cit9CisKK2Z1bmN0aW9uIGxv
ZyhtZXNzYWdlKQoreworICAgIHZhciBjb25zb2xlRWx0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoImNvbnNvbGUiKTsKKyAgICBjb25zb2xlRWx0LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0
ZVRleHROb2RlKG1lc3NhZ2UpKTsKK30KKwordmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgp
OwordmFyIHJlc3VsdHMgPSAiIjsKK3ZhciBleHBlY3RlZCA9ICIgcHJvZ3Jlc3MgYWJvcnQgbG9h
ZGVuZCI7CisKK2Z1bmN0aW9uIGxvZ1Byb2dyZXNzRXZlbnQoZSkgeworICAgIHJlc3VsdHMgKz0g
IiAiICsgZS50eXBlOworfQorCitmdW5jdGlvbiBsb2dVbmV4cGVjdGVkUHJvZ3Jlc3NFdmVudChl
KSB7CisgICAgcmVzdWx0cyArPSAiIFt1bmV4cGVjdGVkIFByb2dyZXNzRXZlbnQ6ICIgKyBlLnR5
cGUgKyAiXSI7CisgICAgY29tcGxldGVUZXN0KCk7ICAgCit9CisKK2Z1bmN0aW9uIGNvbXBsZXRl
VGVzdCgpCit7CisgICAgbG9nKHJlc3VsdHMgPT0gZXhwZWN0ZWQgPyAiUEFTUyIgOiAiRkFJTEVE
IHJlc3VsdHMgOiAnIiArIHJlc3VsdHMgKyAiJywgZXhwZWN0ZWQgOiAnIiArIGV4cGVjdGVkICsg
IiciKTsKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICBsYXlv
dXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cit9CisKK2Z1bmN0aW9uIHRlc3QoKQorewor
ICAgIHhoci51cGxvYWQub25wcm9ncmVzcyA9IGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgbG9nUHJv
Z3Jlc3NFdmVudChlKTsKKyAgICAgICAgeGhyLmFib3J0KCk7CisgICAgfQorICAgIHhoci51cGxv
YWQub25hYm9ydCA9IGxvZ1Byb2dyZXNzRXZlbnQ7CisgICAgeGhyLnVwbG9hZC5vbmVycm9yID0g
bG9nVW5leHBlY3RlZFByb2dyZXNzRXZlbnQ7CisgICAgeGhyLnVwbG9hZC5vbmxvYWQgPSBsb2dV
bmV4cGVjdGVkUHJvZ3Jlc3NFdmVudDsKKyAgICB4aHIudXBsb2FkLm9ubG9hZGVuZCA9IGZ1bmN0
aW9uKGUpIHsKKyAgICAgICAgbG9nUHJvZ3Jlc3NFdmVudChlKTsKKyAgICAgICAgY29tcGxldGVU
ZXN0KCk7CisgICAgfQorCisgICAgeGhyLm9wZW4oIlBPU1QiLCAicmVzb3VyY2VzL3Bvc3QtZWNo
by5jZ2kiLCB0cnVlKTsKKyAgICB4aHIuc2VuZCgiZGF0YSIpOworfQorCit0ZXN0KCk7CisKKzwv
c2NyaXB0PgorPC9ib2R5PgorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3ht
bGh0dHByZXF1ZXN0L3VwbG9hZC1vbmxvYWRlbmQtZXZlbnQtYWZ0ZXItbG9hZC1leHBlY3RlZC50
eHQgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3VwbG9hZC1vbmxvYWRl
bmQtZXZlbnQtYWZ0ZXItbG9hZC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTYyMjM4NjU1ZTIy
NTVmMDFlODkxNTE3YTI0NDJkNWJhZGZmM2M0YwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvdXBsb2FkLW9ubG9hZGVuZC1ldmVudC1hZnRl
ci1sb2FkLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDcgQEAKK1Rlc3QgY2FzZSBmb3IgYnVnIDQw
OTUyOiBPbmxvYWRlbmQgZXZlbnQgaXMgbm90IHN1cHBvcnRlZCBpbiBYTUxIdHRwUmVxdWVzdAor
CitWZXJpZnkgdGhhdCBhIGxvYWRlbmQgUHJvZ3Jlc3NFdmVudCBpcyBkaXNwYXRjaGVkIGFmdGVy
IHRoZSBsb2FkIFByb2dyZXNzRXZlbnQgd2hlbiBhbiBhc3luYyB1cGxvYWQgcmVxdWVzdCBjb21w
bGV0ZXMgbm9ybWFsbHkuCisKK1BBU1Mgc2hvdWxkIGFwcGVhciBiZWxvdzoKKworUEFTUwpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC91cGxvYWQtb25s
b2FkZW5kLWV2ZW50LWFmdGVyLWxvYWQuaHRtbCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMveG1s
aHR0cHJlcXVlc3QvdXBsb2FkLW9ubG9hZGVuZC1ldmVudC1hZnRlci1sb2FkLmh0bWwKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uN2ZjODljYTllYTk5MTliYTIyOGUwZGI5N2NmNDZmZGY2YmNjNTVhMwotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvdXBsb2FkLW9u
bG9hZGVuZC1ldmVudC1hZnRlci1sb2FkLmh0bWwKQEAgLTAsMCArMSw2MSBAQAorPGh0bWw+Cis8
aGVhZD4KKzx0aXRsZT5UZXN0IGNhc2UgZm9yIGJ1ZyA0MDk1MjwvdGl0bGU+Cis8L2hlYWQ+Cis8
Ym9keT4KKzxwPiBUZXN0IGNhc2UgZm9yIDxhIGhyZWY9Imh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD00MDk1MiI+IGJ1ZyA0MDk1MjwvYT46IE9ubG9hZGVuZCBldmVudCBp
cyBub3Qgc3VwcG9ydGVkIGluIFhNTEh0dHBSZXF1ZXN0PC9wPgorPHA+IFZlcmlmeSB0aGF0IGEg
bG9hZGVuZCBQcm9ncmVzc0V2ZW50IGlzIGRpc3BhdGNoZWQgYWZ0ZXIgdGhlIGxvYWQgUHJvZ3Jl
c3NFdmVudCB3aGVuIGFuIGFzeW5jIHVwbG9hZCByZXF1ZXN0IGNvbXBsZXRlcyBub3JtYWxseS48
L3A+Cis8cD5QQVNTIHNob3VsZCBhcHBlYXIgYmVsb3c6PC9wPgorPHAgaWQ9Y29uc29sZT48L3A+
Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CitpZiAod2luZG93LmxheW91dFRlc3RD
b250cm9sbGVyKSB7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAg
IGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKK30KKworZnVuY3Rpb24gbG9n
KG1lc3NhZ2UpCit7CisgICAgdmFyIGNvbnNvbGVFbHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgiY29uc29sZSIpOworICAgIGNvbnNvbGVFbHQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRl
VGV4dE5vZGUobWVzc2FnZSkpOworfQorCit2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7
Cit2YXIgcmVzdWx0cyA9ICIiOwordmFyIGV4cGVjdGVkID0gIiBsb2Fkc3RhcnQgbG9hZCBsb2Fk
ZW5kIjsKKworZnVuY3Rpb24gbG9nUHJvZ3Jlc3NFdmVudChlKSB7CisgICAgcmVzdWx0cyArPSAi
ICIgKyBlLnR5cGU7Cit9CisKK2Z1bmN0aW9uIGxvZ1VuZXhwZWN0ZWRQcm9ncmVzc0V2ZW50KGUp
IHsKKyAgICByZXN1bHRzICs9ICIgW3VuZXhwZWN0ZWQgUHJvZ3Jlc3NFdmVudDogIiArIGUudHlw
ZSArICJdIjsKKyAgICBjb21wbGV0ZVRlc3QoKTsgICAKK30KKworZnVuY3Rpb24gY29tcGxldGVU
ZXN0KCkKK3sKKyAgICBsb2cocmVzdWx0cyA9PSBleHBlY3RlZCA/ICJQQVNTIiA6ICJGQUlMRUQg
cmVzdWx0cyA6ICciICsgcmVzdWx0cyArICInLCBleHBlY3RlZCA6ICciICsgZXhwZWN0ZWQgKyAi
JyIpOworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGxheW91
dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKK30KKworZnVuY3Rpb24gdGVzdCgpCit7Cisg
ICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgaWYgKHho
ci5yZWFkeVN0YXRlID09IHhoci5ET05FKQorICAgICAgICAgICAgY29tcGxldGVUZXN0KCk7Cisg
ICAgfQorICAgIHhoci51cGxvYWQub25sb2Fkc3RhcnQgPSBsb2dQcm9ncmVzc0V2ZW50OworICAg
IHhoci51cGxvYWQub25hYm9ydCA9IGxvZ1VuZXhwZWN0ZWRQcm9ncmVzc0V2ZW50OworICAgIHho
ci51cGxvYWQub25lcnJvciA9IGxvZ1VuZXhwZWN0ZWRQcm9ncmVzc0V2ZW50OworICAgIHhoci51
cGxvYWQub25sb2FkID0gbG9nUHJvZ3Jlc3NFdmVudDsKKyAgICB4aHIudXBsb2FkLm9ubG9hZGVu
ZCA9IGxvZ1Byb2dyZXNzRXZlbnQ7CisKKyAgICB4aHIub3BlbigiUE9TVCIsICJyZXNvdXJjZXMv
cG9zdC1lY2hvLmNnaSIsIHRydWUpOworICAgIHhoci5zZW5kKCJkYXRhIik7Cit9CisKK3Rlc3Qo
KTsKKworPC9zY3JpcHQ+Cis8L2JvZHk+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL3htbGh0dHByZXF1ZXN0L3htbGh0dHByZXF1ZXN0LXN5bmMtbm8tcHJvZ3Jlc3MtZXZlbnRz
LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QveG1s
aHR0cHJlcXVlc3Qtc3luYy1uby1wcm9ncmVzcy1ldmVudHMtZXhwZWN0ZWQudHh0CmluZGV4IDI0
NWQzYzAzYzM3MGVhODA2MTdlNGI0NmEzMDk1OWE2NDc5ZTFiZWYuLmE1MTI2YWFkYjU5YzNmNzBi
ZTAzOGI2NzhlMWQxZjM0ZDA1YmYyMDkgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2h0dHAvdGVz
dHMveG1saHR0cHJlcXVlc3QveG1saHR0cHJlcXVlc3Qtc3luYy1uby1wcm9ncmVzcy1ldmVudHMt
ZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3Qv
eG1saHR0cHJlcXVlc3Qtc3luYy1uby1wcm9ncmVzcy1ldmVudHMtZXhwZWN0ZWQudHh0CkBAIC02
LDE3ICs2LDIxIEBAIGJ1ZyAxNzUwMjogQXNzZXJ0aW9uIGZhaWx1cmUgd2hlbiB0cnlpbmcgdG8g
cmVzdGFydCBhIHN5bmMgWE1MSHR0cFJlcXVlc3QgYXMgYW4KICBTdGVwIDE6IFNhbWUgb3JpZ2lu
IHJlcXVlc3QKIHJlYWR5c3RhdGVjaGFuZ2UgNAogbG9hZAorbG9hZGVuZAogCiBTdGVwIDI6IENy
b3NzIG9yaWdpbiByZXF1ZXN0LCBkaXNhbGxvd2VkCiByZWFkeXN0YXRlY2hhbmdlIDQKIGVycm9y
Citsb2FkZW5kCiBFcnJvcjogTkVUV09SS19FUlI6IFhNTEh0dHBSZXF1ZXN0IEV4Y2VwdGlvbiAx
MDEKIAogU3RlcCAzOiBDcm9zcyBvcmlnaW4gcmVxdWVzdCwgYWxsb3dlZAogcmVhZHlzdGF0ZWNo
YW5nZSA0CiBsb2FkCitsb2FkZW5kCiAKIFN0ZXAgNDogQ3Jvc3Mgb3JpZ2luIHJlcXVlc3QsIGNo
ZWNrIHRoYXQgcHJlZmxpZ2h0IGlzbid0IGF0dGVtcHRlZAogcmVhZHlzdGF0ZWNoYW5nZSA0CiBs
b2FkCitsb2FkZW5kCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>119020</attachid>
            <date>2011-12-13 08:19:29 -0800</date>
            <delta_ts>2011-12-16 11:09:50 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-40952-20111213081927.patch</filename>
            <type>text/plain</type>
            <size>33827</size>
            <attacher name="Hans Muller">giles_joplin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAyMzkwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDYyMjM1MDUxZWFkODY5
ZDIzYzlkYTQ5YmJmZDYxYzBkYjI4MzNhNS4uYTEyMmRkYzM4ZjRmNTA4ZDQyNjgyZmQzM2U5NGZm
MmNiMDNlMjJiNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBACisyMDExLTEyLTA5ICBIYW5z
IE11bGxlciAgPGhtdWxsZXJAYWRvYmUuY29tPgorCisgICAgICAgIE9ubG9hZGVuZCBldmVudCBp
cyBub3Qgc3VwcG9ydGVkIGluIFhNTEh0dHBSZXF1ZXN0CisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MDk1MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIHN1cHBvcnQgZm9yIHRoZSBsb2FkZW5kIFBy
b2dyZXNzRXZlbnQgdG8gWE1MSHR0cFJlcXVlc3QgYW5kIFhNTEh0dHBSZXF1ZXN0VXBsb2FkLgor
ICAgICAgICBBIG5ldyBtZXRob2QsIGRpc3BhdGNoRXZlbnRBbmRMb2FkRW5kKCksIHdhcyBhZGRl
ZCB0byBYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZQorICAgICAgICBhbmQgWE1M
SHR0cFJlcXVlc3RVcGxvYWQgdG8gZm9vbHByb29mIHRoZSBjb21tb24gY2FzZSBvZiBkaXNwYXRj
aGluZyBhIGxvYWQsIGFib3J0LAorICAgICAgICBvciBlcnJvciBldmVudCBmb2xsb3dlZCBieSBh
IGxvYWRlbmQgZXZlbnQuCisKKyAgICAgICAgVGVzdHM6IGh0dHAvdGVzdHMveG1saHR0cHJlcXVl
c3Qvb25sb2FkZW5kLWV2ZW50LWFmdGVyLWFib3J0Lmh0bWwKKyAgICAgICAgICAgICAgIGh0dHAv
dGVzdHMveG1saHR0cHJlcXVlc3Qvb25sb2FkZW5kLWV2ZW50LWFmdGVyLWVycm9yLmh0bWwKKyAg
ICAgICAgICAgICAgIGh0dHAvdGVzdHMveG1saHR0cHJlcXVlc3Qvb25sb2FkZW5kLWV2ZW50LWFm
dGVyLWxvYWQuaHRtbAorICAgICAgICAgICAgICAgaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC91
cGxvYWQtb25sb2FkZW5kLWV2ZW50LWFmdGVyLWFib3J0Lmh0bWwKKyAgICAgICAgICAgICAgIGh0
dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvdXBsb2FkLW9ubG9hZGVuZC1ldmVudC1hZnRlci1sb2Fk
Lmh0bWwKKworICAgICAgICAqIHhtbC9YTUxIdHRwUmVxdWVzdC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpYTUxIdHRwUmVxdWVzdDo6Y2FsbFJlYWR5U3RhdGVDaGFuZ2VMaXN0ZW5lcik6CisgICAg
ICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdDo6YWJvcnQpOgorICAgICAgICAoV2ViQ29yZTo6
WE1MSHR0cFJlcXVlc3Q6Om5ldHdvcmtFcnJvcik6CisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRw
UmVxdWVzdDo6YWJvcnRFcnJvcik6CisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdDo6
ZGlkU2VuZERhdGEpOgorICAgICAgICAqIHhtbC9YTUxIdHRwUmVxdWVzdC5oOgorICAgICAgICAq
IHhtbC9YTUxIdHRwUmVxdWVzdC5pZGw6CisgICAgICAgICogeG1sL1hNTEh0dHBSZXF1ZXN0VXBs
b2FkLmg6CisgICAgICAgICogeG1sL1hNTEh0dHBSZXF1ZXN0VXBsb2FkLmlkbDoKKwogMjAxMS0x
Mi0wOCAgVGltIEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KIAogICAgICAgICBF
bmFibGUgYW5pbWF0aW9ucyBvZiBDU1MgaW1hZ2VzIHVzaW5nIC13ZWJraXQtY3Jvc3MtZmFkZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAKaW5kZXggMDU5MGE0M2Q2NTU3ZmJjNTA1
ZGVmMDA2MGQ1MmNhYzkyZDJkZmViOC4uODI2ZTVlZjM4Y2QzODRlMjE4Y2Y5YzIxNTQzYmY4MWU3
Y2I2MzgzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCkBAIC0zNDIsNyAr
MzQyLDcgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6Y2FsbFJlYWR5U3RhdGVDaGFuZ2VMaXN0ZW5l
cigpCiAKICAgICBpZiAobV9zdGF0ZSA9PSBET05FICYmICFtX2Vycm9yKSB7CiAgICAgICAgIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBjb29raWUgPSBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246OndpbGxMb2FkWEhSKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgdGhpcyk7Ci0gICAg
ICAgIG1fcHJvZ3Jlc3NFdmVudFRocm90dGxlLmRpc3BhdGNoRXZlbnQoWE1MSHR0cFJlcXVlc3RQ
cm9ncmVzc0V2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmxvYWRFdmVudCkpOworICAgICAgICBt
X3Byb2dyZXNzRXZlbnRUaHJvdHRsZS5kaXNwYXRjaEV2ZW50QW5kTG9hZEVuZChYTUxIdHRwUmVx
dWVzdFByb2dyZXNzRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkubG9hZEV2ZW50KSk7CiAgICAg
ICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkTG9hZFhIUihjb29raWUpOwogICAgIH0K
IH0KQEAgLTcwMiwxMSArNzAyLDExIEBAIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OmFib3J0KCkKICAg
ICAgICAgbV9zdGF0ZSA9IFVOU0VOVDsKICAgICB9CiAKLSAgICBtX3Byb2dyZXNzRXZlbnRUaHJv
dHRsZS5kaXNwYXRjaEV2ZW50KFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudDo6Y3JlYXRlKGV2
ZW50TmFtZXMoKS5hYm9ydEV2ZW50KSk7CisgICAgbV9wcm9ncmVzc0V2ZW50VGhyb3R0bGUuZGlz
cGF0Y2hFdmVudEFuZExvYWRFbmQoWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50OjpjcmVhdGUo
ZXZlbnROYW1lcygpLmFib3J0RXZlbnQpKTsKICAgICBpZiAoIW1fdXBsb2FkQ29tcGxldGUpIHsK
ICAgICAgICAgbV91cGxvYWRDb21wbGV0ZSA9IHRydWU7CiAgICAgICAgIGlmIChtX3VwbG9hZCAm
JiBtX3VwbG9hZEV2ZW50c0FsbG93ZWQpCi0gICAgICAgICAgICBtX3VwbG9hZC0+ZGlzcGF0Y2hF
dmVudChYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuYWJv
cnRFdmVudCkpOworICAgICAgICAgICAgbV91cGxvYWQtPmRpc3BhdGNoRXZlbnRBbmRMb2FkRW5k
KFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5hYm9ydEV2
ZW50KSk7CiAgICAgfQogfQogCkBAIC03NjYsMTEgKzc2NiwxMSBAQCB2b2lkIFhNTEh0dHBSZXF1
ZXN0OjpnZW5lcmljRXJyb3IoKQogdm9pZCBYTUxIdHRwUmVxdWVzdDo6bmV0d29ya0Vycm9yKCkK
IHsKICAgICBnZW5lcmljRXJyb3IoKTsKLSAgICBtX3Byb2dyZXNzRXZlbnRUaHJvdHRsZS5kaXNw
YXRjaEV2ZW50KFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMo
KS5lcnJvckV2ZW50KSk7CisgICAgbV9wcm9ncmVzc0V2ZW50VGhyb3R0bGUuZGlzcGF0Y2hFdmVu
dEFuZExvYWRFbmQoWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50OjpjcmVhdGUoZXZlbnROYW1l
cygpLmVycm9yRXZlbnQpKTsKICAgICBpZiAoIW1fdXBsb2FkQ29tcGxldGUpIHsKICAgICAgICAg
bV91cGxvYWRDb21wbGV0ZSA9IHRydWU7CiAgICAgICAgIGlmIChtX3VwbG9hZCAmJiBtX3VwbG9h
ZEV2ZW50c0FsbG93ZWQpCi0gICAgICAgICAgICBtX3VwbG9hZC0+ZGlzcGF0Y2hFdmVudChYTUxI
dHRwUmVxdWVzdFByb2dyZXNzRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuZXJyb3JFdmVudCkp
OworICAgICAgICAgICAgbV91cGxvYWQtPmRpc3BhdGNoRXZlbnRBbmRMb2FkRW5kKFhNTEh0dHBS
ZXF1ZXN0UHJvZ3Jlc3NFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5lcnJvckV2ZW50KSk7CiAg
ICAgfQogICAgIGludGVybmFsQWJvcnQoKTsKIH0KQEAgLTc3OCwxMSArNzc4LDExIEBAIHZvaWQg
WE1MSHR0cFJlcXVlc3Q6Om5ldHdvcmtFcnJvcigpCiB2b2lkIFhNTEh0dHBSZXF1ZXN0OjphYm9y
dEVycm9yKCkKIHsKICAgICBnZW5lcmljRXJyb3IoKTsKLSAgICBtX3Byb2dyZXNzRXZlbnRUaHJv
dHRsZS5kaXNwYXRjaEV2ZW50KFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudDo6Y3JlYXRlKGV2
ZW50TmFtZXMoKS5hYm9ydEV2ZW50KSk7CisgICAgbV9wcm9ncmVzc0V2ZW50VGhyb3R0bGUuZGlz
cGF0Y2hFdmVudEFuZExvYWRFbmQoWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50OjpjcmVhdGUo
ZXZlbnROYW1lcygpLmFib3J0RXZlbnQpKTsKICAgICBpZiAoIW1fdXBsb2FkQ29tcGxldGUpIHsK
ICAgICAgICAgbV91cGxvYWRDb21wbGV0ZSA9IHRydWU7CiAgICAgICAgIGlmIChtX3VwbG9hZCAm
JiBtX3VwbG9hZEV2ZW50c0FsbG93ZWQpCi0gICAgICAgICAgICBtX3VwbG9hZC0+ZGlzcGF0Y2hF
dmVudChYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuYWJv
cnRFdmVudCkpOworICAgICAgICAgICAgbV91cGxvYWQtPmRpc3BhdGNoRXZlbnRBbmRMb2FkRW5k
KFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5hYm9ydEV2
ZW50KSk7CiAgICAgfQogfQogCkBAIC0xMDIyLDcgKzEwMjIsNyBAQCB2b2lkIFhNTEh0dHBSZXF1
ZXN0OjpkaWRTZW5kRGF0YSh1bnNpZ25lZCBsb25nIGxvbmcgYnl0ZXNTZW50LCB1bnNpZ25lZCBs
b25nIGxvbgogICAgIGlmIChieXRlc1NlbnQgPT0gdG90YWxCeXRlc1RvQmVTZW50ICYmICFtX3Vw
bG9hZENvbXBsZXRlKSB7CiAgICAgICAgIG1fdXBsb2FkQ29tcGxldGUgPSB0cnVlOwogICAgICAg
ICBpZiAobV91cGxvYWRFdmVudHNBbGxvd2VkKQotICAgICAgICAgICAgbV91cGxvYWQtPmRpc3Bh
dGNoRXZlbnQoWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygp
LmxvYWRFdmVudCkpOworICAgICAgICAgICAgbV91cGxvYWQtPmRpc3BhdGNoRXZlbnRBbmRMb2Fk
RW5kKFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5sb2Fk
RXZlbnQpKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxI
dHRwUmVxdWVzdC5oIGIvU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmgKaW5kZXgg
NjcxOTI1ZTM3MGZkMjkzOTFiYmE3YmMzNDMyYzYxNzFmYjU1ODIwMC4uMTRjOTQ5MTRiNGZjYTQ3
NzFmYTk2MWYwZTBkNDcxODc5M2ZmYTJhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUveG1s
L1hNTEh0dHBSZXF1ZXN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0
LmgKQEAgLTEzMyw2ICsxMzMsNyBAQCBwdWJsaWM6CiAgICAgREVGSU5FX0FUVFJJQlVURV9FVkVO
VF9MSVNURU5FUihhYm9ydCk7CiAgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihl
cnJvcik7CiAgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihsb2FkKTsKKyAgICBE
RUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKGxvYWRlbmQpOwogICAgIERFRklORV9BVFRS
SUJVVEVfRVZFTlRfTElTVEVORVIobG9hZHN0YXJ0KTsKICAgICBERUZJTkVfQVRUUklCVVRFX0VW
RU5UX0xJU1RFTkVSKHByb2dyZXNzKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUveG1s
L1hNTEh0dHBSZXF1ZXN0LmlkbCBiL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5p
ZGwKaW5kZXggODI2ZDEwMTI2N2JkMGRkOWM1MjNkMmM5NWUyNzgyMzdjZDdkYWZkNS4uNmZiNGRm
ZDcyYTM0MzQ1NmE1ZTU1NTkwZGIyM2RiZmU2MDBlYWJhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWE1M
SHR0cFJlcXVlc3QuaWRsCkBAIC00Miw2ICs0Miw3IEBAIG1vZHVsZSB4bWwgewogICAgICAgICBh
dHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbmFib3J0OwogICAgICAgICBhdHRyaWJ1dGUgRXZlbnRM
aXN0ZW5lciBvbmVycm9yOwogICAgICAgICBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbmxvYWQ7
CisgICAgICAgIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9ubG9hZGVuZDsKICAgICAgICAgYXR0
cmlidXRlIEV2ZW50TGlzdGVuZXIgb25sb2Fkc3RhcnQ7CiAgICAgICAgIGF0dHJpYnV0ZSBFdmVu
dExpc3RlbmVyIG9ucHJvZ3Jlc3M7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3htbC9Y
TUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS94
bWwvWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGUuY3BwCmluZGV4IDVkNGFmYTMy
OGI3YmIwNTRiNDc1ZmFkMjU4NGNmOTA5NTU0NDYwZTMuLjZkODRmZGM2OTY2ZGViYzRjMTc2NWJl
MzYzN2YwNzZmZGQ1NTkxMWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRw
UmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUveG1s
L1hNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlLmNwcApAQCAtODEsNiArODEsMTIg
QEAgdm9pZCBYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZTo6ZGlzcGF0Y2hFdmVu
dChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCwKICAgICBtX3RhcmdldC0+ZGlzcGF0Y2hFdmVudChl
dmVudCk7CiB9CiAKK3ZvaWQgWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGU6OmRp
c3BhdGNoRXZlbnRBbmRMb2FkRW5kKFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQoreworICAgIGRp
c3BhdGNoRXZlbnQoZXZlbnQpOworICAgIGRpc3BhdGNoRXZlbnQoWE1MSHR0cFJlcXVlc3RQcm9n
cmVzc0V2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmxvYWRlbmRFdmVudCkpOworfQorCiB2b2lk
IFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlOjpmbHVzaFByb2dyZXNzRXZlbnQo
KQogewogICAgIGlmICghaGFzRXZlbnRUb0Rpc3BhdGNoKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGUuaCBiL1NvdXJj
ZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZS5oCmluZGV4
IDAzNjkwNWU3ZTIyY2ZhZTgwM2UwMTRkY2I3NTQ4OWVjZmQ0YWYxZGEuLjQyY2VlYmZlZTQzZDhh
MzNhN2UwOGI4MTMwZjI2MDExNWE0OGZjODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3ht
bC9YTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3htbC9YTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZS5oCkBAIC01MCw2ICs1
MCw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZGlzcGF0Y2hQcm9ncmVzc0V2ZW50KGJvb2wgbGVu
Z3RoQ29tcHV0YWJsZSwgdW5zaWduZWQgbG9uZyBsb25nIGxvYWRlZCwgdW5zaWduZWQgbG9uZyBs
b25nIHRvdGFsKTsKICAgICB2b2lkIGRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4sIFBy
b2dyZXNzRXZlbnRBY3Rpb24gPSBEb05vdEZsdXNoUHJvZ3Jlc3NFdmVudCk7CisgICAgdm9pZCBk
aXNwYXRjaEV2ZW50QW5kTG9hZEVuZChQYXNzUmVmUHRyPEV2ZW50Pik7CiAKICAgICB2b2lkIHN1
c3BlbmQoKTsKICAgICB2b2lkIHJlc3VtZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
eG1sL1hNTEh0dHBSZXF1ZXN0VXBsb2FkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRw
UmVxdWVzdFVwbG9hZC5jcHAKaW5kZXggM2YxY2FmYWQyODk4ODgzYjZkNGViZDhhNTg3ZWFkZDM5
YmVjNDBkNy4uYzBhNDQxNGFiMWJhODFlZTEzMGJmZTdjOWM5ZTQ1NmU3NzhjZTU0ZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0VXBsb2FkLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3RVcGxvYWQuY3BwCkBAIC02MSw0ICs2MSwx
MiBAQCBFdmVudFRhcmdldERhdGEqIFhNTEh0dHBSZXF1ZXN0VXBsb2FkOjplbnN1cmVFdmVudFRh
cmdldERhdGEoKQogICAgIHJldHVybiAmbV9ldmVudFRhcmdldERhdGE7CiB9CiAKK3ZvaWQgWE1M
SHR0cFJlcXVlc3RVcGxvYWQ6OmRpc3BhdGNoRXZlbnRBbmRMb2FkRW5kKFBhc3NSZWZQdHI8RXZl
bnQ+IGV2ZW50KQoreworICAgIGRpc3BhdGNoRXZlbnQoZXZlbnQpOworICAgIGRpc3BhdGNoRXZl
bnQoWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmxvYWRl
bmRFdmVudCkpOworfQorCisKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0VXBsb2FkLmggYi9Tb3VyY2UvV2ViQ29y
ZS94bWwvWE1MSHR0cFJlcXVlc3RVcGxvYWQuaAppbmRleCA3ZjQ1ODYxNzEwZGIxY2QzZGRhNmMz
NDE1YjViODUzZWRmZDMzZjRkLi5hNjJhMTc1NDVlZjlkNDU3YjdmZGM3NDEzODI2YTI2OTA1NGY3
ZTVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3RVcGxvYWQu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3RVcGxvYWQuaApAQCAtNjAs
OSArNjAsMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBERUZJTkVfQVRUUklCVVRF
X0VWRU5UX0xJU1RFTkVSKGFib3J0KTsKICAgICAgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9M
SVNURU5FUihlcnJvcik7CiAgICAgICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIo
bG9hZCk7CisgICAgICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIobG9hZGVuZCk7
CiAgICAgICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIobG9hZHN0YXJ0KTsKICAg
ICAgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihwcm9ncmVzcyk7CiAKKyAgICAg
ICAgdm9pZCBkaXNwYXRjaEV2ZW50QW5kTG9hZEVuZChQYXNzUmVmUHRyPEV2ZW50Pik7CisKICAg
ICBwcml2YXRlOgogICAgICAgICBYTUxIdHRwUmVxdWVzdFVwbG9hZChYTUxIdHRwUmVxdWVzdCop
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3RVcGxvYWQu
aWRsIGIvU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0VXBsb2FkLmlkbAppbmRleCA3
MzQ5MzlkODlkNmEzYWNkZjA1OWQ5MzFlZDYyN2E2YmVhNDk5OGRhLi41Zjk4Y2I3N2ZlZmVkNGI5
ZjYyMDMwMTc2MTliNWJiM2E0MjBhNjIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94bWwv
WE1MSHR0cFJlcXVlc3RVcGxvYWQuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRw
UmVxdWVzdFVwbG9hZC5pZGwKQEAgLTM4LDYgKzM4LDcgQEAgbW9kdWxlIHhtbCB7CiAgICAgICAg
IGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9uYWJvcnQ7CiAgICAgICAgIGF0dHJpYnV0ZSBFdmVu
dExpc3RlbmVyIG9uZXJyb3I7CiAgICAgICAgIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9ubG9h
ZDsKKyAgICAgICAgYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIgb25sb2FkZW5kOwogICAgICAgICBh
dHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbmxvYWRzdGFydDsKICAgICAgICAgYXR0cmlidXRlIEV2
ZW50TGlzdGVuZXIgb25wcm9ncmVzczsKIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDQ3NzAwYjlkMjM4MTZhZjU5MTBjNTEz
MWY4ZjRmNGEwNTZkODBlZmQuLjlkNjRlNjg3NmU4ZDZmYzU2YjQyODVjNGJhN2JhZDRmZGM5OTM2
MjYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwyNiBAQAorMjAxMS0xMi0wOSAgSGFucyBNdWxsZXIgIDxobXVs
bGVyQGFkb2JlLmNvbT4KKworICAgICAgICBPbmxvYWRlbmQgZXZlbnQgaXMgbm90IHN1cHBvcnRl
ZCBpbiBYTUxIdHRwUmVxdWVzdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NDA5NTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBBZGRlZCBzdXBwb3J0IGZvciB0aGUgbG9hZGVuZCBQcm9ncmVzRXZlbnQgdG8g
WE1MSHR0cFJlcXVlc3QgYW5kIFhNTEh0dHBSZXF1ZXN0VXBsb2FkLgorICAgICAgICBUaGUgbmV3
IHRlc3RzIHZlcmlmeSB0aGF0IGEgbG9hZGVuZCBwcm9ncmVzcyBldmVudCBpcyBkaXNwYXRjaGVk
IGFmdGVyIGEgbG9hZCwgYWJvcnQsIAorICAgICAgICBvciBlcnJvciBwcm9ncmVzcyBldmVudCBm
b3IgYm90aCBzeW5jaHJvbm91cyBhbmQgYXN5bmNocm9ub3VzIHJlcXVlc3RzLgorCisgICAgICAg
ICogaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9vbmxvYWRlbmQtZXZlbnQtYWZ0ZXItYWJvcnQt
ZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0
L29ubG9hZGVuZC1ldmVudC1hZnRlci1hYm9ydC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBodHRw
L3Rlc3RzL3htbGh0dHByZXF1ZXN0L29ubG9hZGVuZC1ldmVudC1hZnRlci1lcnJvci1leHBlY3Rl
ZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMveG1saHR0cHJlcXVlc3Qvb25sb2Fk
ZW5kLWV2ZW50LWFmdGVyLWVycm9yLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMv
eG1saHR0cHJlcXVlc3Qvb25sb2FkZW5kLWV2ZW50LWFmdGVyLWxvYWQtZXhwZWN0ZWQudHh0OiBB
ZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L29ubG9hZGVuZC1ldmVu
dC1hZnRlci1sb2FkLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMveG1saHR0cHJl
cXVlc3QvdXBsb2FkLW9ubG9hZGVuZC1ldmVudC1hZnRlci1hYm9ydC1leHBlY3RlZC50eHQ6IEFk
ZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvdXBsb2FkLW9ubG9hZGVu
ZC1ldmVudC1hZnRlci1hYm9ydC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3ht
bGh0dHByZXF1ZXN0L3VwbG9hZC1vbmxvYWRlbmQtZXZlbnQtYWZ0ZXItbG9hZC1leHBlY3RlZC50
eHQ6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvdXBsb2FkLW9u
bG9hZGVuZC1ldmVudC1hZnRlci1sb2FkLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVz
dHMveG1saHR0cHJlcXVlc3QveG1saHR0cHJlcXVlc3Qtc3luYy1uby1wcm9ncmVzcy1ldmVudHMt
ZXhwZWN0ZWQudHh0OgorCiAyMDExLTEyLTA4ICBUb255IENoYW5nICA8dG9ueUBjaHJvbWl1bS5v
cmc+CiAKICAgICAgICAgTWFyayB0ZXN0cyBhZGRlZCBpbiByMTAyMzg4IGFzIGZhaWxpbmcgb24g
Q2hyb21pdW0uICBGaXggdGhlIGNyb3NzIHBsYXRmb3JtCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L29ubG9hZGVuZC1ldmVudC1hZnRlci1hYm9ydC1l
eHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L29ubG9h
ZGVuZC1ldmVudC1hZnRlci1hYm9ydC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmYwZTcxNWMz
MmNlMTM5M2M5NjllMzdjNjlmOGYwZWFiZGMyZjlkYQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3Qvb25sb2FkZW5kLWV2ZW50LWFmdGVyLWFi
b3J0LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDcgQEAKK1Rlc3QgY2FzZSBmb3IgYnVnIDQwOTUy
OiBPbmxvYWRlbmQgZXZlbnQgaXMgbm90IHN1cHBvcnRlZCBpbiBYTUxIdHRwUmVxdWVzdAorCitW
ZXJpZnkgdGhhdCBhIGxvYWRlbmQgUHJvZ3Jlc3NFdmVudCBpcyBkaXNwYXRjaGVkIGFmdGVyIHRo
ZSBhYm9ydCBQcm9ncmVzc0V2ZW50IHdoZW4gYW4gYXN5bmMgcmVxdWVzdCBpcyBhYm9ydGVkLgor
CitQQVNTIHNob3VsZCBhcHBlYXIgYmVsb3c6CisKK1BBU1MKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3Qvb25sb2FkZW5kLWV2ZW50LWFmdGVyLWFib3J0
Lmh0bWwgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L29ubG9hZGVuZC1l
dmVudC1hZnRlci1hYm9ydC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU3NDU3NjE0ODRlODczNmY3OTIyMmZk
ODU1Zjk1MWZiYzZhMTg2YTYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL3htbGh0dHByZXF1ZXN0L29ubG9hZGVuZC1ldmVudC1hZnRlci1hYm9ydC5odG1sCkBAIC0w
LDAgKzEsNjYgQEAKKzxodG1sPgorPGhlYWQ+Cis8dGl0bGU+VGVzdCBjYXNlIGZvciBidWcgNDA5
NTI8L3RpdGxlPgorPC9oZWFkPgorPGJvZHk+Cis8cD5UZXN0IGNhc2UgZm9yIDxhIGhyZWY9Imh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MDk1MiI+IGJ1ZyA0MDk1Mjwv
YT46IE9ubG9hZGVuZCBldmVudCBpcyBub3Qgc3VwcG9ydGVkIGluIFhNTEh0dHBSZXF1ZXN0PC9w
PgorPHA+VmVyaWZ5IHRoYXQgYSBsb2FkZW5kIFByb2dyZXNzRXZlbnQgaXMgZGlzcGF0Y2hlZCBh
ZnRlciB0aGUgYWJvcnQgUHJvZ3Jlc3NFdmVudCB3aGVuIGFuIGFzeW5jIHJlcXVlc3QgaXMgYWJv
cnRlZC48L3A+Cis8cD5QQVNTIHNob3VsZCBhcHBlYXIgYmVsb3c6PC9wPgorPHAgaWQ9Y29uc29s
ZT48L3A+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CitpZiAod2luZG93LmxheW91
dFRlc3RDb250cm9sbGVyKSB7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgp
OworICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKK30KKworZnVuY3Rp
b24gbG9nKG1lc3NhZ2UpCit7CisgICAgdmFyIGNvbnNvbGVFbHQgPSBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgiY29uc29sZSIpOworICAgIGNvbnNvbGVFbHQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQu
Y3JlYXRlVGV4dE5vZGUobWVzc2FnZSkpOworfQorCit2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1
ZXN0KCk7Cit2YXIgcmVzdWx0cyA9ICIiOwordmFyIGV4cGVjdGVkID0gIiBsb2Fkc3RhcnQgcmVh
ZHlTdGF0ZT1ET05FIGFib3J0IGxvYWRlbmQiOworCitmdW5jdGlvbiBsb2dQcm9ncmVzc0V2ZW50
KGUpIHsKKyAgICByZXN1bHRzICs9ICIgIiArIGUudHlwZTsKK30KKworZnVuY3Rpb24gbG9nVW5l
eHBlY3RlZFByb2dyZXNzRXZlbnQoZSkgeworICAgIHJlc3VsdHMgKz0gIiBbdW5leHBlY3RlZCBQ
cm9ncmVzc0V2ZW50OiAiICsgZS50eXBlICsgIl0iOworICAgIGNvbXBsZXRlVGVzdCgpOyAgIAor
fQorCitmdW5jdGlvbiBjb21wbGV0ZVRlc3QoKQoreworICAgIGxvZyhyZXN1bHRzID09IGV4cGVj
dGVkID8gIlBBU1MiIDogIkZBSUxFRCByZXN1bHRzIDogJyIgKyByZXN1bHRzICsgIicsIGV4cGVj
dGVkIDogJyIgKyBleHBlY3RlZCArICInIik7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29u
dHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworfQor
CitmdW5jdGlvbiB0ZXN0KCkKK3sKKyAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rp
b24oZSkgeworICAgICAgICBpZiAoeGhyLnJlYWR5U3RhdGUgPT0geGhyLkRPTkUpCisgICAgICAg
ICAgICByZXN1bHRzICs9ICIgcmVhZHlTdGF0ZT1ET05FIjsKKyAgICAgICAgZWxzZSBpZiAoeGhy
LnJlYWR5U3RhdGUgPiB4aHIuT1BFTkVEKQorICAgICAgICAgICAgeGhyLmFib3J0KCk7CisgICAg
fQorICAgIHhoci5vbmxvYWRzdGFydCA9IGxvZ1Byb2dyZXNzRXZlbnQ7CisgICAgeGhyLm9uYWJv
cnQgPSBsb2dQcm9ncmVzc0V2ZW50OworICAgIHhoci5vbmVycm9yID0gbG9nVW5leHBlY3RlZFBy
b2dyZXNzRXZlbnQ7CisgICAgeGhyLm9ubG9hZCA9IGxvZ1VuZXhwZWN0ZWRQcm9ncmVzc0V2ZW50
OworICAgIHhoci5vbmxvYWRlbmQgPSBmdW5jdGlvbihlKSB7CisgICAgICAgIGxvZ1Byb2dyZXNz
RXZlbnQoZSk7CisgICAgICAgIGNvbXBsZXRlVGVzdCgpOworICAgIH0KKworICAgIHhoci5vcGVu
KCJHRVQiLCAicmVzb3VyY2VzL2dldC50eHQiLCB0cnVlKTsKKyAgICB4aHIuc2VuZCgpOworfQor
Cit0ZXN0KCk7CisKKzwvc2NyaXB0PgorPC9ib2R5PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9vbmxvYWRlbmQtZXZlbnQtYWZ0ZXItZXJyb3ItZXhw
ZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9vbmxvYWRl
bmQtZXZlbnQtYWZ0ZXItZXJyb3ItZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjViNjRjMWFmZDRl
MDlmMDRiYWIxNmE2NDFhOGNlZTI3MGU3YmI3NDUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L29ubG9hZGVuZC1ldmVudC1hZnRlci1lcnJv
ci1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw3IEBACitUZXN0IGNhc2UgZm9yIGJ1ZyA0MDk1Mjog
T25sb2FkZW5kIGV2ZW50IGlzIG5vdCBzdXBwb3J0ZWQgaW4gWE1MSHR0cFJlcXVlc3QKKworVmVy
aWZ5IHRoYXQgYSBsb2FkZW5kIFByb2dyZXNzRXZlbnQgaXMgZGlzcGF0Y2hlZCBhZnRlciB0aGUg
ZXJyb3IgUHJvZ3Jlc3NFdmVudCB3aGVuIGFuIGFzeW5jIHJlcXVlc3QgZmFpbHMuCisKK1BBU1Mg
c2hvdWxkIGFwcGVhciBiZWxvdzoKKworUEFTUwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy94bWxodHRwcmVxdWVzdC9vbmxvYWRlbmQtZXZlbnQtYWZ0ZXItZXJyb3IuaHRtbCBi
L0xheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3Qvb25sb2FkZW5kLWV2ZW50LWFm
dGVyLWVycm9yLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTI0ZmE4YmEyNzNkOWYwMjQyOGM5MDQxOTZiOThi
NmY3YTQ3YTg4NwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMveG1s
aHR0cHJlcXVlc3Qvb25sb2FkZW5kLWV2ZW50LWFmdGVyLWVycm9yLmh0bWwKQEAgLTAsMCArMSw2
NiBAQAorPGh0bWw+Cis8aGVhZD4KKzx0aXRsZT5UZXN0IGNhc2UgZm9yIGJ1ZyA0MDk1MjwvdGl0
bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwPiBUZXN0IGNhc2UgZm9yIDxhIGhyZWY9Imh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MDk1MiI+IGJ1ZyA0MDk1MjwvYT46IE9u
bG9hZGVuZCBldmVudCBpcyBub3Qgc3VwcG9ydGVkIGluIFhNTEh0dHBSZXF1ZXN0PC9wPgorPHA+
IFZlcmlmeSB0aGF0IGEgbG9hZGVuZCBQcm9ncmVzc0V2ZW50IGlzIGRpc3BhdGNoZWQgYWZ0ZXIg
dGhlIGVycm9yIFByb2dyZXNzRXZlbnQgd2hlbiBhbiBhc3luYyByZXF1ZXN0IGZhaWxzLjwvcD4K
KzxwPlBBU1Mgc2hvdWxkIGFwcGVhciBiZWxvdzo8L3A+Cis8cCBpZD1jb25zb2xlPjwvcD4KKzxz
Y3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRy
b2xsZXIpIHsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgbGF5
b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworfQorCitmdW5jdGlvbiBsb2cobWVz
c2FnZSkKK3sKKyAgICB2YXIgY29uc29sZUVsdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJj
b25zb2xlIik7CisgICAgY29uc29sZUVsdC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0
Tm9kZShtZXNzYWdlKSk7Cit9CisKK3ZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKK3Zh
ciByZXN1bHRzID0gIiI7Cit2YXIgZXhwZWN0ZWQgPSAiIGxvYWRzdGFydCByZWFkeVN0YXRlPURP
TkUgZXJyb3IgbG9hZGVuZCI7CisKKworZnVuY3Rpb24gbG9nUHJvZ3Jlc3NFdmVudChlKSB7Cisg
ICAgcmVzdWx0cyArPSAiICIgKyBlLnR5cGU7Cit9CisKK2Z1bmN0aW9uIGxvZ1VuZXhwZWN0ZWRQ
cm9ncmVzc0V2ZW50KGUpIHsKKyAgICByZXN1bHRzICs9ICIgW3VuZXhwZWN0ZWQgUHJvZ3Jlc3NF
dmVudDogIiArIGUudHlwZSArICJdIjsKKyAgICBjb21wbGV0ZVRlc3QoKTsgICAKK30KKworZnVu
Y3Rpb24gY29tcGxldGVUZXN0KCkKK3sKKyAgICBsb2cocmVzdWx0cyA9PSBleHBlY3RlZCA/ICJQ
QVNTIiA6ICJGQUlMRUQgcmVzdWx0cyA6ICciICsgcmVzdWx0cyArICInLCBleHBlY3RlZCA6ICci
ICsgZXhwZWN0ZWQgKyAiJyIpOworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIp
CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKK30KKworZnVuY3Rp
b24gdGVzdCgpCit7CisgICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKGUpIHsK
KyAgICAgICAgaWYgKHhoci5yZWFkeVN0YXRlID09IHhoci5ET05FKQorICAgICAgICAgICAgcmVz
dWx0cyArPSAiIHJlYWR5U3RhdGU9RE9ORSI7CisgICAgfQorICAgIHhoci5vbmxvYWRzdGFydCA9
IGxvZ1Byb2dyZXNzRXZlbnQ7CisgICAgeGhyLm9uYWJvcnQgPSBsb2dVbmV4cGVjdGVkUHJvZ3Jl
c3NFdmVudDsKKyAgICB4aHIub25lcnJvciA9IGxvZ1Byb2dyZXNzRXZlbnQ7CisgICAgeGhyLm9u
bG9hZCA9IGxvZ1VuZXhwZWN0ZWRQcm9ncmVzc0V2ZW50OworICAgIHhoci5vbmxvYWRlbmQgPSBm
dW5jdGlvbihlKSB7CisgICAgICAgIGxvZ1Byb2dyZXNzRXZlbnQoZSk7CisgICAgICAgIGNvbXBs
ZXRlVGVzdCgpOworICAgIH0KKworICAgIHhoci5vcGVuKCJHRVQiLCAicmVzb3VyY2VzL2luZmlu
aXRlLWxvb3AucGhwIiwgdHJ1ZSk7CisgICAgeGhyLnNlbmQoKTsKK30KKwordGVzdCgpOyAKKwor
PC9zY3JpcHQ+Cis8L2JvZHk+CisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMv
eG1saHR0cHJlcXVlc3Qvb25sb2FkZW5kLWV2ZW50LWFmdGVyLWxvYWQtZXhwZWN0ZWQudHh0IGIv
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9vbmxvYWRlbmQtZXZlbnQtYWZ0
ZXItbG9hZC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODk5NzZjMDEwZjU5MDQ2N2NkODllOWIy
Y2E1ZTQyNmRiNDQyMGQ0NwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVz
dHMveG1saHR0cHJlcXVlc3Qvb25sb2FkZW5kLWV2ZW50LWFmdGVyLWxvYWQtZXhwZWN0ZWQudHh0
CkBAIC0wLDAgKzEsNyBAQAorVGVzdCBjYXNlIGZvciBidWcgNDA5NTI6IE9ubG9hZGVuZCBldmVu
dCBpcyBub3Qgc3VwcG9ydGVkIGluIFhNTEh0dHBSZXF1ZXN0CisKK1ZlcmlmeSB0aGF0IGEgbG9h
ZGVuZCBQcm9ncmVzc0V2ZW50IGlzIGRpc3BhdGNoZWQgYWZ0ZXIgdGhlIGxvYWQgUHJvZ3Jlc3NF
dmVudCB3aGVuIGFuIGFzeW5jIHJlcXVlc3QgY29tcGxldGVzIG5vcm1hbGx5LgorCitQQVNTIHNo
b3VsZCBhcHBlYXIgYmVsb3c6CisKK1BBU1MKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAv
dGVzdHMveG1saHR0cHJlcXVlc3Qvb25sb2FkZW5kLWV2ZW50LWFmdGVyLWxvYWQuaHRtbCBiL0xh
eW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3Qvb25sb2FkZW5kLWV2ZW50LWFmdGVy
LWxvYWQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zNjU2YjhkMjM2ZGNjOGJmMzVjM2VmMDYxMmNmMDE3MGI3
ZjJjNGJkCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRw
cmVxdWVzdC9vbmxvYWRlbmQtZXZlbnQtYWZ0ZXItbG9hZC5odG1sCkBAIC0wLDAgKzEsNjQgQEAK
KzxIVE1MPgorPGhlYWQ+Cis8dGl0bGU+VGVzdCBjYXNlIGZvciBidWcgNDA5NTI8L3RpdGxlPgor
PC9oZWFkPgorPGJvZHk+Cis8cD4gVGVzdCBjYXNlIGZvciA8YSBocmVmPSJodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDA5NTIiPiBidWcgNDA5NTI8L2E+OiBPbmxvYWRl
bmQgZXZlbnQgaXMgbm90IHN1cHBvcnRlZCBpbiBYTUxIdHRwUmVxdWVzdDwvcD4KKzxwPiBWZXJp
ZnkgdGhhdCBhIGxvYWRlbmQgUHJvZ3Jlc3NFdmVudCBpcyBkaXNwYXRjaGVkIGFmdGVyIHRoZSBs
b2FkIFByb2dyZXNzRXZlbnQgd2hlbiBhbiBhc3luYyByZXF1ZXN0IGNvbXBsZXRlcyBub3JtYWxs
eS48L3A+Cis8cD5QQVNTIHNob3VsZCBhcHBlYXIgYmVsb3c6PC9wPgorPHAgaWQ9Y29uc29sZT48
L3A+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CitpZiAod2luZG93LmxheW91dFRl
c3RDb250cm9sbGVyKSB7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOwor
ICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKK30KKworZnVuY3Rpb24g
bG9nKG1lc3NhZ2UpCit7CisgICAgdmFyIGNvbnNvbGVFbHQgPSBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgiY29uc29sZSIpOworICAgIGNvbnNvbGVFbHQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3Jl
YXRlVGV4dE5vZGUobWVzc2FnZSkpOworfQorCit2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0
KCk7Cit2YXIgcmVzdWx0cyA9ICIiOwordmFyIGV4cGVjdGVkID0gIiBsb2Fkc3RhcnQgcmVhZHlT
dGF0ZT1ET05FIGxvYWQgbG9hZGVuZCI7CisKK2Z1bmN0aW9uIGxvZ1Byb2dyZXNzRXZlbnQoZSkg
eworICAgIHJlc3VsdHMgKz0gIiAiICsgZS50eXBlOworfQorCitmdW5jdGlvbiBsb2dVbmV4cGVj
dGVkUHJvZ3Jlc3NFdmVudChlKSB7CisgICAgcmVzdWx0cyArPSAiIFt1bmV4cGVjdGVkIFByb2dy
ZXNzRXZlbnQ6ICIgKyBlLnR5cGUgKyAiXSI7CisgICAgY29tcGxldGVUZXN0KCk7ICAgCit9CisK
K2Z1bmN0aW9uIGNvbXBsZXRlVGVzdCgpCit7CisgICAgbG9nKHJlc3VsdHMgPT0gZXhwZWN0ZWQg
PyAiUEFTUyIgOiAiRkFJTEVEIHJlc3VsdHMgOiAnIiArIHJlc3VsdHMgKyAiJywgZXhwZWN0ZWQg
OiAnIiArIGV4cGVjdGVkICsgIiciKTsKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9s
bGVyKQorICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cit9CisKK2Z1
bmN0aW9uIHRlc3QoKSAKK3sKKyAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24o
ZSkgeworICAgICAgICBpZiAoeGhyLnJlYWR5U3RhdGUgPT0geGhyLkRPTkUpCisgICAgICAgICAg
ICByZXN1bHRzICs9ICIgcmVhZHlTdGF0ZT1ET05FIjsKKyAgICB9CisgICAgeGhyLm9ubG9hZHN0
YXJ0ID0gbG9nUHJvZ3Jlc3NFdmVudDsKKyAgICB4aHIub25hYm9ydCA9IGxvZ1VuZXhwZWN0ZWRQ
cm9ncmVzc0V2ZW50OworICAgIHhoci5vbmVycm9yID0gbG9nVW5leHBlY3RlZFByb2dyZXNzRXZl
bnQ7CisgICAgeGhyLm9ubG9hZCA9IGxvZ1Byb2dyZXNzRXZlbnQ7CisgICAgeGhyLm9ubG9hZGVu
ZCA9IGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgbG9nUHJvZ3Jlc3NFdmVudChlKTsKKyAgICAgICAg
Y29tcGxldGVUZXN0KCk7CisgICAgfQorCisgICAgeGhyLm9wZW4oIkdFVCIsICJyZXNvdXJjZXMv
Z2V0LnR4dCIsIHRydWUpOyAKKyAgICB4aHIuc2VuZCgpOworfQorCit0ZXN0KCk7IAorCis8L3Nj
cmlwdD4KKzwvYm9keT4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0
cHJlcXVlc3Qvb25sb2FkZW5kLWV2ZW50LWFmdGVyLXN5bmMtcmVxdWVzdHMtZXhwZWN0ZWQudHh0
IGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9vbmxvYWRlbmQtZXZlbnQt
YWZ0ZXItc3luYy1yZXF1ZXN0cy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmM1NDY3YzBhMTc5
ZTllNzEyYWUwZTYzMmRhN2U0MTBkOGVkZTkzNAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3Qvb25sb2FkZW5kLWV2ZW50LWFmdGVyLXN5bmMt
cmVxdWVzdHMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNyBAQAorVGVzdCBjYXNlIGZvciBidWcg
NDA5NTI6IE9ubG9hZGVuZCBldmVudCBpcyBub3Qgc3VwcG9ydGVkIGluIFhNTEh0dHBSZXF1ZXN0
CisKK1ZlcmlmeSB0aGF0IGEgbG9hZGVuZCBQcm9ncmVzc0V2ZW50IGlzIGRpc3BhdGNoZWQgYWZ0
ZXIgYSBsb2FkLCBlcnJvciwgb3IgYWJvcnQgUHJvZ3Jlc3NFdmVudCB3aGVuIGEgc3luY2hyb25v
dXMgcmVxdWVzdCBjb21wbGV0ZXMgbm9ybWFsbHksIGZhaWxzLCBvciBpcyBhYm9ydGVkIHJlc3Bl
Y3RpdmVseS4KKworUEFTUyBQQVNTIFBBU1Mgc2hvdWxkIGFwcGVhciBiZWxvdzoKKworUEFTUyBQ
QVNTIFBBU1MKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVl
c3Qvb25sb2FkZW5kLWV2ZW50LWFmdGVyLXN5bmMtcmVxdWVzdHMuaHRtbCBiL0xheW91dFRlc3Rz
L2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3Qvb25sb2FkZW5kLWV2ZW50LWFmdGVyLXN5bmMtcmVx
dWVzdHMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43MDZkODgwN2MwYWE4NmUxNzFhZjgwY2EzMWRkYzljZGY1
MjdkZjU2Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRw
cmVxdWVzdC9vbmxvYWRlbmQtZXZlbnQtYWZ0ZXItc3luYy1yZXF1ZXN0cy5odG1sCkBAIC0wLDAg
KzEsMTEwIEBACis8SFRNTD4KKzxoZWFkPgorPHRpdGxlPlRlc3QgY2FzZSBmb3IgYnVnIDQwOTUy
PC90aXRsZT4KKzwvaGVhZD4KKzxib2R5PgorPHA+IFRlc3QgY2FzZSBmb3IgPGEgaHJlZj0iaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQwOTUyIj4gYnVnIDQwOTUyPC9h
PjogT25sb2FkZW5kIGV2ZW50IGlzIG5vdCBzdXBwb3J0ZWQgaW4gWE1MSHR0cFJlcXVlc3Q8L3A+
Cis8cD4gVmVyaWZ5IHRoYXQgYSBsb2FkZW5kIFByb2dyZXNzRXZlbnQgaXMgZGlzcGF0Y2hlZCBh
ZnRlciBhIGxvYWQsIGVycm9yLCBvciBhYm9ydCBQcm9ncmVzc0V2ZW50IHdoZW4gYSBzeW5jaHJv
bm91cyByZXF1ZXN0IGNvbXBsZXRlcyBub3JtYWxseSwgZmFpbHMsIG9yIGlzIGFib3J0ZWQgcmVz
cGVjdGl2ZWx5LjwvcD4KKzxwPlBBU1MgUEFTUyBQQVNTIHNob3VsZCBhcHBlYXIgYmVsb3c6PC9w
PgorPHAgaWQ9Y29uc29sZT48L3A+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Citp
ZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgbGF5b3V0VGVzdENvbnRyb2xs
ZXIuZHVtcEFzVGV4dCgpOworICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUo
KTsKK30KKworZnVuY3Rpb24gbG9nKG1lc3NhZ2UpCit7CisgICAgdmFyIGNvbnNvbGVFbHQgPSBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29uc29sZSIpOworICAgIGNvbnNvbGVFbHQuYXBwZW5k
Q2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobWVzc2FnZSArICIgIikpOworfQorCit2YXIg
eGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7Cit2YXIgcmVzdWx0czsKKworZnVuY3Rpb24gbG9n
UHJvZ3Jlc3NFdmVudChlKSB7CisgICAgcmVzdWx0cyArPSAiICIgKyBlLnR5cGU7Cit9CisKK2Z1
bmN0aW9uIGxvZ1VuZXhwZWN0ZWRQcm9ncmVzc0V2ZW50KGUpIHsKKyAgICByZXN1bHRzICs9ICIg
W3VuZXhwZWN0ZWQgUHJvZ3Jlc3NFdmVudDogIiArIGUudHlwZSArICJdIjsKKyAgICBjb21wbGV0
ZVRlc3QoKTsgICAKK30KKworZnVuY3Rpb24gY29tcGxldGVUZXN0KGV4cGVjdGVkKQoreworICAg
IGxvZyhyZXN1bHRzID09IGV4cGVjdGVkID8gIlBBU1MiIDogIkZBSUxFRCByZXN1bHRzIDogJyIg
KyByZXN1bHRzICsgIicsIGV4cGVjdGVkIDogJyIgKyBleHBlY3RlZCArICInIik7CisgICAgaWYg
KHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xs
ZXIubm90aWZ5RG9uZSgpOworfQorCitmdW5jdGlvbiB0ZXN0Tm9ybWFsKCkKK3sKKyAgICByZXN1
bHRzID0gIiI7CisKKyAgICB4aHIub25sb2Fkc3RhcnQgPSBsb2dVbmV4cGVjdGVkUHJvZ3Jlc3NF
dmVudDsKKyAgICB4aHIub25hYm9ydCA9IGxvZ1VuZXhwZWN0ZWRQcm9ncmVzc0V2ZW50OworICAg
IHhoci5vbmVycm9yID0gbG9nVW5leHBlY3RlZFByb2dyZXNzRXZlbnQ7CisgICAgeGhyLm9ubG9h
ZCA9IGxvZ1Byb2dyZXNzRXZlbnQ7CisgICAgeGhyLm9ubG9hZGVuZCA9IGxvZ1Byb2dyZXNzRXZl
bnQ7CisKKyAgICB4aHIub3BlbigiR0VUIiwgInJlc291cmNlcy9nZXQudHh0IiwgZmFsc2UpOyAK
KyAgICB4aHIuc2VuZCgpOworICAgIAorICAgIGNvbXBsZXRlVGVzdCgiIGxvYWQgbG9hZGVuZCIp
OworfQorCitmdW5jdGlvbiB0ZXN0RXJyb3IoKQoreworICAgIHJlc3VsdHMgPSAiIjsKKworICAg
IHhoci5vbmxvYWRzdGFydCA9IGxvZ1VuZXhwZWN0ZWRQcm9ncmVzc0V2ZW50OworICAgIHhoci5v
bmFib3J0ID0gbG9nVW5leHBlY3RlZFByb2dyZXNzRXZlbnQ7CisgICAgeGhyLm9uZXJyb3IgPSBs
b2dQcm9ncmVzc0V2ZW50OworICAgIHhoci5vbmxvYWQgPSBsb2dVbmV4cGVjdGVkUHJvZ3Jlc3NF
dmVudDsKKyAgICB4aHIub25sb2FkZW5kID0gbG9nUHJvZ3Jlc3NFdmVudDsKKworICAgIHhoci5v
cGVuKCJHRVQiLCAicmVzb3VyY2VzL2luZmluaXRlLWxvb3AucGhwIiwgZmFsc2UpOyAKKyAgICB0
cnkgeworICAgICAgICB4aHIuc2VuZCgpOworICAgIH0KKyAgICBjYXRjaCAoZSkgeworICAgICAg
ICBpZiAoZS5jb2RlICE9IGUuTkVUV09SS19FUlIpCisgICAgICAgICAgICByZXN1bHRzICs9ICIg
IiArIGU7CisgICAgfQorICAgIAorICAgIGNvbXBsZXRlVGVzdCgiIGVycm9yIGxvYWRlbmQiKTsK
K30KKworZnVuY3Rpb24gdGVzdEFib3J0KCkKK3sKKyAgICByZXN1bHRzID0gIiI7CisKKyAgICB4
aHIub25sb2Fkc3RhcnQgPSBsb2dVbmV4cGVjdGVkUHJvZ3Jlc3NFdmVudDsKKyAgICB4aHIub25h
Ym9ydCA9IGxvZ1Byb2dyZXNzRXZlbnQ7CisgICAgeGhyLm9uZXJyb3IgPSBsb2dVbmV4cGVjdGVk
UHJvZ3Jlc3NFdmVudDsKKyAgICB4aHIub25sb2FkID0gbG9nVW5leHBlY3RlZFByb2dyZXNzRXZl
bnQ7CisgICAgeGhyLm9ubG9hZGVuZCA9IGxvZ1Byb2dyZXNzRXZlbnQ7CisgICAgeGhyLm9ucmVh
ZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgaWYgKHhoci5yZWFkeVN0YXRl
ID09IHhoci5ET05FKQorICAgICAgICAgICAgeGhyLmFib3J0KCk7CisgICAgfQorCisgICAgeGhy
Lm9wZW4oIkdFVCIsICJyZXNvdXJjZXMvZ2V0LnR4dCIsIGZhbHNlKTsgCisgICAgdHJ5IHsKKyAg
ICAgICAgeGhyLnNlbmQoKTsKKyAgICB9CisgICAgY2F0Y2ggKGUpIHsKKyAgICAgICAgaWYgKGUu
Y29kZSAhPSBlLk5FVFdPUktfRVJSKQorICAgICAgICAgICAgcmVzdWx0cyArPSAiICIgKyBlOwor
ICAgIH0KKyAgICAKKyAgICBjb21wbGV0ZVRlc3QoIiBhYm9ydCBsb2FkZW5kIik7Cit9CisKK3Rl
c3ROb3JtYWwoKTsKK3Rlc3RFcnJvcigpOwordGVzdEFib3J0KCk7CisKKzwvc2NyaXB0PgorPC9i
b2R5PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC91
cGxvYWQtb25sb2FkZW5kLWV2ZW50LWFmdGVyLWFib3J0LWV4cGVjdGVkLnR4dCBiL0xheW91dFRl
c3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvdXBsb2FkLW9ubG9hZGVuZC1ldmVudC1hZnRl
ci1hYm9ydC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTY1ZTFkNzUxNDNjMTlkMDkwYzExOTIx
OTlhNzFiMjgxOTdmNWY4ZAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVz
dHMveG1saHR0cHJlcXVlc3QvdXBsb2FkLW9ubG9hZGVuZC1ldmVudC1hZnRlci1hYm9ydC1leHBl
Y3RlZC50eHQKQEAgLTAsMCArMSw3IEBACitUZXN0IGNhc2UgZm9yIGJ1ZyA0MDk1MjogT25sb2Fk
ZW5kIGV2ZW50IGlzIG5vdCBzdXBwb3J0ZWQgaW4gWE1MSHR0cFJlcXVlc3QKKworVmVyaWZ5IHRo
YXQgYSBsb2FkZW5kIFByb2dyZXNzRXZlbnQgaXMgZGlzcGF0Y2hlZCBhZnRlciB0aGUgYWJvcnQg
UHJvZ3Jlc3NFdmVudCB3aGVuIGFuIGFzeW5jIHVwbG9hZCByZXF1ZXN0IGlzIGFib3J0ZWQuCisK
K1BBU1Mgc2hvdWxkIGFwcGVhciBiZWxvdzoKKworUEFTUwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC91cGxvYWQtb25sb2FkZW5kLWV2ZW50LWFmdGVy
LWFib3J0Lmh0bWwgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3VwbG9h
ZC1vbmxvYWRlbmQtZXZlbnQtYWZ0ZXItYWJvcnQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44OTRkNWI0ZWUz
Nzc5Zjg2OTM2ZWYyMTdiYmE0NjgwOGFkNDc1YjkwCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC91cGxvYWQtb25sb2FkZW5kLWV2ZW50LWFm
dGVyLWFib3J0Lmh0bWwKQEAgLTAsMCArMSw2NCBAQAorPGh0bWw+Cis8aGVhZD4KKzx0aXRsZT5U
ZXN0IGNhc2UgZm9yIGJ1ZyA0MDk1MjwvdGl0bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwPiBUZXN0
IGNhc2UgZm9yIDxhIGhyZWY9Imh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD00MDk1MiI+IGJ1ZyA0MDk1MjwvYT46IE9ubG9hZGVuZCBldmVudCBpcyBub3Qgc3VwcG9ydGVk
IGluIFhNTEh0dHBSZXF1ZXN0PC9wPgorPHA+IFZlcmlmeSB0aGF0IGEgbG9hZGVuZCBQcm9ncmVz
c0V2ZW50IGlzIGRpc3BhdGNoZWQgYWZ0ZXIgdGhlIGFib3J0IFByb2dyZXNzRXZlbnQgd2hlbiBh
biBhc3luYyB1cGxvYWQgcmVxdWVzdCBpcyBhYm9ydGVkLjwvcD4KKzxwPlBBU1Mgc2hvdWxkIGFw
cGVhciBiZWxvdzo8L3A+Cis8cCBpZD1jb25zb2xlPjwvcD4KKzxzY3JpcHQgdHlwZT0idGV4dC9q
YXZhc2NyaXB0Ij4KK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICBsYXlv
dXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIu
d2FpdFVudGlsRG9uZSgpOworfQorCitmdW5jdGlvbiBsb2cobWVzc2FnZSkKK3sKKyAgICB2YXIg
Y29uc29sZUVsdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb25zb2xlIik7CisgICAgY29u
c29sZUVsdC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShtZXNzYWdlKSk7Cit9
CisKK3ZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKK3ZhciByZXN1bHRzID0gIiI7Cit2
YXIgZXhwZWN0ZWQgPSAiIHByb2dyZXNzIGFib3J0IGxvYWRlbmQiOworCitmdW5jdGlvbiBsb2dQ
cm9ncmVzc0V2ZW50KGUpIHsKKyAgICByZXN1bHRzICs9ICIgIiArIGUudHlwZTsKK30KKworZnVu
Y3Rpb24gbG9nVW5leHBlY3RlZFByb2dyZXNzRXZlbnQoZSkgeworICAgIHJlc3VsdHMgKz0gIiBb
dW5leHBlY3RlZCBQcm9ncmVzc0V2ZW50OiAiICsgZS50eXBlICsgIl0iOworICAgIGNvbXBsZXRl
VGVzdCgpOyAgIAorfQorCitmdW5jdGlvbiBjb21wbGV0ZVRlc3QoKQoreworICAgIGxvZyhyZXN1
bHRzID09IGV4cGVjdGVkID8gIlBBU1MiIDogIkZBSUxFRCByZXN1bHRzIDogJyIgKyByZXN1bHRz
ICsgIicsIGV4cGVjdGVkIDogJyIgKyBleHBlY3RlZCArICInIik7CisgICAgaWYgKHdpbmRvdy5s
YXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5
RG9uZSgpOworfQorCitmdW5jdGlvbiB0ZXN0KCkKK3sKKyAgICB4aHIudXBsb2FkLm9ucHJvZ3Jl
c3MgPSBmdW5jdGlvbihlKSB7CisgICAgICAgIGxvZ1Byb2dyZXNzRXZlbnQoZSk7CisgICAgICAg
IHhoci5hYm9ydCgpOworICAgIH0KKyAgICB4aHIudXBsb2FkLm9uYWJvcnQgPSBsb2dQcm9ncmVz
c0V2ZW50OworICAgIHhoci51cGxvYWQub25lcnJvciA9IGxvZ1VuZXhwZWN0ZWRQcm9ncmVzc0V2
ZW50OworICAgIHhoci51cGxvYWQub25sb2FkID0gbG9nVW5leHBlY3RlZFByb2dyZXNzRXZlbnQ7
CisgICAgeGhyLnVwbG9hZC5vbmxvYWRlbmQgPSBmdW5jdGlvbihlKSB7CisgICAgICAgIGxvZ1By
b2dyZXNzRXZlbnQoZSk7CisgICAgICAgIGNvbXBsZXRlVGVzdCgpOworICAgIH0KKworICAgIHho
ci5vcGVuKCJQT1NUIiwgInJlc291cmNlcy9wb3N0LWVjaG8uY2dpIiwgdHJ1ZSk7CisgICAgeGhy
LnNlbmQoImRhdGEiKTsKK30KKwordGVzdCgpOworCis8L3NjcmlwdD4KKzwvYm9keT4KKwpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC91cGxvYWQtb25s
b2FkZW5kLWV2ZW50LWFmdGVyLWxvYWQtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy94bWxodHRwcmVxdWVzdC91cGxvYWQtb25sb2FkZW5kLWV2ZW50LWFmdGVyLWxvYWQtZXhw
ZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk2MjIzODY1NWUyMjU1ZjAxZTg5MTUxN2EyNDQyZDViYWRm
ZjNjNGMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHBy
ZXF1ZXN0L3VwbG9hZC1vbmxvYWRlbmQtZXZlbnQtYWZ0ZXItbG9hZC1leHBlY3RlZC50eHQKQEAg
LTAsMCArMSw3IEBACitUZXN0IGNhc2UgZm9yIGJ1ZyA0MDk1MjogT25sb2FkZW5kIGV2ZW50IGlz
IG5vdCBzdXBwb3J0ZWQgaW4gWE1MSHR0cFJlcXVlc3QKKworVmVyaWZ5IHRoYXQgYSBsb2FkZW5k
IFByb2dyZXNzRXZlbnQgaXMgZGlzcGF0Y2hlZCBhZnRlciB0aGUgbG9hZCBQcm9ncmVzc0V2ZW50
IHdoZW4gYW4gYXN5bmMgdXBsb2FkIHJlcXVlc3QgY29tcGxldGVzIG5vcm1hbGx5LgorCitQQVNT
IHNob3VsZCBhcHBlYXIgYmVsb3c6CisKK1BBU1MKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0
dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvdXBsb2FkLW9ubG9hZGVuZC1ldmVudC1hZnRlci1sb2Fk
Lmh0bWwgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3VwbG9hZC1vbmxv
YWRlbmQtZXZlbnQtYWZ0ZXItbG9hZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdmYzg5Y2E5ZWE5OTE5YmEy
MjhlMGRiOTdjZjQ2ZmRmNmJjYzU1YTMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3VwbG9hZC1vbmxvYWRlbmQtZXZlbnQtYWZ0ZXItbG9h
ZC5odG1sCkBAIC0wLDAgKzEsNjEgQEAKKzxodG1sPgorPGhlYWQ+Cis8dGl0bGU+VGVzdCBjYXNl
IGZvciBidWcgNDA5NTI8L3RpdGxlPgorPC9oZWFkPgorPGJvZHk+Cis8cD4gVGVzdCBjYXNlIGZv
ciA8YSBocmVmPSJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDA5NTIi
PiBidWcgNDA5NTI8L2E+OiBPbmxvYWRlbmQgZXZlbnQgaXMgbm90IHN1cHBvcnRlZCBpbiBYTUxI
dHRwUmVxdWVzdDwvcD4KKzxwPiBWZXJpZnkgdGhhdCBhIGxvYWRlbmQgUHJvZ3Jlc3NFdmVudCBp
cyBkaXNwYXRjaGVkIGFmdGVyIHRoZSBsb2FkIFByb2dyZXNzRXZlbnQgd2hlbiBhbiBhc3luYyB1
cGxvYWQgcmVxdWVzdCBjb21wbGV0ZXMgbm9ybWFsbHkuPC9wPgorPHA+UEFTUyBzaG91bGQgYXBw
ZWFyIGJlbG93OjwvcD4KKzxwIGlkPWNvbnNvbGU+PC9wPgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2ph
dmFzY3JpcHQiPgoraWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgIGxheW91
dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53
YWl0VW50aWxEb25lKCk7Cit9CisKK2Z1bmN0aW9uIGxvZyhtZXNzYWdlKQoreworICAgIHZhciBj
b25zb2xlRWx0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnNvbGUiKTsKKyAgICBjb25z
b2xlRWx0LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG1lc3NhZ2UpKTsKK30K
KwordmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOwordmFyIHJlc3VsdHMgPSAiIjsKK3Zh
ciBleHBlY3RlZCA9ICIgbG9hZHN0YXJ0IGxvYWQgbG9hZGVuZCI7CisKK2Z1bmN0aW9uIGxvZ1By
b2dyZXNzRXZlbnQoZSkgeworICAgIHJlc3VsdHMgKz0gIiAiICsgZS50eXBlOworfQorCitmdW5j
dGlvbiBsb2dVbmV4cGVjdGVkUHJvZ3Jlc3NFdmVudChlKSB7CisgICAgcmVzdWx0cyArPSAiIFt1
bmV4cGVjdGVkIFByb2dyZXNzRXZlbnQ6ICIgKyBlLnR5cGUgKyAiXSI7CisgICAgY29tcGxldGVU
ZXN0KCk7ICAgCit9CisKK2Z1bmN0aW9uIGNvbXBsZXRlVGVzdCgpCit7CisgICAgbG9nKHJlc3Vs
dHMgPT0gZXhwZWN0ZWQgPyAiUEFTUyIgOiAiRkFJTEVEIHJlc3VsdHMgOiAnIiArIHJlc3VsdHMg
KyAiJywgZXhwZWN0ZWQgOiAnIiArIGV4cGVjdGVkICsgIiciKTsKKyAgICBpZiAod2luZG93Lmxh
eW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlE
b25lKCk7Cit9CisKK2Z1bmN0aW9uIHRlc3QoKQoreworICAgIHhoci5vbnJlYWR5c3RhdGVjaGFu
Z2UgPSBmdW5jdGlvbihlKSB7CisgICAgICAgIGlmICh4aHIucmVhZHlTdGF0ZSA9PSB4aHIuRE9O
RSkKKyAgICAgICAgICAgIGNvbXBsZXRlVGVzdCgpOworICAgIH0KKyAgICB4aHIudXBsb2FkLm9u
bG9hZHN0YXJ0ID0gbG9nUHJvZ3Jlc3NFdmVudDsKKyAgICB4aHIudXBsb2FkLm9uYWJvcnQgPSBs
b2dVbmV4cGVjdGVkUHJvZ3Jlc3NFdmVudDsKKyAgICB4aHIudXBsb2FkLm9uZXJyb3IgPSBsb2dV
bmV4cGVjdGVkUHJvZ3Jlc3NFdmVudDsKKyAgICB4aHIudXBsb2FkLm9ubG9hZCA9IGxvZ1Byb2dy
ZXNzRXZlbnQ7CisgICAgeGhyLnVwbG9hZC5vbmxvYWRlbmQgPSBsb2dQcm9ncmVzc0V2ZW50Owor
CisgICAgeGhyLm9wZW4oIlBPU1QiLCAicmVzb3VyY2VzL3Bvc3QtZWNoby5jZ2kiLCB0cnVlKTsK
KyAgICB4aHIuc2VuZCgiZGF0YSIpOworfQorCit0ZXN0KCk7CisKKzwvc2NyaXB0PgorPC9ib2R5
PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC91cGxv
YWQtb25sb2FkZW5kLWV2ZW50LWFmdGVyLXN5bmMtcmVxdWVzdHMtZXhwZWN0ZWQudHh0IGIvTGF5
b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC91cGxvYWQtb25sb2FkZW5kLWV2ZW50
LWFmdGVyLXN5bmMtcmVxdWVzdHMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE4Yzg2OWNhYzRm
ZmZjNjJiYmEzZTVhYmMzYjg0OTg5ZTdhOGFhOWIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3VwbG9hZC1vbmxvYWRlbmQtZXZlbnQtYWZ0
ZXItc3luYy1yZXF1ZXN0cy1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw3IEBACitUZXN0IGNhc2Ug
Zm9yIGJ1ZyA0MDk1MjogT25sb2FkZW5kIGV2ZW50IGlzIG5vdCBzdXBwb3J0ZWQgaW4gWE1MSHR0
cFJlcXVlc3QKKworVmVyaWZ5IHRoYXQgYSBsb2FkZW5kIFByb2dyZXNzRXZlbnQgaXMgZGlzcGF0
Y2hlZCBhZnRlciB0aGUgbG9hZCBvciBhYm9ydCBQcm9ncmVzc0V2ZW50IHdoZW4gYSBzeW5jaHJv
bm91cyB1cGxvYWQgcmVxdWVzdCBjb21wbGV0ZXMgbm9ybWFsbHkgb3IgaXMgYWJvcnRlZC4KKwor
UEFTUyBQQVNTIHNob3VsZCBhcHBlYXIgYmVsb3c6CisKK1BBU1MgUEFTUwpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC91cGxvYWQtb25sb2FkZW5kLWV2
ZW50LWFmdGVyLXN5bmMtcmVxdWVzdHMuaHRtbCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMveG1s
aHR0cHJlcXVlc3QvdXBsb2FkLW9ubG9hZGVuZC1ldmVudC1hZnRlci1zeW5jLXJlcXVlc3RzLmh0
bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMDA5NmRhZmE0NTg4OWEyMWNiZjhjMTgzZWM3MmU5YzYxZTNmZjI3Ygot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3Qv
dXBsb2FkLW9ubG9hZGVuZC1ldmVudC1hZnRlci1zeW5jLXJlcXVlc3RzLmh0bWwKQEAgLTAsMCAr
MSw4NyBAQAorPEhUTUw+Cis8aGVhZD4KKzx0aXRsZT5UZXN0IGNhc2UgZm9yIGJ1ZyA0MDk1Mjwv
dGl0bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwPiBUZXN0IGNhc2UgZm9yIDxhIGhyZWY9Imh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MDk1MiI+IGJ1ZyA0MDk1MjwvYT46
IE9ubG9hZGVuZCBldmVudCBpcyBub3Qgc3VwcG9ydGVkIGluIFhNTEh0dHBSZXF1ZXN0PC9wPgor
PHA+IFZlcmlmeSB0aGF0IGEgbG9hZGVuZCBQcm9ncmVzc0V2ZW50IGlzIGRpc3BhdGNoZWQgYWZ0
ZXIgdGhlIGxvYWQgb3IgYWJvcnQgUHJvZ3Jlc3NFdmVudCB3aGVuIGEgc3luY2hyb25vdXMgdXBs
b2FkIHJlcXVlc3QgY29tcGxldGVzIG5vcm1hbGx5IG9yIGlzIGFib3J0ZWQuPC9wPgorPHA+UEFT
UyBQQVNTIHNob3VsZCBhcHBlYXIgYmVsb3c6PC9wPgorPHAgaWQ9Y29uc29sZT48L3A+Cis8c2Ny
aXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9s
bGVyKSB7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgIGxheW91
dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKK30KKworZnVuY3Rpb24gbG9nKG1lc3Nh
Z2UpCit7CisgICAgdmFyIGNvbnNvbGVFbHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29u
c29sZSIpOworICAgIGNvbnNvbGVFbHQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5v
ZGUobWVzc2FnZSArICIgIikpOworfQorCit2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7
Cit2YXIgcmVzdWx0czsKKworZnVuY3Rpb24gbG9nUHJvZ3Jlc3NFdmVudChlKSB7CisgICAgcmVz
dWx0cyArPSAiICIgKyBlLnR5cGU7Cit9CisKK2Z1bmN0aW9uIGxvZ1VuZXhwZWN0ZWRQcm9ncmVz
c0V2ZW50KGUpIHsKKyAgICByZXN1bHRzICs9ICIgW3VuZXhwZWN0ZWQgUHJvZ3Jlc3NFdmVudDog
IiArIGUudHlwZSArICJdIjsKKyAgICBjb21wbGV0ZVRlc3QoKTsgICAKK30KKworZnVuY3Rpb24g
Y29tcGxldGVUZXN0KGV4cGVjdGVkKQoreworICAgIGxvZyhyZXN1bHRzID09IGV4cGVjdGVkID8g
IlBBU1MiIDogIkZBSUxFRCByZXN1bHRzIDogJyIgKyByZXN1bHRzICsgIicgZXhwZWN0ZWQgOiAn
IiArIGV4cGVjdGVkICsgIiciKTsKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVy
KQorICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cit9CisKK2Z1bmN0
aW9uIHRlc3ROb3JtYWwoKQoreworICAgIHJlc3VsdHMgPSAiIjsKKworICAgIHhoci5vbmxvYWRz
dGFydCA9IGxvZ1VuZXhwZWN0ZWRQcm9ncmVzc0V2ZW50OworICAgIHhoci5vbmFib3J0ID0gbG9n
VW5leHBlY3RlZFByb2dyZXNzRXZlbnQ7CisgICAgeGhyLm9uZXJyb3IgPSBsb2dVbmV4cGVjdGVk
UHJvZ3Jlc3NFdmVudDsKKyAgICB4aHIub25sb2FkID0gbG9nUHJvZ3Jlc3NFdmVudDsKKyAgICB4
aHIub25sb2FkZW5kID0gbG9nUHJvZ3Jlc3NFdmVudDsKKworICAgIHhoci5vcGVuKCJQT1NUIiwg
InJlc291cmNlcy9wb3N0LWVjaG8uY2dpIiwgZmFsc2UpOyAKKyAgICB4aHIuc2VuZCgiZGF0YSIp
OworICAgIAorICAgIGNvbXBsZXRlVGVzdCgiIGxvYWQgbG9hZGVuZCIpOworfQorCitmdW5jdGlv
biB0ZXN0QWJvcnQoKQoreworICAgIHJlc3VsdHMgPSAiIjsKKworICAgIHhoci5vbmxvYWRzdGFy
dCA9IGxvZ1VuZXhwZWN0ZWRQcm9ncmVzc0V2ZW50OworICAgIHhoci5vbmFib3J0ID0gbG9nUHJv
Z3Jlc3NFdmVudDsKKyAgICB4aHIub25lcnJvciA9IGxvZ1VuZXhwZWN0ZWRQcm9ncmVzc0V2ZW50
OworICAgIHhoci5vbmxvYWQgPSBsb2dVbmV4cGVjdGVkUHJvZ3Jlc3NFdmVudDsKKyAgICB4aHIu
b25sb2FkZW5kID0gbG9nUHJvZ3Jlc3NFdmVudDsKKyAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdl
ID0gZnVuY3Rpb24oZSkgeworICAgICAgICBpZiAoeGhyLnJlYWR5U3RhdGUgPT0geGhyLkRPTkUp
CisgICAgICAgICAgICB4aHIuYWJvcnQoKTsKKyAgICB9CisKKyAgICB4aHIub3BlbigiUE9TVCIs
ICJyZXNvdXJjZXMvZ2V0LnR4dCIsIGZhbHNlKTsgCisgICAgdHJ5IHsKKyAgICAgICAgeGhyLnNl
bmQoKTsKKyAgICB9CisgICAgY2F0Y2ggKGUpIHsKKyAgICAgICAgaWYgKGUuY29kZSAhPSBlLk5F
VFdPUktfRVJSKQorICAgICAgICAgICAgcmVzdWx0cyArPSAiICIgKyBlOworICAgIH0KKyAgICAK
KyAgICBjb21wbGV0ZVRlc3QoIiBhYm9ydCBsb2FkZW5kIik7Cit9CisKK3Rlc3ROb3JtYWwoKTsK
K3Rlc3RBYm9ydCgpOworCis8L3NjcmlwdD4KKzwvYm9keT4KZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QveG1saHR0cHJlcXVlc3Qtc3luYy1uby1wcm9n
cmVzcy1ldmVudHMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRw
cmVxdWVzdC94bWxodHRwcmVxdWVzdC1zeW5jLW5vLXByb2dyZXNzLWV2ZW50cy1leHBlY3RlZC50
eHQKaW5kZXggMjQ1ZDNjMDNjMzcwZWE4MDYxN2U0YjQ2YTMwOTU5YTY0NzllMWJlZi4uYTUxMjZh
YWRiNTljM2Y3MGJlMDM4YjY3OGUxZDFmMzRkMDViZjIwOSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC94bWxodHRwcmVxdWVzdC1zeW5jLW5vLXByb2dy
ZXNzLWV2ZW50cy1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxo
dHRwcmVxdWVzdC94bWxodHRwcmVxdWVzdC1zeW5jLW5vLXByb2dyZXNzLWV2ZW50cy1leHBlY3Rl
ZC50eHQKQEAgLTYsMTcgKzYsMjEgQEAgYnVnIDE3NTAyOiBBc3NlcnRpb24gZmFpbHVyZSB3aGVu
IHRyeWluZyB0byByZXN0YXJ0IGEgc3luYyBYTUxIdHRwUmVxdWVzdCBhcyBhbgogIFN0ZXAgMTog
U2FtZSBvcmlnaW4gcmVxdWVzdAogcmVhZHlzdGF0ZWNoYW5nZSA0CiBsb2FkCitsb2FkZW5kCiAK
IFN0ZXAgMjogQ3Jvc3Mgb3JpZ2luIHJlcXVlc3QsIGRpc2FsbG93ZWQKIHJlYWR5c3RhdGVjaGFu
Z2UgNAogZXJyb3IKK2xvYWRlbmQKIEVycm9yOiBORVRXT1JLX0VSUjogWE1MSHR0cFJlcXVlc3Qg
RXhjZXB0aW9uIDEwMQogCiBTdGVwIDM6IENyb3NzIG9yaWdpbiByZXF1ZXN0LCBhbGxvd2VkCiBy
ZWFkeXN0YXRlY2hhbmdlIDQKIGxvYWQKK2xvYWRlbmQKIAogU3RlcCA0OiBDcm9zcyBvcmlnaW4g
cmVxdWVzdCwgY2hlY2sgdGhhdCBwcmVmbGlnaHQgaXNuJ3QgYXR0ZW1wdGVkCiByZWFkeXN0YXRl
Y2hhbmdlIDQKIGxvYWQKK2xvYWRlbmQKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>119636</attachid>
            <date>2011-12-16 11:09:55 -0800</date>
            <delta_ts>2011-12-20 12:00:32 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-40952-20111216110954.patch</filename>
            <type>text/plain</type>
            <size>37917</size>
            <attacher name="Hans Muller">giles_joplin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAyMzkwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDYyMjM1MDUxZWFkODY5
ZDIzYzlkYTQ5YmJmZDYxYzBkYjI4MzNhNS4uYTEyMmRkYzM4ZjRmNTA4ZDQyNjgyZmQzM2U5NGZm
MmNiMDNlMjJiNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBACisyMDExLTEyLTA5ICBIYW5z
IE11bGxlciAgPGhtdWxsZXJAYWRvYmUuY29tPgorCisgICAgICAgIE9ubG9hZGVuZCBldmVudCBp
cyBub3Qgc3VwcG9ydGVkIGluIFhNTEh0dHBSZXF1ZXN0CisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MDk1MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIHN1cHBvcnQgZm9yIHRoZSBsb2FkZW5kIFBy
b2dyZXNzRXZlbnQgdG8gWE1MSHR0cFJlcXVlc3QgYW5kIFhNTEh0dHBSZXF1ZXN0VXBsb2FkLgor
ICAgICAgICBBIG5ldyBtZXRob2QsIGRpc3BhdGNoRXZlbnRBbmRMb2FkRW5kKCksIHdhcyBhZGRl
ZCB0byBYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZQorICAgICAgICBhbmQgWE1M
SHR0cFJlcXVlc3RVcGxvYWQgdG8gZm9vbHByb29mIHRoZSBjb21tb24gY2FzZSBvZiBkaXNwYXRj
aGluZyBhIGxvYWQsIGFib3J0LAorICAgICAgICBvciBlcnJvciBldmVudCBmb2xsb3dlZCBieSBh
IGxvYWRlbmQgZXZlbnQuCisKKyAgICAgICAgVGVzdHM6IGh0dHAvdGVzdHMveG1saHR0cHJlcXVl
c3Qvb25sb2FkZW5kLWV2ZW50LWFmdGVyLWFib3J0Lmh0bWwKKyAgICAgICAgICAgICAgIGh0dHAv
dGVzdHMveG1saHR0cHJlcXVlc3Qvb25sb2FkZW5kLWV2ZW50LWFmdGVyLWVycm9yLmh0bWwKKyAg
ICAgICAgICAgICAgIGh0dHAvdGVzdHMveG1saHR0cHJlcXVlc3Qvb25sb2FkZW5kLWV2ZW50LWFm
dGVyLWxvYWQuaHRtbAorICAgICAgICAgICAgICAgaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC91
cGxvYWQtb25sb2FkZW5kLWV2ZW50LWFmdGVyLWFib3J0Lmh0bWwKKyAgICAgICAgICAgICAgIGh0
dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvdXBsb2FkLW9ubG9hZGVuZC1ldmVudC1hZnRlci1sb2Fk
Lmh0bWwKKworICAgICAgICAqIHhtbC9YTUxIdHRwUmVxdWVzdC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpYTUxIdHRwUmVxdWVzdDo6Y2FsbFJlYWR5U3RhdGVDaGFuZ2VMaXN0ZW5lcik6CisgICAg
ICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdDo6YWJvcnQpOgorICAgICAgICAoV2ViQ29yZTo6
WE1MSHR0cFJlcXVlc3Q6Om5ldHdvcmtFcnJvcik6CisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRw
UmVxdWVzdDo6YWJvcnRFcnJvcik6CisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdDo6
ZGlkU2VuZERhdGEpOgorICAgICAgICAqIHhtbC9YTUxIdHRwUmVxdWVzdC5oOgorICAgICAgICAq
IHhtbC9YTUxIdHRwUmVxdWVzdC5pZGw6CisgICAgICAgICogeG1sL1hNTEh0dHBSZXF1ZXN0VXBs
b2FkLmg6CisgICAgICAgICogeG1sL1hNTEh0dHBSZXF1ZXN0VXBsb2FkLmlkbDoKKwogMjAxMS0x
Mi0wOCAgVGltIEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KIAogICAgICAgICBF
bmFibGUgYW5pbWF0aW9ucyBvZiBDU1MgaW1hZ2VzIHVzaW5nIC13ZWJraXQtY3Jvc3MtZmFkZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ltYWdlTG9hZGVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9JbWFnZUxvYWRlci5jcHAKaW5kZXggODIwY2ZkM2ZiOWE4ZGU5NjA2
NjY5ZmY0OGJjNjhkYjhiMDUxMmJmZC4uNDgxM2YxNjZkZjY0MWUxYWNhY2FkZmE0NjAyNmM4ZjE4
NmVlNzkyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ltYWdlTG9hZGVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvSW1hZ2VMb2FkZXIuY3BwCkBAIC0xLDMgKzEs
NCBAQAorCiAvKgogICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5v
cmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5v
cmcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwIGIv
U291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAppbmRleCAwNTkwYTQzZDY1NTdm
YmM1MDVkZWYwMDYwZDUyY2FjOTJkMmRmZWI4Li5jY2M2YjQzOGQzYjAzNTJlOGEyNDMyNGExOWJh
NTZlNmI3ODgzNmIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVl
c3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAKQEAgLTMz
NiwxMyArMzM2LDEzIEBAIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OmNhbGxSZWFkeVN0YXRlQ2hhbmdl
TGlzdGVuZXIoKQogICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBjb29raWUgPSBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxDaGFuZ2VYSFJSZWFkeVN0YXRlKHNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKSwgdGhpcyk7CiAKICAgICBpZiAobV9hc3luYyB8fCAobV9zdGF0ZSA8
PSBPUEVORUQgfHwgbV9zdGF0ZSA9PSBET05FKSkKLSAgICAgICAgbV9wcm9ncmVzc0V2ZW50VGhy
b3R0bGUuZGlzcGF0Y2hFdmVudChYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnQ6OmNyZWF0ZShl
dmVudE5hbWVzKCkucmVhZHlzdGF0ZWNoYW5nZUV2ZW50KSwgbV9zdGF0ZSA9PSBET05FID8gRmx1
c2hQcm9ncmVzc0V2ZW50IDogRG9Ob3RGbHVzaFByb2dyZXNzRXZlbnQpOworICAgICAgICBtX3By
b2dyZXNzRXZlbnRUaHJvdHRsZS5kaXNwYXRjaFJlYWR5U3RhdGVDaGFuZ2VFdmVudChtX3N0YXRl
ID09IERPTkUgPyBGbHVzaFByb2dyZXNzRXZlbnQgOiBEb05vdEZsdXNoUHJvZ3Jlc3NFdmVudCk7
CiAKICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZENoYW5nZVhIUlJlYWR5U3RhdGUo
Y29va2llKTsKIAogICAgIGlmIChtX3N0YXRlID09IERPTkUgJiYgIW1fZXJyb3IpIHsKICAgICAg
ICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIGNvb2tpZSA9IEluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbjo6d2lsbExvYWRYSFIoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCB0aGlzKTsK
LSAgICAgICAgbV9wcm9ncmVzc0V2ZW50VGhyb3R0bGUuZGlzcGF0Y2hFdmVudChYTUxIdHRwUmVx
dWVzdFByb2dyZXNzRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkubG9hZEV2ZW50KSk7CisgICAg
ICAgIG1fcHJvZ3Jlc3NFdmVudFRocm90dGxlLmRpc3BhdGNoRmluYWxQcm9ncmVzc0V2ZW50KFhN
TEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5sb2FkRXZlbnQp
KTsKICAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRMb2FkWEhSKGNvb2tpZSk7
CiAgICAgfQogfQpAQCAtNjE1LDEwICs2MTUsMTAgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6Y3Jl
YXRlUmVxdWVzdChFeGNlcHRpb25Db2RlJiBlYykKICAgICAvLyBBbHNvLCBvbmx5IGFzeW5jIHJl
cXVlc3RzIHN1cHBvcnQgdXBsb2FkIHByb2dyZXNzIGV2ZW50cy4KICAgICBib29sIHVwbG9hZEV2
ZW50cyA9IGZhbHNlOwogICAgIGlmIChtX2FzeW5jKSB7Ci0gICAgICAgIG1fcHJvZ3Jlc3NFdmVu
dFRocm90dGxlLmRpc3BhdGNoRXZlbnQoWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50OjpjcmVh
dGUoZXZlbnROYW1lcygpLmxvYWRzdGFydEV2ZW50KSk7CisgICAgICAgIG1fcHJvZ3Jlc3NFdmVu
dFRocm90dGxlLmRpc3BhdGNoTG9hZFN0YXJ0UHJvZ3Jlc3NFdmVudCgpOwogICAgICAgICBpZiAo
bV9yZXF1ZXN0RW50aXR5Qm9keSAmJiBtX3VwbG9hZCkgewogICAgICAgICAgICAgdXBsb2FkRXZl
bnRzID0gbV91cGxvYWQtPmhhc0V2ZW50TGlzdGVuZXJzKCk7Ci0gICAgICAgICAgICBtX3VwbG9h
ZC0+ZGlzcGF0Y2hFdmVudChYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnQ6OmNyZWF0ZShldmVu
dE5hbWVzKCkubG9hZHN0YXJ0RXZlbnQpKTsKKyAgICAgICAgICAgIG1fdXBsb2FkLT5kaXNwYXRj
aExvYWRTdGFydFByb2dyZXNzRXZlbnQoKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNzAyLDEx
ICs3MDIsMTEgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6YWJvcnQoKQogICAgICAgICBtX3N0YXRl
ID0gVU5TRU5UOwogICAgIH0KIAotICAgIG1fcHJvZ3Jlc3NFdmVudFRocm90dGxlLmRpc3BhdGNo
RXZlbnQoWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmFi
b3J0RXZlbnQpKTsKKyAgICBtX3Byb2dyZXNzRXZlbnRUaHJvdHRsZS5kaXNwYXRjaEZpbmFsUHJv
Z3Jlc3NFdmVudChYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVz
KCkuYWJvcnRFdmVudCkpOwogICAgIGlmICghbV91cGxvYWRDb21wbGV0ZSkgewogICAgICAgICBt
X3VwbG9hZENvbXBsZXRlID0gdHJ1ZTsKICAgICAgICAgaWYgKG1fdXBsb2FkICYmIG1fdXBsb2Fk
RXZlbnRzQWxsb3dlZCkKLSAgICAgICAgICAgIG1fdXBsb2FkLT5kaXNwYXRjaEV2ZW50KFhNTEh0
dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5hYm9ydEV2ZW50KSk7
CisgICAgICAgICAgICBtX3VwbG9hZC0+ZGlzcGF0Y2hGaW5hbFByb2dyZXNzRXZlbnQoWE1MSHR0
cFJlcXVlc3RQcm9ncmVzc0V2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmFib3J0RXZlbnQpKTsK
ICAgICB9CiB9CiAKQEAgLTc2NiwxMSArNzY2LDExIEBAIHZvaWQgWE1MSHR0cFJlcXVlc3Q6Omdl
bmVyaWNFcnJvcigpCiB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpuZXR3b3JrRXJyb3IoKQogewogICAg
IGdlbmVyaWNFcnJvcigpOwotICAgIG1fcHJvZ3Jlc3NFdmVudFRocm90dGxlLmRpc3BhdGNoRXZl
bnQoWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmVycm9y
RXZlbnQpKTsKKyAgICBtX3Byb2dyZXNzRXZlbnRUaHJvdHRsZS5kaXNwYXRjaEZpbmFsUHJvZ3Jl
c3NFdmVudChYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCku
ZXJyb3JFdmVudCkpOwogICAgIGlmICghbV91cGxvYWRDb21wbGV0ZSkgewogICAgICAgICBtX3Vw
bG9hZENvbXBsZXRlID0gdHJ1ZTsKICAgICAgICAgaWYgKG1fdXBsb2FkICYmIG1fdXBsb2FkRXZl
bnRzQWxsb3dlZCkKLSAgICAgICAgICAgIG1fdXBsb2FkLT5kaXNwYXRjaEV2ZW50KFhNTEh0dHBS
ZXF1ZXN0UHJvZ3Jlc3NFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5lcnJvckV2ZW50KSk7Cisg
ICAgICAgICAgICBtX3VwbG9hZC0+ZGlzcGF0Y2hGaW5hbFByb2dyZXNzRXZlbnQoWE1MSHR0cFJl
cXVlc3RQcm9ncmVzc0V2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmVycm9yRXZlbnQpKTsKICAg
ICB9CiAgICAgaW50ZXJuYWxBYm9ydCgpOwogfQpAQCAtNzc4LDExICs3NzgsMTEgQEAgdm9pZCBY
TUxIdHRwUmVxdWVzdDo6bmV0d29ya0Vycm9yKCkKIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OmFib3J0
RXJyb3IoKQogewogICAgIGdlbmVyaWNFcnJvcigpOwotICAgIG1fcHJvZ3Jlc3NFdmVudFRocm90
dGxlLmRpc3BhdGNoRXZlbnQoWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50OjpjcmVhdGUoZXZl
bnROYW1lcygpLmFib3J0RXZlbnQpKTsKKyAgICBtX3Byb2dyZXNzRXZlbnRUaHJvdHRsZS5kaXNw
YXRjaEZpbmFsUHJvZ3Jlc3NFdmVudChYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnQ6OmNyZWF0
ZShldmVudE5hbWVzKCkuYWJvcnRFdmVudCkpOwogICAgIGlmICghbV91cGxvYWRDb21wbGV0ZSkg
ewogICAgICAgICBtX3VwbG9hZENvbXBsZXRlID0gdHJ1ZTsKICAgICAgICAgaWYgKG1fdXBsb2Fk
ICYmIG1fdXBsb2FkRXZlbnRzQWxsb3dlZCkKLSAgICAgICAgICAgIG1fdXBsb2FkLT5kaXNwYXRj
aEV2ZW50KFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5h
Ym9ydEV2ZW50KSk7CisgICAgICAgICAgICBtX3VwbG9hZC0+ZGlzcGF0Y2hGaW5hbFByb2dyZXNz
RXZlbnQoWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmFi
b3J0RXZlbnQpKTsKICAgICB9CiB9CiAKQEAgLTEwMTcsMTIgKzEwMTcsMTIgQEAgdm9pZCBYTUxI
dHRwUmVxdWVzdDo6ZGlkU2VuZERhdGEodW5zaWduZWQgbG9uZyBsb25nIGJ5dGVzU2VudCwgdW5z
aWduZWQgbG9uZyBsb24KICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKG1fdXBsb2FkRXZlbnRz
QWxsb3dlZCkKLSAgICAgICAgbV91cGxvYWQtPmRpc3BhdGNoRXZlbnQoWE1MSHR0cFJlcXVlc3RQ
cm9ncmVzc0V2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnByb2dyZXNzRXZlbnQsIHRydWUsIGJ5
dGVzU2VudCwgdG90YWxCeXRlc1RvQmVTZW50KSk7CisgICAgICAgIG1fdXBsb2FkLT5kaXNwYXRj
aFByb2dyZXNzRXZlbnQodHJ1ZSwgYnl0ZXNTZW50LCB0b3RhbEJ5dGVzVG9CZVNlbnQpOwogCiAg
ICAgaWYgKGJ5dGVzU2VudCA9PSB0b3RhbEJ5dGVzVG9CZVNlbnQgJiYgIW1fdXBsb2FkQ29tcGxl
dGUpIHsKICAgICAgICAgbV91cGxvYWRDb21wbGV0ZSA9IHRydWU7CiAgICAgICAgIGlmIChtX3Vw
bG9hZEV2ZW50c0FsbG93ZWQpCi0gICAgICAgICAgICBtX3VwbG9hZC0+ZGlzcGF0Y2hFdmVudChY
TUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkubG9hZEV2ZW50
KSk7CisgICAgICAgICAgICBtX3VwbG9hZC0+ZGlzcGF0Y2hGaW5hbFByb2dyZXNzRXZlbnQoWE1M
SHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmxvYWRFdmVudCkp
OwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1
ZXN0LmggYi9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuaAppbmRleCA2NzE5MjVl
MzcwZmQyOTM5MWJiYTdiYzM0MzJjNjE3MWZiNTU4MjAwLi4xNGM5NDkxNGI0ZmNhNDc3MWZhOTYx
ZjBlMGQ0NzE4NzkzZmZhMmEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0
cFJlcXVlc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuaApAQCAt
MTMzLDYgKzEzMyw3IEBAIHB1YmxpYzoKICAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RF
TkVSKGFib3J0KTsKICAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKGVycm9yKTsK
ICAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKGxvYWQpOworICAgIERFRklORV9B
VFRSSUJVVEVfRVZFTlRfTElTVEVORVIobG9hZGVuZCk7CiAgICAgREVGSU5FX0FUVFJJQlVURV9F
VkVOVF9MSVNURU5FUihsb2Fkc3RhcnQpOwogICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElT
VEVORVIocHJvZ3Jlc3MpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0
cFJlcXVlc3QuaWRsIGIvU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmlkbAppbmRl
eCA4MjZkMTAxMjY3YmQwZGQ5YzUyM2QyYzk1ZTI3ODIzN2NkN2RhZmQ1Li42ZmI0ZGZkNzJhMzQz
NDU2YTVlNTU1OTBkYjIzZGJmZTYwMGVhYmE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94
bWwvWE1MSHR0cFJlcXVlc3QuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVx
dWVzdC5pZGwKQEAgLTQyLDYgKzQyLDcgQEAgbW9kdWxlIHhtbCB7CiAgICAgICAgIGF0dHJpYnV0
ZSBFdmVudExpc3RlbmVyIG9uYWJvcnQ7CiAgICAgICAgIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVy
IG9uZXJyb3I7CiAgICAgICAgIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9ubG9hZDsKKyAgICAg
ICAgYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIgb25sb2FkZW5kOwogICAgICAgICBhdHRyaWJ1dGUg
RXZlbnRMaXN0ZW5lciBvbmxvYWRzdGFydDsKICAgICAgICAgYXR0cmlidXRlIEV2ZW50TGlzdGVu
ZXIgb25wcm9ncmVzczsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBS
ZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxI
dHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZS5jcHAKaW5kZXggNWQ0YWZhMzI4YjdiYjA1
NGI0NzVmYWQyNTg0Y2Y5MDk1NTQ0NjBlMy4uZDM3NmM0MTE2OGQ1MzUxNGRlZjc0MjRjODljNmZh
NTQzYjAzNmVmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0
UHJvZ3Jlc3NFdmVudFRocm90dGxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0
cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGUuY3BwCkBAIC02OSwxMiArNjksMzYgQEAgdm9p
ZCBYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZTo6ZGlzcGF0Y2hQcm9ncmVzc0V2
ZW50KGJvb2wgbGVuZ3RoQ29tcHUKICAgICBtX3RvdGFsID0gdG90YWw7CiB9CiAKK3ZvaWQgWE1M
SHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGU6OmRpc3BhdGNoUmVhZHlTdGF0ZUNoYW5n
ZUV2ZW50KFByb2dyZXNzRXZlbnRBY3Rpb24gcHJvZ3Jlc3NFdmVudEFjdGlvbikKK3sKKyAgICBk
aXNwYXRjaEV2ZW50KFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudDo6Y3JlYXRlKGV2ZW50TmFt
ZXMoKS5yZWFkeXN0YXRlY2hhbmdlRXZlbnQpLCBwcm9ncmVzc0V2ZW50QWN0aW9uKTsKK30KKwor
dm9pZCBYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZTo6ZGlzcGF0Y2hMb2FkU3Rh
cnRQcm9ncmVzc0V2ZW50KCkKK3sKKyAgICBkaXNwYXRjaEV2ZW50KFhNTEh0dHBSZXF1ZXN0UHJv
Z3Jlc3NFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5sb2Fkc3RhcnRFdmVudCkpOworfQorCit2
b2lkIFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlOjpkaXNwYXRjaEZpbmFsUHJv
Z3Jlc3NFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCkKK3sKKyAgICBBU1NFUlQoIXN1c3Bl
bmRlZCgpKTsKKyAgICAvLyBXZSBzaG91bGQgbm90IGhhdmUgYW55IHBlbmRpbmcgZXZlbnRzIGZy
b20gYSBwcmV2aW91cyByZXN1bWUuCisgICAgQVNTRVJUKCFtX3BhdXNlZEV2ZW50KTsKKworICAg
IEFTU0VSVChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5sb2FkRXZlbnQgfHwgZXZlbnQt
PnR5cGUoKSA9PSBldmVudE5hbWVzKCkuYWJvcnRFdmVudCB8fCBldmVudC0+dHlwZSgpID09IGV2
ZW50TmFtZXMoKS5lcnJvckV2ZW50KTsKKworICAgIG1fdGFyZ2V0LT5kaXNwYXRjaEV2ZW50KGV2
ZW50KTsKKyAgICBtX3RhcmdldC0+ZGlzcGF0Y2hFdmVudChYTUxIdHRwUmVxdWVzdFByb2dyZXNz
RXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkubG9hZGVuZEV2ZW50KSk7Cit9CisKIHZvaWQgWE1M
SHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGU6OmRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0
cjxFdmVudD4gZXZlbnQsIFByb2dyZXNzRXZlbnRBY3Rpb24gcHJvZ3Jlc3NFdmVudEFjdGlvbikK
IHsKICAgICBBU1NFUlQoIXN1c3BlbmRlZCgpKTsKICAgICAvLyBXZSBzaG91bGQgbm90IGhhdmUg
YW55IHBlbmRpbmcgZXZlbnRzIGZyb20gYSBwcmV2aW91cyByZXN1bWUuCiAgICAgQVNTRVJUKCFt
X3BhdXNlZEV2ZW50KTsKIAorICAgIEFTU0VSVChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMo
KS5sb2Fkc3RhcnRFdmVudCB8fCBldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5wcm9ncmVz
c0V2ZW50IHx8IGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLnJlYWR5c3RhdGVjaGFuZ2VF
dmVudCk7CisKICAgICBpZiAocHJvZ3Jlc3NFdmVudEFjdGlvbiA9PSBGbHVzaFByb2dyZXNzRXZl
bnQpCiAgICAgICAgIGZsdXNoUHJvZ3Jlc3NFdmVudCgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGUuaCBiL1NvdXJj
ZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZS5oCmluZGV4
IDAzNjkwNWU3ZTIyY2ZhZTgwM2UwMTRkY2I3NTQ4OWVjZmQ0YWYxZGEuLjAwNzY0YjFmMzkzZDFh
YTVjOWE3N2IzYjg0YWFkZWIwZjdhOTJkMDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3ht
bC9YTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3htbC9YTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZS5oCkBAIC00OCw4ICs0
OCwxMSBAQCBwdWJsaWM6CiAgICAgWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGUo
RXZlbnRUYXJnZXQqKTsKICAgICB2aXJ0dWFsIH5YTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRU
aHJvdHRsZSgpOwogCisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxF
dmVudD4sIFByb2dyZXNzRXZlbnRBY3Rpb24gPSBEb05vdEZsdXNoUHJvZ3Jlc3NFdmVudCk7Cisg
ICAgdm9pZCBkaXNwYXRjaFJlYWR5U3RhdGVDaGFuZ2VFdmVudChQcm9ncmVzc0V2ZW50QWN0aW9u
ID0gRG9Ob3RGbHVzaFByb2dyZXNzRXZlbnQpOworICAgIHZvaWQgZGlzcGF0Y2hMb2FkU3RhcnRQ
cm9ncmVzc0V2ZW50KCk7CiAgICAgdm9pZCBkaXNwYXRjaFByb2dyZXNzRXZlbnQoYm9vbCBsZW5n
dGhDb21wdXRhYmxlLCB1bnNpZ25lZCBsb25nIGxvbmcgbG9hZGVkLCB1bnNpZ25lZCBsb25nIGxv
bmcgdG90YWwpOwotICAgIHZvaWQgZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiwgUHJv
Z3Jlc3NFdmVudEFjdGlvbiA9IERvTm90Rmx1c2hQcm9ncmVzc0V2ZW50KTsKKyAgICB2b2lkIGRp
c3BhdGNoRmluYWxQcm9ncmVzc0V2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+KTsKIAogICAgIHZvaWQg
c3VzcGVuZCgpOwogICAgIHZvaWQgcmVzdW1lKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS94bWwvWE1MSHR0cFJlcXVlc3RVcGxvYWQuY3BwIGIvU291cmNlL1dlYkNvcmUveG1sL1hNTEh0
dHBSZXF1ZXN0VXBsb2FkLmNwcAppbmRleCAzZjFjYWZhZDI4OTg4ODNiNmQ0ZWJkOGE1ODdlYWRk
MzliZWM0MGQ3Li5kMjQ2NDQ1YmFkMzhjM2VkMDg3M2ZiMDRlNjJmYWYxNDNjMDU5YTY5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3RVcGxvYWQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdFVwbG9hZC5jcHAKQEAgLTYxLDQgKzYx
LDIxIEBAIEV2ZW50VGFyZ2V0RGF0YSogWE1MSHR0cFJlcXVlc3RVcGxvYWQ6OmVuc3VyZUV2ZW50
VGFyZ2V0RGF0YSgpCiAgICAgcmV0dXJuICZtX2V2ZW50VGFyZ2V0RGF0YTsKIH0KIAordm9pZCBY
TUxIdHRwUmVxdWVzdFVwbG9hZDo6ZGlzcGF0Y2hMb2FkU3RhcnRQcm9ncmVzc0V2ZW50KCkKK3sK
KyAgICBkaXNwYXRjaEV2ZW50KFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudDo6Y3JlYXRlKGV2
ZW50TmFtZXMoKS5sb2Fkc3RhcnRFdmVudCkpOworfQorCit2b2lkIFhNTEh0dHBSZXF1ZXN0VXBs
b2FkOjpkaXNwYXRjaFByb2dyZXNzRXZlbnQoYm9vbCBsZW5ndGhDb21wdXRhYmxlLCB1bnNpZ25l
ZCBsb25nIGxvbmcgbG9hZGVkLCB1bnNpZ25lZCBsb25nIGxvbmcgdG90YWwpCit7CisgICAgZGlz
cGF0Y2hFdmVudChYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVz
KCkucHJvZ3Jlc3NFdmVudCwgbGVuZ3RoQ29tcHV0YWJsZSwgbG9hZGVkLCB0b3RhbCkpOworfQor
Cit2b2lkIFhNTEh0dHBSZXF1ZXN0VXBsb2FkOjpkaXNwYXRjaEZpbmFsUHJvZ3Jlc3NFdmVudChQ
YXNzUmVmUHRyPEV2ZW50PiBldmVudCkKK3sKKyAgICBBU1NFUlQoZXZlbnQtPnR5cGUoKSA9PSBl
dmVudE5hbWVzKCkubG9hZEV2ZW50IHx8IGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmFi
b3J0RXZlbnQgfHwgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuZXJyb3JFdmVudCk7Cisg
ICAgRXZlbnRUYXJnZXQ6OmRpc3BhdGNoRXZlbnQoZXZlbnQpOworICAgIGRpc3BhdGNoRXZlbnQo
WE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmxvYWRlbmRF
dmVudCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3RVcGxvYWQuaCBiL1NvdXJjZS9XZWJDb3JlL3htbC9Y
TUxIdHRwUmVxdWVzdFVwbG9hZC5oCmluZGV4IDdmNDU4NjE3MTBkYjFjZDNkZGE2YzM0MTViNWI4
NTNlZGZkMzNmNGQuLmI5Y2JkODhhZGZiOTQ3ODhmNzhlNzEyNjJkMThkODUwNThjMmI2ZTIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdFVwbG9hZC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdFVwbG9hZC5oCkBAIC02MCw5ICs2MCwx
NCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRf
TElTVEVORVIoYWJvcnQpOwogICAgICAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVS
KGVycm9yKTsKICAgICAgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihsb2FkKTsK
KyAgICAgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihsb2FkZW5kKTsKICAgICAg
ICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihsb2Fkc3RhcnQpOwogICAgICAgICBE
RUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKHByb2dyZXNzKTsKIAorICAgICAgICB2b2lk
IGRpc3BhdGNoTG9hZFN0YXJ0UHJvZ3Jlc3NFdmVudCgpOworICAgICAgICB2b2lkIGRpc3BhdGNo
UHJvZ3Jlc3NFdmVudChib29sIGxlbmd0aENvbXB1dGFibGUsIHVuc2lnbmVkIGxvbmcgbG9uZyBs
b2FkZWQsIHVuc2lnbmVkIGxvbmcgbG9uZyB0b3RhbCk7CisgICAgICAgIHZvaWQgZGlzcGF0Y2hG
aW5hbFByb2dyZXNzRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4pOworCiAgICAgcHJpdmF0ZToKICAg
ICAgICAgWE1MSHR0cFJlcXVlc3RVcGxvYWQoWE1MSHR0cFJlcXVlc3QqKTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0VXBsb2FkLmlkbCBiL1NvdXJjZS9X
ZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdFVwbG9hZC5pZGwKaW5kZXggNzM0OTM5ZDg5ZDZhM2Fj
ZGYwNTlkOTMxZWQ2MjdhNmJlYTQ5OThkYS4uNWY5OGNiNzdmZWZlZDRiOWY2MjAzMDE3NjE5YjVi
YjNhNDIwYTYyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0
VXBsb2FkLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3RVcGxvYWQu
aWRsCkBAIC0zOCw2ICszOCw3IEBAIG1vZHVsZSB4bWwgewogICAgICAgICBhdHRyaWJ1dGUgRXZl
bnRMaXN0ZW5lciBvbmFib3J0OwogICAgICAgICBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbmVy
cm9yOwogICAgICAgICBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbmxvYWQ7CisgICAgICAgIGF0
dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9ubG9hZGVuZDsKICAgICAgICAgYXR0cmlidXRlIEV2ZW50
TGlzdGVuZXIgb25sb2Fkc3RhcnQ7CiAgICAgICAgIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9u
cHJvZ3Jlc3M7CiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRl
c3RzL0NoYW5nZUxvZwppbmRleCA0NzcwMGI5ZDIzODE2YWY1OTEwYzUxMzFmOGY0ZjRhMDU2ZDgw
ZWZkLi45ZDY0ZTY4NzZlOGQ2ZmM1NmI0Mjg1YzRiYTdiYWQ0ZmRjOTkzNjI2IDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMjYgQEAKKzIwMTEtMTItMDkgIEhhbnMgTXVsbGVyICA8aG11bGxlckBhZG9iZS5jb20+
CisKKyAgICAgICAgT25sb2FkZW5kIGV2ZW50IGlzIG5vdCBzdXBwb3J0ZWQgaW4gWE1MSHR0cFJl
cXVlc3QKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQw
OTUyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRk
ZWQgc3VwcG9ydCBmb3IgdGhlIGxvYWRlbmQgUHJvZ3Jlc0V2ZW50IHRvIFhNTEh0dHBSZXF1ZXN0
IGFuZCBYTUxIdHRwUmVxdWVzdFVwbG9hZC4KKyAgICAgICAgVGhlIG5ldyB0ZXN0cyB2ZXJpZnkg
dGhhdCBhIGxvYWRlbmQgcHJvZ3Jlc3MgZXZlbnQgaXMgZGlzcGF0Y2hlZCBhZnRlciBhIGxvYWQs
IGFib3J0LCAKKyAgICAgICAgb3IgZXJyb3IgcHJvZ3Jlc3MgZXZlbnQgZm9yIGJvdGggc3luY2hy
b25vdXMgYW5kIGFzeW5jaHJvbm91cyByZXF1ZXN0cy4KKworICAgICAgICAqIGh0dHAvdGVzdHMv
eG1saHR0cHJlcXVlc3Qvb25sb2FkZW5kLWV2ZW50LWFmdGVyLWFib3J0LWV4cGVjdGVkLnR4dDog
QWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9vbmxvYWRlbmQtZXZl
bnQtYWZ0ZXItYWJvcnQuaHRtbDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy94bWxodHRw
cmVxdWVzdC9vbmxvYWRlbmQtZXZlbnQtYWZ0ZXItZXJyb3ItZXhwZWN0ZWQudHh0OiBBZGRlZC4K
KyAgICAgICAgKiBodHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L29ubG9hZGVuZC1ldmVudC1hZnRl
ci1lcnJvci5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0
L29ubG9hZGVuZC1ldmVudC1hZnRlci1sb2FkLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAg
ICogaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9vbmxvYWRlbmQtZXZlbnQtYWZ0ZXItbG9hZC5o
dG1sOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3VwbG9hZC1v
bmxvYWRlbmQtZXZlbnQtYWZ0ZXItYWJvcnQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAg
KiBodHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3VwbG9hZC1vbmxvYWRlbmQtZXZlbnQtYWZ0ZXIt
YWJvcnQuaHRtbDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC91
cGxvYWQtb25sb2FkZW5kLWV2ZW50LWFmdGVyLWxvYWQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAg
ICAgICAgKiBodHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3VwbG9hZC1vbmxvYWRlbmQtZXZlbnQt
YWZ0ZXItbG9hZC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3htbGh0dHByZXF1
ZXN0L3htbGh0dHByZXF1ZXN0LXN5bmMtbm8tcHJvZ3Jlc3MtZXZlbnRzLWV4cGVjdGVkLnR4dDoK
KwogMjAxMS0xMi0wOCAgVG9ueSBDaGFuZyAgPHRvbnlAY2hyb21pdW0ub3JnPgogCiAgICAgICAg
IE1hcmsgdGVzdHMgYWRkZWQgaW4gcjEwMjM4OCBhcyBmYWlsaW5nIG9uIENocm9taXVtLiAgRml4
IHRoZSBjcm9zcyBwbGF0Zm9ybQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94
bWxodHRwcmVxdWVzdC9vbmxvYWRlbmQtZXZlbnQtYWZ0ZXItYWJvcnQtZXhwZWN0ZWQudHh0IGIv
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9vbmxvYWRlbmQtZXZlbnQtYWZ0
ZXItYWJvcnQtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZmMGU3MTVjMzJjZTEzOTNjOTY5ZTM3
YzY5ZjhmMGVhYmRjMmY5ZGEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL3htbGh0dHByZXF1ZXN0L29ubG9hZGVuZC1ldmVudC1hZnRlci1hYm9ydC1leHBlY3RlZC50
eHQKQEAgLTAsMCArMSw3IEBACitUZXN0IGNhc2UgZm9yIGJ1ZyA0MDk1MjogT25sb2FkZW5kIGV2
ZW50IGlzIG5vdCBzdXBwb3J0ZWQgaW4gWE1MSHR0cFJlcXVlc3QKKworVmVyaWZ5IHRoYXQgYSBs
b2FkZW5kIFByb2dyZXNzRXZlbnQgaXMgZGlzcGF0Y2hlZCBhZnRlciB0aGUgYWJvcnQgUHJvZ3Jl
c3NFdmVudCB3aGVuIGFuIGFzeW5jIHJlcXVlc3QgaXMgYWJvcnRlZC4KKworUEFTUyBzaG91bGQg
YXBwZWFyIGJlbG93OgorCitQQVNTCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L3htbGh0dHByZXF1ZXN0L29ubG9hZGVuZC1ldmVudC1hZnRlci1hYm9ydC5odG1sIGIvTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9vbmxvYWRlbmQtZXZlbnQtYWZ0ZXItYWJv
cnQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi41NzQ1NzYxNDg0ZTg3MzZmNzkyMjJmZDg1NWY5NTFmYmM2YTE4
NmE2Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVx
dWVzdC9vbmxvYWRlbmQtZXZlbnQtYWZ0ZXItYWJvcnQuaHRtbApAQCAtMCwwICsxLDY2IEBACis8
aHRtbD4KKzxoZWFkPgorPHRpdGxlPlRlc3QgY2FzZSBmb3IgYnVnIDQwOTUyPC90aXRsZT4KKzwv
aGVhZD4KKzxib2R5PgorPHA+VGVzdCBjYXNlIGZvciA8YSBocmVmPSJodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDA5NTIiPiBidWcgNDA5NTI8L2E+OiBPbmxvYWRlbmQg
ZXZlbnQgaXMgbm90IHN1cHBvcnRlZCBpbiBYTUxIdHRwUmVxdWVzdDwvcD4KKzxwPlZlcmlmeSB0
aGF0IGEgbG9hZGVuZCBQcm9ncmVzc0V2ZW50IGlzIGRpc3BhdGNoZWQgYWZ0ZXIgdGhlIGFib3J0
IFByb2dyZXNzRXZlbnQgd2hlbiBhbiBhc3luYyByZXF1ZXN0IGlzIGFib3J0ZWQuPC9wPgorPHA+
UEFTUyBzaG91bGQgYXBwZWFyIGJlbG93OjwvcD4KKzxwIGlkPWNvbnNvbGU+PC9wPgorPHNjcmlw
dCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoraWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxl
cikgeworICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICBsYXlvdXRU
ZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7Cit9CisKK2Z1bmN0aW9uIGxvZyhtZXNzYWdl
KQoreworICAgIHZhciBjb25zb2xlRWx0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnNv
bGUiKTsKKyAgICBjb25zb2xlRWx0LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2Rl
KG1lc3NhZ2UpKTsKK30KKwordmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOwordmFyIHJl
c3VsdHMgPSAiIjsKK3ZhciBleHBlY3RlZCA9ICIgbG9hZHN0YXJ0IHJlYWR5U3RhdGU9RE9ORSBh
Ym9ydCBsb2FkZW5kIjsKKworZnVuY3Rpb24gbG9nUHJvZ3Jlc3NFdmVudChlKSB7CisgICAgcmVz
dWx0cyArPSAiICIgKyBlLnR5cGU7Cit9CisKK2Z1bmN0aW9uIGxvZ1VuZXhwZWN0ZWRQcm9ncmVz
c0V2ZW50KGUpIHsKKyAgICByZXN1bHRzICs9ICIgW3VuZXhwZWN0ZWQgUHJvZ3Jlc3NFdmVudDog
IiArIGUudHlwZSArICJdIjsKKyAgICBjb21wbGV0ZVRlc3QoKTsgICAKK30KKworZnVuY3Rpb24g
Y29tcGxldGVUZXN0KCkKK3sKKyAgICBsb2cocmVzdWx0cyA9PSBleHBlY3RlZCA/ICJQQVNTIiA6
ICJGQUlMRUQgcmVzdWx0cyA6ICciICsgcmVzdWx0cyArICInLCBleHBlY3RlZCA6ICciICsgZXhw
ZWN0ZWQgKyAiJyIpOworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAg
ICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKK30KKworZnVuY3Rpb24gdGVz
dCgpCit7CisgICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKGUpIHsKKyAgICAg
ICAgaWYgKHhoci5yZWFkeVN0YXRlID09IHhoci5ET05FKQorICAgICAgICAgICAgcmVzdWx0cyAr
PSAiIHJlYWR5U3RhdGU9RE9ORSI7CisgICAgICAgIGVsc2UgaWYgKHhoci5yZWFkeVN0YXRlID4g
eGhyLk9QRU5FRCkKKyAgICAgICAgICAgIHhoci5hYm9ydCgpOworICAgIH0KKyAgICB4aHIub25s
b2Fkc3RhcnQgPSBsb2dQcm9ncmVzc0V2ZW50OworICAgIHhoci5vbmFib3J0ID0gbG9nUHJvZ3Jl
c3NFdmVudDsKKyAgICB4aHIub25lcnJvciA9IGxvZ1VuZXhwZWN0ZWRQcm9ncmVzc0V2ZW50Owor
ICAgIHhoci5vbmxvYWQgPSBsb2dVbmV4cGVjdGVkUHJvZ3Jlc3NFdmVudDsKKyAgICB4aHIub25s
b2FkZW5kID0gZnVuY3Rpb24oZSkgeworICAgICAgICBsb2dQcm9ncmVzc0V2ZW50KGUpOworICAg
ICAgICBjb21wbGV0ZVRlc3QoKTsKKyAgICB9CisKKyAgICB4aHIub3BlbigiR0VUIiwgInJlc291
cmNlcy9nZXQudHh0IiwgdHJ1ZSk7CisgICAgeGhyLnNlbmQoKTsKK30KKwordGVzdCgpOworCis8
L3NjcmlwdD4KKzwvYm9keT4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMveG1s
aHR0cHJlcXVlc3Qvb25sb2FkZW5kLWV2ZW50LWFmdGVyLWVycm9yLWV4cGVjdGVkLnR4dCBiL0xh
eW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3Qvb25sb2FkZW5kLWV2ZW50LWFmdGVy
LWVycm9yLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41YjY0YzFhZmQ0ZTA5ZjA0YmFiMTZhNjQx
YThjZWUyNzBlN2JiNzQ1Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0
cy94bWxodHRwcmVxdWVzdC9vbmxvYWRlbmQtZXZlbnQtYWZ0ZXItZXJyb3ItZXhwZWN0ZWQudHh0
CkBAIC0wLDAgKzEsNyBAQAorVGVzdCBjYXNlIGZvciBidWcgNDA5NTI6IE9ubG9hZGVuZCBldmVu
dCBpcyBub3Qgc3VwcG9ydGVkIGluIFhNTEh0dHBSZXF1ZXN0CisKK1ZlcmlmeSB0aGF0IGEgbG9h
ZGVuZCBQcm9ncmVzc0V2ZW50IGlzIGRpc3BhdGNoZWQgYWZ0ZXIgdGhlIGVycm9yIFByb2dyZXNz
RXZlbnQgd2hlbiBhbiBhc3luYyByZXF1ZXN0IGZhaWxzLgorCitQQVNTIHNob3VsZCBhcHBlYXIg
YmVsb3c6CisKK1BBU1MKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0
cHJlcXVlc3Qvb25sb2FkZW5kLWV2ZW50LWFmdGVyLWVycm9yLmh0bWwgYi9MYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L29ubG9hZGVuZC1ldmVudC1hZnRlci1lcnJvci5odG1s
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjEyNGZhOGJhMjczZDlmMDI0MjhjOTA0MTk2Yjk4YjZmN2E0N2E4ODcKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L29u
bG9hZGVuZC1ldmVudC1hZnRlci1lcnJvci5odG1sCkBAIC0wLDAgKzEsNjYgQEAKKzxodG1sPgor
PGhlYWQ+Cis8dGl0bGU+VGVzdCBjYXNlIGZvciBidWcgNDA5NTI8L3RpdGxlPgorPC9oZWFkPgor
PGJvZHk+Cis8cD4gVGVzdCBjYXNlIGZvciA8YSBocmVmPSJodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NDA5NTIiPiBidWcgNDA5NTI8L2E+OiBPbmxvYWRlbmQgZXZlbnQg
aXMgbm90IHN1cHBvcnRlZCBpbiBYTUxIdHRwUmVxdWVzdDwvcD4KKzxwPiBWZXJpZnkgdGhhdCBh
IGxvYWRlbmQgUHJvZ3Jlc3NFdmVudCBpcyBkaXNwYXRjaGVkIGFmdGVyIHRoZSBlcnJvciBQcm9n
cmVzc0V2ZW50IHdoZW4gYW4gYXN5bmMgcmVxdWVzdCBmYWlscy48L3A+Cis8cD5QQVNTIHNob3Vs
ZCBhcHBlYXIgYmVsb3c6PC9wPgorPHAgaWQ9Y29uc29sZT48L3A+Cis8c2NyaXB0IHR5cGU9InRl
eHQvamF2YXNjcmlwdCI+CitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAg
bGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgIGxheW91dFRlc3RDb250cm9s
bGVyLndhaXRVbnRpbERvbmUoKTsKK30KKworZnVuY3Rpb24gbG9nKG1lc3NhZ2UpCit7CisgICAg
dmFyIGNvbnNvbGVFbHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29uc29sZSIpOworICAg
IGNvbnNvbGVFbHQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobWVzc2FnZSkp
OworfQorCit2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7Cit2YXIgcmVzdWx0cyA9ICIi
OwordmFyIGV4cGVjdGVkID0gIiBsb2Fkc3RhcnQgcmVhZHlTdGF0ZT1ET05FIGVycm9yIGxvYWRl
bmQiOworCisKK2Z1bmN0aW9uIGxvZ1Byb2dyZXNzRXZlbnQoZSkgeworICAgIHJlc3VsdHMgKz0g
IiAiICsgZS50eXBlOworfQorCitmdW5jdGlvbiBsb2dVbmV4cGVjdGVkUHJvZ3Jlc3NFdmVudChl
KSB7CisgICAgcmVzdWx0cyArPSAiIFt1bmV4cGVjdGVkIFByb2dyZXNzRXZlbnQ6ICIgKyBlLnR5
cGUgKyAiXSI7CisgICAgY29tcGxldGVUZXN0KCk7ICAgCit9CisKK2Z1bmN0aW9uIGNvbXBsZXRl
VGVzdCgpCit7CisgICAgbG9nKHJlc3VsdHMgPT0gZXhwZWN0ZWQgPyAiUEFTUyIgOiAiRkFJTEVE
IHJlc3VsdHMgOiAnIiArIHJlc3VsdHMgKyAiJywgZXhwZWN0ZWQgOiAnIiArIGV4cGVjdGVkICsg
IiciKTsKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICBsYXlv
dXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cit9CisKK2Z1bmN0aW9uIHRlc3QoKQorewor
ICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbihlKSB7CisgICAgICAgIGlmICh4
aHIucmVhZHlTdGF0ZSA9PSB4aHIuRE9ORSkKKyAgICAgICAgICAgIHJlc3VsdHMgKz0gIiByZWFk
eVN0YXRlPURPTkUiOworICAgIH0KKyAgICB4aHIub25sb2Fkc3RhcnQgPSBsb2dQcm9ncmVzc0V2
ZW50OworICAgIHhoci5vbmFib3J0ID0gbG9nVW5leHBlY3RlZFByb2dyZXNzRXZlbnQ7CisgICAg
eGhyLm9uZXJyb3IgPSBsb2dQcm9ncmVzc0V2ZW50OworICAgIHhoci5vbmxvYWQgPSBsb2dVbmV4
cGVjdGVkUHJvZ3Jlc3NFdmVudDsKKyAgICB4aHIub25sb2FkZW5kID0gZnVuY3Rpb24oZSkgewor
ICAgICAgICBsb2dQcm9ncmVzc0V2ZW50KGUpOworICAgICAgICBjb21wbGV0ZVRlc3QoKTsKKyAg
ICB9CisKKyAgICB4aHIub3BlbigiR0VUIiwgInJlc291cmNlcy9pbmZpbml0ZS1sb29wLnBocCIs
IHRydWUpOworICAgIHhoci5zZW5kKCk7Cit9CisKK3Rlc3QoKTsgCisKKzwvc2NyaXB0PgorPC9i
b2R5PgorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0
L29ubG9hZGVuZC1ldmVudC1hZnRlci1sb2FkLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2h0
dHAvdGVzdHMveG1saHR0cHJlcXVlc3Qvb25sb2FkZW5kLWV2ZW50LWFmdGVyLWxvYWQtZXhwZWN0
ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjg5OTc2YzAxMGY1OTA0NjdjZDg5ZTliMmNhNWU0MjZkYjQ0MjBk
NDcKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1
ZXN0L29ubG9hZGVuZC1ldmVudC1hZnRlci1sb2FkLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDcg
QEAKK1Rlc3QgY2FzZSBmb3IgYnVnIDQwOTUyOiBPbmxvYWRlbmQgZXZlbnQgaXMgbm90IHN1cHBv
cnRlZCBpbiBYTUxIdHRwUmVxdWVzdAorCitWZXJpZnkgdGhhdCBhIGxvYWRlbmQgUHJvZ3Jlc3NF
dmVudCBpcyBkaXNwYXRjaGVkIGFmdGVyIHRoZSBsb2FkIFByb2dyZXNzRXZlbnQgd2hlbiBhbiBh
c3luYyByZXF1ZXN0IGNvbXBsZXRlcyBub3JtYWxseS4KKworUEFTUyBzaG91bGQgYXBwZWFyIGJl
bG93OgorCitQQVNTCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHBy
ZXF1ZXN0L29ubG9hZGVuZC1ldmVudC1hZnRlci1sb2FkLmh0bWwgYi9MYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL3htbGh0dHByZXF1ZXN0L29ubG9hZGVuZC1ldmVudC1hZnRlci1sb2FkLmh0bWwKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMzY1NmI4ZDIzNmRjYzhiZjM1YzNlZjA2MTJjZjAxNzBiN2YyYzRiZAotLS0gL2Rl
di9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3Qvb25sb2Fk
ZW5kLWV2ZW50LWFmdGVyLWxvYWQuaHRtbApAQCAtMCwwICsxLDY0IEBACis8SFRNTD4KKzxoZWFk
PgorPHRpdGxlPlRlc3QgY2FzZSBmb3IgYnVnIDQwOTUyPC90aXRsZT4KKzwvaGVhZD4KKzxib2R5
PgorPHA+IFRlc3QgY2FzZSBmb3IgPGEgaHJlZj0iaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTQwOTUyIj4gYnVnIDQwOTUyPC9hPjogT25sb2FkZW5kIGV2ZW50IGlzIG5v
dCBzdXBwb3J0ZWQgaW4gWE1MSHR0cFJlcXVlc3Q8L3A+Cis8cD4gVmVyaWZ5IHRoYXQgYSBsb2Fk
ZW5kIFByb2dyZXNzRXZlbnQgaXMgZGlzcGF0Y2hlZCBhZnRlciB0aGUgbG9hZCBQcm9ncmVzc0V2
ZW50IHdoZW4gYW4gYXN5bmMgcmVxdWVzdCBjb21wbGV0ZXMgbm9ybWFsbHkuPC9wPgorPHA+UEFT
UyBzaG91bGQgYXBwZWFyIGJlbG93OjwvcD4KKzxwIGlkPWNvbnNvbGU+PC9wPgorPHNjcmlwdCB0
eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoraWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikg
eworICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICBsYXlvdXRUZXN0
Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7Cit9CisKK2Z1bmN0aW9uIGxvZyhtZXNzYWdlKQor
eworICAgIHZhciBjb25zb2xlRWx0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnNvbGUi
KTsKKyAgICBjb25zb2xlRWx0LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG1l
c3NhZ2UpKTsKK30KKwordmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOwordmFyIHJlc3Vs
dHMgPSAiIjsKK3ZhciBleHBlY3RlZCA9ICIgbG9hZHN0YXJ0IHJlYWR5U3RhdGU9RE9ORSBsb2Fk
IGxvYWRlbmQiOworCitmdW5jdGlvbiBsb2dQcm9ncmVzc0V2ZW50KGUpIHsKKyAgICByZXN1bHRz
ICs9ICIgIiArIGUudHlwZTsKK30KKworZnVuY3Rpb24gbG9nVW5leHBlY3RlZFByb2dyZXNzRXZl
bnQoZSkgeworICAgIHJlc3VsdHMgKz0gIiBbdW5leHBlY3RlZCBQcm9ncmVzc0V2ZW50OiAiICsg
ZS50eXBlICsgIl0iOworICAgIGNvbXBsZXRlVGVzdCgpOyAgIAorfQorCitmdW5jdGlvbiBjb21w
bGV0ZVRlc3QoKQoreworICAgIGxvZyhyZXN1bHRzID09IGV4cGVjdGVkID8gIlBBU1MiIDogIkZB
SUxFRCByZXN1bHRzIDogJyIgKyByZXN1bHRzICsgIicsIGV4cGVjdGVkIDogJyIgKyBleHBlY3Rl
ZCArICInIik7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAg
bGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworfQorCitmdW5jdGlvbiB0ZXN0KCkg
Cit7CisgICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKGUpIHsKKyAgICAgICAg
aWYgKHhoci5yZWFkeVN0YXRlID09IHhoci5ET05FKQorICAgICAgICAgICAgcmVzdWx0cyArPSAi
IHJlYWR5U3RhdGU9RE9ORSI7CisgICAgfQorICAgIHhoci5vbmxvYWRzdGFydCA9IGxvZ1Byb2dy
ZXNzRXZlbnQ7CisgICAgeGhyLm9uYWJvcnQgPSBsb2dVbmV4cGVjdGVkUHJvZ3Jlc3NFdmVudDsK
KyAgICB4aHIub25lcnJvciA9IGxvZ1VuZXhwZWN0ZWRQcm9ncmVzc0V2ZW50OworICAgIHhoci5v
bmxvYWQgPSBsb2dQcm9ncmVzc0V2ZW50OworICAgIHhoci5vbmxvYWRlbmQgPSBmdW5jdGlvbihl
KSB7CisgICAgICAgIGxvZ1Byb2dyZXNzRXZlbnQoZSk7CisgICAgICAgIGNvbXBsZXRlVGVzdCgp
OworICAgIH0KKworICAgIHhoci5vcGVuKCJHRVQiLCAicmVzb3VyY2VzL2dldC50eHQiLCB0cnVl
KTsgCisgICAgeGhyLnNlbmQoKTsKK30KKwordGVzdCgpOyAKKworPC9zY3JpcHQ+Cis8L2JvZHk+
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L29ubG9h
ZGVuZC1ldmVudC1hZnRlci1zeW5jLXJlcXVlc3RzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3Rz
L2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3Qvb25sb2FkZW5kLWV2ZW50LWFmdGVyLXN5bmMtcmVx
dWVzdHMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZjNTQ2N2MwYTE3OWU5ZTcxMmFlMGU2MzJk
YTdlNDEwZDhlZGU5MzQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L3htbGh0dHByZXF1ZXN0L29ubG9hZGVuZC1ldmVudC1hZnRlci1zeW5jLXJlcXVlc3RzLWV4cGVj
dGVkLnR4dApAQCAtMCwwICsxLDcgQEAKK1Rlc3QgY2FzZSBmb3IgYnVnIDQwOTUyOiBPbmxvYWRl
bmQgZXZlbnQgaXMgbm90IHN1cHBvcnRlZCBpbiBYTUxIdHRwUmVxdWVzdAorCitWZXJpZnkgdGhh
dCBhIGxvYWRlbmQgUHJvZ3Jlc3NFdmVudCBpcyBkaXNwYXRjaGVkIGFmdGVyIGEgbG9hZCwgZXJy
b3IsIG9yIGFib3J0IFByb2dyZXNzRXZlbnQgd2hlbiBhIHN5bmNocm9ub3VzIHJlcXVlc3QgY29t
cGxldGVzIG5vcm1hbGx5LCBmYWlscywgb3IgaXMgYWJvcnRlZCByZXNwZWN0aXZlbHkuCisKK1BB
U1MgUEFTUyBQQVNTIHNob3VsZCBhcHBlYXIgYmVsb3c6CisKK1BBU1MgUEFTUyBQQVNTCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L29ubG9hZGVuZC1l
dmVudC1hZnRlci1zeW5jLXJlcXVlc3RzLmh0bWwgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3ht
bGh0dHByZXF1ZXN0L29ubG9hZGVuZC1ldmVudC1hZnRlci1zeW5jLXJlcXVlc3RzLmh0bWwKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNzA2ZDg4MDdjMGFhODZlMTcxYWY4MGNhMzFkZGM5Y2RmNTI3ZGY1NgotLS0gL2Rl
di9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3Qvb25sb2Fk
ZW5kLWV2ZW50LWFmdGVyLXN5bmMtcmVxdWVzdHMuaHRtbApAQCAtMCwwICsxLDExMCBAQAorPEhU
TUw+Cis8aGVhZD4KKzx0aXRsZT5UZXN0IGNhc2UgZm9yIGJ1ZyA0MDk1MjwvdGl0bGU+Cis8L2hl
YWQ+Cis8Ym9keT4KKzxwPiBUZXN0IGNhc2UgZm9yIDxhIGhyZWY9Imh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MDk1MiI+IGJ1ZyA0MDk1MjwvYT46IE9ubG9hZGVuZCBl
dmVudCBpcyBub3Qgc3VwcG9ydGVkIGluIFhNTEh0dHBSZXF1ZXN0PC9wPgorPHA+IFZlcmlmeSB0
aGF0IGEgbG9hZGVuZCBQcm9ncmVzc0V2ZW50IGlzIGRpc3BhdGNoZWQgYWZ0ZXIgYSBsb2FkLCBl
cnJvciwgb3IgYWJvcnQgUHJvZ3Jlc3NFdmVudCB3aGVuIGEgc3luY2hyb25vdXMgcmVxdWVzdCBj
b21wbGV0ZXMgbm9ybWFsbHksIGZhaWxzLCBvciBpcyBhYm9ydGVkIHJlc3BlY3RpdmVseS48L3A+
Cis8cD5QQVNTIFBBU1MgUEFTUyBzaG91bGQgYXBwZWFyIGJlbG93OjwvcD4KKzxwIGlkPWNvbnNv
bGU+PC9wPgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoraWYgKHdpbmRvdy5sYXlv
dXRUZXN0Q29udHJvbGxlcikgeworICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQo
KTsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7Cit9CisKK2Z1bmN0
aW9uIGxvZyhtZXNzYWdlKQoreworICAgIHZhciBjb25zb2xlRWx0ID0gZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoImNvbnNvbGUiKTsKKyAgICBjb25zb2xlRWx0LmFwcGVuZENoaWxkKGRvY3VtZW50
LmNyZWF0ZVRleHROb2RlKG1lc3NhZ2UgKyAiICIpKTsKK30KKwordmFyIHhociA9IG5ldyBYTUxI
dHRwUmVxdWVzdCgpOwordmFyIHJlc3VsdHM7CisKK2Z1bmN0aW9uIGxvZ1Byb2dyZXNzRXZlbnQo
ZSkgeworICAgIHJlc3VsdHMgKz0gIiAiICsgZS50eXBlOworfQorCitmdW5jdGlvbiBsb2dVbmV4
cGVjdGVkUHJvZ3Jlc3NFdmVudChlKSB7CisgICAgcmVzdWx0cyArPSAiIFt1bmV4cGVjdGVkIFBy
b2dyZXNzRXZlbnQ6ICIgKyBlLnR5cGUgKyAiXSI7CisgICAgY29tcGxldGVUZXN0KCk7ICAgCit9
CisKK2Z1bmN0aW9uIGNvbXBsZXRlVGVzdChleHBlY3RlZCkKK3sKKyAgICBsb2cocmVzdWx0cyA9
PSBleHBlY3RlZCA/ICJQQVNTIiA6ICJGQUlMRUQgcmVzdWx0cyA6ICciICsgcmVzdWx0cyArICIn
LCBleHBlY3RlZCA6ICciICsgZXhwZWN0ZWQgKyAiJyIpOworICAgIGlmICh3aW5kb3cubGF5b3V0
VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUo
KTsKK30KKworZnVuY3Rpb24gdGVzdE5vcm1hbCgpCit7CisgICAgcmVzdWx0cyA9ICIiOworCisg
ICAgeGhyLm9ubG9hZHN0YXJ0ID0gbG9nVW5leHBlY3RlZFByb2dyZXNzRXZlbnQ7CisgICAgeGhy
Lm9uYWJvcnQgPSBsb2dVbmV4cGVjdGVkUHJvZ3Jlc3NFdmVudDsKKyAgICB4aHIub25lcnJvciA9
IGxvZ1VuZXhwZWN0ZWRQcm9ncmVzc0V2ZW50OworICAgIHhoci5vbmxvYWQgPSBsb2dQcm9ncmVz
c0V2ZW50OworICAgIHhoci5vbmxvYWRlbmQgPSBsb2dQcm9ncmVzc0V2ZW50OworCisgICAgeGhy
Lm9wZW4oIkdFVCIsICJyZXNvdXJjZXMvZ2V0LnR4dCIsIGZhbHNlKTsgCisgICAgeGhyLnNlbmQo
KTsKKyAgICAKKyAgICBjb21wbGV0ZVRlc3QoIiBsb2FkIGxvYWRlbmQiKTsKK30KKworZnVuY3Rp
b24gdGVzdEVycm9yKCkKK3sKKyAgICByZXN1bHRzID0gIiI7CisKKyAgICB4aHIub25sb2Fkc3Rh
cnQgPSBsb2dVbmV4cGVjdGVkUHJvZ3Jlc3NFdmVudDsKKyAgICB4aHIub25hYm9ydCA9IGxvZ1Vu
ZXhwZWN0ZWRQcm9ncmVzc0V2ZW50OworICAgIHhoci5vbmVycm9yID0gbG9nUHJvZ3Jlc3NFdmVu
dDsKKyAgICB4aHIub25sb2FkID0gbG9nVW5leHBlY3RlZFByb2dyZXNzRXZlbnQ7CisgICAgeGhy
Lm9ubG9hZGVuZCA9IGxvZ1Byb2dyZXNzRXZlbnQ7CisKKyAgICB4aHIub3BlbigiR0VUIiwgInJl
c291cmNlcy9pbmZpbml0ZS1sb29wLnBocCIsIGZhbHNlKTsgCisgICAgdHJ5IHsKKyAgICAgICAg
eGhyLnNlbmQoKTsKKyAgICB9CisgICAgY2F0Y2ggKGUpIHsKKyAgICAgICAgaWYgKGUuY29kZSAh
PSBlLk5FVFdPUktfRVJSKQorICAgICAgICAgICAgcmVzdWx0cyArPSAiICIgKyBlOworICAgIH0K
KyAgICAKKyAgICBjb21wbGV0ZVRlc3QoIiBlcnJvciBsb2FkZW5kIik7Cit9CisKK2Z1bmN0aW9u
IHRlc3RBYm9ydCgpCit7CisgICAgcmVzdWx0cyA9ICIiOworCisgICAgeGhyLm9ubG9hZHN0YXJ0
ID0gbG9nVW5leHBlY3RlZFByb2dyZXNzRXZlbnQ7CisgICAgeGhyLm9uYWJvcnQgPSBsb2dQcm9n
cmVzc0V2ZW50OworICAgIHhoci5vbmVycm9yID0gbG9nVW5leHBlY3RlZFByb2dyZXNzRXZlbnQ7
CisgICAgeGhyLm9ubG9hZCA9IGxvZ1VuZXhwZWN0ZWRQcm9ncmVzc0V2ZW50OworICAgIHhoci5v
bmxvYWRlbmQgPSBsb2dQcm9ncmVzc0V2ZW50OworICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2Ug
PSBmdW5jdGlvbihlKSB7CisgICAgICAgIGlmICh4aHIucmVhZHlTdGF0ZSA9PSB4aHIuRE9ORSkK
KyAgICAgICAgICAgIHhoci5hYm9ydCgpOworICAgIH0KKworICAgIHhoci5vcGVuKCJHRVQiLCAi
cmVzb3VyY2VzL2dldC50eHQiLCBmYWxzZSk7IAorICAgIHRyeSB7CisgICAgICAgIHhoci5zZW5k
KCk7CisgICAgfQorICAgIGNhdGNoIChlKSB7CisgICAgICAgIGlmIChlLmNvZGUgIT0gZS5ORVRX
T1JLX0VSUikKKyAgICAgICAgICAgIHJlc3VsdHMgKz0gIiAiICsgZTsKKyAgICB9CisgICAgCisg
ICAgY29tcGxldGVUZXN0KCIgYWJvcnQgbG9hZGVuZCIpOworfQorCit0ZXN0Tm9ybWFsKCk7Cit0
ZXN0RXJyb3IoKTsKK3Rlc3RBYm9ydCgpOworCis8L3NjcmlwdD4KKzwvYm9keT4KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvdXBsb2FkLW9ubG9hZGVu
ZC1ldmVudC1hZnRlci1hYm9ydC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L3htbGh0dHByZXF1ZXN0L3VwbG9hZC1vbmxvYWRlbmQtZXZlbnQtYWZ0ZXItYWJvcnQtZXhwZWN0
ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjE2NWUxZDc1MTQzYzE5ZDA5MGMxMTkyMTk5YTcxYjI4MTk3ZjVm
OGQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1
ZXN0L3VwbG9hZC1vbmxvYWRlbmQtZXZlbnQtYWZ0ZXItYWJvcnQtZXhwZWN0ZWQudHh0CkBAIC0w
LDAgKzEsNyBAQAorVGVzdCBjYXNlIGZvciBidWcgNDA5NTI6IE9ubG9hZGVuZCBldmVudCBpcyBu
b3Qgc3VwcG9ydGVkIGluIFhNTEh0dHBSZXF1ZXN0CisKK1ZlcmlmeSB0aGF0IGEgbG9hZGVuZCBQ
cm9ncmVzc0V2ZW50IGlzIGRpc3BhdGNoZWQgYWZ0ZXIgdGhlIGFib3J0IFByb2dyZXNzRXZlbnQg
d2hlbiBhbiBhc3luYyB1cGxvYWQgcmVxdWVzdCBpcyBhYm9ydGVkLgorCitQQVNTIHNob3VsZCBh
cHBlYXIgYmVsb3c6CisKK1BBU1MKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMv
eG1saHR0cHJlcXVlc3QvdXBsb2FkLW9ubG9hZGVuZC1ldmVudC1hZnRlci1hYm9ydC5odG1sIGIv
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC91cGxvYWQtb25sb2FkZW5kLWV2
ZW50LWFmdGVyLWFib3J0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODk0ZDViNGVlMzc3OWY4NjkzNmVmMjE3
YmJhNDY4MDhhZDQ3NWI5MAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVz
dHMveG1saHR0cHJlcXVlc3QvdXBsb2FkLW9ubG9hZGVuZC1ldmVudC1hZnRlci1hYm9ydC5odG1s
CkBAIC0wLDAgKzEsNjQgQEAKKzxodG1sPgorPGhlYWQ+Cis8dGl0bGU+VGVzdCBjYXNlIGZvciBi
dWcgNDA5NTI8L3RpdGxlPgorPC9oZWFkPgorPGJvZHk+Cis8cD4gVGVzdCBjYXNlIGZvciA8YSBo
cmVmPSJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDA5NTIiPiBidWcg
NDA5NTI8L2E+OiBPbmxvYWRlbmQgZXZlbnQgaXMgbm90IHN1cHBvcnRlZCBpbiBYTUxIdHRwUmVx
dWVzdDwvcD4KKzxwPiBWZXJpZnkgdGhhdCBhIGxvYWRlbmQgUHJvZ3Jlc3NFdmVudCBpcyBkaXNw
YXRjaGVkIGFmdGVyIHRoZSBhYm9ydCBQcm9ncmVzc0V2ZW50IHdoZW4gYW4gYXN5bmMgdXBsb2Fk
IHJlcXVlc3QgaXMgYWJvcnRlZC48L3A+Cis8cD5QQVNTIHNob3VsZCBhcHBlYXIgYmVsb3c6PC9w
PgorPHAgaWQ9Y29uc29sZT48L3A+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Citp
ZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgbGF5b3V0VGVzdENvbnRyb2xs
ZXIuZHVtcEFzVGV4dCgpOworICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUo
KTsKK30KKworZnVuY3Rpb24gbG9nKG1lc3NhZ2UpCit7CisgICAgdmFyIGNvbnNvbGVFbHQgPSBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29uc29sZSIpOworICAgIGNvbnNvbGVFbHQuYXBwZW5k
Q2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobWVzc2FnZSkpOworfQorCit2YXIgeGhyID0g
bmV3IFhNTEh0dHBSZXF1ZXN0KCk7Cit2YXIgcmVzdWx0cyA9ICIiOwordmFyIGV4cGVjdGVkID0g
IiBwcm9ncmVzcyBhYm9ydCBsb2FkZW5kIjsKKworZnVuY3Rpb24gbG9nUHJvZ3Jlc3NFdmVudChl
KSB7CisgICAgcmVzdWx0cyArPSAiICIgKyBlLnR5cGU7Cit9CisKK2Z1bmN0aW9uIGxvZ1VuZXhw
ZWN0ZWRQcm9ncmVzc0V2ZW50KGUpIHsKKyAgICByZXN1bHRzICs9ICIgW3VuZXhwZWN0ZWQgUHJv
Z3Jlc3NFdmVudDogIiArIGUudHlwZSArICJdIjsKKyAgICBjb21wbGV0ZVRlc3QoKTsgICAKK30K
KworZnVuY3Rpb24gY29tcGxldGVUZXN0KCkKK3sKKyAgICBsb2cocmVzdWx0cyA9PSBleHBlY3Rl
ZCA/ICJQQVNTIiA6ICJGQUlMRUQgcmVzdWx0cyA6ICciICsgcmVzdWx0cyArICInLCBleHBlY3Rl
ZCA6ICciICsgZXhwZWN0ZWQgKyAiJyIpOworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRy
b2xsZXIpCisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKK30KKwor
ZnVuY3Rpb24gdGVzdCgpCit7CisgICAgeGhyLnVwbG9hZC5vbnByb2dyZXNzID0gZnVuY3Rpb24o
ZSkgeworICAgICAgICBsb2dQcm9ncmVzc0V2ZW50KGUpOworICAgICAgICB4aHIuYWJvcnQoKTsK
KyAgICB9CisgICAgeGhyLnVwbG9hZC5vbmFib3J0ID0gbG9nUHJvZ3Jlc3NFdmVudDsKKyAgICB4
aHIudXBsb2FkLm9uZXJyb3IgPSBsb2dVbmV4cGVjdGVkUHJvZ3Jlc3NFdmVudDsKKyAgICB4aHIu
dXBsb2FkLm9ubG9hZCA9IGxvZ1VuZXhwZWN0ZWRQcm9ncmVzc0V2ZW50OworICAgIHhoci51cGxv
YWQub25sb2FkZW5kID0gZnVuY3Rpb24oZSkgeworICAgICAgICBsb2dQcm9ncmVzc0V2ZW50KGUp
OworICAgICAgICBjb21wbGV0ZVRlc3QoKTsKKyAgICB9CisKKyAgICB4aHIub3BlbigiUE9TVCIs
ICJyZXNvdXJjZXMvcG9zdC1lY2hvLmNnaSIsIHRydWUpOworICAgIHhoci5zZW5kKCJkYXRhIik7
Cit9CisKK3Rlc3QoKTsKKworPC9zY3JpcHQ+Cis8L2JvZHk+CisKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvdXBsb2FkLW9ubG9hZGVuZC1ldmVudC1h
ZnRlci1sb2FkLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJl
cXVlc3QvdXBsb2FkLW9ubG9hZGVuZC1ldmVudC1hZnRlci1sb2FkLWV4cGVjdGVkLnR4dApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi45NjIyMzg2NTVlMjI1NWYwMWU4OTE1MTdhMjQ0MmQ1YmFkZmYzYzRjCi0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC91cGxvYWQt
b25sb2FkZW5kLWV2ZW50LWFmdGVyLWxvYWQtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNyBAQAor
VGVzdCBjYXNlIGZvciBidWcgNDA5NTI6IE9ubG9hZGVuZCBldmVudCBpcyBub3Qgc3VwcG9ydGVk
IGluIFhNTEh0dHBSZXF1ZXN0CisKK1ZlcmlmeSB0aGF0IGEgbG9hZGVuZCBQcm9ncmVzc0V2ZW50
IGlzIGRpc3BhdGNoZWQgYWZ0ZXIgdGhlIGxvYWQgUHJvZ3Jlc3NFdmVudCB3aGVuIGFuIGFzeW5j
IHVwbG9hZCByZXF1ZXN0IGNvbXBsZXRlcyBub3JtYWxseS4KKworUEFTUyBzaG91bGQgYXBwZWFy
IGJlbG93OgorCitQQVNTCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0
dHByZXF1ZXN0L3VwbG9hZC1vbmxvYWRlbmQtZXZlbnQtYWZ0ZXItbG9hZC5odG1sIGIvTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC91cGxvYWQtb25sb2FkZW5kLWV2ZW50LWFm
dGVyLWxvYWQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43ZmM4OWNhOWVhOTkxOWJhMjI4ZTBkYjk3Y2Y0NmZk
ZjZiY2M1NWEzCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxo
dHRwcmVxdWVzdC91cGxvYWQtb25sb2FkZW5kLWV2ZW50LWFmdGVyLWxvYWQuaHRtbApAQCAtMCww
ICsxLDYxIEBACis8aHRtbD4KKzxoZWFkPgorPHRpdGxlPlRlc3QgY2FzZSBmb3IgYnVnIDQwOTUy
PC90aXRsZT4KKzwvaGVhZD4KKzxib2R5PgorPHA+IFRlc3QgY2FzZSBmb3IgPGEgaHJlZj0iaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQwOTUyIj4gYnVnIDQwOTUyPC9h
PjogT25sb2FkZW5kIGV2ZW50IGlzIG5vdCBzdXBwb3J0ZWQgaW4gWE1MSHR0cFJlcXVlc3Q8L3A+
Cis8cD4gVmVyaWZ5IHRoYXQgYSBsb2FkZW5kIFByb2dyZXNzRXZlbnQgaXMgZGlzcGF0Y2hlZCBh
ZnRlciB0aGUgbG9hZCBQcm9ncmVzc0V2ZW50IHdoZW4gYW4gYXN5bmMgdXBsb2FkIHJlcXVlc3Qg
Y29tcGxldGVzIG5vcm1hbGx5LjwvcD4KKzxwPlBBU1Mgc2hvdWxkIGFwcGVhciBiZWxvdzo8L3A+
Cis8cCBpZD1jb25zb2xlPjwvcD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KK2lm
ICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxl
ci5kdW1wQXNUZXh0KCk7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgp
OworfQorCitmdW5jdGlvbiBsb2cobWVzc2FnZSkKK3sKKyAgICB2YXIgY29uc29sZUVsdCA9IGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb25zb2xlIik7CisgICAgY29uc29sZUVsdC5hcHBlbmRD
aGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShtZXNzYWdlKSk7Cit9CisKK3ZhciB4aHIgPSBu
ZXcgWE1MSHR0cFJlcXVlc3QoKTsKK3ZhciByZXN1bHRzID0gIiI7Cit2YXIgZXhwZWN0ZWQgPSAi
IGxvYWRzdGFydCBsb2FkIGxvYWRlbmQiOworCitmdW5jdGlvbiBsb2dQcm9ncmVzc0V2ZW50KGUp
IHsKKyAgICByZXN1bHRzICs9ICIgIiArIGUudHlwZTsKK30KKworZnVuY3Rpb24gbG9nVW5leHBl
Y3RlZFByb2dyZXNzRXZlbnQoZSkgeworICAgIHJlc3VsdHMgKz0gIiBbdW5leHBlY3RlZCBQcm9n
cmVzc0V2ZW50OiAiICsgZS50eXBlICsgIl0iOworICAgIGNvbXBsZXRlVGVzdCgpOyAgIAorfQor
CitmdW5jdGlvbiBjb21wbGV0ZVRlc3QoKQoreworICAgIGxvZyhyZXN1bHRzID09IGV4cGVjdGVk
ID8gIlBBU1MiIDogIkZBSUxFRCByZXN1bHRzIDogJyIgKyByZXN1bHRzICsgIicsIGV4cGVjdGVk
IDogJyIgKyBleHBlY3RlZCArICInIik7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJv
bGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworfQorCitm
dW5jdGlvbiB0ZXN0KCkKK3sKKyAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24o
ZSkgeworICAgICAgICBpZiAoeGhyLnJlYWR5U3RhdGUgPT0geGhyLkRPTkUpCisgICAgICAgICAg
ICBjb21wbGV0ZVRlc3QoKTsKKyAgICB9CisgICAgeGhyLnVwbG9hZC5vbmxvYWRzdGFydCA9IGxv
Z1Byb2dyZXNzRXZlbnQ7CisgICAgeGhyLnVwbG9hZC5vbmFib3J0ID0gbG9nVW5leHBlY3RlZFBy
b2dyZXNzRXZlbnQ7CisgICAgeGhyLnVwbG9hZC5vbmVycm9yID0gbG9nVW5leHBlY3RlZFByb2dy
ZXNzRXZlbnQ7CisgICAgeGhyLnVwbG9hZC5vbmxvYWQgPSBsb2dQcm9ncmVzc0V2ZW50OworICAg
IHhoci51cGxvYWQub25sb2FkZW5kID0gbG9nUHJvZ3Jlc3NFdmVudDsKKworICAgIHhoci5vcGVu
KCJQT1NUIiwgInJlc291cmNlcy9wb3N0LWVjaG8uY2dpIiwgdHJ1ZSk7CisgICAgeGhyLnNlbmQo
ImRhdGEiKTsKK30KKwordGVzdCgpOworCis8L3NjcmlwdD4KKzwvYm9keT4KZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvdXBsb2FkLW9ubG9hZGVuZC1l
dmVudC1hZnRlci1zeW5jLXJlcXVlc3RzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2h0dHAv
dGVzdHMveG1saHR0cHJlcXVlc3QvdXBsb2FkLW9ubG9hZGVuZC1ldmVudC1hZnRlci1zeW5jLXJl
cXVlc3RzLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xOGM4NjljYWM0ZmZmYzYyYmJhM2U1YWJj
M2I4NDk4OWU3YThhYTliCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0
cy94bWxodHRwcmVxdWVzdC91cGxvYWQtb25sb2FkZW5kLWV2ZW50LWFmdGVyLXN5bmMtcmVxdWVz
dHMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNyBAQAorVGVzdCBjYXNlIGZvciBidWcgNDA5NTI6
IE9ubG9hZGVuZCBldmVudCBpcyBub3Qgc3VwcG9ydGVkIGluIFhNTEh0dHBSZXF1ZXN0CisKK1Zl
cmlmeSB0aGF0IGEgbG9hZGVuZCBQcm9ncmVzc0V2ZW50IGlzIGRpc3BhdGNoZWQgYWZ0ZXIgdGhl
IGxvYWQgb3IgYWJvcnQgUHJvZ3Jlc3NFdmVudCB3aGVuIGEgc3luY2hyb25vdXMgdXBsb2FkIHJl
cXVlc3QgY29tcGxldGVzIG5vcm1hbGx5IG9yIGlzIGFib3J0ZWQuCisKK1BBU1MgUEFTUyBzaG91
bGQgYXBwZWFyIGJlbG93OgorCitQQVNTIFBBU1MKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0
dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvdXBsb2FkLW9ubG9hZGVuZC1ldmVudC1hZnRlci1zeW5j
LXJlcXVlc3RzLmh0bWwgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3Vw
bG9hZC1vbmxvYWRlbmQtZXZlbnQtYWZ0ZXItc3luYy1yZXF1ZXN0cy5odG1sCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjAwOTZkYWZhNDU4ODlhMjFjYmY4YzE4M2VjNzJlOWM2MWUzZmYyN2IKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3VwbG9hZC1vbmxvYWRl
bmQtZXZlbnQtYWZ0ZXItc3luYy1yZXF1ZXN0cy5odG1sCkBAIC0wLDAgKzEsODcgQEAKKzxIVE1M
PgorPGhlYWQ+Cis8dGl0bGU+VGVzdCBjYXNlIGZvciBidWcgNDA5NTI8L3RpdGxlPgorPC9oZWFk
PgorPGJvZHk+Cis8cD4gVGVzdCBjYXNlIGZvciA8YSBocmVmPSJodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDA5NTIiPiBidWcgNDA5NTI8L2E+OiBPbmxvYWRlbmQgZXZl
bnQgaXMgbm90IHN1cHBvcnRlZCBpbiBYTUxIdHRwUmVxdWVzdDwvcD4KKzxwPiBWZXJpZnkgdGhh
dCBhIGxvYWRlbmQgUHJvZ3Jlc3NFdmVudCBpcyBkaXNwYXRjaGVkIGFmdGVyIHRoZSBsb2FkIG9y
IGFib3J0IFByb2dyZXNzRXZlbnQgd2hlbiBhIHN5bmNocm9ub3VzIHVwbG9hZCByZXF1ZXN0IGNv
bXBsZXRlcyBub3JtYWxseSBvciBpcyBhYm9ydGVkLjwvcD4KKzxwPlBBU1MgUEFTUyBzaG91bGQg
YXBwZWFyIGJlbG93OjwvcD4KKzxwIGlkPWNvbnNvbGU+PC9wPgorPHNjcmlwdCB0eXBlPSJ0ZXh0
L2phdmFzY3JpcHQiPgoraWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgIGxh
eW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxl
ci53YWl0VW50aWxEb25lKCk7Cit9CisKK2Z1bmN0aW9uIGxvZyhtZXNzYWdlKQoreworICAgIHZh
ciBjb25zb2xlRWx0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnNvbGUiKTsKKyAgICBj
b25zb2xlRWx0LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG1lc3NhZ2UgKyAi
ICIpKTsKK30KKwordmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOwordmFyIHJlc3VsdHM7
CisKK2Z1bmN0aW9uIGxvZ1Byb2dyZXNzRXZlbnQoZSkgeworICAgIHJlc3VsdHMgKz0gIiAiICsg
ZS50eXBlOworfQorCitmdW5jdGlvbiBsb2dVbmV4cGVjdGVkUHJvZ3Jlc3NFdmVudChlKSB7Cisg
ICAgcmVzdWx0cyArPSAiIFt1bmV4cGVjdGVkIFByb2dyZXNzRXZlbnQ6ICIgKyBlLnR5cGUgKyAi
XSI7CisgICAgY29tcGxldGVUZXN0KCk7ICAgCit9CisKK2Z1bmN0aW9uIGNvbXBsZXRlVGVzdChl
eHBlY3RlZCkKK3sKKyAgICBsb2cocmVzdWx0cyA9PSBleHBlY3RlZCA/ICJQQVNTIiA6ICJGQUlM
RUQgcmVzdWx0cyA6ICciICsgcmVzdWx0cyArICInIGV4cGVjdGVkIDogJyIgKyBleHBlY3RlZCAr
ICInIik7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5
b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworfQorCitmdW5jdGlvbiB0ZXN0Tm9ybWFs
KCkKK3sKKyAgICByZXN1bHRzID0gIiI7CisKKyAgICB4aHIub25sb2Fkc3RhcnQgPSBsb2dVbmV4
cGVjdGVkUHJvZ3Jlc3NFdmVudDsKKyAgICB4aHIub25hYm9ydCA9IGxvZ1VuZXhwZWN0ZWRQcm9n
cmVzc0V2ZW50OworICAgIHhoci5vbmVycm9yID0gbG9nVW5leHBlY3RlZFByb2dyZXNzRXZlbnQ7
CisgICAgeGhyLm9ubG9hZCA9IGxvZ1Byb2dyZXNzRXZlbnQ7CisgICAgeGhyLm9ubG9hZGVuZCA9
IGxvZ1Byb2dyZXNzRXZlbnQ7CisKKyAgICB4aHIub3BlbigiUE9TVCIsICJyZXNvdXJjZXMvcG9z
dC1lY2hvLmNnaSIsIGZhbHNlKTsgCisgICAgeGhyLnNlbmQoImRhdGEiKTsKKyAgICAKKyAgICBj
b21wbGV0ZVRlc3QoIiBsb2FkIGxvYWRlbmQiKTsKK30KKworZnVuY3Rpb24gdGVzdEFib3J0KCkK
K3sKKyAgICByZXN1bHRzID0gIiI7CisKKyAgICB4aHIub25sb2Fkc3RhcnQgPSBsb2dVbmV4cGVj
dGVkUHJvZ3Jlc3NFdmVudDsKKyAgICB4aHIub25hYm9ydCA9IGxvZ1Byb2dyZXNzRXZlbnQ7Cisg
ICAgeGhyLm9uZXJyb3IgPSBsb2dVbmV4cGVjdGVkUHJvZ3Jlc3NFdmVudDsKKyAgICB4aHIub25s
b2FkID0gbG9nVW5leHBlY3RlZFByb2dyZXNzRXZlbnQ7CisgICAgeGhyLm9ubG9hZGVuZCA9IGxv
Z1Byb2dyZXNzRXZlbnQ7CisgICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKGUp
IHsKKyAgICAgICAgaWYgKHhoci5yZWFkeVN0YXRlID09IHhoci5ET05FKQorICAgICAgICAgICAg
eGhyLmFib3J0KCk7CisgICAgfQorCisgICAgeGhyLm9wZW4oIlBPU1QiLCAicmVzb3VyY2VzL2dl
dC50eHQiLCBmYWxzZSk7IAorICAgIHRyeSB7CisgICAgICAgIHhoci5zZW5kKCk7CisgICAgfQor
ICAgIGNhdGNoIChlKSB7CisgICAgICAgIGlmIChlLmNvZGUgIT0gZS5ORVRXT1JLX0VSUikKKyAg
ICAgICAgICAgIHJlc3VsdHMgKz0gIiAiICsgZTsKKyAgICB9CisgICAgCisgICAgY29tcGxldGVU
ZXN0KCIgYWJvcnQgbG9hZGVuZCIpOworfQorCit0ZXN0Tm9ybWFsKCk7Cit0ZXN0QWJvcnQoKTsK
KworPC9zY3JpcHQ+Cis8L2JvZHk+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L3htbGh0dHByZXF1ZXN0L3htbGh0dHByZXF1ZXN0LXN5bmMtbm8tcHJvZ3Jlc3MtZXZlbnRzLWV4
cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QveG1saHR0
cHJlcXVlc3Qtc3luYy1uby1wcm9ncmVzcy1ldmVudHMtZXhwZWN0ZWQudHh0CmluZGV4IDI0NWQz
YzAzYzM3MGVhODA2MTdlNGI0NmEzMDk1OWE2NDc5ZTFiZWYuLmE1MTI2YWFkYjU5YzNmNzBiZTAz
OGI2NzhlMWQxZjM0ZDA1YmYyMDkgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMv
eG1saHR0cHJlcXVlc3QveG1saHR0cHJlcXVlc3Qtc3luYy1uby1wcm9ncmVzcy1ldmVudHMtZXhw
ZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QveG1s
aHR0cHJlcXVlc3Qtc3luYy1uby1wcm9ncmVzcy1ldmVudHMtZXhwZWN0ZWQudHh0CkBAIC02LDE3
ICs2LDIxIEBAIGJ1ZyAxNzUwMjogQXNzZXJ0aW9uIGZhaWx1cmUgd2hlbiB0cnlpbmcgdG8gcmVz
dGFydCBhIHN5bmMgWE1MSHR0cFJlcXVlc3QgYXMgYW4KICBTdGVwIDE6IFNhbWUgb3JpZ2luIHJl
cXVlc3QKIHJlYWR5c3RhdGVjaGFuZ2UgNAogbG9hZAorbG9hZGVuZAogCiBTdGVwIDI6IENyb3Nz
IG9yaWdpbiByZXF1ZXN0LCBkaXNhbGxvd2VkCiByZWFkeXN0YXRlY2hhbmdlIDQKIGVycm9yCits
b2FkZW5kCiBFcnJvcjogTkVUV09SS19FUlI6IFhNTEh0dHBSZXF1ZXN0IEV4Y2VwdGlvbiAxMDEK
IAogU3RlcCAzOiBDcm9zcyBvcmlnaW4gcmVxdWVzdCwgYWxsb3dlZAogcmVhZHlzdGF0ZWNoYW5n
ZSA0CiBsb2FkCitsb2FkZW5kCiAKIFN0ZXAgNDogQ3Jvc3Mgb3JpZ2luIHJlcXVlc3QsIGNoZWNr
IHRoYXQgcHJlZmxpZ2h0IGlzbid0IGF0dGVtcHRlZAogcmVhZHlzdGF0ZWNoYW5nZSA0CiBsb2Fk
Citsb2FkZW5kCiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>120053</attachid>
            <date>2011-12-20 12:00:35 -0800</date>
            <delta_ts>2011-12-22 00:55:21 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-40952-20111220120034.patch</filename>
            <type>text/plain</type>
            <size>35057</size>
            <attacher name="Hans Muller">giles_joplin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAyNTU3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZGNiNGVmNzVlZDIyMzNk
ZTBhOTcwODE4Y2RiM2JkZDFlMjAzODU4Ny4uYmQ1ODZjYTRlNGVjNWM2NjUzMmQzY2YxMTM0N2M1
MDA0NzdiNmY3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM5IEBACisyMDExLTEyLTIwICBIYW5z
IE11bGxlciAgPGhtdWxsZXJAYWRvYmUuY29tPgorCisgICAgICAgIE9ubG9hZGVuZCBldmVudCBp
cyBub3Qgc3VwcG9ydGVkIGluIFhNTEh0dHBSZXF1ZXN0CisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MDk1MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIHN1cHBvcnQgZm9yIHRoZSBsb2FkZW5kIFBy
b2dyZXNzRXZlbnQgdG8gWE1MSHR0cFJlcXVlc3QgYW5kIFhNTEh0dHBSZXF1ZXN0VXBsb2FkLgor
ICAgICAgICBBIG5ldyBtZXRob2QsIGRpc3BhdGNoRXZlbnRBbmRMb2FkRW5kKCksIHdhcyBhZGRl
ZCB0byBYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZQorICAgICAgICBhbmQgWE1M
SHR0cFJlcXVlc3RVcGxvYWQgdG8gZm9vbHByb29mIHRoZSBjb21tb24gY2FzZSBvZiBkaXNwYXRj
aGluZyBhIGxvYWQsIGFib3J0LAorICAgICAgICBvciBlcnJvciBldmVudCBmb2xsb3dlZCBieSBh
IGxvYWRlbmQgZXZlbnQuCisKKyAgICAgICAgVGVzdHM6IGh0dHAvdGVzdHMveG1saHR0cHJlcXVl
c3Qvb25sb2FkZW5kLWV2ZW50LWFmdGVyLWFib3J0Lmh0bWwKKyAgICAgICAgICAgICAgIGh0dHAv
dGVzdHMveG1saHR0cHJlcXVlc3Qvb25sb2FkZW5kLWV2ZW50LWFmdGVyLWVycm9yLmh0bWwKKyAg
ICAgICAgICAgICAgIGh0dHAvdGVzdHMveG1saHR0cHJlcXVlc3Qvb25sb2FkZW5kLWV2ZW50LWFm
dGVyLWxvYWQuaHRtbAorICAgICAgICAgICAgICAgaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9v
bmxvYWRlbmQtZXZlbnQtYWZ0ZXItc3luYy1yZXF1ZXN0cy5odG1sCisgICAgICAgICAgICAgICBo
dHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3VwbG9hZC1vbmxvYWRlbmQtZXZlbnQtYWZ0ZXItYWJv
cnQuaHRtbAorICAgICAgICAgICAgICAgaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC91cGxvYWQt
b25sb2FkZW5kLWV2ZW50LWFmdGVyLWxvYWQuaHRtbAorICAgICAgICAgICAgICAgaHR0cC90ZXN0
cy94bWxodHRwcmVxdWVzdC91cGxvYWQtb25sb2FkZW5kLWV2ZW50LWFmdGVyLXN5bmMtcmVxdWVz
dHMuaHRtbAorCisgICAgICAgICogeG1sL1hNTEh0dHBSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlhNTEh0dHBSZXF1ZXN0OjpjYWxsUmVhZHlTdGF0ZUNoYW5nZUxpc3RlbmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0OjphYm9ydCk6CisgICAgICAgIChXZWJDb3Jl
OjpYTUxIdHRwUmVxdWVzdDo6bmV0d29ya0Vycm9yKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0
dHBSZXF1ZXN0OjphYm9ydEVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0
OjpkaWRTZW5kRGF0YSk6CisgICAgICAgICogeG1sL1hNTEh0dHBSZXF1ZXN0Lmg6CisgICAgICAg
ICogeG1sL1hNTEh0dHBSZXF1ZXN0LmlkbDoKKyAgICAgICAgKiB4bWwvWE1MSHR0cFJlcXVlc3RQ
cm9ncmVzc0V2ZW50VGhyb3R0bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVl
c3RQcm9ncmVzc0V2ZW50VGhyb3R0bGU6OmRpc3BhdGNoRXZlbnRBbmRMb2FkRW5kKToKKyAgICAg
ICAgKiB4bWwvWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGUuaDoKKyAgICAgICAg
KiB4bWwvWE1MSHR0cFJlcXVlc3RVcGxvYWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0
cFJlcXVlc3RVcGxvYWQ6OmRpc3BhdGNoRXZlbnRBbmRMb2FkRW5kKToKKyAgICAgICAgKiB4bWwv
WE1MSHR0cFJlcXVlc3RVcGxvYWQuaDoKKyAgICAgICAgKiB4bWwvWE1MSHR0cFJlcXVlc3RVcGxv
YWQuaWRsOgorCiAyMDExLTEyLTExICBMdWtlIE1hY3BoZXJzb24gICA8bWFjcGhlcnNvbkBjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgSW1wbGVtZW50IHdlYmtpdC1saW5lLWdyaWQgYW5kIHdlYmtp
dC1saW5lLWdyaWQtc25hcCBDU1MgcHJvcGVydGllcyBpbiBDU1NTdHlsZUFwcGx5UHJvcGVydHku
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwIGIvU291
cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAppbmRleCAwNTkwYTQzZDY1NTdmYmM1
MDVkZWYwMDYwZDUyY2FjOTJkMmRmZWI4Li5jNzY5MzA3N2I0YmUxNGMwZDVhYWY4Mzk1MjAzZTUz
MGMxYjQwOTFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3Qu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAKQEAgLTM0NCw2
ICszNDQsNyBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpjYWxsUmVhZHlTdGF0ZUNoYW5nZUxpc3Rl
bmVyKCkKICAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIGNvb2tpZSA9IElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbExvYWRYSFIoc2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpLCB0aGlzKTsKICAgICAgICAgbV9wcm9ncmVzc0V2ZW50VGhyb3R0bGUuZGlzcGF0Y2hFdmVu
dChYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkubG9hZEV2
ZW50KSk7CiAgICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkTG9hZFhIUihjb29r
aWUpOworICAgICAgICBtX3Byb2dyZXNzRXZlbnRUaHJvdHRsZS5kaXNwYXRjaEV2ZW50KFhNTEh0
dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5sb2FkZW5kRXZlbnQp
KTsKICAgICB9CiB9CiAKQEAgLTcwMiwxMSArNzAzLDExIEBAIHZvaWQgWE1MSHR0cFJlcXVlc3Q6
OmFib3J0KCkKICAgICAgICAgbV9zdGF0ZSA9IFVOU0VOVDsKICAgICB9CiAKLSAgICBtX3Byb2dy
ZXNzRXZlbnRUaHJvdHRsZS5kaXNwYXRjaEV2ZW50KFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVu
dDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5hYm9ydEV2ZW50KSk7CisgICAgbV9wcm9ncmVzc0V2ZW50
VGhyb3R0bGUuZGlzcGF0Y2hFdmVudEFuZExvYWRFbmQoWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2
ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmFib3J0RXZlbnQpKTsKICAgICBpZiAoIW1fdXBsb2Fk
Q29tcGxldGUpIHsKICAgICAgICAgbV91cGxvYWRDb21wbGV0ZSA9IHRydWU7CiAgICAgICAgIGlm
IChtX3VwbG9hZCAmJiBtX3VwbG9hZEV2ZW50c0FsbG93ZWQpCi0gICAgICAgICAgICBtX3VwbG9h
ZC0+ZGlzcGF0Y2hFdmVudChYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnQ6OmNyZWF0ZShldmVu
dE5hbWVzKCkuYWJvcnRFdmVudCkpOworICAgICAgICAgICAgbV91cGxvYWQtPmRpc3BhdGNoRXZl
bnRBbmRMb2FkRW5kKFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudDo6Y3JlYXRlKGV2ZW50TmFt
ZXMoKS5hYm9ydEV2ZW50KSk7CiAgICAgfQogfQogCkBAIC03NjYsMTEgKzc2NywxMSBAQCB2b2lk
IFhNTEh0dHBSZXF1ZXN0OjpnZW5lcmljRXJyb3IoKQogdm9pZCBYTUxIdHRwUmVxdWVzdDo6bmV0
d29ya0Vycm9yKCkKIHsKICAgICBnZW5lcmljRXJyb3IoKTsKLSAgICBtX3Byb2dyZXNzRXZlbnRU
aHJvdHRsZS5kaXNwYXRjaEV2ZW50KFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudDo6Y3JlYXRl
KGV2ZW50TmFtZXMoKS5lcnJvckV2ZW50KSk7CisgICAgbV9wcm9ncmVzc0V2ZW50VGhyb3R0bGUu
ZGlzcGF0Y2hFdmVudEFuZExvYWRFbmQoWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50OjpjcmVh
dGUoZXZlbnROYW1lcygpLmVycm9yRXZlbnQpKTsKICAgICBpZiAoIW1fdXBsb2FkQ29tcGxldGUp
IHsKICAgICAgICAgbV91cGxvYWRDb21wbGV0ZSA9IHRydWU7CiAgICAgICAgIGlmIChtX3VwbG9h
ZCAmJiBtX3VwbG9hZEV2ZW50c0FsbG93ZWQpCi0gICAgICAgICAgICBtX3VwbG9hZC0+ZGlzcGF0
Y2hFdmVudChYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCku
ZXJyb3JFdmVudCkpOworICAgICAgICAgICAgbV91cGxvYWQtPmRpc3BhdGNoRXZlbnRBbmRMb2Fk
RW5kKFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5lcnJv
ckV2ZW50KSk7CiAgICAgfQogICAgIGludGVybmFsQWJvcnQoKTsKIH0KQEAgLTc3OCwxMSArNzc5
LDExIEBAIHZvaWQgWE1MSHR0cFJlcXVlc3Q6Om5ldHdvcmtFcnJvcigpCiB2b2lkIFhNTEh0dHBS
ZXF1ZXN0OjphYm9ydEVycm9yKCkKIHsKICAgICBnZW5lcmljRXJyb3IoKTsKLSAgICBtX3Byb2dy
ZXNzRXZlbnRUaHJvdHRsZS5kaXNwYXRjaEV2ZW50KFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVu
dDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5hYm9ydEV2ZW50KSk7CisgICAgbV9wcm9ncmVzc0V2ZW50
VGhyb3R0bGUuZGlzcGF0Y2hFdmVudEFuZExvYWRFbmQoWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2
ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmFib3J0RXZlbnQpKTsKICAgICBpZiAoIW1fdXBsb2Fk
Q29tcGxldGUpIHsKICAgICAgICAgbV91cGxvYWRDb21wbGV0ZSA9IHRydWU7CiAgICAgICAgIGlm
IChtX3VwbG9hZCAmJiBtX3VwbG9hZEV2ZW50c0FsbG93ZWQpCi0gICAgICAgICAgICBtX3VwbG9h
ZC0+ZGlzcGF0Y2hFdmVudChYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnQ6OmNyZWF0ZShldmVu
dE5hbWVzKCkuYWJvcnRFdmVudCkpOworICAgICAgICAgICAgbV91cGxvYWQtPmRpc3BhdGNoRXZl
bnRBbmRMb2FkRW5kKFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudDo6Y3JlYXRlKGV2ZW50TmFt
ZXMoKS5hYm9ydEV2ZW50KSk7CiAgICAgfQogfQogCkBAIC0xMDIyLDcgKzEwMjMsNyBAQCB2b2lk
IFhNTEh0dHBSZXF1ZXN0OjpkaWRTZW5kRGF0YSh1bnNpZ25lZCBsb25nIGxvbmcgYnl0ZXNTZW50
LCB1bnNpZ25lZCBsb25nIGxvbgogICAgIGlmIChieXRlc1NlbnQgPT0gdG90YWxCeXRlc1RvQmVT
ZW50ICYmICFtX3VwbG9hZENvbXBsZXRlKSB7CiAgICAgICAgIG1fdXBsb2FkQ29tcGxldGUgPSB0
cnVlOwogICAgICAgICBpZiAobV91cGxvYWRFdmVudHNBbGxvd2VkKQotICAgICAgICAgICAgbV91
cGxvYWQtPmRpc3BhdGNoRXZlbnQoWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50OjpjcmVhdGUo
ZXZlbnROYW1lcygpLmxvYWRFdmVudCkpOworICAgICAgICAgICAgbV91cGxvYWQtPmRpc3BhdGNo
RXZlbnRBbmRMb2FkRW5kKFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudDo6Y3JlYXRlKGV2ZW50
TmFtZXMoKS5sb2FkRXZlbnQpKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3htbC9YTUxIdHRwUmVxdWVzdC5oIGIvU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1
ZXN0LmgKaW5kZXggNjcxOTI1ZTM3MGZkMjkzOTFiYmE3YmMzNDMyYzYxNzFmYjU1ODIwMC4uMTRj
OTQ5MTRiNGZjYTQ3NzFmYTk2MWYwZTBkNDcxODc5M2ZmYTJhMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUveG1sL1hN
TEh0dHBSZXF1ZXN0LmgKQEAgLTEzMyw2ICsxMzMsNyBAQCBwdWJsaWM6CiAgICAgREVGSU5FX0FU
VFJJQlVURV9FVkVOVF9MSVNURU5FUihhYm9ydCk7CiAgICAgREVGSU5FX0FUVFJJQlVURV9FVkVO
VF9MSVNURU5FUihlcnJvcik7CiAgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihs
b2FkKTsKKyAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKGxvYWRlbmQpOwogICAg
IERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIobG9hZHN0YXJ0KTsKICAgICBERUZJTkVf
QVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKHByb2dyZXNzKTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmlkbCBiL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxI
dHRwUmVxdWVzdC5pZGwKaW5kZXggODI2ZDEwMTI2N2JkMGRkOWM1MjNkMmM5NWUyNzgyMzdjZDdk
YWZkNS4uNmZiNGRmZDcyYTM0MzQ1NmE1ZTU1NTkwZGIyM2RiZmU2MDBlYWJhOCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmlkbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS94bWwvWE1MSHR0cFJlcXVlc3QuaWRsCkBAIC00Miw2ICs0Miw3IEBAIG1vZHVsZSB4bWwg
ewogICAgICAgICBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbmFib3J0OwogICAgICAgICBhdHRy
aWJ1dGUgRXZlbnRMaXN0ZW5lciBvbmVycm9yOwogICAgICAgICBhdHRyaWJ1dGUgRXZlbnRMaXN0
ZW5lciBvbmxvYWQ7CisgICAgICAgIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9ubG9hZGVuZDsK
ICAgICAgICAgYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIgb25sb2Fkc3RhcnQ7CiAgICAgICAgIGF0
dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9ucHJvZ3Jlc3M7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGUuY3BwCmlu
ZGV4IDVkNGFmYTMyOGI3YmIwNTRiNDc1ZmFkMjU4NGNmOTA5NTU0NDYwZTMuLjNiYzhjMzAxYjQ2
MDZkYTA3MTEwOWM5MGI5M2Q1NGY0MGE2NmIzMjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3htbC9YTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlLmNwcApAQCAt
ODEsNiArODEsMTQgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZTo6
ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCwKICAgICBtX3RhcmdldC0+ZGlz
cGF0Y2hFdmVudChldmVudCk7CiB9CiAKK3ZvaWQgWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50
VGhyb3R0bGU6OmRpc3BhdGNoRXZlbnRBbmRMb2FkRW5kKFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50
KQoreworICAgIEFTU0VSVChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5sb2FkRXZlbnQg
fHwgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuYWJvcnRFdmVudCB8fCBldmVudC0+dHlw
ZSgpID09IGV2ZW50TmFtZXMoKS5lcnJvckV2ZW50IHx8IGV2ZW50LT50eXBlKCkgPT0gZXZlbnRO
YW1lcygpLnRpbWVvdXRFdmVudCk7CisKKyAgICBkaXNwYXRjaEV2ZW50KGV2ZW50KTsKKyAgICBk
aXNwYXRjaEV2ZW50KFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudDo6Y3JlYXRlKGV2ZW50TmFt
ZXMoKS5sb2FkZW5kRXZlbnQpKTsKK30KKwogdm9pZCBYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZl
bnRUaHJvdHRsZTo6Zmx1c2hQcm9ncmVzc0V2ZW50KCkKIHsKICAgICBpZiAoIWhhc0V2ZW50VG9E
aXNwYXRjaCgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0
UHJvZ3Jlc3NFdmVudFRocm90dGxlLmggYi9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVl
c3RQcm9ncmVzc0V2ZW50VGhyb3R0bGUuaAppbmRleCAwMzY5MDVlN2UyMmNmYWU4MDNlMDE0ZGNi
NzU0ODllY2ZkNGFmMWRhLi40MmNlZWJmZWU0M2Q4YTMzYTdlMDhiODEzMGYyNjAxMTVhNDhmYzg5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2
ZW50VGhyb3R0bGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3RQcm9n
cmVzc0V2ZW50VGhyb3R0bGUuaApAQCAtNTAsNiArNTAsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lk
IGRpc3BhdGNoUHJvZ3Jlc3NFdmVudChib29sIGxlbmd0aENvbXB1dGFibGUsIHVuc2lnbmVkIGxv
bmcgbG9uZyBsb2FkZWQsIHVuc2lnbmVkIGxvbmcgbG9uZyB0b3RhbCk7CiAgICAgdm9pZCBkaXNw
YXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+LCBQcm9ncmVzc0V2ZW50QWN0aW9uID0gRG9Ob3RG
bHVzaFByb2dyZXNzRXZlbnQpOworICAgIHZvaWQgZGlzcGF0Y2hFdmVudEFuZExvYWRFbmQoUGFz
c1JlZlB0cjxFdmVudD4pOwogCiAgICAgdm9pZCBzdXNwZW5kKCk7CiAgICAgdm9pZCByZXN1bWUo
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdFVwbG9hZC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3RVcGxvYWQuY3BwCmluZGV4IDNm
MWNhZmFkMjg5ODg4M2I2ZDRlYmQ4YTU4N2VhZGQzOWJlYzQwZDcuLjYwNjI3YTBlMDE3Njg3ZWZi
ZDFkMzVhOTBkZjM1NzFhNmJlNDVkMTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3htbC9Y
TUxIdHRwUmVxdWVzdFVwbG9hZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBS
ZXF1ZXN0VXBsb2FkLmNwcApAQCAtNjEsNCArNjEsMTQgQEAgRXZlbnRUYXJnZXREYXRhKiBYTUxI
dHRwUmVxdWVzdFVwbG9hZDo6ZW5zdXJlRXZlbnRUYXJnZXREYXRhKCkKICAgICByZXR1cm4gJm1f
ZXZlbnRUYXJnZXREYXRhOwogfQogCit2b2lkIFhNTEh0dHBSZXF1ZXN0VXBsb2FkOjpkaXNwYXRj
aEV2ZW50QW5kTG9hZEVuZChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCkKK3sKKyAgICBBU1NFUlQo
ZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubG9hZEV2ZW50IHx8IGV2ZW50LT50eXBlKCkg
PT0gZXZlbnROYW1lcygpLmFib3J0RXZlbnQgfHwgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVz
KCkuZXJyb3JFdmVudCB8fCBldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS50aW1lb3V0RXZl
bnQpOworCisgICAgZGlzcGF0Y2hFdmVudChldmVudCk7CisgICAgZGlzcGF0Y2hFdmVudChYTUxI
dHRwUmVxdWVzdFByb2dyZXNzRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkubG9hZGVuZEV2ZW50
KSk7Cit9CisKKworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3RVcGxvYWQuaCBiL1NvdXJjZS9XZWJDb3JlL3htbC9Y
TUxIdHRwUmVxdWVzdFVwbG9hZC5oCmluZGV4IDdmNDU4NjE3MTBkYjFjZDNkZGE2YzM0MTViNWI4
NTNlZGZkMzNmNGQuLmE2MmExNzU0NWVmOWQ0NTdiN2ZkYzc0MTM4MjZhMjY5MDU0ZjdlNWMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdFVwbG9hZC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdFVwbG9hZC5oCkBAIC02MCw5ICs2MCwx
MiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRf
TElTVEVORVIoYWJvcnQpOwogICAgICAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVS
KGVycm9yKTsKICAgICAgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihsb2FkKTsK
KyAgICAgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihsb2FkZW5kKTsKICAgICAg
ICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihsb2Fkc3RhcnQpOwogICAgICAgICBE
RUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKHByb2dyZXNzKTsKIAorICAgICAgICB2b2lk
IGRpc3BhdGNoRXZlbnRBbmRMb2FkRW5kKFBhc3NSZWZQdHI8RXZlbnQ+KTsKKwogICAgIHByaXZh
dGU6CiAgICAgICAgIFhNTEh0dHBSZXF1ZXN0VXBsb2FkKFhNTEh0dHBSZXF1ZXN0Kik7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdFVwbG9hZC5pZGwgYi9T
b3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3RVcGxvYWQuaWRsCmluZGV4IDczNDkzOWQ4
OWQ2YTNhY2RmMDU5ZDkzMWVkNjI3YTZiZWE0OTk4ZGEuLjVmOThjYjc3ZmVmZWQ0YjlmNjIwMzAx
NzYxOWI1YmIzYTQyMGE2MjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRw
UmVxdWVzdFVwbG9hZC5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0
VXBsb2FkLmlkbApAQCAtMzgsNiArMzgsNyBAQCBtb2R1bGUgeG1sIHsKICAgICAgICAgYXR0cmli
dXRlIEV2ZW50TGlzdGVuZXIgb25hYm9ydDsKICAgICAgICAgYXR0cmlidXRlIEV2ZW50TGlzdGVu
ZXIgb25lcnJvcjsKICAgICAgICAgYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIgb25sb2FkOworICAg
ICAgICBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbmxvYWRlbmQ7CiAgICAgICAgIGF0dHJpYnV0
ZSBFdmVudExpc3RlbmVyIG9ubG9hZHN0YXJ0OwogICAgICAgICBhdHRyaWJ1dGUgRXZlbnRMaXN0
ZW5lciBvbnByb2dyZXNzOwogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9M
YXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggZWJjNzFiNjFhZDU2MzMyNmJmYWU4ZGNkM2FiZDEw
NGU1MzZiZDc4Yy4uNTlkYjFmZTAxOTgyYThhNzY0NmMyMmRmY2E0Yzg2ZGM5MDhhOWU5ZSAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDMwIEBACisyMDExLTEyLTIwICBIYW5zIE11bGxlciAgPGhtdWxsZXJAYWRv
YmUuY29tPgorCisgICAgICAgIE9ubG9hZGVuZCBldmVudCBpcyBub3Qgc3VwcG9ydGVkIGluIFhN
TEh0dHBSZXF1ZXN0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD00MDk1MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEFkZGVkIHN1cHBvcnQgZm9yIHRoZSBsb2FkZW5kIFByb2dyZXNFdmVudCB0byBYTUxIdHRw
UmVxdWVzdCBhbmQgWE1MSHR0cFJlcXVlc3RVcGxvYWQuCisgICAgICAgIFRoZSBuZXcgdGVzdHMg
dmVyaWZ5IHRoYXQgYSBsb2FkZW5kIHByb2dyZXNzIGV2ZW50IGlzIGRpc3BhdGNoZWQgYWZ0ZXIg
YSBsb2FkLCBhYm9ydCwgCisgICAgICAgIG9yIGVycm9yIHByb2dyZXNzIGV2ZW50IGZvciBib3Ro
IHN5bmNocm9ub3VzIGFuZCBhc3luY2hyb25vdXMgcmVxdWVzdHMuCisKKyAgICAgICAgKiBodHRw
L3Rlc3RzL3htbGh0dHByZXF1ZXN0L29ubG9hZGVuZC1ldmVudC1hZnRlci1hYm9ydC1leHBlY3Rl
ZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMveG1saHR0cHJlcXVlc3Qvb25sb2Fk
ZW5kLWV2ZW50LWFmdGVyLWFib3J0Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMv
eG1saHR0cHJlcXVlc3Qvb25sb2FkZW5kLWV2ZW50LWFmdGVyLWVycm9yLWV4cGVjdGVkLnR4dDog
QWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9vbmxvYWRlbmQtZXZl
bnQtYWZ0ZXItZXJyb3IuaHRtbDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy94bWxodHRw
cmVxdWVzdC9vbmxvYWRlbmQtZXZlbnQtYWZ0ZXItbG9hZC1leHBlY3RlZC50eHQ6IEFkZGVkLgor
ICAgICAgICAqIGh0dHAvdGVzdHMveG1saHR0cHJlcXVlc3Qvb25sb2FkZW5kLWV2ZW50LWFmdGVy
LWxvYWQuaHRtbDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9v
bmxvYWRlbmQtZXZlbnQtYWZ0ZXItc3luYy1yZXF1ZXN0cy1leHBlY3RlZC50eHQ6IEFkZGVkLgor
ICAgICAgICAqIGh0dHAvdGVzdHMveG1saHR0cHJlcXVlc3Qvb25sb2FkZW5kLWV2ZW50LWFmdGVy
LXN5bmMtcmVxdWVzdHMuaHRtbDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy94bWxodHRw
cmVxdWVzdC91cGxvYWQtb25sb2FkZW5kLWV2ZW50LWFmdGVyLWFib3J0LWV4cGVjdGVkLnR4dDog
QWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC91cGxvYWQtb25sb2Fk
ZW5kLWV2ZW50LWFmdGVyLWFib3J0Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMv
eG1saHR0cHJlcXVlc3QvdXBsb2FkLW9ubG9hZGVuZC1ldmVudC1hZnRlci1sb2FkLWV4cGVjdGVk
LnR4dDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC91cGxvYWQt
b25sb2FkZW5kLWV2ZW50LWFmdGVyLWxvYWQuaHRtbDogQWRkZWQuCisgICAgICAgICogaHR0cC90
ZXN0cy94bWxodHRwcmVxdWVzdC91cGxvYWQtb25sb2FkZW5kLWV2ZW50LWFmdGVyLXN5bmMtcmVx
dWVzdHMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3htbGh0dHBy
ZXF1ZXN0L3VwbG9hZC1vbmxvYWRlbmQtZXZlbnQtYWZ0ZXItc3luYy1yZXF1ZXN0cy5odG1sOiBB
ZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3htbGh0dHByZXF1ZXN0
LXN5bmMtbm8tcHJvZ3Jlc3MtZXZlbnRzLWV4cGVjdGVkLnR4dDoKKwogMjAxMS0xMi0xMSAgQW5k
cmVhcyBLbGluZyAgPGtsaW5nQHdlYmtpdC5vcmc+CiAKICAgICAgICAgV0syL05ldHNjYXBlUGx1
Z2luOiBJbmNvcnJlY3QgbW91c2UgZXZlbnQgY29vcmRpbmF0ZXMgd2hlbiBmcmFtZVNjYWxlRmFj
dG9yICE9IDEuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1
ZXN0L29ubG9hZGVuZC1ldmVudC1hZnRlci1hYm9ydC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0
cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L29ubG9hZGVuZC1ldmVudC1hZnRlci1hYm9ydC1l
eHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmYwZTcxNWMzMmNlMTM5M2M5NjllMzdjNjlmOGYwZWFi
ZGMyZjlkYQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0
cHJlcXVlc3Qvb25sb2FkZW5kLWV2ZW50LWFmdGVyLWFib3J0LWV4cGVjdGVkLnR4dApAQCAtMCww
ICsxLDcgQEAKK1Rlc3QgY2FzZSBmb3IgYnVnIDQwOTUyOiBPbmxvYWRlbmQgZXZlbnQgaXMgbm90
IHN1cHBvcnRlZCBpbiBYTUxIdHRwUmVxdWVzdAorCitWZXJpZnkgdGhhdCBhIGxvYWRlbmQgUHJv
Z3Jlc3NFdmVudCBpcyBkaXNwYXRjaGVkIGFmdGVyIHRoZSBhYm9ydCBQcm9ncmVzc0V2ZW50IHdo
ZW4gYW4gYXN5bmMgcmVxdWVzdCBpcyBhYm9ydGVkLgorCitQQVNTIHNob3VsZCBhcHBlYXIgYmVs
b3c6CisKK1BBU1MKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJl
cXVlc3Qvb25sb2FkZW5kLWV2ZW50LWFmdGVyLWFib3J0Lmh0bWwgYi9MYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL3htbGh0dHByZXF1ZXN0L29ubG9hZGVuZC1ldmVudC1hZnRlci1hYm9ydC5odG1sCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjU3NDU3NjE0ODRlODczNmY3OTIyMmZkODU1Zjk1MWZiYzZhMTg2YTYKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L29ubG9h
ZGVuZC1ldmVudC1hZnRlci1hYm9ydC5odG1sCkBAIC0wLDAgKzEsNjYgQEAKKzxodG1sPgorPGhl
YWQ+Cis8dGl0bGU+VGVzdCBjYXNlIGZvciBidWcgNDA5NTI8L3RpdGxlPgorPC9oZWFkPgorPGJv
ZHk+Cis8cD5UZXN0IGNhc2UgZm9yIDxhIGhyZWY9Imh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD00MDk1MiI+IGJ1ZyA0MDk1MjwvYT46IE9ubG9hZGVuZCBldmVudCBpcyBu
b3Qgc3VwcG9ydGVkIGluIFhNTEh0dHBSZXF1ZXN0PC9wPgorPHA+VmVyaWZ5IHRoYXQgYSBsb2Fk
ZW5kIFByb2dyZXNzRXZlbnQgaXMgZGlzcGF0Y2hlZCBhZnRlciB0aGUgYWJvcnQgUHJvZ3Jlc3NF
dmVudCB3aGVuIGFuIGFzeW5jIHJlcXVlc3QgaXMgYWJvcnRlZC48L3A+Cis8cD5QQVNTIHNob3Vs
ZCBhcHBlYXIgYmVsb3c6PC9wPgorPHAgaWQ9Y29uc29sZT48L3A+Cis8c2NyaXB0IHR5cGU9InRl
eHQvamF2YXNjcmlwdCI+CitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAg
bGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgIGxheW91dFRlc3RDb250cm9s
bGVyLndhaXRVbnRpbERvbmUoKTsKK30KKworZnVuY3Rpb24gbG9nKG1lc3NhZ2UpCit7CisgICAg
dmFyIGNvbnNvbGVFbHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29uc29sZSIpOworICAg
IGNvbnNvbGVFbHQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobWVzc2FnZSkp
OworfQorCit2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7Cit2YXIgcmVzdWx0cyA9ICIi
OwordmFyIGV4cGVjdGVkID0gIiBsb2Fkc3RhcnQgcmVhZHlTdGF0ZT1ET05FIGFib3J0IGxvYWRl
bmQiOworCitmdW5jdGlvbiBsb2dQcm9ncmVzc0V2ZW50KGUpIHsKKyAgICByZXN1bHRzICs9ICIg
IiArIGUudHlwZTsKK30KKworZnVuY3Rpb24gbG9nVW5leHBlY3RlZFByb2dyZXNzRXZlbnQoZSkg
eworICAgIHJlc3VsdHMgKz0gIiBbdW5leHBlY3RlZCBQcm9ncmVzc0V2ZW50OiAiICsgZS50eXBl
ICsgIl0iOworICAgIGNvbXBsZXRlVGVzdCgpOyAgIAorfQorCitmdW5jdGlvbiBjb21wbGV0ZVRl
c3QoKQoreworICAgIGxvZyhyZXN1bHRzID09IGV4cGVjdGVkID8gIlBBU1MiIDogIkZBSUxFRCBy
ZXN1bHRzIDogJyIgKyByZXN1bHRzICsgIicsIGV4cGVjdGVkIDogJyIgKyBleHBlY3RlZCArICIn
Iik7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0
VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworfQorCitmdW5jdGlvbiB0ZXN0KCkKK3sKKyAg
ICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oZSkgeworICAgICAgICBpZiAoeGhy
LnJlYWR5U3RhdGUgPT0geGhyLkRPTkUpCisgICAgICAgICAgICByZXN1bHRzICs9ICIgcmVhZHlT
dGF0ZT1ET05FIjsKKyAgICAgICAgZWxzZSBpZiAoeGhyLnJlYWR5U3RhdGUgPiB4aHIuT1BFTkVE
KQorICAgICAgICAgICAgeGhyLmFib3J0KCk7CisgICAgfQorICAgIHhoci5vbmxvYWRzdGFydCA9
IGxvZ1Byb2dyZXNzRXZlbnQ7CisgICAgeGhyLm9uYWJvcnQgPSBsb2dQcm9ncmVzc0V2ZW50Owor
ICAgIHhoci5vbmVycm9yID0gbG9nVW5leHBlY3RlZFByb2dyZXNzRXZlbnQ7CisgICAgeGhyLm9u
bG9hZCA9IGxvZ1VuZXhwZWN0ZWRQcm9ncmVzc0V2ZW50OworICAgIHhoci5vbmxvYWRlbmQgPSBm
dW5jdGlvbihlKSB7CisgICAgICAgIGxvZ1Byb2dyZXNzRXZlbnQoZSk7CisgICAgICAgIGNvbXBs
ZXRlVGVzdCgpOworICAgIH0KKworICAgIHhoci5vcGVuKCJHRVQiLCAicmVzb3VyY2VzL2dldC50
eHQiLCB0cnVlKTsKKyAgICB4aHIuc2VuZCgpOworfQorCit0ZXN0KCk7CisKKzwvc2NyaXB0Pgor
PC9ib2R5PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVz
dC9vbmxvYWRlbmQtZXZlbnQtYWZ0ZXItZXJyb3ItZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9vbmxvYWRlbmQtZXZlbnQtYWZ0ZXItZXJyb3ItZXhw
ZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjViNjRjMWFmZDRlMDlmMDRiYWIxNmE2NDFhOGNlZTI3MGU3
YmI3NDUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHBy
ZXF1ZXN0L29ubG9hZGVuZC1ldmVudC1hZnRlci1lcnJvci1leHBlY3RlZC50eHQKQEAgLTAsMCAr
MSw3IEBACitUZXN0IGNhc2UgZm9yIGJ1ZyA0MDk1MjogT25sb2FkZW5kIGV2ZW50IGlzIG5vdCBz
dXBwb3J0ZWQgaW4gWE1MSHR0cFJlcXVlc3QKKworVmVyaWZ5IHRoYXQgYSBsb2FkZW5kIFByb2dy
ZXNzRXZlbnQgaXMgZGlzcGF0Y2hlZCBhZnRlciB0aGUgZXJyb3IgUHJvZ3Jlc3NFdmVudCB3aGVu
IGFuIGFzeW5jIHJlcXVlc3QgZmFpbHMuCisKK1BBU1Mgc2hvdWxkIGFwcGVhciBiZWxvdzoKKwor
UEFTUwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9v
bmxvYWRlbmQtZXZlbnQtYWZ0ZXItZXJyb3IuaHRtbCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMv
eG1saHR0cHJlcXVlc3Qvb25sb2FkZW5kLWV2ZW50LWFmdGVyLWVycm9yLmh0bWwKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMTI0ZmE4YmEyNzNkOWYwMjQyOGM5MDQxOTZiOThiNmY3YTQ3YTg4NwotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3Qvb25sb2FkZW5kLWV2
ZW50LWFmdGVyLWVycm9yLmh0bWwKQEAgLTAsMCArMSw2NiBAQAorPGh0bWw+Cis8aGVhZD4KKzx0
aXRsZT5UZXN0IGNhc2UgZm9yIGJ1ZyA0MDk1MjwvdGl0bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxw
PiBUZXN0IGNhc2UgZm9yIDxhIGhyZWY9Imh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD00MDk1MiI+IGJ1ZyA0MDk1MjwvYT46IE9ubG9hZGVuZCBldmVudCBpcyBub3Qgc3Vw
cG9ydGVkIGluIFhNTEh0dHBSZXF1ZXN0PC9wPgorPHA+IFZlcmlmeSB0aGF0IGEgbG9hZGVuZCBQ
cm9ncmVzc0V2ZW50IGlzIGRpc3BhdGNoZWQgYWZ0ZXIgdGhlIGVycm9yIFByb2dyZXNzRXZlbnQg
d2hlbiBhbiBhc3luYyByZXF1ZXN0IGZhaWxzLjwvcD4KKzxwPlBBU1Mgc2hvdWxkIGFwcGVhciBi
ZWxvdzo8L3A+Cis8cCBpZD1jb25zb2xlPjwvcD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2Ny
aXB0Ij4KK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICBsYXlvdXRUZXN0
Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVu
dGlsRG9uZSgpOworfQorCitmdW5jdGlvbiBsb2cobWVzc2FnZSkKK3sKKyAgICB2YXIgY29uc29s
ZUVsdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb25zb2xlIik7CisgICAgY29uc29sZUVs
dC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShtZXNzYWdlKSk7Cit9CisKK3Zh
ciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKK3ZhciByZXN1bHRzID0gIiI7Cit2YXIgZXhw
ZWN0ZWQgPSAiIGxvYWRzdGFydCByZWFkeVN0YXRlPURPTkUgZXJyb3IgbG9hZGVuZCI7CisKKwor
ZnVuY3Rpb24gbG9nUHJvZ3Jlc3NFdmVudChlKSB7CisgICAgcmVzdWx0cyArPSAiICIgKyBlLnR5
cGU7Cit9CisKK2Z1bmN0aW9uIGxvZ1VuZXhwZWN0ZWRQcm9ncmVzc0V2ZW50KGUpIHsKKyAgICBy
ZXN1bHRzICs9ICIgW3VuZXhwZWN0ZWQgUHJvZ3Jlc3NFdmVudDogIiArIGUudHlwZSArICJdIjsK
KyAgICBjb21wbGV0ZVRlc3QoKTsgICAKK30KKworZnVuY3Rpb24gY29tcGxldGVUZXN0KCkKK3sK
KyAgICBsb2cocmVzdWx0cyA9PSBleHBlY3RlZCA/ICJQQVNTIiA6ICJGQUlMRUQgcmVzdWx0cyA6
ICciICsgcmVzdWx0cyArICInLCBleHBlY3RlZCA6ICciICsgZXhwZWN0ZWQgKyAiJyIpOworICAg
IGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGxheW91dFRlc3RDb250
cm9sbGVyLm5vdGlmeURvbmUoKTsKK30KKworZnVuY3Rpb24gdGVzdCgpCit7CisgICAgeGhyLm9u
cmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgaWYgKHhoci5yZWFkeVN0
YXRlID09IHhoci5ET05FKQorICAgICAgICAgICAgcmVzdWx0cyArPSAiIHJlYWR5U3RhdGU9RE9O
RSI7CisgICAgfQorICAgIHhoci5vbmxvYWRzdGFydCA9IGxvZ1Byb2dyZXNzRXZlbnQ7CisgICAg
eGhyLm9uYWJvcnQgPSBsb2dVbmV4cGVjdGVkUHJvZ3Jlc3NFdmVudDsKKyAgICB4aHIub25lcnJv
ciA9IGxvZ1Byb2dyZXNzRXZlbnQ7CisgICAgeGhyLm9ubG9hZCA9IGxvZ1VuZXhwZWN0ZWRQcm9n
cmVzc0V2ZW50OworICAgIHhoci5vbmxvYWRlbmQgPSBmdW5jdGlvbihlKSB7CisgICAgICAgIGxv
Z1Byb2dyZXNzRXZlbnQoZSk7CisgICAgICAgIGNvbXBsZXRlVGVzdCgpOworICAgIH0KKworICAg
IHhoci5vcGVuKCJHRVQiLCAicmVzb3VyY2VzL2luZmluaXRlLWxvb3AucGhwIiwgdHJ1ZSk7Cisg
ICAgeGhyLnNlbmQoKTsKK30KKwordGVzdCgpOyAKKworPC9zY3JpcHQ+Cis8L2JvZHk+CisKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3Qvb25sb2FkZW5k
LWV2ZW50LWFmdGVyLWxvYWQtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94
bWxodHRwcmVxdWVzdC9vbmxvYWRlbmQtZXZlbnQtYWZ0ZXItbG9hZC1leHBlY3RlZC50eHQKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uODk5NzZjMDEwZjU5MDQ2N2NkODllOWIyY2E1ZTQyNmRiNDQyMGQ0NwotLS0gL2Rl
di9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3Qvb25sb2Fk
ZW5kLWV2ZW50LWFmdGVyLWxvYWQtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNyBAQAorVGVzdCBj
YXNlIGZvciBidWcgNDA5NTI6IE9ubG9hZGVuZCBldmVudCBpcyBub3Qgc3VwcG9ydGVkIGluIFhN
TEh0dHBSZXF1ZXN0CisKK1ZlcmlmeSB0aGF0IGEgbG9hZGVuZCBQcm9ncmVzc0V2ZW50IGlzIGRp
c3BhdGNoZWQgYWZ0ZXIgdGhlIGxvYWQgUHJvZ3Jlc3NFdmVudCB3aGVuIGFuIGFzeW5jIHJlcXVl
c3QgY29tcGxldGVzIG5vcm1hbGx5LgorCitQQVNTIHNob3VsZCBhcHBlYXIgYmVsb3c6CisKK1BB
U1MKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3Qvb25s
b2FkZW5kLWV2ZW50LWFmdGVyLWxvYWQuaHRtbCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMveG1s
aHR0cHJlcXVlc3Qvb25sb2FkZW5kLWV2ZW50LWFmdGVyLWxvYWQuaHRtbApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4z
NjU2YjhkMjM2ZGNjOGJmMzVjM2VmMDYxMmNmMDE3MGI3ZjJjNGJkCi0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9vbmxvYWRlbmQtZXZlbnQt
YWZ0ZXItbG9hZC5odG1sCkBAIC0wLDAgKzEsNjQgQEAKKzxIVE1MPgorPGhlYWQ+Cis8dGl0bGU+
VGVzdCBjYXNlIGZvciBidWcgNDA5NTI8L3RpdGxlPgorPC9oZWFkPgorPGJvZHk+Cis8cD4gVGVz
dCBjYXNlIGZvciA8YSBocmVmPSJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NDA5NTIiPiBidWcgNDA5NTI8L2E+OiBPbmxvYWRlbmQgZXZlbnQgaXMgbm90IHN1cHBvcnRl
ZCBpbiBYTUxIdHRwUmVxdWVzdDwvcD4KKzxwPiBWZXJpZnkgdGhhdCBhIGxvYWRlbmQgUHJvZ3Jl
c3NFdmVudCBpcyBkaXNwYXRjaGVkIGFmdGVyIHRoZSBsb2FkIFByb2dyZXNzRXZlbnQgd2hlbiBh
biBhc3luYyByZXF1ZXN0IGNvbXBsZXRlcyBub3JtYWxseS48L3A+Cis8cD5QQVNTIHNob3VsZCBh
cHBlYXIgYmVsb3c6PC9wPgorPHAgaWQ9Y29uc29sZT48L3A+Cis8c2NyaXB0IHR5cGU9InRleHQv
amF2YXNjcmlwdCI+CitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgbGF5
b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgIGxheW91dFRlc3RDb250cm9sbGVy
LndhaXRVbnRpbERvbmUoKTsKK30KKworZnVuY3Rpb24gbG9nKG1lc3NhZ2UpCit7CisgICAgdmFy
IGNvbnNvbGVFbHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29uc29sZSIpOworICAgIGNv
bnNvbGVFbHQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobWVzc2FnZSkpOwor
fQorCit2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7Cit2YXIgcmVzdWx0cyA9ICIiOwor
dmFyIGV4cGVjdGVkID0gIiBsb2Fkc3RhcnQgcmVhZHlTdGF0ZT1ET05FIGxvYWQgbG9hZGVuZCI7
CisKK2Z1bmN0aW9uIGxvZ1Byb2dyZXNzRXZlbnQoZSkgeworICAgIHJlc3VsdHMgKz0gIiAiICsg
ZS50eXBlOworfQorCitmdW5jdGlvbiBsb2dVbmV4cGVjdGVkUHJvZ3Jlc3NFdmVudChlKSB7Cisg
ICAgcmVzdWx0cyArPSAiIFt1bmV4cGVjdGVkIFByb2dyZXNzRXZlbnQ6ICIgKyBlLnR5cGUgKyAi
XSI7CisgICAgY29tcGxldGVUZXN0KCk7ICAgCit9CisKK2Z1bmN0aW9uIGNvbXBsZXRlVGVzdCgp
Cit7CisgICAgbG9nKHJlc3VsdHMgPT0gZXhwZWN0ZWQgPyAiUEFTUyIgOiAiRkFJTEVEIHJlc3Vs
dHMgOiAnIiArIHJlc3VsdHMgKyAiJywgZXhwZWN0ZWQgOiAnIiArIGV4cGVjdGVkICsgIiciKTsK
KyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICBsYXlvdXRUZXN0
Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cit9CisKK2Z1bmN0aW9uIHRlc3QoKSAKK3sKKyAgICB4
aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oZSkgeworICAgICAgICBpZiAoeGhyLnJl
YWR5U3RhdGUgPT0geGhyLkRPTkUpCisgICAgICAgICAgICByZXN1bHRzICs9ICIgcmVhZHlTdGF0
ZT1ET05FIjsKKyAgICB9CisgICAgeGhyLm9ubG9hZHN0YXJ0ID0gbG9nUHJvZ3Jlc3NFdmVudDsK
KyAgICB4aHIub25hYm9ydCA9IGxvZ1VuZXhwZWN0ZWRQcm9ncmVzc0V2ZW50OworICAgIHhoci5v
bmVycm9yID0gbG9nVW5leHBlY3RlZFByb2dyZXNzRXZlbnQ7CisgICAgeGhyLm9ubG9hZCA9IGxv
Z1Byb2dyZXNzRXZlbnQ7CisgICAgeGhyLm9ubG9hZGVuZCA9IGZ1bmN0aW9uKGUpIHsKKyAgICAg
ICAgbG9nUHJvZ3Jlc3NFdmVudChlKTsKKyAgICAgICAgY29tcGxldGVUZXN0KCk7CisgICAgfQor
CisgICAgeGhyLm9wZW4oIkdFVCIsICJyZXNvdXJjZXMvZ2V0LnR4dCIsIHRydWUpOyAKKyAgICB4
aHIuc2VuZCgpOworfQorCit0ZXN0KCk7IAorCis8L3NjcmlwdD4KKzwvYm9keT4KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3Qvb25sb2FkZW5kLWV2ZW50
LWFmdGVyLXN5bmMtcmVxdWVzdHMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0
cy94bWxodHRwcmVxdWVzdC9vbmxvYWRlbmQtZXZlbnQtYWZ0ZXItc3luYy1yZXF1ZXN0cy1leHBl
Y3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uZmM1NDY3YzBhMTc5ZTllNzEyYWUwZTYzMmRhN2U0MTBkOGVk
ZTkzNAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJl
cXVlc3Qvb25sb2FkZW5kLWV2ZW50LWFmdGVyLXN5bmMtcmVxdWVzdHMtZXhwZWN0ZWQudHh0CkBA
IC0wLDAgKzEsNyBAQAorVGVzdCBjYXNlIGZvciBidWcgNDA5NTI6IE9ubG9hZGVuZCBldmVudCBp
cyBub3Qgc3VwcG9ydGVkIGluIFhNTEh0dHBSZXF1ZXN0CisKK1ZlcmlmeSB0aGF0IGEgbG9hZGVu
ZCBQcm9ncmVzc0V2ZW50IGlzIGRpc3BhdGNoZWQgYWZ0ZXIgYSBsb2FkLCBlcnJvciwgb3IgYWJv
cnQgUHJvZ3Jlc3NFdmVudCB3aGVuIGEgc3luY2hyb25vdXMgcmVxdWVzdCBjb21wbGV0ZXMgbm9y
bWFsbHksIGZhaWxzLCBvciBpcyBhYm9ydGVkIHJlc3BlY3RpdmVseS4KKworUEFTUyBQQVNTIFBB
U1Mgc2hvdWxkIGFwcGVhciBiZWxvdzoKKworUEFTUyBQQVNTIFBBU1MKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3Qvb25sb2FkZW5kLWV2ZW50LWFmdGVy
LXN5bmMtcmVxdWVzdHMuaHRtbCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVl
c3Qvb25sb2FkZW5kLWV2ZW50LWFmdGVyLXN5bmMtcmVxdWVzdHMuaHRtbApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43
MDZkODgwN2MwYWE4NmUxNzFhZjgwY2EzMWRkYzljZGY1MjdkZjU2Ci0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9vbmxvYWRlbmQtZXZlbnQt
YWZ0ZXItc3luYy1yZXF1ZXN0cy5odG1sCkBAIC0wLDAgKzEsMTEwIEBACis8SFRNTD4KKzxoZWFk
PgorPHRpdGxlPlRlc3QgY2FzZSBmb3IgYnVnIDQwOTUyPC90aXRsZT4KKzwvaGVhZD4KKzxib2R5
PgorPHA+IFRlc3QgY2FzZSBmb3IgPGEgaHJlZj0iaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTQwOTUyIj4gYnVnIDQwOTUyPC9hPjogT25sb2FkZW5kIGV2ZW50IGlzIG5v
dCBzdXBwb3J0ZWQgaW4gWE1MSHR0cFJlcXVlc3Q8L3A+Cis8cD4gVmVyaWZ5IHRoYXQgYSBsb2Fk
ZW5kIFByb2dyZXNzRXZlbnQgaXMgZGlzcGF0Y2hlZCBhZnRlciBhIGxvYWQsIGVycm9yLCBvciBh
Ym9ydCBQcm9ncmVzc0V2ZW50IHdoZW4gYSBzeW5jaHJvbm91cyByZXF1ZXN0IGNvbXBsZXRlcyBu
b3JtYWxseSwgZmFpbHMsIG9yIGlzIGFib3J0ZWQgcmVzcGVjdGl2ZWx5LjwvcD4KKzxwPlBBU1Mg
UEFTUyBQQVNTIHNob3VsZCBhcHBlYXIgYmVsb3c6PC9wPgorPHAgaWQ9Y29uc29sZT48L3A+Cis8
c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CitpZiAod2luZG93LmxheW91dFRlc3RDb250
cm9sbGVyKSB7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgIGxh
eW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKK30KKworZnVuY3Rpb24gbG9nKG1l
c3NhZ2UpCit7CisgICAgdmFyIGNvbnNvbGVFbHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgi
Y29uc29sZSIpOworICAgIGNvbnNvbGVFbHQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4
dE5vZGUobWVzc2FnZSArICIgIikpOworfQorCit2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0
KCk7Cit2YXIgcmVzdWx0czsKKworZnVuY3Rpb24gbG9nUHJvZ3Jlc3NFdmVudChlKSB7CisgICAg
cmVzdWx0cyArPSAiICIgKyBlLnR5cGU7Cit9CisKK2Z1bmN0aW9uIGxvZ1VuZXhwZWN0ZWRQcm9n
cmVzc0V2ZW50KGUpIHsKKyAgICByZXN1bHRzICs9ICIgW3VuZXhwZWN0ZWQgUHJvZ3Jlc3NFdmVu
dDogIiArIGUudHlwZSArICJdIjsKKyAgICBjb21wbGV0ZVRlc3QoKTsgICAKK30KKworZnVuY3Rp
b24gY29tcGxldGVUZXN0KGV4cGVjdGVkKQoreworICAgIGxvZyhyZXN1bHRzID09IGV4cGVjdGVk
ID8gIlBBU1MiIDogIkZBSUxFRCByZXN1bHRzIDogJyIgKyByZXN1bHRzICsgIicsIGV4cGVjdGVk
IDogJyIgKyBleHBlY3RlZCArICInIik7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJv
bGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworfQorCitm
dW5jdGlvbiB0ZXN0Tm9ybWFsKCkKK3sKKyAgICByZXN1bHRzID0gIiI7CisKKyAgICB4aHIub25s
b2Fkc3RhcnQgPSBsb2dVbmV4cGVjdGVkUHJvZ3Jlc3NFdmVudDsKKyAgICB4aHIub25hYm9ydCA9
IGxvZ1VuZXhwZWN0ZWRQcm9ncmVzc0V2ZW50OworICAgIHhoci5vbmVycm9yID0gbG9nVW5leHBl
Y3RlZFByb2dyZXNzRXZlbnQ7CisgICAgeGhyLm9ubG9hZCA9IGxvZ1Byb2dyZXNzRXZlbnQ7Cisg
ICAgeGhyLm9ubG9hZGVuZCA9IGxvZ1Byb2dyZXNzRXZlbnQ7CisKKyAgICB4aHIub3BlbigiR0VU
IiwgInJlc291cmNlcy9nZXQudHh0IiwgZmFsc2UpOyAKKyAgICB4aHIuc2VuZCgpOworICAgIAor
ICAgIGNvbXBsZXRlVGVzdCgiIGxvYWQgbG9hZGVuZCIpOworfQorCitmdW5jdGlvbiB0ZXN0RXJy
b3IoKQoreworICAgIHJlc3VsdHMgPSAiIjsKKworICAgIHhoci5vbmxvYWRzdGFydCA9IGxvZ1Vu
ZXhwZWN0ZWRQcm9ncmVzc0V2ZW50OworICAgIHhoci5vbmFib3J0ID0gbG9nVW5leHBlY3RlZFBy
b2dyZXNzRXZlbnQ7CisgICAgeGhyLm9uZXJyb3IgPSBsb2dQcm9ncmVzc0V2ZW50OworICAgIHho
ci5vbmxvYWQgPSBsb2dVbmV4cGVjdGVkUHJvZ3Jlc3NFdmVudDsKKyAgICB4aHIub25sb2FkZW5k
ID0gbG9nUHJvZ3Jlc3NFdmVudDsKKworICAgIHhoci5vcGVuKCJHRVQiLCAicmVzb3VyY2VzL2lu
ZmluaXRlLWxvb3AucGhwIiwgZmFsc2UpOyAKKyAgICB0cnkgeworICAgICAgICB4aHIuc2VuZCgp
OworICAgIH0KKyAgICBjYXRjaCAoZSkgeworICAgICAgICBpZiAoZS5jb2RlICE9IGUuTkVUV09S
S19FUlIpCisgICAgICAgICAgICByZXN1bHRzICs9ICIgIiArIGU7CisgICAgfQorICAgIAorICAg
IGNvbXBsZXRlVGVzdCgiIGVycm9yIGxvYWRlbmQiKTsKK30KKworZnVuY3Rpb24gdGVzdEFib3J0
KCkKK3sKKyAgICByZXN1bHRzID0gIiI7CisKKyAgICB4aHIub25sb2Fkc3RhcnQgPSBsb2dVbmV4
cGVjdGVkUHJvZ3Jlc3NFdmVudDsKKyAgICB4aHIub25hYm9ydCA9IGxvZ1Byb2dyZXNzRXZlbnQ7
CisgICAgeGhyLm9uZXJyb3IgPSBsb2dVbmV4cGVjdGVkUHJvZ3Jlc3NFdmVudDsKKyAgICB4aHIu
b25sb2FkID0gbG9nVW5leHBlY3RlZFByb2dyZXNzRXZlbnQ7CisgICAgeGhyLm9ubG9hZGVuZCA9
IGxvZ1Byb2dyZXNzRXZlbnQ7CisgICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9u
KGUpIHsKKyAgICAgICAgaWYgKHhoci5yZWFkeVN0YXRlID09IHhoci5ET05FKQorICAgICAgICAg
ICAgeGhyLmFib3J0KCk7CisgICAgfQorCisgICAgeGhyLm9wZW4oIkdFVCIsICJyZXNvdXJjZXMv
Z2V0LnR4dCIsIGZhbHNlKTsgCisgICAgdHJ5IHsKKyAgICAgICAgeGhyLnNlbmQoKTsKKyAgICB9
CisgICAgY2F0Y2ggKGUpIHsKKyAgICAgICAgaWYgKGUuY29kZSAhPSBlLk5FVFdPUktfRVJSKQor
ICAgICAgICAgICAgcmVzdWx0cyArPSAiICIgKyBlOworICAgIH0KKyAgICAKKyAgICBjb21wbGV0
ZVRlc3QoIiBhYm9ydCBsb2FkZW5kIik7Cit9CisKK3Rlc3ROb3JtYWwoKTsKK3Rlc3RFcnJvcigp
OwordGVzdEFib3J0KCk7CisKKzwvc2NyaXB0PgorPC9ib2R5PgpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC91cGxvYWQtb25sb2FkZW5kLWV2ZW50LWFm
dGVyLWFib3J0LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJl
cXVlc3QvdXBsb2FkLW9ubG9hZGVuZC1ldmVudC1hZnRlci1hYm9ydC1leHBlY3RlZC50eHQKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMTY1ZTFkNzUxNDNjMTlkMDkwYzExOTIxOTlhNzFiMjgxOTdmNWY4ZAotLS0gL2Rl
di9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvdXBsb2Fk
LW9ubG9hZGVuZC1ldmVudC1hZnRlci1hYm9ydC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw3IEBA
CitUZXN0IGNhc2UgZm9yIGJ1ZyA0MDk1MjogT25sb2FkZW5kIGV2ZW50IGlzIG5vdCBzdXBwb3J0
ZWQgaW4gWE1MSHR0cFJlcXVlc3QKKworVmVyaWZ5IHRoYXQgYSBsb2FkZW5kIFByb2dyZXNzRXZl
bnQgaXMgZGlzcGF0Y2hlZCBhZnRlciB0aGUgYWJvcnQgUHJvZ3Jlc3NFdmVudCB3aGVuIGFuIGFz
eW5jIHVwbG9hZCByZXF1ZXN0IGlzIGFib3J0ZWQuCisKK1BBU1Mgc2hvdWxkIGFwcGVhciBiZWxv
dzoKKworUEFTUwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVx
dWVzdC91cGxvYWQtb25sb2FkZW5kLWV2ZW50LWFmdGVyLWFib3J0Lmh0bWwgYi9MYXlvdXRUZXN0
cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3VwbG9hZC1vbmxvYWRlbmQtZXZlbnQtYWZ0ZXIt
YWJvcnQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44OTRkNWI0ZWUzNzc5Zjg2OTM2ZWYyMTdiYmE0NjgwOGFk
NDc1YjkwCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRw
cmVxdWVzdC91cGxvYWQtb25sb2FkZW5kLWV2ZW50LWFmdGVyLWFib3J0Lmh0bWwKQEAgLTAsMCAr
MSw2NCBAQAorPGh0bWw+Cis8aGVhZD4KKzx0aXRsZT5UZXN0IGNhc2UgZm9yIGJ1ZyA0MDk1Mjwv
dGl0bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwPiBUZXN0IGNhc2UgZm9yIDxhIGhyZWY9Imh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MDk1MiI+IGJ1ZyA0MDk1MjwvYT46
IE9ubG9hZGVuZCBldmVudCBpcyBub3Qgc3VwcG9ydGVkIGluIFhNTEh0dHBSZXF1ZXN0PC9wPgor
PHA+IFZlcmlmeSB0aGF0IGEgbG9hZGVuZCBQcm9ncmVzc0V2ZW50IGlzIGRpc3BhdGNoZWQgYWZ0
ZXIgdGhlIGFib3J0IFByb2dyZXNzRXZlbnQgd2hlbiBhbiBhc3luYyB1cGxvYWQgcmVxdWVzdCBp
cyBhYm9ydGVkLjwvcD4KKzxwPlBBU1Mgc2hvdWxkIGFwcGVhciBiZWxvdzo8L3A+Cis8cCBpZD1j
b25zb2xlPjwvcD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KK2lmICh3aW5kb3cu
bGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNU
ZXh0KCk7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworfQorCitm
dW5jdGlvbiBsb2cobWVzc2FnZSkKK3sKKyAgICB2YXIgY29uc29sZUVsdCA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCJjb25zb2xlIik7CisgICAgY29uc29sZUVsdC5hcHBlbmRDaGlsZChkb2N1
bWVudC5jcmVhdGVUZXh0Tm9kZShtZXNzYWdlKSk7Cit9CisKK3ZhciB4aHIgPSBuZXcgWE1MSHR0
cFJlcXVlc3QoKTsKK3ZhciByZXN1bHRzID0gIiI7Cit2YXIgZXhwZWN0ZWQgPSAiIHByb2dyZXNz
IGFib3J0IGxvYWRlbmQiOworCitmdW5jdGlvbiBsb2dQcm9ncmVzc0V2ZW50KGUpIHsKKyAgICBy
ZXN1bHRzICs9ICIgIiArIGUudHlwZTsKK30KKworZnVuY3Rpb24gbG9nVW5leHBlY3RlZFByb2dy
ZXNzRXZlbnQoZSkgeworICAgIHJlc3VsdHMgKz0gIiBbdW5leHBlY3RlZCBQcm9ncmVzc0V2ZW50
OiAiICsgZS50eXBlICsgIl0iOworICAgIGNvbXBsZXRlVGVzdCgpOyAgIAorfQorCitmdW5jdGlv
biBjb21wbGV0ZVRlc3QoKQoreworICAgIGxvZyhyZXN1bHRzID09IGV4cGVjdGVkID8gIlBBU1Mi
IDogIkZBSUxFRCByZXN1bHRzIDogJyIgKyByZXN1bHRzICsgIicsIGV4cGVjdGVkIDogJyIgKyBl
eHBlY3RlZCArICInIik7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAg
ICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworfQorCitmdW5jdGlvbiB0
ZXN0KCkKK3sKKyAgICB4aHIudXBsb2FkLm9ucHJvZ3Jlc3MgPSBmdW5jdGlvbihlKSB7CisgICAg
ICAgIGxvZ1Byb2dyZXNzRXZlbnQoZSk7CisgICAgICAgIHhoci5hYm9ydCgpOworICAgIH0KKyAg
ICB4aHIudXBsb2FkLm9uYWJvcnQgPSBsb2dQcm9ncmVzc0V2ZW50OworICAgIHhoci51cGxvYWQu
b25lcnJvciA9IGxvZ1VuZXhwZWN0ZWRQcm9ncmVzc0V2ZW50OworICAgIHhoci51cGxvYWQub25s
b2FkID0gbG9nVW5leHBlY3RlZFByb2dyZXNzRXZlbnQ7CisgICAgeGhyLnVwbG9hZC5vbmxvYWRl
bmQgPSBmdW5jdGlvbihlKSB7CisgICAgICAgIGxvZ1Byb2dyZXNzRXZlbnQoZSk7CisgICAgICAg
IGNvbXBsZXRlVGVzdCgpOworICAgIH0KKworICAgIHhoci5vcGVuKCJQT1NUIiwgInJlc291cmNl
cy9wb3N0LWVjaG8uY2dpIiwgdHJ1ZSk7CisgICAgeGhyLnNlbmQoImRhdGEiKTsKK30KKwordGVz
dCgpOworCis8L3NjcmlwdD4KKzwvYm9keT4KKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy94bWxodHRwcmVxdWVzdC91cGxvYWQtb25sb2FkZW5kLWV2ZW50LWFmdGVyLWxvYWQt
ZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC91cGxv
YWQtb25sb2FkZW5kLWV2ZW50LWFmdGVyLWxvYWQtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk2
MjIzODY1NWUyMjU1ZjAxZTg5MTUxN2EyNDQyZDViYWRmZjNjNGMKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3VwbG9hZC1vbmxvYWRlbmQt
ZXZlbnQtYWZ0ZXItbG9hZC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw3IEBACitUZXN0IGNhc2Ug
Zm9yIGJ1ZyA0MDk1MjogT25sb2FkZW5kIGV2ZW50IGlzIG5vdCBzdXBwb3J0ZWQgaW4gWE1MSHR0
cFJlcXVlc3QKKworVmVyaWZ5IHRoYXQgYSBsb2FkZW5kIFByb2dyZXNzRXZlbnQgaXMgZGlzcGF0
Y2hlZCBhZnRlciB0aGUgbG9hZCBQcm9ncmVzc0V2ZW50IHdoZW4gYW4gYXN5bmMgdXBsb2FkIHJl
cXVlc3QgY29tcGxldGVzIG5vcm1hbGx5LgorCitQQVNTIHNob3VsZCBhcHBlYXIgYmVsb3c6CisK
K1BBU1MKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3Qv
dXBsb2FkLW9ubG9hZGVuZC1ldmVudC1hZnRlci1sb2FkLmh0bWwgYi9MYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL3htbGh0dHByZXF1ZXN0L3VwbG9hZC1vbmxvYWRlbmQtZXZlbnQtYWZ0ZXItbG9hZC5o
dG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjdmYzg5Y2E5ZWE5OTE5YmEyMjhlMGRiOTdjZjQ2ZmRmNmJjYzU1YTMK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0
L3VwbG9hZC1vbmxvYWRlbmQtZXZlbnQtYWZ0ZXItbG9hZC5odG1sCkBAIC0wLDAgKzEsNjEgQEAK
KzxodG1sPgorPGhlYWQ+Cis8dGl0bGU+VGVzdCBjYXNlIGZvciBidWcgNDA5NTI8L3RpdGxlPgor
PC9oZWFkPgorPGJvZHk+Cis8cD4gVGVzdCBjYXNlIGZvciA8YSBocmVmPSJodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDA5NTIiPiBidWcgNDA5NTI8L2E+OiBPbmxvYWRl
bmQgZXZlbnQgaXMgbm90IHN1cHBvcnRlZCBpbiBYTUxIdHRwUmVxdWVzdDwvcD4KKzxwPiBWZXJp
ZnkgdGhhdCBhIGxvYWRlbmQgUHJvZ3Jlc3NFdmVudCBpcyBkaXNwYXRjaGVkIGFmdGVyIHRoZSBs
b2FkIFByb2dyZXNzRXZlbnQgd2hlbiBhbiBhc3luYyB1cGxvYWQgcmVxdWVzdCBjb21wbGV0ZXMg
bm9ybWFsbHkuPC9wPgorPHA+UEFTUyBzaG91bGQgYXBwZWFyIGJlbG93OjwvcD4KKzxwIGlkPWNv
bnNvbGU+PC9wPgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoraWYgKHdpbmRvdy5s
YXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1Rl
eHQoKTsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7Cit9CisKK2Z1
bmN0aW9uIGxvZyhtZXNzYWdlKQoreworICAgIHZhciBjb25zb2xlRWx0ID0gZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoImNvbnNvbGUiKTsKKyAgICBjb25zb2xlRWx0LmFwcGVuZENoaWxkKGRvY3Vt
ZW50LmNyZWF0ZVRleHROb2RlKG1lc3NhZ2UpKTsKK30KKwordmFyIHhociA9IG5ldyBYTUxIdHRw
UmVxdWVzdCgpOwordmFyIHJlc3VsdHMgPSAiIjsKK3ZhciBleHBlY3RlZCA9ICIgbG9hZHN0YXJ0
IGxvYWQgbG9hZGVuZCI7CisKK2Z1bmN0aW9uIGxvZ1Byb2dyZXNzRXZlbnQoZSkgeworICAgIHJl
c3VsdHMgKz0gIiAiICsgZS50eXBlOworfQorCitmdW5jdGlvbiBsb2dVbmV4cGVjdGVkUHJvZ3Jl
c3NFdmVudChlKSB7CisgICAgcmVzdWx0cyArPSAiIFt1bmV4cGVjdGVkIFByb2dyZXNzRXZlbnQ6
ICIgKyBlLnR5cGUgKyAiXSI7CisgICAgY29tcGxldGVUZXN0KCk7ICAgCit9CisKK2Z1bmN0aW9u
IGNvbXBsZXRlVGVzdCgpCit7CisgICAgbG9nKHJlc3VsdHMgPT0gZXhwZWN0ZWQgPyAiUEFTUyIg
OiAiRkFJTEVEIHJlc3VsdHMgOiAnIiArIHJlc3VsdHMgKyAiJywgZXhwZWN0ZWQgOiAnIiArIGV4
cGVjdGVkICsgIiciKTsKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAg
ICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cit9CisKK2Z1bmN0aW9uIHRl
c3QoKQoreworICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbihlKSB7CisgICAg
ICAgIGlmICh4aHIucmVhZHlTdGF0ZSA9PSB4aHIuRE9ORSkKKyAgICAgICAgICAgIGNvbXBsZXRl
VGVzdCgpOworICAgIH0KKyAgICB4aHIudXBsb2FkLm9ubG9hZHN0YXJ0ID0gbG9nUHJvZ3Jlc3NF
dmVudDsKKyAgICB4aHIudXBsb2FkLm9uYWJvcnQgPSBsb2dVbmV4cGVjdGVkUHJvZ3Jlc3NFdmVu
dDsKKyAgICB4aHIudXBsb2FkLm9uZXJyb3IgPSBsb2dVbmV4cGVjdGVkUHJvZ3Jlc3NFdmVudDsK
KyAgICB4aHIudXBsb2FkLm9ubG9hZCA9IGxvZ1Byb2dyZXNzRXZlbnQ7CisgICAgeGhyLnVwbG9h
ZC5vbmxvYWRlbmQgPSBsb2dQcm9ncmVzc0V2ZW50OworCisgICAgeGhyLm9wZW4oIlBPU1QiLCAi
cmVzb3VyY2VzL3Bvc3QtZWNoby5jZ2kiLCB0cnVlKTsKKyAgICB4aHIuc2VuZCgiZGF0YSIpOwor
fQorCit0ZXN0KCk7CisKKzwvc2NyaXB0PgorPC9ib2R5PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC91cGxvYWQtb25sb2FkZW5kLWV2ZW50LWFmdGVy
LXN5bmMtcmVxdWVzdHMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxo
dHRwcmVxdWVzdC91cGxvYWQtb25sb2FkZW5kLWV2ZW50LWFmdGVyLXN5bmMtcmVxdWVzdHMtZXhw
ZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE4Yzg2OWNhYzRmZmZjNjJiYmEzZTVhYmMzYjg0OTg5ZTdh
OGFhOWIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHBy
ZXF1ZXN0L3VwbG9hZC1vbmxvYWRlbmQtZXZlbnQtYWZ0ZXItc3luYy1yZXF1ZXN0cy1leHBlY3Rl
ZC50eHQKQEAgLTAsMCArMSw3IEBACitUZXN0IGNhc2UgZm9yIGJ1ZyA0MDk1MjogT25sb2FkZW5k
IGV2ZW50IGlzIG5vdCBzdXBwb3J0ZWQgaW4gWE1MSHR0cFJlcXVlc3QKKworVmVyaWZ5IHRoYXQg
YSBsb2FkZW5kIFByb2dyZXNzRXZlbnQgaXMgZGlzcGF0Y2hlZCBhZnRlciB0aGUgbG9hZCBvciBh
Ym9ydCBQcm9ncmVzc0V2ZW50IHdoZW4gYSBzeW5jaHJvbm91cyB1cGxvYWQgcmVxdWVzdCBjb21w
bGV0ZXMgbm9ybWFsbHkgb3IgaXMgYWJvcnRlZC4KKworUEFTUyBQQVNTIHNob3VsZCBhcHBlYXIg
YmVsb3c6CisKK1BBU1MgUEFTUwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94
bWxodHRwcmVxdWVzdC91cGxvYWQtb25sb2FkZW5kLWV2ZW50LWFmdGVyLXN5bmMtcmVxdWVzdHMu
aHRtbCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvdXBsb2FkLW9ubG9h
ZGVuZC1ldmVudC1hZnRlci1zeW5jLXJlcXVlc3RzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDA5NmRhZmE0
NTg4OWEyMWNiZjhjMTgzZWM3MmU5YzYxZTNmZjI3YgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvdXBsb2FkLW9ubG9hZGVuZC1ldmVudC1h
ZnRlci1zeW5jLXJlcXVlc3RzLmh0bWwKQEAgLTAsMCArMSw4NyBAQAorPEhUTUw+Cis8aGVhZD4K
Kzx0aXRsZT5UZXN0IGNhc2UgZm9yIGJ1ZyA0MDk1MjwvdGl0bGU+Cis8L2hlYWQ+Cis8Ym9keT4K
KzxwPiBUZXN0IGNhc2UgZm9yIDxhIGhyZWY9Imh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD00MDk1MiI+IGJ1ZyA0MDk1MjwvYT46IE9ubG9hZGVuZCBldmVudCBpcyBub3Qg
c3VwcG9ydGVkIGluIFhNTEh0dHBSZXF1ZXN0PC9wPgorPHA+IFZlcmlmeSB0aGF0IGEgbG9hZGVu
ZCBQcm9ncmVzc0V2ZW50IGlzIGRpc3BhdGNoZWQgYWZ0ZXIgdGhlIGxvYWQgb3IgYWJvcnQgUHJv
Z3Jlc3NFdmVudCB3aGVuIGEgc3luY2hyb25vdXMgdXBsb2FkIHJlcXVlc3QgY29tcGxldGVzIG5v
cm1hbGx5IG9yIGlzIGFib3J0ZWQuPC9wPgorPHA+UEFTUyBQQVNTIHNob3VsZCBhcHBlYXIgYmVs
b3c6PC9wPgorPHAgaWQ9Y29uc29sZT48L3A+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlw
dCI+CitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRp
bERvbmUoKTsKK30KKworZnVuY3Rpb24gbG9nKG1lc3NhZ2UpCit7CisgICAgdmFyIGNvbnNvbGVF
bHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29uc29sZSIpOworICAgIGNvbnNvbGVFbHQu
YXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobWVzc2FnZSArICIgIikpOworfQor
Cit2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7Cit2YXIgcmVzdWx0czsKKworZnVuY3Rp
b24gbG9nUHJvZ3Jlc3NFdmVudChlKSB7CisgICAgcmVzdWx0cyArPSAiICIgKyBlLnR5cGU7Cit9
CisKK2Z1bmN0aW9uIGxvZ1VuZXhwZWN0ZWRQcm9ncmVzc0V2ZW50KGUpIHsKKyAgICByZXN1bHRz
ICs9ICIgW3VuZXhwZWN0ZWQgUHJvZ3Jlc3NFdmVudDogIiArIGUudHlwZSArICJdIjsKKyAgICBj
b21wbGV0ZVRlc3QoKTsgICAKK30KKworZnVuY3Rpb24gY29tcGxldGVUZXN0KGV4cGVjdGVkKQor
eworICAgIGxvZyhyZXN1bHRzID09IGV4cGVjdGVkID8gIlBBU1MiIDogIkZBSUxFRCByZXN1bHRz
IDogJyIgKyByZXN1bHRzICsgIicgZXhwZWN0ZWQgOiAnIiArIGV4cGVjdGVkICsgIiciKTsKKyAg
ICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICBsYXlvdXRUZXN0Q29u
dHJvbGxlci5ub3RpZnlEb25lKCk7Cit9CisKK2Z1bmN0aW9uIHRlc3ROb3JtYWwoKQoreworICAg
IHJlc3VsdHMgPSAiIjsKKworICAgIHhoci5vbmxvYWRzdGFydCA9IGxvZ1VuZXhwZWN0ZWRQcm9n
cmVzc0V2ZW50OworICAgIHhoci5vbmFib3J0ID0gbG9nVW5leHBlY3RlZFByb2dyZXNzRXZlbnQ7
CisgICAgeGhyLm9uZXJyb3IgPSBsb2dVbmV4cGVjdGVkUHJvZ3Jlc3NFdmVudDsKKyAgICB4aHIu
b25sb2FkID0gbG9nUHJvZ3Jlc3NFdmVudDsKKyAgICB4aHIub25sb2FkZW5kID0gbG9nUHJvZ3Jl
c3NFdmVudDsKKworICAgIHhoci5vcGVuKCJQT1NUIiwgInJlc291cmNlcy9wb3N0LWVjaG8uY2dp
IiwgZmFsc2UpOyAKKyAgICB4aHIuc2VuZCgiZGF0YSIpOworICAgIAorICAgIGNvbXBsZXRlVGVz
dCgiIGxvYWQgbG9hZGVuZCIpOworfQorCitmdW5jdGlvbiB0ZXN0QWJvcnQoKQoreworICAgIHJl
c3VsdHMgPSAiIjsKKworICAgIHhoci5vbmxvYWRzdGFydCA9IGxvZ1VuZXhwZWN0ZWRQcm9ncmVz
c0V2ZW50OworICAgIHhoci5vbmFib3J0ID0gbG9nUHJvZ3Jlc3NFdmVudDsKKyAgICB4aHIub25l
cnJvciA9IGxvZ1VuZXhwZWN0ZWRQcm9ncmVzc0V2ZW50OworICAgIHhoci5vbmxvYWQgPSBsb2dV
bmV4cGVjdGVkUHJvZ3Jlc3NFdmVudDsKKyAgICB4aHIub25sb2FkZW5kID0gbG9nUHJvZ3Jlc3NF
dmVudDsKKyAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oZSkgeworICAgICAg
ICBpZiAoeGhyLnJlYWR5U3RhdGUgPT0geGhyLkRPTkUpCisgICAgICAgICAgICB4aHIuYWJvcnQo
KTsKKyAgICB9CisKKyAgICB4aHIub3BlbigiUE9TVCIsICJyZXNvdXJjZXMvZ2V0LnR4dCIsIGZh
bHNlKTsgCisgICAgdHJ5IHsKKyAgICAgICAgeGhyLnNlbmQoKTsKKyAgICB9CisgICAgY2F0Y2gg
KGUpIHsKKyAgICAgICAgaWYgKGUuY29kZSAhPSBlLk5FVFdPUktfRVJSKQorICAgICAgICAgICAg
cmVzdWx0cyArPSAiICIgKyBlOworICAgIH0KKyAgICAKKyAgICBjb21wbGV0ZVRlc3QoIiBhYm9y
dCBsb2FkZW5kIik7Cit9CisKK3Rlc3ROb3JtYWwoKTsKK3Rlc3RBYm9ydCgpOworCis8L3Njcmlw
dD4KKzwvYm9keT4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJl
cXVlc3QveG1saHR0cHJlcXVlc3Qtc3luYy1uby1wcm9ncmVzcy1ldmVudHMtZXhwZWN0ZWQudHh0
IGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC94bWxodHRwcmVxdWVzdC1z
eW5jLW5vLXByb2dyZXNzLWV2ZW50cy1leHBlY3RlZC50eHQKaW5kZXggMjQ1ZDNjMDNjMzcwZWE4
MDYxN2U0YjQ2YTMwOTU5YTY0NzllMWJlZi4uYTUxMjZhYWRiNTljM2Y3MGJlMDM4YjY3OGUxZDFm
MzRkMDViZjIwOSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVx
dWVzdC94bWxodHRwcmVxdWVzdC1zeW5jLW5vLXByb2dyZXNzLWV2ZW50cy1leHBlY3RlZC50eHQK
KysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC94bWxodHRwcmVxdWVz
dC1zeW5jLW5vLXByb2dyZXNzLWV2ZW50cy1leHBlY3RlZC50eHQKQEAgLTYsMTcgKzYsMjEgQEAg
YnVnIDE3NTAyOiBBc3NlcnRpb24gZmFpbHVyZSB3aGVuIHRyeWluZyB0byByZXN0YXJ0IGEgc3lu
YyBYTUxIdHRwUmVxdWVzdCBhcyBhbgogIFN0ZXAgMTogU2FtZSBvcmlnaW4gcmVxdWVzdAogcmVh
ZHlzdGF0ZWNoYW5nZSA0CiBsb2FkCitsb2FkZW5kCiAKIFN0ZXAgMjogQ3Jvc3Mgb3JpZ2luIHJl
cXVlc3QsIGRpc2FsbG93ZWQKIHJlYWR5c3RhdGVjaGFuZ2UgNAogZXJyb3IKK2xvYWRlbmQKIEVy
cm9yOiBORVRXT1JLX0VSUjogWE1MSHR0cFJlcXVlc3QgRXhjZXB0aW9uIDEwMQogCiBTdGVwIDM6
IENyb3NzIG9yaWdpbiByZXF1ZXN0LCBhbGxvd2VkCiByZWFkeXN0YXRlY2hhbmdlIDQKIGxvYWQK
K2xvYWRlbmQKIAogU3RlcCA0OiBDcm9zcyBvcmlnaW4gcmVxdWVzdCwgY2hlY2sgdGhhdCBwcmVm
bGlnaHQgaXNuJ3QgYXR0ZW1wdGVkCiByZWFkeXN0YXRlY2hhbmdlIDQKIGxvYWQKK2xvYWRlbmQK
IAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>