<?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>69409</bug_id>
          
          <creation_ts>2011-10-05 03:09:21 -0700</creation_ts>
          <short_desc>[GTK] [WebKit2] Make adding another unit test easier</short_desc>
          <delta_ts>2011-10-11 21:22:07 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKitGTK</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Martin Robinson">mrobinson</reporter>
          <assigned_to name="Martin Robinson">mrobinson</assigned_to>
          <cc>cgarcia</cc>
    
    <cc>gustavo</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>478251</commentid>
    <comment_count>0</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-10-05 03:09:21 -0700</bug_when>
    <thetext>The GLib testing framework is a bit verbose and it&apos;s difficult to share fixtures between test files. This bug tracks adding a bit of C++ sugar to creating unit tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478255</commentid>
    <comment_count>1</comment_count>
      <attachid>109767</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-10-05 03:12:41 -0700</bug_when>
    <thetext>Created attachment 109767
Work in progress patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478371</commentid>
    <comment_count>2</comment_count>
      <attachid>109767</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-10-05 08:21:01 -0700</bug_when>
    <thetext>Comment on attachment 109767
Work in progress patch

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

I like the idea of making test easier to write, I have some comments, though.

&gt; GNUmakefile.am:211
&gt; +include Source/WebKit2/UIProcess/API/gtk/tests/GNUmakefile.am

Why adding a new makefile for the tests?

&gt; Source/WebKit2/UIProcess/API/gtk/tests/GNUmakefile.am:4
&gt; +TEST_PROGS += \
&gt; +	Programs/WebKit2APITests/TestWebKitWebContext \
&gt; +	Programs/WebKit2APITests/TestWebKitWebView \
&gt; +	Programs/WebKit2APITests/TestWebKitWebLoaderClient

Renaming the path and test names would break the bots, see bug https://bugs.webkit.org/show_bug.cgi?id=68992. so I would leave current names unless there&apos;s an important reason to rename them.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/GNUmakefile.am:35
&gt; +noinst_LTLIBRARIES += Libraries/libWebKit2APITestCore.la

This library should probably be in WebCore or Tools, so that it can be used for wk1 tests too.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/GNUmakefile.am:38
&gt; +	Source/WebKit2/UIProcess/API/gtk/tests/LoadTrackingTest.cpp \
&gt; +	Source/WebKit2/UIProcess/API/gtk/tests/LoadTrackingTest.h \

These files are specific to the loading test, I think there should be only common classes in the library, since all tests will link ot it.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitWebLoaderClient.cpp:27
&gt; +#include &quot;config.h&quot;
&gt; +
&gt; +#include &quot;LoadTrackingTest.h&quot;
&gt; +#include &lt;gtk/gtk.h&gt;
&gt; +#include &lt;libsoup/soup.h&gt;
&gt; +#include &lt;wtf/text/CString.h&gt;
&gt; +

I don&apos;t mind using C++ for unit tests, but I&apos;m not sure about using internal API in the tests. I think tests should only use public gtk+ api.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478372</commentid>
    <comment_count>3</comment_count>
      <attachid>109797</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-10-05 08:22:27 -0700</bug_when>
    <thetext>Created attachment 109797
Another approach based on martin&apos;s

I think we can make it even simpler, we don&apos;t need a library, just a header file with a couple of macros.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478394</commentid>
    <comment_count>4</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-10-05 08:45:41 -0700</bug_when>
    <thetext>I think I prefer my original approach in the end for a few reasons:

1. Having a generic fixture means that we can apply logic before and after all tests in all suites. The logic for the test path isn&apos;t duplicated in multiple places.

2. I think it&apos;s important that we push the most common fixtures now to other files so that they can be used in more than one place. If necessary simple fixtures can be kept inline near tests.

For an example, I could have easily extended the LoadTrackingTest fixture to also load alternate HTML when a failure happens. Then I could have used that fixture for multiple tests. This test probably belongs in TestWebKitWebView anyway.

In the second patch we have to duplicate the WebView and main loop creation. Seeing this in every single WebKit1 unit test file is one of the main reasons I set out to do this. We get to use the C++ class system to our advantage.

3. I think we should avoid having the main method as a macro. I dislike macros in general, and perhaps I&apos;ll look for a way to implement this via templates.

4. I renamed the test files to better match the other files in the source tree. I believe we should use WebKit naming conventions everywhere possible. The only other binaries we produce that are named like this are the WK1 tests.  I&apos;m not sure it makes sense in this case. I&apos;ll upload a new patch which fixes build-webkit as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478396</commentid>
    <comment_count>5</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-10-05 08:47:38 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; I&apos;ll upload a new patch which fixes build-webkit as well.

Sorry, I mean run-gtk-tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478404</commentid>
    <comment_count>6</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-10-05 09:02:17 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; I think I prefer my original approach in the end for a few reasons:
&gt; 
&gt; 1. Having a generic fixture means that we can apply logic before and after all tests in all suites. The logic for the test path isn&apos;t duplicated in multiple places.

There&apos;s a generic fixture in my patch too with methods begin and end to do whatever before and after tests.

&gt; 2. I think it&apos;s important that we push the most common fixtures now to other files so that they can be used in more than one place. If necessary simple fixtures can be kept inline near tests.
&gt;
&gt; For an example, I could have easily extended the LoadTrackingTest fixture to also load alternate HTML when a failure happens. Then I could have used that fixture for multiple tests. This test probably belongs in TestWebKitWebView anyway.

That&apos;s possible with my patch too, you can just add a new fixture for loading tests and make loader client fixture inherit from it. I merged them just to avoid having an unnecessary library and to make the patch simpler and smaller.
 
&gt; In the second patch we have to duplicate the WebView and main loop creation. Seeing this in every single WebKit1 unit test file is one of the main reasons I set out to do this. We get to use the C++ class system to our advantage.

You are assuming all tests using a web view have a main loop too. 

&gt; 3. I think we should avoid having the main method as a macro. I dislike macros in general, and perhaps I&apos;ll look for a way to implement this via templates.

I guess it&apos;s a matter of taste, I like macros :-) 

&gt; 4. I renamed the test files to better match the other files in the source tree. I believe we should use WebKit naming conventions everywhere possible. The only other binaries we produce that are named like this are the WK1 tests.  I&apos;m not sure it makes sense in this case. I&apos;ll upload a new patch which fixes build-webkit as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478405</commentid>
    <comment_count>7</comment_count>
      <attachid>109808</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-10-05 09:05:21 -0700</bug_when>
    <thetext>Created attachment 109808
My patch updated to fix run-gtk-tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478409</commentid>
    <comment_count>8</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-10-05 09:09:28 -0700</bug_when>
    <thetext>(In reply to comment #6)
 
&gt; You are assuming all tests using a web view have a main loop too. 

This is the case in almost all of the WebKit1 unit tests. I think it will be even more likely now because more operations will need to be asynchronous in WebKit -- for instance getting page content. I also believe this will help us organize our tests by what unit they go with, versus what fixture they need.

I&apos;m confidant that a more hierarchical design will make the barrier to adding a unit test smaller by allowing code reuse and reducing the noise in each test file. I think it&apos;s very important to make adding a unit test as easy as possible so we no longer shudder at having to write them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478899</commentid>
    <comment_count>9</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-10-05 20:12:20 -0700</bug_when>
    <thetext>Carlos, I examined your patch again and I think it is  not not so different from mine. I see a few main differences:

1. main() is inside a #define and depends on the fact that a test suite can only use one type of fixture. 
2. Tests are embedded in the fixtures.
3. The files use their original names.

Number 3 is not so important to me, but I do believe we should name the tests after the API they test - testloading -&gt; testwebloaderclient, etc.

Number 1 and 2 are pretty important to me though. Fixtures should be independent of tests, we should be able to share them between suites and suites should be able to mix and match fixtures. That&apos;s the main reason I wanted to do this. Perhaps we can reach some sort of compromise on the rest?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478988</commentid>
    <comment_count>10</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-10-05 23:40:36 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; Carlos, I examined your patch again and I think it is  not not so different from mine. I see a few main differences:

Yes, as I said, my patch is based on yours.

&gt; 1. main() is inside a #define and depends on the fact that a test suite can only use one type of fixture. 
&gt; 2. Tests are embedded in the fixtures.
&gt; 3. The files use their original names.
&gt; 
&gt; Number 3 is not so important to me, but I do believe we should name the tests after the API they test - testloading -&gt; testwebloaderclient, etc.
&gt; 
&gt; Number 1 and 2 are pretty important to me though. Fixtures should be independent of tests, we should be able to share them between suites and suites should be able to mix and match fixtures. That&apos;s the main reason I wanted to do this. Perhaps we can reach some sort of compromise on the rest?

Ok, I just wanted to avoid having another library if it is not really needed, and I didn&apos;t like having the main() in the library and the beforAll() afterAll() methods, I think we can have a class where befor/fater is just the constructor/destructor. But anyway, I don&apos;t want to block all new patches on this, and I agree on the idea of making adding new tests easier, so if xan and kov like your proposal it&apos;s fine with me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481330</commentid>
    <comment_count>11</comment_count>
      <attachid>110445</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-10-10 17:16:59 -0700</bug_when>
    <thetext>Created attachment 110445
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481445</commentid>
    <comment_count>12</comment_count>
      <attachid>110472</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-10-10 22:08:50 -0700</bug_when>
    <thetext>Created attachment 110472
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481447</commentid>
    <comment_count>13</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-10-10 22:09:41 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; Created an attachment (id=110472) [details]
&gt; Patch

I updated the patch to fix some style issues and disconnect handlers signal destruction.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481745</commentid>
    <comment_count>14</comment_count>
      <attachid>110472</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2011-10-11 11:15:08 -0700</bug_when>
    <thetext>Comment on attachment 110472
Patch

This shall make us able to set aside laziness and add unit tests more often =)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>482188</commentid>
    <comment_count>15</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-10-11 21:20:09 -0700</bug_when>
    <thetext>Committed r97226: &lt;http://trac.webkit.org/changeset/97226&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>109767</attachid>
            <date>2011-10-05 03:12:41 -0700</date>
            <delta_ts>2011-10-05 09:05:21 -0700</delta_ts>
            <desc>Work in progress patch</desc>
            <filename>unittest-overhaul.diff</filename>
            <type>text/plain</type>
            <size>42927</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0dOVW1ha2VmaWxlLmFtIGIvR05VbWFrZWZpbGUuYW0KaW5kZXggMmNlM2Uy
My4uZWI5ZDE3NyAxMDA2NDQKLS0tIGEvR05VbWFrZWZpbGUuYW0KKysrIGIvR05VbWFrZWZpbGUu
YW0KQEAgLTIwOCw2ICsyMDgsNyBAQCBpbmNsdWRlIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9H
TlVtYWtlZmlsZS5JbWFnZURpZmYuYW0KIAogaWYgRU5BQkxFX1dFQktJVDIKIGluY2x1ZGUgU291
cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0KK2luY2x1ZGUgU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvdGVzdHMvR05VbWFrZWZpbGUuYW0KIGluY2x1ZGUgVG9vbHMvTWluaUJyb3dz
ZXIvZ3RrL0dOVW1ha2VmaWxlLmFtCiBpbmNsdWRlIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvR05V
bWFrZWZpbGUuYW0KICMgW0dUS10gUmVmYWN0b3IgdGhlIHRyYW5zbGF0aW9ucyBub3cgdGhhdCB3
ZSBoYXZlIHdlYmtpdDIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFt
IGIvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0KaW5kZXggMmRmYTE5ZC4uN2UxOWY4NCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0KKysrIGIvU291cmNlL1dl
YktpdDIvR05VbWFrZWZpbGUuYW0KQEAgLTEwNzcsNTMgKzEwNzcsNiBAQCBDTEVBTkZJTEVTICs9
IFwKIERJU1RDTEVBTkZJTEVTICs9IFwKIAkkKHRvcF9idWlsZGRpcikvV2ViS2l0Mi93ZWJraXQy
Z3RrLUBXRUJLSVRHVEtfQVBJX1ZFUlNJT05ALnBjCiAKLSMgVW5pdCB0ZXN0cwotVEVTVF9QUk9H
UyArPSBcCi0JUHJvZ3JhbXMvdW5pdHRlc3RzL3dlYmtpdDIvdGVzdHdlYmNvbnRleHQgXAotCVBy
b2dyYW1zL3VuaXR0ZXN0cy93ZWJraXQyL3Rlc3R3ZWJ2aWV3IFwKLQlQcm9ncmFtcy91bml0dGVz
dHMvd2Via2l0Mi90ZXN0bG9hZGluZwotCi1ub2luc3RfUFJPR1JBTVMgKz0gJChURVNUX1BST0dT
KQotd2Via2l0Ml90ZXN0c19jZmxhZ3MgPSBcCi0JLURXRUJLSVRfRVhFQ19QQVRIPVwiJHtzaGVs
bCBwd2R9LyQodG9wX2J1aWxkZGlyKS9Qcm9ncmFtc1wiIFwKLQktSSQoc3JjZGlyKS9Tb3VyY2Ug
XAotCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJLaXQyIFwKLQktSSQodG9wX2J1aWxkZGlyKS9EZXJp
dmVkU291cmNlcy9XZWJLaXQyL2luY2x1ZGUgXAotCS1JJCh0b3BfYnVpbGRkaXIpL0Rlcml2ZWRT
b3VyY2VzL1dlYktpdDIvd2Via2l0Mmd0ayBcCi0JLUkkKHRvcF9idWlsZGRpcikvRGVyaXZlZFNv
dXJjZXMvV2ViS2l0Mi93ZWJraXQyZ3RrL2luY2x1ZGUgXAotCS1JJChzcmNkaXIpL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrIFwKLQkkKGdsb2JhbF9jZmxhZ3MpIFwKLQkkKGdsb2Jh
bF9jcHBmbGFncykgXAotCSQoR0xJQl9DRkxBR1MpIFwKLQkkKEdUS19DRkxBR1MpIFwKLQkkKExJ
QlNPVVBfQ0ZMQUdTKQotCi13ZWJraXQyX3Rlc3RzX2xkYWRkID0gXAotCWxpYmphdmFzY3JpcHRj
b3JlZ3RrLUBXRUJLSVRHVEtfQVBJX01BSk9SX1ZFUlNJT05ALkBXRUJLSVRHVEtfQVBJX01JTk9S
X1ZFUlNJT05ALmxhIFwKLQlsaWJ3ZWJraXQyZ3RrLUBXRUJLSVRHVEtfQVBJX01BSk9SX1ZFUlNJ
T05ALkBXRUJLSVRHVEtfQVBJX01JTk9SX1ZFUlNJT05ALmxhIFwKLQkkKEdMSUJfTElCUykgXAot
CSQoR1RLX0xJQlMpIFwKLQkkKExJQlNPVVBfTElCUykKLQotd2Via2l0Ml90ZXN0c19sZGZsYWdz
ID0gXAotCS1uby1pbnN0YWxsIFwKLQktbm8tZmFzdC1pbnN0YWxsCi0KLVByb2dyYW1zX3VuaXR0
ZXN0c193ZWJraXQyX3Rlc3R3ZWJjb250ZXh0X1NPVVJDRVMgPSBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay90ZXN0cy90ZXN0d2ViY29udGV4dC5jCi1Qcm9ncmFtc191bml0dGVzdHNf
d2Via2l0Ml90ZXN0d2ViY29udGV4dF9DRkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfY2ZsYWdzKQot
UHJvZ3JhbXNfdW5pdHRlc3RzX3dlYmtpdDJfdGVzdHdlYmNvbnRleHRfTERBREQgPSAkKHdlYmtp
dDJfdGVzdHNfbGRhZGQpCi1Qcm9ncmFtc191bml0dGVzdHNfd2Via2l0Ml90ZXN0d2ViY29udGV4
dF9MREZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2xkZmxhZ3MpCi0KLVByb2dyYW1zX3VuaXR0ZXN0
c193ZWJraXQyX3Rlc3R3ZWJ2aWV3X1NPVVJDRVMgPSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay90ZXN0cy90ZXN0d2Vidmlldy5jCi1Qcm9ncmFtc191bml0dGVzdHNfd2Via2l0Ml90
ZXN0d2Vidmlld19DRkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfY2ZsYWdzKQotUHJvZ3JhbXNfdW5p
dHRlc3RzX3dlYmtpdDJfdGVzdHdlYnZpZXdfTERBREQgPSAkKHdlYmtpdDJfdGVzdHNfbGRhZGQp
Ci1Qcm9ncmFtc191bml0dGVzdHNfd2Via2l0Ml90ZXN0d2Vidmlld19MREZMQUdTID0gJCh3ZWJr
aXQyX3Rlc3RzX2xkZmxhZ3MpCi0KLVByb2dyYW1zX3VuaXR0ZXN0c193ZWJraXQyX3Rlc3Rsb2Fk
aW5nX1NPVVJDRVMgPSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy90ZXN0
bG9hZGluZy5jCi1Qcm9ncmFtc191bml0dGVzdHNfd2Via2l0Ml90ZXN0bG9hZGluZ19DRkxBR1Mg
PSAkKHdlYmtpdDJfdGVzdHNfY2ZsYWdzKQotUHJvZ3JhbXNfdW5pdHRlc3RzX3dlYmtpdDJfdGVz
dGxvYWRpbmdfTERBREQgPSAkKHdlYmtpdDJfdGVzdHNfbGRhZGQpCi1Qcm9ncmFtc191bml0dGVz
dHNfd2Via2l0Ml90ZXN0bG9hZGluZ19MREZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2xkZmxhZ3Mp
Ci0KICMgV2ViS2l0V2ViUHJvY2VzcwogbGliZXhlY19QUk9HUkFNUyArPSBcCiAJUHJvZ3JhbXMv
V2ViS2l0V2ViUHJvY2VzcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvdGVzdHMvR05VbWFrZWZpbGUuYW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay90ZXN0cy9HTlVtYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi5mZTFhZGM5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvdGVzdHMvR05VbWFrZWZpbGUuYW0KQEAgLTAsMCArMSw2MiBAQAorVEVTVF9QUk9H
UyArPSBcCisJUHJvZ3JhbXMvV2ViS2l0MkFQSVRlc3RzL1Rlc3RXZWJLaXRXZWJDb250ZXh0IFwK
KwlQcm9ncmFtcy9XZWJLaXQyQVBJVGVzdHMvVGVzdFdlYktpdFdlYlZpZXcgXAorCVByb2dyYW1z
L1dlYktpdDJBUElUZXN0cy9UZXN0V2ViS2l0V2ViTG9hZGVyQ2xpZW50CisKK25vaW5zdF9QUk9H
UkFNUyArPSAkKFRFU1RfUFJPR1MpCit3ZWJraXQyX3Rlc3RzX2NwcGZsYWdzID0gXAorCS1EV0VC
S0lUX0VYRUNfUEFUSD1cIiR7c2hlbGwgcHdkfS8kKHRvcF9idWlsZGRpcikvUHJvZ3JhbXNcIiBc
CisJJChqYXZhc2NyaXB0Y29yZV9jcHBmbGFncykgXAorCS1JJChzcmNkaXIpL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZSBcCisJLUkkKHNyY2RpcikvU291cmNlIFwKKwktSSQoc3JjZGlyKS9Tb3VyY2Uv
V2ViS2l0MiBcCisJLUkkKHRvcF9idWlsZGRpcikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9pbmNs
dWRlIFwKKwktSSQodG9wX2J1aWxkZGlyKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL3dlYmtpdDJn
dGsgXAorCS1JJCh0b3BfYnVpbGRkaXIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvd2Via2l0Mmd0
ay9pbmNsdWRlIFwKKwktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ayBcCisJJChnbG9iYWxfY3BwZmxhZ3MpIFwKKwkkKEdMSUJfQ0ZMQUdTKSBcCisJJChHVEtfQ0ZM
QUdTKSBcCisJJChMSUJTT1VQX0NGTEFHUykKKword2Via2l0Ml90ZXN0c19sZGFkZCA9IFwKKwls
aWJqYXZhc2NyaXB0Y29yZWd0ay1AV0VCS0lUR1RLX0FQSV9NQUpPUl9WRVJTSU9OQC5AV0VCS0lU
R1RLX0FQSV9NSU5PUl9WRVJTSU9OQC5sYSBcCisJbGlid2Via2l0Mmd0ay1AV0VCS0lUR1RLX0FQ
SV9NQUpPUl9WRVJTSU9OQC5AV0VCS0lUR1RLX0FQSV9NSU5PUl9WRVJTSU9OQC5sYSBcCisJTGli
cmFyaWVzL2xpYldlYktpdDJBUElUZXN0Q29yZS5sYSBcCisJJChHRU9DTFVFX0xJQlMpIFwKKwkk
KEdMSUJfTElCUykgXAorCSQoR1RLX0xJQlMpIFwKKwkkKExJQlNPVVBfTElCUykKKword2Via2l0
Ml90ZXN0c19sZGZsYWdzID0gXAorCS1uby1pbnN0YWxsIFwKKwktbm8tZmFzdC1pbnN0YWxsCisK
K25vaW5zdF9MVExJQlJBUklFUyArPSBMaWJyYXJpZXMvbGliV2ViS2l0MkFQSVRlc3RDb3JlLmxh
CitMaWJyYXJpZXNfbGliV2ViS2l0MkFQSVRlc3RDb3JlX2xhX1NPVVJDRVMgPSBcCisJU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvTG9hZFRyYWNraW5nVGVzdC5jcHAgXAor
CVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0xvYWRUcmFja2luZ1Rlc3Qu
aCBcCisJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdE1haW4uY3Bw
IFwKKwlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0TWFpbi5oIFwK
KwlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJWaWV3VGVzdC5jcHAg
XAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlZpZXdUZXN0LmgK
K0xpYnJhcmllc19saWJXZWJLaXQyQVBJVGVzdENvcmVfbGFfQ1BQRkxBR1MgPSAkKHdlYmtpdDJf
dGVzdHNfY3BwZmxhZ3MpCisKK1Byb2dyYW1zX1dlYktpdDJBUElUZXN0c19UZXN0V2ViS2l0V2Vi
Q29udGV4dF9TT1VSQ0VTID0gXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rl
c3RzL1Rlc3RXZWJLaXRXZWJDb250ZXh0LmNwcAorUHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3RzX1Rl
c3RXZWJLaXRXZWJDb250ZXh0X0NQUEZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2NwcGZsYWdzKQor
UHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3RzX1Rlc3RXZWJLaXRXZWJDb250ZXh0X0xEQUREID0gJCh3
ZWJraXQyX3Rlc3RzX2xkYWRkKQorUHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3RzX1Rlc3RXZWJLaXRX
ZWJDb250ZXh0X0xERkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfbGRmbGFncykKKworUHJvZ3JhbXNf
V2ViS2l0MkFQSVRlc3RzX1Rlc3RXZWJLaXRXZWJWaWV3X1NPVVJDRVMgPSBcCisJU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdFdlYlZpZXcuY3BwCitQcm9n
cmFtc19XZWJLaXQyQVBJVGVzdHNfVGVzdFdlYktpdFdlYlZpZXdfQ1BQRkxBR1MgPSAkKHdlYmtp
dDJfdGVzdHNfY3BwZmxhZ3MpCitQcm9ncmFtc19XZWJLaXQyQVBJVGVzdHNfVGVzdFdlYktpdFdl
YlZpZXdfTERBREQgPSAkKHdlYmtpdDJfdGVzdHNfbGRhZGQpCitQcm9ncmFtc19XZWJLaXQyQVBJ
VGVzdHNfVGVzdFdlYktpdFdlYlZpZXdfTERGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19sZGZsYWdz
KQorCitQcm9ncmFtc19XZWJLaXQyQVBJVGVzdHNfVGVzdFdlYktpdFdlYkxvYWRlckNsaWVudF9T
T1VSQ0VTID0gXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RX
ZWJLaXRXZWJMb2FkZXJDbGllbnQuY3BwCitQcm9ncmFtc19XZWJLaXQyQVBJVGVzdHNfVGVzdFdl
YktpdFdlYkxvYWRlckNsaWVudF9DUFBGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19jcHBmbGFncykK
K1Byb2dyYW1zX1dlYktpdDJBUElUZXN0c19UZXN0V2ViS2l0V2ViTG9hZGVyQ2xpZW50X0xEQURE
ID0gJCh3ZWJraXQyX3Rlc3RzX2xkYWRkKQorUHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3RzX1Rlc3RX
ZWJLaXRXZWJMb2FkZXJDbGllbnRfTERGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19sZGZsYWdzKQor
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9Mb2Fk
VHJhY2tpbmdUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3Rz
L0xvYWRUcmFja2luZ1Rlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjYyYWIyNjIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay90ZXN0cy9Mb2FkVHJhY2tpbmdUZXN0LmNwcApAQCAtMCwwICsxLDExNyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiTG9hZFRyYWNraW5nVGVzdC5oIgorCisjaW5jbHVkZSA8d2Via2l0Mi93ZWJraXQyLmg+
CisKK3N0YXRpYyBnYm9vbGVhbiBwcm92aXNpb25hbExvYWRTdGFydGVkQ2FsbGJhY2soV2ViS2l0
V2ViTG9hZGVyQ2xpZW50KiBjbGllbnQsIExvYWRUcmFja2luZ1Rlc3QqIHRlc3QpCit7CisgICAg
dGVzdC0+cHJvdmlzaW9uYWxMb2FkU3RhcnRlZChjbGllbnQpOworICAgIHJldHVybiBUUlVFOwor
fQorCitzdGF0aWMgZ2Jvb2xlYW4gcHJvdmlzaW9uYWxMb2FkUmVjZWl2ZWRTZXJ2ZXJSZWRpcmVj
dENhbGxiYWNrKFdlYktpdFdlYkxvYWRlckNsaWVudCAqY2xpZW50LCBMb2FkVHJhY2tpbmdUZXN0
KiB0ZXN0KQoreworICAgIHRlc3QtPnByb3Zpc2lvbmFsTG9hZFJlY2VpdmVkU2VydmVyUmVkaXJl
Y3QoY2xpZW50KTsKKyAgICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIGdib29sZWFuIHByb3Zp
c2lvbmFsTG9hZEZhaWxlZENhbGxiYWNrKFdlYktpdFdlYkxvYWRlckNsaWVudCAqY2xpZW50LCBj
b25zdCBnY2hhciAqZmFpbGluZ1VSSSwgR0Vycm9yICplcnJvciwgTG9hZFRyYWNraW5nVGVzdCog
dGVzdCkKK3sKKyAgICB0ZXN0LT5wcm92aXNpb25hbExvYWRGYWlsZWQoY2xpZW50LCBmYWlsaW5n
VVJJLCBlcnJvcik7CisgICAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBsb2Fk
Q29tbWl0dGVkQ2FsbGJhY2soV2ViS2l0V2ViTG9hZGVyQ2xpZW50ICpjbGllbnQsIExvYWRUcmFj
a2luZ1Rlc3QqIHRlc3QpCit7CisgICAgdGVzdC0+bG9hZENvbW1pdHRlZChjbGllbnQpOworICAg
IHJldHVybiBUUlVFOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gbG9hZEZpbmlzaGVkQ2FsbGJhY2so
V2ViS2l0V2ViTG9hZGVyQ2xpZW50ICpjbGllbnQsIExvYWRUcmFja2luZ1Rlc3QqIHRlc3QpCit7
CisgICAgdGVzdC0+bG9hZEZpbmlzaGVkKGNsaWVudCk7CisgICAgcmV0dXJuIFRSVUU7Cit9CisK
K3N0YXRpYyBnYm9vbGVhbiBsb2FkRmFpbGVkQ2FsbGJhY2soV2ViS2l0V2ViTG9hZGVyQ2xpZW50
ICpjbGllbnQsIGNvbnN0IGdjaGFyICpmYWlsaW5nVVJJLCBHRXJyb3IgKmVycm9yLCBMb2FkVHJh
Y2tpbmdUZXN0KiB0ZXN0KQoreworICAgIHRlc3QtPmxvYWRGYWlsZWQoY2xpZW50LCBmYWlsaW5n
VVJJLCBlcnJvcik7CisgICAgcmV0dXJuIFRSVUU7Cit9CisKK0xvYWRUcmFja2luZ1Rlc3Q6Okxv
YWRUcmFja2luZ1Rlc3QoKQorICAgIDogbV9ydW5Mb2FkVW50aWxDb21wbGV0aW9uKGZhbHNlKQor
eworICAgIFdlYktpdFdlYkxvYWRlckNsaWVudCogY2xpZW50ID0gd2Via2l0X3dlYl92aWV3X2dl
dF9sb2FkZXJfY2xpZW50KG1fd2ViVmlldyk7CisgICAgZ19zaWduYWxfY29ubmVjdChjbGllbnQs
ICJwcm92aXNpb25hbC1sb2FkLXN0YXJ0ZWQiLCBHX0NBTExCQUNLKHByb3Zpc2lvbmFsTG9hZFN0
YXJ0ZWRDYWxsYmFjayksIHRoaXMpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QoY2xpZW50LCAicHJv
dmlzaW9uYWwtbG9hZC1yZWNlaXZlZC1zZXJ2ZXItcmVkaXJlY3QiLCBHX0NBTExCQUNLKHByb3Zp
c2lvbmFsTG9hZFJlY2VpdmVkU2VydmVyUmVkaXJlY3RDYWxsYmFjayksIHRoaXMpOworICAgIGdf
c2lnbmFsX2Nvbm5lY3QoY2xpZW50LCAicHJvdmlzaW9uYWwtbG9hZC1mYWlsZWQiLCBHX0NBTExC
QUNLKHByb3Zpc2lvbmFsTG9hZEZhaWxlZENhbGxiYWNrKSwgdGhpcyk7CisgICAgZ19zaWduYWxf
Y29ubmVjdChjbGllbnQsICJsb2FkLWNvbW1pdHRlZCIsIEdfQ0FMTEJBQ0sobG9hZENvbW1pdHRl
ZENhbGxiYWNrKSwgdGhpcyk7CisgICAgZ19zaWduYWxfY29ubmVjdChjbGllbnQsICJsb2FkLWZp
bmlzaGVkIiwgR19DQUxMQkFDSyhsb2FkRmluaXNoZWRDYWxsYmFjayksIHRoaXMpOworICAgIGdf
c2lnbmFsX2Nvbm5lY3QoY2xpZW50LCAibG9hZC1mYWlsZWQiLCBHX0NBTExCQUNLKGxvYWRGYWls
ZWRDYWxsYmFjayksIHRoaXMpOworfQorCitMb2FkVHJhY2tpbmdUZXN0Ojp+TG9hZFRyYWNraW5n
VGVzdCgpCit7Cit9CisKK3ZvaWQgTG9hZFRyYWNraW5nVGVzdDo6d2FpdFVudGlsTG9hZEZpbmlz
aGVkKCkKK3sKKyAgICBtX3J1bkxvYWRVbnRpbENvbXBsZXRpb24gPSB0cnVlOworICAgIGdfbWFp
bl9sb29wX3J1bihtX21haW5Mb29wKTsKK30KKwordm9pZCBMb2FkVHJhY2tpbmdUZXN0Ojpwcm92
aXNpb25hbExvYWRTdGFydGVkKFdlYktpdFdlYkxvYWRlckNsaWVudCogY2xpZW50KQoreworICAg
IG1fbG9hZEV2ZW50cy5hcHBlbmQoUHJvdmlzaW9uYWxMb2FkU3RhcnRlZCk7Cit9CisKK3ZvaWQg
TG9hZFRyYWNraW5nVGVzdDo6cHJvdmlzaW9uYWxMb2FkUmVjZWl2ZWRTZXJ2ZXJSZWRpcmVjdChX
ZWJLaXRXZWJMb2FkZXJDbGllbnQgKmNsaWVudCkKK3sKKyAgICBtX2xvYWRFdmVudHMuYXBwZW5k
KFByb3Zpc2lvbmFsTG9hZFJlY2VpdmVkU2VydmVyUmVkaXJlY3QpOworfQorCit2b2lkIExvYWRU
cmFja2luZ1Rlc3Q6OnByb3Zpc2lvbmFsTG9hZEZhaWxlZChXZWJLaXRXZWJMb2FkZXJDbGllbnQg
KmNsaWVudCwgY29uc3QgZ2NoYXIgKmZhaWxpbmdVUkksIEdFcnJvciAqZXJyb3IpCit7CisgICAg
bV9sb2FkRXZlbnRzLmFwcGVuZChQcm92aXNpb25hbExvYWRGYWlsZWQpOworICAgIGlmIChtX3J1
bkxvYWRVbnRpbENvbXBsZXRpb24pCisgICAgICAgIGdfbWFpbl9sb29wX3F1aXQobV9tYWluTG9v
cCk7Cit9CisKK3ZvaWQgTG9hZFRyYWNraW5nVGVzdDo6bG9hZENvbW1pdHRlZChXZWJLaXRXZWJM
b2FkZXJDbGllbnQgKmNsaWVudCkKK3sKKyAgICBtX2xvYWRFdmVudHMuYXBwZW5kKExvYWRDb21t
aXR0ZWQpOworfQorCit2b2lkIExvYWRUcmFja2luZ1Rlc3Q6OmxvYWRGaW5pc2hlZChXZWJLaXRX
ZWJMb2FkZXJDbGllbnQgKmNsaWVudCkKK3sKKyAgICBtX2xvYWRFdmVudHMuYXBwZW5kKExvYWRG
aW5pc2hlZCk7CisgICAgaWYgKG1fcnVuTG9hZFVudGlsQ29tcGxldGlvbikKKyAgICAgICAgZ19t
YWluX2xvb3BfcXVpdChtX21haW5Mb29wKTsKK30KKwordm9pZCBMb2FkVHJhY2tpbmdUZXN0Ojps
b2FkRmFpbGVkKFdlYktpdFdlYkxvYWRlckNsaWVudCAqY2xpZW50LCBjb25zdCBnY2hhciAqZmFp
bGluZ1VSSSwgR0Vycm9yICplcnJvcikKK3sKKyAgICBtX2xvYWRFdmVudHMuYXBwZW5kKExvYWRG
YWlsZWQpOworICAgIGlmIChtX3J1bkxvYWRVbnRpbENvbXBsZXRpb24pCisgICAgICAgIGdfbWFp
bl9sb29wX3F1aXQobV9tYWluTG9vcCk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9Mb2FkVHJhY2tpbmdUZXN0LmggYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9Mb2FkVHJhY2tpbmdUZXN0LmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWEzY2I2ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0xvYWRUcmFja2luZ1Rlc3QuaApAQCAt
MCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5k
ZWYgTG9hZFRyYWNraW5nVGVzdF9oCisjZGVmaW5lIExvYWRUcmFja2luZ1Rlc3RfaAorCisjaW5j
bHVkZSAiVGVzdE1haW4uaCIKKyNpbmNsdWRlICJXZWJWaWV3VGVzdC5oIgorI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KKworY2xhc3MgTG9hZFRyYWNraW5nVGVzdCA6IHB1YmxpYyBXZWJWaWV3VGVz
dCB7CitwdWJsaWM6CisgICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShMb2FkVHJhY2tpbmdUZXN0
KTsKKyAgICBMb2FkVHJhY2tpbmdUZXN0KCk7CisgICAgdmlydHVhbCB+TG9hZFRyYWNraW5nVGVz
dCgpOworICAgIHZvaWQgd2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICB2aXJ0dWFsIHZv
aWQgcHJvdmlzaW9uYWxMb2FkU3RhcnRlZChXZWJLaXRXZWJMb2FkZXJDbGllbnQqIGNsaWVudCk7
CisgICAgdmlydHVhbCB2b2lkIHByb3Zpc2lvbmFsTG9hZFJlY2VpdmVkU2VydmVyUmVkaXJlY3Qo
V2ViS2l0V2ViTG9hZGVyQ2xpZW50ICpjbGllbnQpOworICAgIHZpcnR1YWwgdm9pZCBwcm92aXNp
b25hbExvYWRGYWlsZWQoV2ViS2l0V2ViTG9hZGVyQ2xpZW50ICpjbGllbnQsIGNvbnN0IGdjaGFy
ICpmYWlsaW5nVVJJLCBHRXJyb3IgKmVycm9yKTsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZENvbW1p
dHRlZChXZWJLaXRXZWJMb2FkZXJDbGllbnQgKmNsaWVudCk7CisgICAgdmlydHVhbCB2b2lkIGxv
YWRGaW5pc2hlZChXZWJLaXRXZWJMb2FkZXJDbGllbnQgKmNsaWVudCk7CisgICAgdmlydHVhbCB2
b2lkIGxvYWRGYWlsZWQoV2ViS2l0V2ViTG9hZGVyQ2xpZW50ICpjbGllbnQsIGNvbnN0IGdjaGFy
ICpmYWlsaW5nVVJJLCBHRXJyb3IgKmVycm9yKTsKKworICAgIGVudW0gTG9hZEV2ZW50cyB7Cisg
ICAgICAgIFByb3Zpc2lvbmFsTG9hZFN0YXJ0ZWQsCisgICAgICAgIFByb3Zpc2lvbmFsTG9hZFJl
Y2VpdmVkU2VydmVyUmVkaXJlY3QsCisgICAgICAgIFByb3Zpc2lvbmFsTG9hZEZhaWxlZCwKKyAg
ICAgICAgTG9hZENvbW1pdHRlZCwKKyAgICAgICAgTG9hZEZpbmlzaGVkLAorICAgICAgICBMb2Fk
RmFpbGVkCisgICAgfTsKKyAgICBib29sIG1fcnVuTG9hZFVudGlsQ29tcGxldGlvbjsKKyAgICBW
ZWN0b3I8TG9hZEV2ZW50cz4gbV9sb2FkRXZlbnRzOworfTsKKworI2VuZGlmIC8vIExvYWRUcmFj
a2luZ1Rlc3RfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
dGVzdHMvVGVzdE1haW4uY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVz
dHMvVGVzdE1haW4uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViMTU3
NTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90
ZXN0cy9UZXN0TWFpbi5jcHAKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwOSwgMjAxMCBHdXN0YXZvIE5vcm9uaGEgU2lsdmEKKyAqIENvcHlyaWdodCAoQykgMjAwOSwg
MjAxMSBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdE1haW4u
aCIKKworI2luY2x1ZGUgPGd0ay9ndGsuaD4KKwordm9pZCBiZWZvcmVBbGwoKTsKK3ZvaWQgYWZ0
ZXJBbGwoKTsKKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworICAgIGdfdGhy
ZWFkX2luaXQoMCk7CisgICAgZ3RrX3Rlc3RfaW5pdCgmYXJnYywgJmFyZ3YsIDApOworICAgIGdf
c2V0ZW52KCJXRUJLSVRfRVhFQ19QQVRIIiwgV0VCS0lUX0VYRUNfUEFUSCwgRkFMU0UpOworICAg
IGdfdGVzdF9idWdfYmFzZSgiaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvIik7CisKKyAgICBiZWZv
cmVBbGwoKTsKKyAgICBpbnQgcmV0dXJuVmFsdWUgPSBnX3Rlc3RfcnVuKCk7CisgICAgYWZ0ZXJB
bGwoKTsKKworICAgIHJldHVybiByZXR1cm5WYWx1ZTsKK30KKwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdE1haW4uaCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RNYWluLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uMmFhYzE4YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RNYWluLmgKQEAgLTAsMCArMSw0NyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFRlc3RNYWluX2gK
KyNkZWZpbmUgVGVzdE1haW5faAorCisjaW5jbHVkZSA8Z2xpYi5oPgorI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0dPd25QdHIuaD4KKworI2RlZmluZSBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKENs
YXNzTmFtZSkgXAorICAgIHN0YXRpYyB2b2lkIHNldFVwKENsYXNzTmFtZSogZml4dHVyZSwgZ2Nv
bnN0cG9pbnRlciBkYXRhKSBcCisgICAgeyBcCisgICAgICAgIG5ldyAoZml4dHVyZSkgQ2xhc3NO
YW1lOyBcCisgICAgfSBcCisgICAgc3RhdGljIHZvaWQgdGVhckRvd24oQ2xhc3NOYW1lKiBmaXh0
dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpIFwKKyAgICB7IFwKKyAgICAgICAgZml4dHVyZS0+fkNs
YXNzTmFtZSgpOyBcCisgICAgfSBcCisgICAgc3RhdGljIHZvaWQgYWRkKGNvbnN0IGNoYXIqIHN1
aXRlTmFtZSwgY29uc3QgY2hhciogdGVzdE5hbWUsIHZvaWQgKCp0ZXN0RnVuYykoQ2xhc3NOYW1l
KiwgY29uc3Qgdm9pZCopKSBcCisgICAgeyBcCisgICAgICAgIEdPd25QdHI8Z2NoYXI+IHRlc3RQ
YXRoKGdfc3RyZHVwX3ByaW50ZigiL3dlYmtpdDIvJXMvJXMiLCBzdWl0ZU5hbWUsIHRlc3ROYW1l
KSk7IFwKKyAgICAgICAgZ190ZXN0X2FkZCh0ZXN0UGF0aC5nZXQoKSwgQ2xhc3NOYW1lLCAwLCBD
bGFzc05hbWU6OnNldFVwLCB0ZXN0RnVuYywgQ2xhc3NOYW1lOjp0ZWFyRG93bik7IFwKKyAgICB9
CisKK2NsYXNzIFRlc3QKK3sKK3B1YmxpYzoKKyAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKFRl
c3QpOworfTsKKworI2VuZGlmIC8vIFRlc3RNYWluX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRXZWJDb250ZXh0LmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRXZWJDb250ZXh0
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDdjZTViCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdl
YktpdFdlYkNvbnRleHQuY3BwCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIlRlc3RN
YWluLmgiCisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHdlYmtpdDIvd2Via2l0Mi5o
PgorCitzdGF0aWMgdm9pZCB0ZXN0V2ViQ29udGV4dERlZmF1bHQoVGVzdCogdGVzdCwgZ2NvbnN0
cG9pbnRlcikKK3sKKyAgICAvLyBDaGVjayB0aGVyZSdzIGEgc2luZ2xlIGluc3RhbmNlIG9mIHRo
ZSBkZWZhdWx0IHdlYiBjb250ZXh0LgorICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfY29udGV4dF9n
ZXRfZGVmYXVsdCgpID09IHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZGVmYXVsdCgpKTsKK30KKwor
dm9pZCBiZWZvcmVBbGwoKQoreworICAgIFRlc3Q6OmFkZCgiV2ViS2l0V2ViQ29udGV4dCIsICJk
ZWZhdWx0LWNvbnRleHQiLCB0ZXN0V2ViQ29udGV4dERlZmF1bHQpOworfQorCit2b2lkIGFmdGVy
QWxsKCkKK3sKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L3Rlc3RzL1Rlc3RXZWJLaXRXZWJMb2FkZXJDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdFdlYkxvYWRlckNsaWVudC5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjY4ZTM4NgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRXZWJMb2Fk
ZXJDbGllbnQuY3BwCkBAIC0wLDAgKzEsMTMxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5
LCAyMDEwIEd1c3Rhdm8gTm9yb25oYSBTaWx2YQorICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEx
IElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkxvYWRUcmFja2lu
Z1Rlc3QuaCIKKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8bGlic291cC9zb3VwLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCitzdGF0aWMgU291cFVSSSoga0Jhc2VV
UkkgPSAwOworc3RhdGljIFNvdXBTZXJ2ZXIqIGtTb3VwU2VydmVyID0gMDsKKworc3RhdGljIENT
dHJpbmcgZ2V0VVJJRm9yUGF0aChjb25zdCBjaGFyKiBwYXRoKQoreworICAgIFNvdXBVUkkqIHVy
aSA9IHNvdXBfdXJpX25ld193aXRoX2Jhc2Uoa0Jhc2VVUkksIHBhdGgpOworICAgIEdPd25QdHI8
Z2NoYXI+IHVyaVN0cmluZyhzb3VwX3VyaV90b19zdHJpbmcodXJpLCBGQUxTRSkpOworICAgIHNv
dXBfdXJpX2ZyZWUodXJpKTsKKyAgICByZXR1cm4gdXJpU3RyaW5nLmdldCgpOworfQorCitzdGF0
aWMgdm9pZCB0ZXN0TG9hZGluZ1N0YXR1cyhMb2FkVHJhY2tpbmdUZXN0KiB0ZXN0LCBnY29uc3Rw
b2ludGVyIGRhdGEpCit7CisgICAgd2Via2l0X3dlYl92aWV3X2xvYWRfdXJpKHRlc3QtPm1fd2Vi
VmlldywgZ2V0VVJJRm9yUGF0aCgiLyIpLmRhdGEoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9h
ZEZpbmlzaGVkKCk7CisKKyAgICBWZWN0b3I8TG9hZFRyYWNraW5nVGVzdDo6TG9hZEV2ZW50cz4g
ZXZlbnRzID0gdGVzdC0+bV9sb2FkRXZlbnRzOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHMu
c2l6ZSgpLCA9PSwgNCk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1swXSwgPT0sIExvYWRU
cmFja2luZ1Rlc3Q6OlByb3Zpc2lvbmFsTG9hZFN0YXJ0ZWQpOworICAgIGdfYXNzZXJ0X2NtcGlu
dChldmVudHNbMV0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpQcm92aXNpb25hbExvYWRSZWNlaXZl
ZFNlcnZlclJlZGlyZWN0KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzJdLCA9PSwgTG9h
ZFRyYWNraW5nVGVzdDo6TG9hZENvbW1pdHRlZCk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50
c1szXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRGaW5pc2hlZCk7Cit9CisKK3N0YXRpYyB2
b2lkIHRlc3RMb2FkaW5nRXJyb3IoTG9hZFRyYWNraW5nVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRl
cikKK3sKKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmkodGVzdC0+bV93ZWJWaWV3LCBnZXRV
UklGb3JQYXRoKCIvdGVzdF9sb2FkX2Vycm9yIikuZGF0YSgpKTsKKyAgICB0ZXN0LT53YWl0VW50
aWxMb2FkRmluaXNoZWQoKTsKKworICAgIFZlY3RvcjxMb2FkVHJhY2tpbmdUZXN0OjpMb2FkRXZl
bnRzPiBldmVudHMgPSB0ZXN0LT5tX2xvYWRFdmVudHM7CisgICAgZ19hc3NlcnRfY21waW50KGV2
ZW50cy5zaXplKCksID09LCAyKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzBdLCA9PSwg
TG9hZFRyYWNraW5nVGVzdDo6UHJvdmlzaW9uYWxMb2FkU3RhcnRlZCk7CisgICAgZ19hc3NlcnRf
Y21waW50KGV2ZW50c1sxXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OlByb3Zpc2lvbmFsTG9hZEZh
aWxlZCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RMb2FkQWx0ZXJuYXRlQ29udGVudChMb2FkVHJh
Y2tpbmdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHdlYmtpdF93ZWJfdmlld19s
b2FkX2FsdGVybmF0ZV9odG1sKHRlc3QtPm1fd2ViVmlldywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiPGh0bWw+PGJvZHk+QWx0ZXJuYXRlIENvbnRlbnQ8L2JvZHk+
PC9odG1sPiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgZ2V0
VVJJRm9yUGF0aCgiL2FsdGVybmF0ZSIpLmRhdGEoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9h
ZEZpbmlzaGVkKCk7CisKKyAgICBWZWN0b3I8TG9hZFRyYWNraW5nVGVzdDo6TG9hZEV2ZW50cz4g
ZXZlbnRzID0gdGVzdC0+bV9sb2FkRXZlbnRzOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHMu
c2l6ZSgpLCA9PSwgMyk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1swXSwgPT0sIExvYWRU
cmFja2luZ1Rlc3Q6OlByb3Zpc2lvbmFsTG9hZFN0YXJ0ZWQpOworICAgIGdfYXNzZXJ0X2NtcGlu
dChldmVudHNbMV0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpMb2FkQ29tbWl0dGVkKTsKKyAgICBn
X2Fzc2VydF9jbXBpbnQoZXZlbnRzWzJdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6TG9hZEZpbmlz
aGVkKTsKK30KKworc3RhdGljIHZvaWQgc2VydmVyQ2FsbGJhY2soU291cFNlcnZlciogc2VydmVy
LCBTb3VwTWVzc2FnZSogbWVzc2FnZSwgY29uc3QgY2hhciogcGF0aCwgR0hhc2hUYWJsZSosIFNv
dXBDbGllbnRDb250ZXh0KiwgZ3BvaW50ZXIpCit7CisKKyAgICAvLyBUaGlzIHN0cmluZyBoYXMg
dG8gYmUgcmF0aGVyIGJpZyBiZWNhdXNlIG9mIHRoZSBjYW5jZWxsZWQgdGVzdCAtIGl0CisgICAg
Ly8gbG9va3MgbGlrZSBzb3VwIHJlZnVzZXMgdG8gc2VuZCBvciByZWNlaXZlIGEgc21hbGwgY2h1
bmsgb2YgZGF0YS4KKyAgICBzdGF0aWMgY29uc3QgY2hhciogcmVzcG9uc2VTdHJpbmcgPSAiPGh0
bWw+PGJvZHk+VGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3Rpbmch
VGVzdGluZyEiCisgICAgICAgICJUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3Rp
bmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGlu
ZyEiCisgICAgICAgICJUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVz
dGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyEiCisg
ICAgICAgICJUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFU
ZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyEiCisgICAgICAg
ICJUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5n
IVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyEiCisgICAgICAgICJUZXN0
aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3Rp
bmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyEiCisgICAgICAgICJUZXN0aW5nIVRl
c3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVz
dGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyEiCisgICAgICAgICJUZXN0aW5nIVRlc3Rpbmch
VGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFU
ZXN0aW5nIVRlc3RpbmchVGVzdGluZyE8L2JvZHk+PC9odG1sPiI7CisKKyAgICBpZiAobWVzc2Fn
ZS0+bWV0aG9kICE9IFNPVVBfTUVUSE9EX0dFVCkgeworICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0
X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19OT1RfSU1QTEVNRU5URUQpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09V
UF9TVEFUVVNfT0spOworCisgICAgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvIikpIHsKKyAgICAg
ICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfTU9WRURfUEVS
TUFORU5UTFkpOworICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19hcHBlbmQobWVzc2FnZS0+
cmVzcG9uc2VfaGVhZGVycywgIkxvY2F0aW9uIiwgIi90ZXN0X2xvYWRpbmdfc3RhdHVzIik7Cisg
ICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL3Rlc3RfbG9hZGluZ19zdGF0dXMiKSB8
fCBnX3N0cl9lcXVhbChwYXRoLCAiL3Rlc3RfbG9hZGluZ19zdGF0dXMyIikpCisgICAgICAgIHNv
dXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9S
WV9TVEFUSUMsIHJlc3BvbnNlU3RyaW5nLCBzdHJsZW4ocmVzcG9uc2VTdHJpbmcpKTsKKyAgICBl
bHNlIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL3Rlc3RfbG9hZF9lcnJvciIpKSB7CisgICAgICAg
IHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX0NBTlRfQ09OTkVD
VCk7CisgICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL3Rlc3RfbG9hZGluZ19jYW5j
ZWxsZWQiKSkgeworICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19zZXRfZW5jb2RpbmcobWVz
c2FnZS0+cmVzcG9uc2VfaGVhZGVycywgU09VUF9FTkNPRElOR19DSFVOS0VEKTsKKyAgICAgICAg
c291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVN
T1JZX1NUQVRJQywgcmVzcG9uc2VTdHJpbmcsIHN0cmxlbihyZXNwb25zZVN0cmluZykpOworICAg
ICAgICBzb3VwX3NlcnZlcl91bnBhdXNlX21lc3NhZ2Uoc2VydmVyLCBtZXNzYWdlKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIHNvdXBfbWVzc2FnZV9ib2R5X2NvbXBsZXRlKG1lc3Nh
Z2UtPnJlc3BvbnNlX2JvZHkpOworfQorCit2b2lkIGJlZm9yZUFsbCgpCit7CisgICAga0Jhc2VV
UkkgPSBzb3VwX3VyaV9uZXcoImh0dHA6Ly8xMjcuMC4wLjEvIik7CisKKyAgICBrU291cFNlcnZl
ciA9IHNvdXBfc2VydmVyX25ldyhTT1VQX1NFUlZFUl9QT1JULCAwLCBOVUxMKTsKKyAgICBzb3Vw
X3VyaV9zZXRfcG9ydChrQmFzZVVSSSwgc291cF9zZXJ2ZXJfZ2V0X3BvcnQoa1NvdXBTZXJ2ZXIp
KTsKKyAgICBzb3VwX3NlcnZlcl9ydW5fYXN5bmMoa1NvdXBTZXJ2ZXIpOworICAgIHNvdXBfc2Vy
dmVyX2FkZF9oYW5kbGVyKGtTb3VwU2VydmVyLCBOVUxMLCBzZXJ2ZXJDYWxsYmFjaywgTlVMTCwg
TlVMTCk7CisKKyAgICBMb2FkVHJhY2tpbmdUZXN0OjphZGQoIldlYktpdFdlYkxvYWRlckNsaWVu
dCIsICJsb2FkaW5nLXN0YXR1cyIsIHRlc3RMb2FkaW5nU3RhdHVzKTsKKyAgICBMb2FkVHJhY2tp
bmdUZXN0OjphZGQoIldlYktpdFdlYkxvYWRlckNsaWVudCIsICJsb2FkaW5nLWVycm9yIiwgdGVz
dExvYWRpbmdFcnJvcik7CisgICAgTG9hZFRyYWNraW5nVGVzdDo6YWRkKCJXZWJLaXRXZWJMb2Fk
ZXJDbGllbnQiLCAibG9hZC1hbHRlcm5hdGUtY29udGVudCIsIHRlc3RMb2FkQWx0ZXJuYXRlQ29u
dGVudCk7Cit9CisKK3ZvaWQgYWZ0ZXJBbGwoKQoreworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdFdlYlZpZXcuY3BwIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdFdlYlZpZXcuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3MmM2NGYKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0
V2ViVmlldy5jcHAKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBJ
Z2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLDEgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYlZpZXdUZXN0Lmgi
CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJWaWV3RGVmYXVsdENvbnRleHQoV2ViVmlld1Rlc3QqIHRl
c3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgZ19hc3NlcnQod2Via2l0X3dlYl92aWV3X2dldF9j
b250ZXh0KHRlc3QtPm1fd2ViVmlldykgPT0gd2Via2l0X3dlYl9jb250ZXh0X2dldF9kZWZhdWx0
KCkpOworfQorCit2b2lkIGJlZm9yZUFsbCgpCit7CisgICAgV2ViVmlld1Rlc3Q6OmFkZCgiV2Vi
S2l0V2ViVmlldyIsICJkZWZhdWx0LWNvbnRleHQiLCB0ZXN0V2ViVmlld0RlZmF1bHRDb250ZXh0
KTsKK30KKwordm9pZCBhZnRlckFsbCgpCit7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJWaWV3VGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJWaWV3VGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uMzJiN2ZjNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlZpZXdUZXN0LmNwcApAQCAtMCwwICsx
LDMzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJXZWJWaWV3VGVzdC5oIgorCitXZWJWaWV3VGVzdDo6V2ViVmll
d1Rlc3QoKQorICAgIDogbV93ZWJWaWV3KFdFQktJVF9XRUJfVklFVyhnX29iamVjdF9yZWZfc2lu
ayh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpKSkKKyAgICAsIG1fbWFpbkxvb3AoZ19tYWluX2xvb3Bf
bmV3KDAsIFRSVUUpKQoreworfQorCitXZWJWaWV3VGVzdDo6fldlYlZpZXdUZXN0KCkKK3sKKyAg
ICBnX29iamVjdF91bnJlZihtX3dlYlZpZXcpOworICAgIGdfbWFpbl9sb29wX3VucmVmKG1fbWFp
bkxvb3ApOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
dGVzdHMvV2ViVmlld1Rlc3QuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rl
c3RzL1dlYlZpZXdUZXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTgx
ODA2NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L3Rlc3RzL1dlYlZpZXdUZXN0LmgKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMSBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYlZpZXdUZXN0X2gKKyNkZWZpbmUgV2ViVmll
d1Rlc3RfaAorCisjaW5jbHVkZSAiVGVzdE1haW4uaCIKKyNpbmNsdWRlIDx3ZWJraXQyL3dlYmtp
dDIuaD4KKworY2xhc3MgV2ViVmlld1Rlc3QgeworcHVibGljOgorICAgIE1BS0VfR0xJQl9URVNU
X0ZJWFRVUkUoV2ViVmlld1Rlc3QpOworICAgIFdlYlZpZXdUZXN0KCk7CisgICAgdmlydHVhbCB+
V2ViVmlld1Rlc3QoKTsKKworICAgIFdlYktpdFdlYlZpZXcqIG1fd2ViVmlldzsKKyAgICBHTWFp
bkxvb3AqIG1fbWFpbkxvb3A7Cit9OworCisjZW5kaWYgLy8gV2ViVmlld1Rlc3RfaApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvdGVzdGxvYWRpbmcu
YyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL3Rlc3Rsb2FkaW5nLmMK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1MGM4Y2MuLjAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvdGVzdGxvYWRpbmcuYworKysgL2Rl
di9udWxsCkBAIC0xLDI5MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEw
IEd1c3Rhdm8gTm9yb25oYSBTaWx2YQotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDExIElnYWxp
YSBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgot
ICovCi0KLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0jaW5jbHVkZSA8bGlic291cC9zb3VwLmg+Ci0j
aW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8d2Via2l0Mi93ZWJraXQyLmg+Ci0KLS8qIFRo
aXMgc3RyaW5nIGhhcyB0byBiZSByYXRoZXIgYmlnIGJlY2F1c2Ugb2YgdGhlIGNhbmNlbGxlZCB0
ZXN0IC0gaXQKLSAqIGxvb2tzIGxpa2Ugc291cCByZWZ1c2VzIHRvIHNlbmQgb3IgcmVjZWl2ZSBh
IHRvbyBzbWFsbCBjaHVuayAqLwotI2RlZmluZSBIVE1MX1NUUklORyAiPGh0bWw+PGJvZHk+VGVz
dGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0
aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3Rp
bmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGlu
ZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5n
IVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3Rpbmch
VGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFU
ZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRl
c3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVz
dGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0
aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3Rp
bmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGlu
ZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5n
ITwvYm9keT48L2h0bWw+IgotCi1Tb3VwVVJJICpiYXNlVVJJOwotCi0vKiBGb3IgcmVhbCByZXF1
ZXN0IHRlc3RpbmcgKi8KLXN0YXRpYyB2b2lkIHNlcnZlckNhbGxiYWNrKFNvdXBTZXJ2ZXIqIHNl
cnZlciwgU291cE1lc3NhZ2UqIG1zZywgY29uc3QgY2hhciogcGF0aCwgR0hhc2hUYWJsZSogcXVl
cnksIFNvdXBDbGllbnRDb250ZXh0KiBjb250ZXh0LCBncG9pbnRlciBkYXRhKQotewotICAgIGlm
IChtc2ctPm1ldGhvZCAhPSBTT1VQX01FVEhPRF9HRVQpIHsKLSAgICAgICAgc291cF9tZXNzYWdl
X3NldF9zdGF0dXMobXNnLCBTT1VQX1NUQVRVU19OT1RfSU1QTEVNRU5URUQpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobXNnLCBTT1VQX1NU
QVRVU19PSyk7Ci0KLSAgICBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi8iKSkgewotICAgICAgICBz
b3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtc2csIFNPVVBfU1RBVFVTX01PVkVEX1BFUk1BTkVOVExZ
KTsKLSAgICAgICAgc291cF9tZXNzYWdlX2hlYWRlcnNfYXBwZW5kKG1zZy0+cmVzcG9uc2VfaGVh
ZGVycywgIkxvY2F0aW9uIiwgIi90ZXN0X2xvYWRpbmdfc3RhdHVzIik7Ci0gICAgfSBlbHNlIGlm
IChnX3N0cl9lcXVhbChwYXRoLCAiL3Rlc3RfbG9hZGluZ19zdGF0dXMiKSB8fCBnX3N0cl9lcXVh
bChwYXRoLCAiL3Rlc3RfbG9hZGluZ19zdGF0dXMyIikpCi0gICAgICAgIHNvdXBfbWVzc2FnZV9i
b2R5X2FwcGVuZChtc2ctPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1NUQVRJQywgSFRNTF9T
VFJJTkcsIHN0cmxlbihIVE1MX1NUUklORykpOwotICAgIGVsc2UgaWYgKGdfc3RyX2VxdWFsKHBh
dGgsICIvdGVzdF9sb2FkX2Vycm9yIikpIHsKLSAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0
dXMobXNnLCBTT1VQX1NUQVRVU19DQU5UX0NPTk5FQ1QpOwotICAgIH0gZWxzZSBpZiAoZ19zdHJf
ZXF1YWwocGF0aCwgIi90ZXN0X2xvYWRpbmdfY2FuY2VsbGVkIikpIHsKLSAgICAgICAgc291cF9t
ZXNzYWdlX2hlYWRlcnNfc2V0X2VuY29kaW5nKG1zZy0+cmVzcG9uc2VfaGVhZGVycywgU09VUF9F
TkNPRElOR19DSFVOS0VEKTsKLSAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1zZy0+
cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfU1RBVElDLCBIVE1MX1NUUklORywgc3RybGVuKEhU
TUxfU1RSSU5HKSk7Ci0gICAgICAgIHNvdXBfc2VydmVyX3VucGF1c2VfbWVzc2FnZShzZXJ2ZXIs
IG1zZyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBzb3VwX21lc3NhZ2VfYm9keV9j
b21wbGV0ZShtc2ctPnJlc3BvbnNlX2JvZHkpOwotfQotCi10eXBlZGVmIHN0cnVjdCB7Ci0gICAg
V2ViS2l0V2ViVmlldyAqd2ViVmlldzsKLSAgICBHTWFpbkxvb3AgKmxvb3A7Ci0gICAgZ2Jvb2xl
YW4gaGFzQmVlblByb3Zpc2lvbmFsOwotICAgIGdib29sZWFuIGhhc0JlZW5SZWRpcmVjdDsKLSAg
ICBnYm9vbGVhbiBoYXNCZWVuQ29tbWl0dGVkOwotICAgIGdib29sZWFuIGhhc0JlZW5GaW5pc2hl
ZDsKLSAgICBnYm9vbGVhbiBoYXNCZWVuRmFpbGVkOwotfSBXZWJMb2FkaW5nRml4dHVyZTsKLQot
c3RhdGljIHZvaWQgd2ViTG9hZGluZ0ZpeHR1cmVTZXR1cChXZWJMb2FkaW5nRml4dHVyZSAqZml4
dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQotewotICAgIGZpeHR1cmUtPndlYlZpZXcgPSBXRUJL
SVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKLSAgICBmaXh0dXJlLT5sb29wID0g
Z19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOwotICAgIGdfb2JqZWN0X3JlZl9zaW5rKGZpeHR1
cmUtPndlYlZpZXcpOwotICAgIGZpeHR1cmUtPmhhc0JlZW5Qcm92aXNpb25hbCA9IEZBTFNFOwot
ICAgIGZpeHR1cmUtPmhhc0JlZW5SZWRpcmVjdCA9IEZBTFNFOwotICAgIGZpeHR1cmUtPmhhc0Jl
ZW5Db21taXR0ZWQgPSBGQUxTRTsKLSAgICBmaXh0dXJlLT5oYXNCZWVuRmluaXNoZWQgPSBGQUxT
RTsKLSAgICBmaXh0dXJlLT5oYXNCZWVuRmFpbGVkID0gRkFMU0U7Ci19Ci0KLXN0YXRpYyB2b2lk
IHdlYkxvYWRpbmdGaXh0dXJlVGVhcmRvd24oV2ViTG9hZGluZ0ZpeHR1cmUgKmZpeHR1cmUsIGdj
b25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgICBnX29iamVjdF91bnJlZihmaXh0dXJlLT53ZWJWaWV3
KTsKLSAgICBnX21haW5fbG9vcF91bnJlZihmaXh0dXJlLT5sb29wKTsKLX0KLQotc3RhdGljIGNo
YXIgKmdldFVSSUZvclBhdGgoY29uc3QgY2hhciogcGF0aCkKLXsKLSAgICBTb3VwVVJJICp1cmk7
Ci0gICAgY2hhciAqdXJpU3RyaW5nOwotCi0gICAgdXJpID0gc291cF91cmlfbmV3X3dpdGhfYmFz
ZShiYXNlVVJJLCBwYXRoKTsKLSAgICB1cmlTdHJpbmcgPSBzb3VwX3VyaV90b19zdHJpbmcodXJp
LCBGQUxTRSk7Ci0gICAgc291cF91cmlfZnJlZSh1cmkpOwotCi0gICAgcmV0dXJuIHVyaVN0cmlu
ZzsKLX0KLQotLyogTG9hZCBTdGF0dXMgKi8KLXN0YXRpYyBnYm9vbGVhbiBsb2FkU3RhdHVzUHJv
dmlzaW9uYWxMb2FkU3RhcnRlZChXZWJLaXRXZWJMb2FkZXJDbGllbnQgKmNsaWVudCwgV2ViTG9h
ZGluZ0ZpeHR1cmUgKmZpeHR1cmUpCi17Ci0gICAgZ19hc3NlcnQoIWZpeHR1cmUtPmhhc0JlZW5Q
cm92aXNpb25hbCk7Ci0gICAgZ19hc3NlcnQoIWZpeHR1cmUtPmhhc0JlZW5SZWRpcmVjdCk7Ci0g
ICAgZ19hc3NlcnQoIWZpeHR1cmUtPmhhc0JlZW5Db21taXR0ZWQpOwotICAgIGZpeHR1cmUtPmhh
c0JlZW5Qcm92aXNpb25hbCA9IFRSVUU7Ci0KLSAgICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGlj
IGdib29sZWFuIGxvYWRTdGF0dXNQcm92aXNpb25hbExvYWRSZWNlaXZlZFNlcnZlclJlZGlyZWN0
KFdlYktpdFdlYkxvYWRlckNsaWVudCAqY2xpZW50LCBXZWJMb2FkaW5nRml4dHVyZSAqZml4dHVy
ZSkKLXsKLSAgICBnX2Fzc2VydChmaXh0dXJlLT5oYXNCZWVuUHJvdmlzaW9uYWwpOwotICAgIGdf
YXNzZXJ0KCFmaXh0dXJlLT5oYXNCZWVuUmVkaXJlY3QpOwotICAgIGdfYXNzZXJ0KCFmaXh0dXJl
LT5oYXNCZWVuQ29tbWl0dGVkKTsKLSAgICBmaXh0dXJlLT5oYXNCZWVuUmVkaXJlY3QgPSBUUlVF
OwotCi0gICAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiBsb2FkU3RhdHVzUHJv
dmlzaW9uYWxMb2FkRmFpbGVkKFdlYktpdFdlYkxvYWRlckNsaWVudCAqY2xpZW50LCBjb25zdCBn
Y2hhciAqZmFpbGluZ1VSSSwgR0Vycm9yICplcnJvciwgV2ViTG9hZGluZ0ZpeHR1cmUgKmZpeHR1
cmUpCi17Ci0gICAgZ19hc3NlcnRfbm90X3JlYWNoZWQoKTsKLSAgICByZXR1cm4gVFJVRTsKLX0K
LQotc3RhdGljIGdib29sZWFuIGxvYWRTdGF0dXNMb2FkQ29tbWl0dGVkKFdlYktpdFdlYkxvYWRl
ckNsaWVudCAqY2xpZW50LCBXZWJMb2FkaW5nRml4dHVyZSAqZml4dHVyZSkKLXsKLSAgICBnX2Fz
c2VydChmaXh0dXJlLT5oYXNCZWVuUHJvdmlzaW9uYWwpOwotICAgIGdfYXNzZXJ0KGZpeHR1cmUt
Pmhhc0JlZW5SZWRpcmVjdCk7Ci0gICAgZ19hc3NlcnQoIWZpeHR1cmUtPmhhc0JlZW5Db21taXR0
ZWQpOwotICAgIGZpeHR1cmUtPmhhc0JlZW5Db21taXR0ZWQgPSBUUlVFOwotCi0gICAgcmV0dXJu
IFRSVUU7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiBsb2FkU3RhdHVzTG9hZEZpbmlzaGVkKFdlYktp
dFdlYkxvYWRlckNsaWVudCAqY2xpZW50LCBXZWJMb2FkaW5nRml4dHVyZSAqZml4dHVyZSkKLXsK
LSAgICBnX2Fzc2VydChmaXh0dXJlLT5oYXNCZWVuUHJvdmlzaW9uYWwpOwotICAgIGdfYXNzZXJ0
KGZpeHR1cmUtPmhhc0JlZW5SZWRpcmVjdCk7Ci0gICAgZ19hc3NlcnQoZml4dHVyZS0+aGFzQmVl
bkNvbW1pdHRlZCk7Ci0gICAgZ19hc3NlcnQoIWZpeHR1cmUtPmhhc0JlZW5GaW5pc2hlZCk7Ci0g
ICAgZml4dHVyZS0+aGFzQmVlbkZpbmlzaGVkID0gVFJVRTsKLQotICAgIGdfbWFpbl9sb29wX3F1
aXQoZml4dHVyZS0+bG9vcCk7Ci0KLSAgICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29s
ZWFuIGxvYWRTdGF0dXNMb2FkRmFpbGVkKFdlYktpdFdlYkxvYWRlckNsaWVudCAqY2xpZW50LCBj
b25zdCBnY2hhciAqZmFpbGluZ1VSSSwgR0Vycm9yICplcnJvciwgV2ViTG9hZGluZ0ZpeHR1cmUg
KmZpeHR1cmUpCi17Ci0gICAgZ19hc3NlcnRfbm90X3JlYWNoZWQoKTsKLSAgICByZXR1cm4gVFJV
RTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdExvYWRpbmdTdGF0dXMoV2ViTG9hZGluZ0ZpeHR1cmUg
KmZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgICBjaGFyICp1cmlTdHJpbmc7Ci0g
ICAgV2ViS2l0V2ViTG9hZGVyQ2xpZW50ICpjbGllbnQgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2xv
YWRlcl9jbGllbnQoZml4dHVyZS0+d2ViVmlldyk7Ci0KLSAgICBnX3NpZ25hbF9jb25uZWN0KGNs
aWVudCwgInByb3Zpc2lvbmFsLWxvYWQtc3RhcnRlZCIsIEdfQ0FMTEJBQ0sobG9hZFN0YXR1c1By
b3Zpc2lvbmFsTG9hZFN0YXJ0ZWQpLCBmaXh0dXJlKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KGNs
aWVudCwgInByb3Zpc2lvbmFsLWxvYWQtcmVjZWl2ZWQtc2VydmVyLXJlZGlyZWN0IiwgR19DQUxM
QkFDSyhsb2FkU3RhdHVzUHJvdmlzaW9uYWxMb2FkUmVjZWl2ZWRTZXJ2ZXJSZWRpcmVjdCksIGZp
eHR1cmUpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3QoY2xpZW50LCAicHJvdmlzaW9uYWwtbG9hZC1m
YWlsZWQiLCBHX0NBTExCQUNLKGxvYWRTdGF0dXNQcm92aXNpb25hbExvYWRGYWlsZWQpLCBmaXh0
dXJlKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KGNsaWVudCwgImxvYWQtY29tbWl0dGVkIiwgR19D
QUxMQkFDSyhsb2FkU3RhdHVzTG9hZENvbW1pdHRlZCksIGZpeHR1cmUpOwotICAgIGdfc2lnbmFs
X2Nvbm5lY3QoY2xpZW50LCAibG9hZC1maW5pc2hlZCIsIEdfQ0FMTEJBQ0sobG9hZFN0YXR1c0xv
YWRGaW5pc2hlZCksIGZpeHR1cmUpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3QoY2xpZW50LCAibG9h
ZC1mYWlsZWQiLCBHX0NBTExCQUNLKGxvYWRTdGF0dXNMb2FkRmFpbGVkKSwgZml4dHVyZSk7Ci0K
LSAgICB1cmlTdHJpbmcgPSBnZXRVUklGb3JQYXRoKCIvIik7Ci0gICAgd2Via2l0X3dlYl92aWV3
X2xvYWRfdXJpKGZpeHR1cmUtPndlYlZpZXcsIHVyaVN0cmluZyk7Ci0gICAgZ19mcmVlKHVyaVN0
cmluZyk7Ci0KLSAgICBnX21haW5fbG9vcF9ydW4oZml4dHVyZS0+bG9vcCk7Ci0KLSAgICBnX2Fz
c2VydChmaXh0dXJlLT5oYXNCZWVuUHJvdmlzaW9uYWwpOwotICAgIGdfYXNzZXJ0KGZpeHR1cmUt
Pmhhc0JlZW5SZWRpcmVjdCk7Ci0gICAgZ19hc3NlcnQoZml4dHVyZS0+aGFzQmVlbkNvbW1pdHRl
ZCk7Ci0gICAgZ19hc3NlcnQoZml4dHVyZS0+aGFzQmVlbkZpbmlzaGVkKTsKLX0KLQotLyogTG9h
ZCBFcnJvciAqLwotc3RhdGljIGdib29sZWFuIGxvYWRFcnJvclByb3Zpc2lvbmFsTG9hZFN0YXJ0
ZWQoV2ViS2l0V2ViTG9hZGVyQ2xpZW50ICpjbGllbnQsIFdlYkxvYWRpbmdGaXh0dXJlICpmaXh0
dXJlKQotewotICAgIGdfYXNzZXJ0KCFmaXh0dXJlLT5oYXNCZWVuUHJvdmlzaW9uYWwpOwotICAg
IGZpeHR1cmUtPmhhc0JlZW5Qcm92aXNpb25hbCA9IFRSVUU7Ci0KLSAgICByZXR1cm4gVFJVRTsK
LX0KLQotc3RhdGljIGdib29sZWFuIGxvYWRFcnJvclByb3Zpc2lvbmFsTG9hZEZhaWxlZChXZWJL
aXRXZWJMb2FkZXJDbGllbnQgKmNsaWVudCwgY29uc3QgZ2NoYXIgKmZhaWxpbmdVUkksIEdFcnJv
ciAqZXJyb3IsIFdlYkxvYWRpbmdGaXh0dXJlICpmaXh0dXJlKQotewotICAgIGdfYXNzZXJ0KGZp
eHR1cmUtPmhhc0JlZW5Qcm92aXNpb25hbCk7Ci0gICAgZ19hc3NlcnQoIWZpeHR1cmUtPmhhc0Jl
ZW5GYWlsZWQpOwotICAgIGZpeHR1cmUtPmhhc0JlZW5GYWlsZWQgPSBUUlVFOwotCi0gICAgZ19h
c3NlcnQoZXJyb3IpOwotCi0gICAgZ19tYWluX2xvb3BfcXVpdChmaXh0dXJlLT5sb29wKTsKLQot
ICAgIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gbG9hZEVycm9yTG9hZEZpbmlz
aGVkKFdlYktpdFdlYkxvYWRlckNsaWVudCAqY2xpZW50LCBXZWJMb2FkaW5nRml4dHVyZSAqZml4
dHVyZSkKLXsKLSAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOwotICAgIHJldHVybiBUUlVFOwot
fQotCi1zdGF0aWMgdm9pZCB0ZXN0TG9hZGluZ0Vycm9yKFdlYkxvYWRpbmdGaXh0dXJlICpmaXh0
dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgY2hhciAqdXJpU3RyaW5nOwotICAgIFdl
YktpdFdlYkxvYWRlckNsaWVudCAqY2xpZW50ID0gd2Via2l0X3dlYl92aWV3X2dldF9sb2FkZXJf
Y2xpZW50KGZpeHR1cmUtPndlYlZpZXcpOwotCi0gICAgZ19zaWduYWxfY29ubmVjdChjbGllbnQs
ICJwcm92aXNpb25hbC1sb2FkLXN0YXJ0ZWQiLCBHX0NBTExCQUNLKGxvYWRFcnJvclByb3Zpc2lv
bmFsTG9hZFN0YXJ0ZWQpLCBmaXh0dXJlKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KGNsaWVudCwg
InByb3Zpc2lvbmFsLWxvYWQtZmFpbGVkIiwgR19DQUxMQkFDSyhsb2FkRXJyb3JQcm92aXNpb25h
bExvYWRGYWlsZWQpLCBmaXh0dXJlKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KGNsaWVudCwgImxv
YWQtZmluaXNoZWQiLCBHX0NBTExCQUNLKGxvYWRFcnJvckxvYWRGaW5pc2hlZCksIGZpeHR1cmUp
OwotCi0gICAgdXJpU3RyaW5nID0gZ2V0VVJJRm9yUGF0aCgiL3Rlc3RfbG9hZF9lcnJvciIpOwot
ICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3VyaShmaXh0dXJlLT53ZWJWaWV3LCB1cmlTdHJpbmcp
OwotICAgIGdfZnJlZSh1cmlTdHJpbmcpOwotCi0gICAgZ19tYWluX2xvb3BfcnVuKGZpeHR1cmUt
Pmxvb3ApOwotCi0gICAgZ19hc3NlcnQoZml4dHVyZS0+aGFzQmVlblByb3Zpc2lvbmFsKTsKLSAg
ICBnX2Fzc2VydChmaXh0dXJlLT5oYXNCZWVuRmFpbGVkKTsKLX0KLQotc3RhdGljIGdib29sZWFu
IGxvYWRBbHRlcm5hdGVDb250ZW50TG9hZEZpbmlzaGVkKFdlYktpdFdlYkxvYWRlckNsaWVudCAq
Y2xpZW50LCBXZWJMb2FkaW5nRml4dHVyZSAqZml4dHVyZSkKLXsKLSAgICBnX21haW5fbG9vcF9x
dWl0KGZpeHR1cmUtPmxvb3ApOwotCi0gICAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnYm9v
bGVhbiBsb2FkQWx0ZXJuYXRlQ29udGVudExvYWRGYWlsZWQoV2ViS2l0V2ViTG9hZGVyQ2xpZW50
ICpjbGllbnQsIGNvbnN0IGdjaGFyICpmYWlsaW5nVVJJLCBHRXJyb3IgKmVycm9yLCBXZWJMb2Fk
aW5nRml4dHVyZSAqZml4dHVyZSkKLXsKLSAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOwotICAg
IHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0TG9hZEFsdGVybmF0ZUNvbnRlbnQo
V2ViTG9hZGluZ0ZpeHR1cmUgKmZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgICBj
aGFyICp1cmlTdHJpbmc7Ci0gICAgV2ViS2l0V2ViTG9hZGVyQ2xpZW50ICpjbGllbnQgPSB3ZWJr
aXRfd2ViX3ZpZXdfZ2V0X2xvYWRlcl9jbGllbnQoZml4dHVyZS0+d2ViVmlldyk7Ci0KLSAgICBn
X3NpZ25hbF9jb25uZWN0KGNsaWVudCwgImxvYWQtZmluaXNoZWQiLCBHX0NBTExCQUNLKGxvYWRB
bHRlcm5hdGVDb250ZW50TG9hZEZpbmlzaGVkKSwgZml4dHVyZSk7Ci0gICAgZ19zaWduYWxfY29u
bmVjdChjbGllbnQsICJwcm92aXNpb25hbC1sb2FkLWZhaWxlZCIsIEdfQ0FMTEJBQ0sobG9hZEFs
dGVybmF0ZUNvbnRlbnRMb2FkRmFpbGVkKSwgZml4dHVyZSk7Ci0gICAgZ19zaWduYWxfY29ubmVj
dChjbGllbnQsICJsb2FkLWZhaWxlZCIsIEdfQ0FMTEJBQ0sobG9hZEFsdGVybmF0ZUNvbnRlbnRM
b2FkRmFpbGVkKSwgZml4dHVyZSk7Ci0KLSAgICB1cmlTdHJpbmcgPSBnZXRVUklGb3JQYXRoKCIv
YWx0ZXJuYXRlIik7Ci0gICAgd2Via2l0X3dlYl92aWV3X2xvYWRfYWx0ZXJuYXRlX2h0bWwoZml4
dHVyZS0+d2ViVmlldywgIjxodG1sPjxib2R5PkFsdGVybmF0ZSBDb250ZW50PC9ib2R5PjwvaHRt
bD4iLCBOVUxMLCB1cmlTdHJpbmcpOwotICAgIGdfZnJlZSh1cmlTdHJpbmcpOwotCi0gICAgZ19t
YWluX2xvb3BfcnVuKGZpeHR1cmUtPmxvb3ApOwotfQotCi1pbnQgbWFpbihpbnQgYXJnYywgY2hh
ciAqKmFyZ3YpCi17Ci0gICAgU291cFNlcnZlciAqc2VydmVyOwotCi0gICAgZ190aHJlYWRfaW5p
dChOVUxMKTsKLSAgICBndGtfdGVzdF9pbml0KCZhcmdjLCAmYXJndiwgTlVMTCk7Ci0KLSAgICBn
X3NldGVudigiV0VCS0lUX0VYRUNfUEFUSCIsIFdFQktJVF9FWEVDX1BBVEgsIEZBTFNFKTsKLQot
ICAgIHNlcnZlciA9IHNvdXBfc2VydmVyX25ldyhTT1VQX1NFUlZFUl9QT1JULCAwLCBOVUxMKTsK
LSAgICBzb3VwX3NlcnZlcl9ydW5fYXN5bmMoc2VydmVyKTsKLQotICAgIHNvdXBfc2VydmVyX2Fk
ZF9oYW5kbGVyKHNlcnZlciwgTlVMTCwgc2VydmVyQ2FsbGJhY2ssIE5VTEwsIE5VTEwpOwotCi0g
ICAgYmFzZVVSSSA9IHNvdXBfdXJpX25ldygiaHR0cDovLzEyNy4wLjAuMS8iKTsKLSAgICBzb3Vw
X3VyaV9zZXRfcG9ydChiYXNlVVJJLCBzb3VwX3NlcnZlcl9nZXRfcG9ydChzZXJ2ZXIpKTsKLQot
ICAgIGdfdGVzdF9idWdfYmFzZSgiaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvIik7Ci0gICAgZ190
ZXN0X2FkZCgiL3dlYmtpdDIvbG9hZGluZy9zdGF0dXMiLAotICAgICAgICAgICAgICAgV2ViTG9h
ZGluZ0ZpeHR1cmUsIE5VTEwsCi0gICAgICAgICAgICAgICB3ZWJMb2FkaW5nRml4dHVyZVNldHVw
LAotICAgICAgICAgICAgICAgdGVzdExvYWRpbmdTdGF0dXMsCi0gICAgICAgICAgICAgICB3ZWJM
b2FkaW5nRml4dHVyZVRlYXJkb3duKTsKLSAgICBnX3Rlc3RfYWRkKCIvd2Via2l0Mi9sb2FkaW5n
L2Vycm9yIiwKLSAgICAgICAgICAgICAgIFdlYkxvYWRpbmdGaXh0dXJlLCBOVUxMLAotICAgICAg
ICAgICAgICAgd2ViTG9hZGluZ0ZpeHR1cmVTZXR1cCwKLSAgICAgICAgICAgICAgIHRlc3RMb2Fk
aW5nRXJyb3IsCi0gICAgICAgICAgICAgICB3ZWJMb2FkaW5nRml4dHVyZVRlYXJkb3duKTsKLSAg
ICBnX3Rlc3RfYWRkKCIvd2Via2l0Mi9sb2FkaW5nL2FsdGVybmF0ZV9jb250ZW50IiwKLSAgICAg
ICAgICAgICAgIFdlYkxvYWRpbmdGaXh0dXJlLCBOVUxMLAotICAgICAgICAgICAgICAgd2ViTG9h
ZGluZ0ZpeHR1cmVTZXR1cCwKLSAgICAgICAgICAgICAgIHRlc3RMb2FkQWx0ZXJuYXRlQ29udGVu
dCwKLSAgICAgICAgICAgICAgIHdlYkxvYWRpbmdGaXh0dXJlVGVhcmRvd24pOwotCi0gICAgcmV0
dXJuIGdfdGVzdF9ydW4oKTsKLX0KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvdGVzdHMvdGVzdHdlYmNvbnRleHQuYyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL3Rlc3RzL3Rlc3R3ZWJjb250ZXh0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDFiNTI1N2YuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvdGVzdHMvdGVzdHdlYmNvbnRleHQuYworKysgL2Rldi9udWxsCkBAIC0xLDQxICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KLSAqCi0gKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
Ci0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlIDxn
bGliLmg+Ci0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotI2luY2x1ZGUgPHdlYmtpdDIvd2Via2l0Mi5o
PgotCi1zdGF0aWMgdm9pZCB0ZXN0V2ViQ29udGV4dERlZmF1bHQodm9pZCkKLXsKLSAgICAvKiBD
aGVjayB0aGVyZSdzIGEgc2luZ2xlIGluc3RhbmNlIG9mIHRoZSBkZWZhdWx0IHdlYiBjb250ZXh0
LiAqLwotICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZGVmYXVsdCgpID09IHdl
YmtpdF93ZWJfY29udGV4dF9nZXRfZGVmYXVsdCgpKTsKLX0KLQotaW50IG1haW4oaW50IGFyZ2Ms
IGNoYXIgKiphcmd2KQotewotICAgIGdfdGhyZWFkX2luaXQoTlVMTCk7Ci0gICAgZ3RrX3Rlc3Rf
aW5pdCgmYXJnYywgJmFyZ3YsIE5VTEwpOwotCi0gICAgZ190ZXN0X2J1Z19iYXNlKCJodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy8iKTsKLSAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQyL3dlYmNv
bnRleHQvZGVmYXVsdF9jb250ZXh0IiwKLSAgICAgICAgICAgICAgICAgICAgdGVzdFdlYkNvbnRl
eHREZWZhdWx0KTsKLQotICAgIHJldHVybiBnX3Rlc3RfcnVuKCk7Ci19Ci0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL3Rlc3R3ZWJ2aWV3LmMgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy90ZXN0d2Vidmlldy5jCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YTI3YWZlLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL3Rlc3R3ZWJ2aWV3LmMKKysrIC9kZXYvbnVs
bApAQCAtMSw0NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwu
Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
LSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwot
Ci0jaW5jbHVkZSA8Z2xpYi5oPgotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLSNpbmNsdWRlIDx3ZWJr
aXQyL3dlYmtpdDIuaD4KLQotc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdEZWZhdWx0Q29udGV4dCh2
b2lkKQotewotICAgIFdlYktpdFdlYlZpZXcgKnZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0
X3dlYl92aWV3X25ldygpKTsKLSAgICBnX29iamVjdF9yZWZfc2luayh2aWV3KTsKLSAgICBnX2Fz
c2VydCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X2NvbnRleHQodmlldykgPT0gd2Via2l0X3dlYl9jb250
ZXh0X2dldF9kZWZhdWx0KCkpOwotICAgIGdfb2JqZWN0X3VucmVmKHZpZXcpOwotfQotCi1pbnQg
bWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi17Ci0gICAgZ190aHJlYWRfaW5pdChOVUxMKTsK
LSAgICBndGtfdGVzdF9pbml0KCZhcmdjLCAmYXJndiwgTlVMTCk7Ci0KLSAgICBnX3NldGVudigi
V0VCS0lUX0VYRUNfUEFUSCIsIFdFQktJVF9FWEVDX1BBVEgsIEZBTFNFKTsKLQotICAgIGdfdGVz
dF9idWdfYmFzZSgiaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvIik7Ci0gICAgZ190ZXN0X2FkZF9m
dW5jKCIvd2Via2l0Mi93ZWJ2aWV3L2RlZmF1bHRfY29udGV4dCIsCi0gICAgICAgICAgICAgICAg
ICAgIHRlc3RXZWJWaWV3RGVmYXVsdENvbnRleHQpOwotCi0gICAgcmV0dXJuIGdfdGVzdF9ydW4o
KTsKLX0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>109797</attachid>
            <date>2011-10-05 08:22:27 -0700</date>
            <delta_ts>2011-10-10 17:16:50 -0700</delta_ts>
            <desc>Another approach based on martin&apos;s</desc>
            <filename>wk-unit-test.diff</filename>
            <type>text/plain</type>
            <size>33523</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtIGIvU291cmNlL1dlYktp
dDIvR05VbWFrZWZpbGUuYW0KaW5kZXggMmRmYTE5ZC4uNTMzODQ1ZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0KKysrIGIvU291cmNlL1dlYktpdDIvR05VbWFrZWZp
bGUuYW0KQEAgLTEwODQsNyArMTA4NCw3IEBAIFRFU1RfUFJPR1MgKz0gXAogCVByb2dyYW1zL3Vu
aXR0ZXN0cy93ZWJraXQyL3Rlc3Rsb2FkaW5nCiAKIG5vaW5zdF9QUk9HUkFNUyArPSAkKFRFU1Rf
UFJPR1MpCi13ZWJraXQyX3Rlc3RzX2NmbGFncyA9IFwKK3dlYmtpdDJfdGVzdHNfY3BwZmxhZ3Mg
PSBcCiAJLURXRUJLSVRfRVhFQ19QQVRIPVwiJHtzaGVsbCBwd2R9LyQodG9wX2J1aWxkZGlyKS9Q
cm9ncmFtc1wiIFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UgXAogCS1JJChzcmNkaXIpL1NvdXJjZS9X
ZWJLaXQyIFwKQEAgLTExMDksMTggKzExMDksMTggQEAgd2Via2l0Ml90ZXN0c19sZGZsYWdzID0g
XAogCS1uby1pbnN0YWxsIFwKIAktbm8tZmFzdC1pbnN0YWxsCiAKLVByb2dyYW1zX3VuaXR0ZXN0
c193ZWJraXQyX3Rlc3R3ZWJjb250ZXh0X1NPVVJDRVMgPSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay90ZXN0cy90ZXN0d2ViY29udGV4dC5jCi1Qcm9ncmFtc191bml0dGVzdHNfd2Vi
a2l0Ml90ZXN0d2ViY29udGV4dF9DRkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfY2ZsYWdzKQorUHJv
Z3JhbXNfdW5pdHRlc3RzX3dlYmtpdDJfdGVzdHdlYmNvbnRleHRfU09VUkNFUyA9IFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL3Rlc3R3ZWJjb250ZXh0LmNwcAorUHJvZ3Jh
bXNfdW5pdHRlc3RzX3dlYmtpdDJfdGVzdHdlYmNvbnRleHRfQ1BQRkxBR1MgPSAkKHdlYmtpdDJf
dGVzdHNfY3BwZmxhZ3MpCiBQcm9ncmFtc191bml0dGVzdHNfd2Via2l0Ml90ZXN0d2ViY29udGV4
dF9MREFERCA9ICQod2Via2l0Ml90ZXN0c19sZGFkZCkKIFByb2dyYW1zX3VuaXR0ZXN0c193ZWJr
aXQyX3Rlc3R3ZWJjb250ZXh0X0xERkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfbGRmbGFncykKIAot
UHJvZ3JhbXNfdW5pdHRlc3RzX3dlYmtpdDJfdGVzdHdlYnZpZXdfU09VUkNFUyA9IFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL3Rlc3R3ZWJ2aWV3LmMKLVByb2dyYW1zX3Vu
aXR0ZXN0c193ZWJraXQyX3Rlc3R3ZWJ2aWV3X0NGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19jZmxh
Z3MpCitQcm9ncmFtc191bml0dGVzdHNfd2Via2l0Ml90ZXN0d2Vidmlld19TT1VSQ0VTID0gU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvdGVzdHdlYnZpZXcuY3BwCitQcm9n
cmFtc191bml0dGVzdHNfd2Via2l0Ml90ZXN0d2Vidmlld19DUFBGTEFHUyA9ICQod2Via2l0Ml90
ZXN0c19jcHBmbGFncykKIFByb2dyYW1zX3VuaXR0ZXN0c193ZWJraXQyX3Rlc3R3ZWJ2aWV3X0xE
QUREID0gJCh3ZWJraXQyX3Rlc3RzX2xkYWRkKQogUHJvZ3JhbXNfdW5pdHRlc3RzX3dlYmtpdDJf
dGVzdHdlYnZpZXdfTERGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19sZGZsYWdzKQogCi1Qcm9ncmFt
c191bml0dGVzdHNfd2Via2l0Ml90ZXN0bG9hZGluZ19TT1VSQ0VTID0gU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvdGVzdGxvYWRpbmcuYwotUHJvZ3JhbXNfdW5pdHRlc3Rz
X3dlYmtpdDJfdGVzdGxvYWRpbmdfQ0ZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2NmbGFncykKK1By
b2dyYW1zX3VuaXR0ZXN0c193ZWJraXQyX3Rlc3Rsb2FkaW5nX1NPVVJDRVMgPSBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy90ZXN0bG9hZGluZy5jcHAKK1Byb2dyYW1zX3Vu
aXR0ZXN0c193ZWJraXQyX3Rlc3Rsb2FkaW5nX0NQUEZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2Nw
cGZsYWdzKQogUHJvZ3JhbXNfdW5pdHRlc3RzX3dlYmtpdDJfdGVzdGxvYWRpbmdfTERBREQgPSAk
KHdlYmtpdDJfdGVzdHNfbGRhZGQpCiBQcm9ncmFtc191bml0dGVzdHNfd2Via2l0Ml90ZXN0bG9h
ZGluZ19MREZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2xkZmxhZ3MpCiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RNYWluLmggYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0TWFpbi5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0MzJmZDUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0TWFpbi5oCkBAIC0wLDAgKzEsNjYg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBUZXN0TWFp
bl9oCisjZGVmaW5lIFRlc3RNYWluX2gKKworI2luY2x1ZGUgPGdsaWIuaD4KKyNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9HT3duUHRyLmg+CisKKyNkZWZpbmUgV0VCS0lUX1RFU1RfTUFJTihDbGFz
c05hbWUpICAgICAgICAgICAgICAgICAgICAgICAgXAoraW50IG1haW4gKGludCBhcmdjLCBjaGFy
ICoqYXJndikgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBnX3RocmVhZF9p
bml0KDApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGd0a190
ZXN0X2luaXQoJmFyZ2MsICZhcmd2LCAwKTsgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg
Z19zZXRlbnYoIldFQktJVF9FWEVDX1BBVEgiLCBXRUJLSVRfRVhFQ19QQVRILCBGQUxTRSk7IFwK
KyAgICBnX3Rlc3RfYnVnX2Jhc2UoImh0dHBzOi8vYnVncy53ZWJraXQub3JnLyIpOyAgICAgICAg
ICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgICAgQ2xhc3NOYW1lOjpiZWdpbigpOyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICBpbnQgcmV0dXJuVmFsdWUgPSBnX3Rlc3RfcnVuKCk7ICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgIENsYXNzTmFtZTo6ZW5kKCk7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgcmV0dXJuIHJldHVyblZhbHVlOyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30KKworCisjZGVmaW5lIFdFQktJVF9URVNU
X01BS0VfR0xJQl9GSVhUVVJFKENsYXNzTmFtZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgc3RhdGljIHZvaWQgc2V0VXAo
Q2xhc3NOYW1lKiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIG5ldyAoZml4dHVyZSkgQ2xhc3NO
YW1lOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCisgICAgc3RhdGljIHZvaWQgdGVhckRvd24oQ2xhc3NOYW1l
KiBmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCisgICAgICAgIGZpeHR1cmUtPn5DbGFzc05hbWUoKTsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgICAgc3RhdGljIHZvaWQgYWRkKGNvbnN0IGNoYXIqIHN1aXRlTmFtZSwgY29u
c3QgY2hhciogdGVzdE5hbWUsIHZvaWQgKCp0ZXN0RnVuYykoQ2xhc3NOYW1lKiwgY29uc3Qgdm9p
ZCopKSBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCisgICAgICAgIEdPd25QdHI8Z2NoYXI+IHRlc3RQYXRoKGdfc3RyZHVwX3ByaW50ZigiL3dl
YmtpdDIvJXMvJXMiLCBzdWl0ZU5hbWUsIHRlc3ROYW1lKSk7ICAgICAgICAgICAgICAgICAgICBc
CisgICAgICAgIGdfdGVzdF9hZGQodGVzdFBhdGguZ2V0KCksIENsYXNzTmFtZSwgMCwgQ2xhc3NO
YW1lOjpzZXRVcCwgdGVzdEZ1bmMsIENsYXNzTmFtZTo6dGVhckRvd24pOyAgICAgICAgICBcCisg
ICAgfQorCitjbGFzcyBUZXN0Cit7CitwdWJsaWM6CisgICAgVGVzdCgpIHsgfQorICAgIHZpcnR1
YWwgflRlc3QoKSB7IH0KKworICAgIHN0YXRpYyB2b2lkIGJlZ2luKCkgeyB9CisgICAgc3RhdGlj
IHZvaWQgZW5kKCkgeyB9Cit9OworCisjZW5kaWYgLy8gVGVzdE1haW5faApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvdGVzdGxvYWRpbmcuYyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL3Rlc3Rsb2FkaW5nLmMKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1MGM4Y2MuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvdGVzdGxvYWRpbmcuYworKysgL2Rldi9udWxs
CkBAIC0xLDI5MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwIEd1c3Rh
dm8gTm9yb25oYSBTaWx2YQotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDExIElnYWxpYSBTLkwu
Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAot
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0K
LSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0jaW5jbHVkZSA8bGlic291cC9zb3VwLmg+Ci0jaW5jbHVk
ZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8d2Via2l0Mi93ZWJraXQyLmg+Ci0KLS8qIFRoaXMgc3Ry
aW5nIGhhcyB0byBiZSByYXRoZXIgYmlnIGJlY2F1c2Ugb2YgdGhlIGNhbmNlbGxlZCB0ZXN0IC0g
aXQKLSAqIGxvb2tzIGxpa2Ugc291cCByZWZ1c2VzIHRvIHNlbmQgb3IgcmVjZWl2ZSBhIHRvbyBz
bWFsbCBjaHVuayAqLwotI2RlZmluZSBIVE1MX1NUUklORyAiPGh0bWw+PGJvZHk+VGVzdGluZyFU
ZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRl
c3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVz
dGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0
aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3Rp
bmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGlu
ZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5n
IVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3Rpbmch
VGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFU
ZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRl
c3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVz
dGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0
aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nITwvYm9k
eT48L2h0bWw+IgotCi1Tb3VwVVJJICpiYXNlVVJJOwotCi0vKiBGb3IgcmVhbCByZXF1ZXN0IHRl
c3RpbmcgKi8KLXN0YXRpYyB2b2lkIHNlcnZlckNhbGxiYWNrKFNvdXBTZXJ2ZXIqIHNlcnZlciwg
U291cE1lc3NhZ2UqIG1zZywgY29uc3QgY2hhciogcGF0aCwgR0hhc2hUYWJsZSogcXVlcnksIFNv
dXBDbGllbnRDb250ZXh0KiBjb250ZXh0LCBncG9pbnRlciBkYXRhKQotewotICAgIGlmIChtc2ct
Pm1ldGhvZCAhPSBTT1VQX01FVEhPRF9HRVQpIHsKLSAgICAgICAgc291cF9tZXNzYWdlX3NldF9z
dGF0dXMobXNnLCBTT1VQX1NUQVRVU19OT1RfSU1QTEVNRU5URUQpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobXNnLCBTT1VQX1NUQVRVU19P
Syk7Ci0KLSAgICBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi8iKSkgewotICAgICAgICBzb3VwX21l
c3NhZ2Vfc2V0X3N0YXR1cyhtc2csIFNPVVBfU1RBVFVTX01PVkVEX1BFUk1BTkVOVExZKTsKLSAg
ICAgICAgc291cF9tZXNzYWdlX2hlYWRlcnNfYXBwZW5kKG1zZy0+cmVzcG9uc2VfaGVhZGVycywg
IkxvY2F0aW9uIiwgIi90ZXN0X2xvYWRpbmdfc3RhdHVzIik7Ci0gICAgfSBlbHNlIGlmIChnX3N0
cl9lcXVhbChwYXRoLCAiL3Rlc3RfbG9hZGluZ19zdGF0dXMiKSB8fCBnX3N0cl9lcXVhbChwYXRo
LCAiL3Rlc3RfbG9hZGluZ19zdGF0dXMyIikpCi0gICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2Fw
cGVuZChtc2ctPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1NUQVRJQywgSFRNTF9TVFJJTkcs
IHN0cmxlbihIVE1MX1NUUklORykpOwotICAgIGVsc2UgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIv
dGVzdF9sb2FkX2Vycm9yIikpIHsKLSAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobXNn
LCBTT1VQX1NUQVRVU19DQU5UX0NPTk5FQ1QpOwotICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwo
cGF0aCwgIi90ZXN0X2xvYWRpbmdfY2FuY2VsbGVkIikpIHsKLSAgICAgICAgc291cF9tZXNzYWdl
X2hlYWRlcnNfc2V0X2VuY29kaW5nKG1zZy0+cmVzcG9uc2VfaGVhZGVycywgU09VUF9FTkNPRElO
R19DSFVOS0VEKTsKLSAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1zZy0+cmVzcG9u
c2VfYm9keSwgU09VUF9NRU1PUllfU1RBVElDLCBIVE1MX1NUUklORywgc3RybGVuKEhUTUxfU1RS
SU5HKSk7Ci0gICAgICAgIHNvdXBfc2VydmVyX3VucGF1c2VfbWVzc2FnZShzZXJ2ZXIsIG1zZyk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0
ZShtc2ctPnJlc3BvbnNlX2JvZHkpOwotfQotCi10eXBlZGVmIHN0cnVjdCB7Ci0gICAgV2ViS2l0
V2ViVmlldyAqd2ViVmlldzsKLSAgICBHTWFpbkxvb3AgKmxvb3A7Ci0gICAgZ2Jvb2xlYW4gaGFz
QmVlblByb3Zpc2lvbmFsOwotICAgIGdib29sZWFuIGhhc0JlZW5SZWRpcmVjdDsKLSAgICBnYm9v
bGVhbiBoYXNCZWVuQ29tbWl0dGVkOwotICAgIGdib29sZWFuIGhhc0JlZW5GaW5pc2hlZDsKLSAg
ICBnYm9vbGVhbiBoYXNCZWVuRmFpbGVkOwotfSBXZWJMb2FkaW5nRml4dHVyZTsKLQotc3RhdGlj
IHZvaWQgd2ViTG9hZGluZ0ZpeHR1cmVTZXR1cChXZWJMb2FkaW5nRml4dHVyZSAqZml4dHVyZSwg
Z2NvbnN0cG9pbnRlciBkYXRhKQotewotICAgIGZpeHR1cmUtPndlYlZpZXcgPSBXRUJLSVRfV0VC
X1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKLSAgICBmaXh0dXJlLT5sb29wID0gZ19tYWlu
X2xvb3BfbmV3KE5VTEwsIFRSVUUpOwotICAgIGdfb2JqZWN0X3JlZl9zaW5rKGZpeHR1cmUtPndl
YlZpZXcpOwotICAgIGZpeHR1cmUtPmhhc0JlZW5Qcm92aXNpb25hbCA9IEZBTFNFOwotICAgIGZp
eHR1cmUtPmhhc0JlZW5SZWRpcmVjdCA9IEZBTFNFOwotICAgIGZpeHR1cmUtPmhhc0JlZW5Db21t
aXR0ZWQgPSBGQUxTRTsKLSAgICBmaXh0dXJlLT5oYXNCZWVuRmluaXNoZWQgPSBGQUxTRTsKLSAg
ICBmaXh0dXJlLT5oYXNCZWVuRmFpbGVkID0gRkFMU0U7Ci19Ci0KLXN0YXRpYyB2b2lkIHdlYkxv
YWRpbmdGaXh0dXJlVGVhcmRvd24oV2ViTG9hZGluZ0ZpeHR1cmUgKmZpeHR1cmUsIGdjb25zdHBv
aW50ZXIgZGF0YSkKLXsKLSAgICBnX29iamVjdF91bnJlZihmaXh0dXJlLT53ZWJWaWV3KTsKLSAg
ICBnX21haW5fbG9vcF91bnJlZihmaXh0dXJlLT5sb29wKTsKLX0KLQotc3RhdGljIGNoYXIgKmdl
dFVSSUZvclBhdGgoY29uc3QgY2hhciogcGF0aCkKLXsKLSAgICBTb3VwVVJJICp1cmk7Ci0gICAg
Y2hhciAqdXJpU3RyaW5nOwotCi0gICAgdXJpID0gc291cF91cmlfbmV3X3dpdGhfYmFzZShiYXNl
VVJJLCBwYXRoKTsKLSAgICB1cmlTdHJpbmcgPSBzb3VwX3VyaV90b19zdHJpbmcodXJpLCBGQUxT
RSk7Ci0gICAgc291cF91cmlfZnJlZSh1cmkpOwotCi0gICAgcmV0dXJuIHVyaVN0cmluZzsKLX0K
LQotLyogTG9hZCBTdGF0dXMgKi8KLXN0YXRpYyBnYm9vbGVhbiBsb2FkU3RhdHVzUHJvdmlzaW9u
YWxMb2FkU3RhcnRlZChXZWJLaXRXZWJMb2FkZXJDbGllbnQgKmNsaWVudCwgV2ViTG9hZGluZ0Zp
eHR1cmUgKmZpeHR1cmUpCi17Ci0gICAgZ19hc3NlcnQoIWZpeHR1cmUtPmhhc0JlZW5Qcm92aXNp
b25hbCk7Ci0gICAgZ19hc3NlcnQoIWZpeHR1cmUtPmhhc0JlZW5SZWRpcmVjdCk7Ci0gICAgZ19h
c3NlcnQoIWZpeHR1cmUtPmhhc0JlZW5Db21taXR0ZWQpOwotICAgIGZpeHR1cmUtPmhhc0JlZW5Q
cm92aXNpb25hbCA9IFRSVUU7Ci0KLSAgICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29s
ZWFuIGxvYWRTdGF0dXNQcm92aXNpb25hbExvYWRSZWNlaXZlZFNlcnZlclJlZGlyZWN0KFdlYktp
dFdlYkxvYWRlckNsaWVudCAqY2xpZW50LCBXZWJMb2FkaW5nRml4dHVyZSAqZml4dHVyZSkKLXsK
LSAgICBnX2Fzc2VydChmaXh0dXJlLT5oYXNCZWVuUHJvdmlzaW9uYWwpOwotICAgIGdfYXNzZXJ0
KCFmaXh0dXJlLT5oYXNCZWVuUmVkaXJlY3QpOwotICAgIGdfYXNzZXJ0KCFmaXh0dXJlLT5oYXNC
ZWVuQ29tbWl0dGVkKTsKLSAgICBmaXh0dXJlLT5oYXNCZWVuUmVkaXJlY3QgPSBUUlVFOwotCi0g
ICAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiBsb2FkU3RhdHVzUHJvdmlzaW9u
YWxMb2FkRmFpbGVkKFdlYktpdFdlYkxvYWRlckNsaWVudCAqY2xpZW50LCBjb25zdCBnY2hhciAq
ZmFpbGluZ1VSSSwgR0Vycm9yICplcnJvciwgV2ViTG9hZGluZ0ZpeHR1cmUgKmZpeHR1cmUpCi17
Ci0gICAgZ19hc3NlcnRfbm90X3JlYWNoZWQoKTsKLSAgICByZXR1cm4gVFJVRTsKLX0KLQotc3Rh
dGljIGdib29sZWFuIGxvYWRTdGF0dXNMb2FkQ29tbWl0dGVkKFdlYktpdFdlYkxvYWRlckNsaWVu
dCAqY2xpZW50LCBXZWJMb2FkaW5nRml4dHVyZSAqZml4dHVyZSkKLXsKLSAgICBnX2Fzc2VydChm
aXh0dXJlLT5oYXNCZWVuUHJvdmlzaW9uYWwpOwotICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmhhc0Jl
ZW5SZWRpcmVjdCk7Ci0gICAgZ19hc3NlcnQoIWZpeHR1cmUtPmhhc0JlZW5Db21taXR0ZWQpOwot
ICAgIGZpeHR1cmUtPmhhc0JlZW5Db21taXR0ZWQgPSBUUlVFOwotCi0gICAgcmV0dXJuIFRSVUU7
Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiBsb2FkU3RhdHVzTG9hZEZpbmlzaGVkKFdlYktpdFdlYkxv
YWRlckNsaWVudCAqY2xpZW50LCBXZWJMb2FkaW5nRml4dHVyZSAqZml4dHVyZSkKLXsKLSAgICBn
X2Fzc2VydChmaXh0dXJlLT5oYXNCZWVuUHJvdmlzaW9uYWwpOwotICAgIGdfYXNzZXJ0KGZpeHR1
cmUtPmhhc0JlZW5SZWRpcmVjdCk7Ci0gICAgZ19hc3NlcnQoZml4dHVyZS0+aGFzQmVlbkNvbW1p
dHRlZCk7Ci0gICAgZ19hc3NlcnQoIWZpeHR1cmUtPmhhc0JlZW5GaW5pc2hlZCk7Ci0gICAgZml4
dHVyZS0+aGFzQmVlbkZpbmlzaGVkID0gVFJVRTsKLQotICAgIGdfbWFpbl9sb29wX3F1aXQoZml4
dHVyZS0+bG9vcCk7Ci0KLSAgICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuIGxv
YWRTdGF0dXNMb2FkRmFpbGVkKFdlYktpdFdlYkxvYWRlckNsaWVudCAqY2xpZW50LCBjb25zdCBn
Y2hhciAqZmFpbGluZ1VSSSwgR0Vycm9yICplcnJvciwgV2ViTG9hZGluZ0ZpeHR1cmUgKmZpeHR1
cmUpCi17Ci0gICAgZ19hc3NlcnRfbm90X3JlYWNoZWQoKTsKLSAgICByZXR1cm4gVFJVRTsKLX0K
LQotc3RhdGljIHZvaWQgdGVzdExvYWRpbmdTdGF0dXMoV2ViTG9hZGluZ0ZpeHR1cmUgKmZpeHR1
cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgICBjaGFyICp1cmlTdHJpbmc7Ci0gICAgV2Vi
S2l0V2ViTG9hZGVyQ2xpZW50ICpjbGllbnQgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2xvYWRlcl9j
bGllbnQoZml4dHVyZS0+d2ViVmlldyk7Ci0KLSAgICBnX3NpZ25hbF9jb25uZWN0KGNsaWVudCwg
InByb3Zpc2lvbmFsLWxvYWQtc3RhcnRlZCIsIEdfQ0FMTEJBQ0sobG9hZFN0YXR1c1Byb3Zpc2lv
bmFsTG9hZFN0YXJ0ZWQpLCBmaXh0dXJlKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KGNsaWVudCwg
InByb3Zpc2lvbmFsLWxvYWQtcmVjZWl2ZWQtc2VydmVyLXJlZGlyZWN0IiwgR19DQUxMQkFDSyhs
b2FkU3RhdHVzUHJvdmlzaW9uYWxMb2FkUmVjZWl2ZWRTZXJ2ZXJSZWRpcmVjdCksIGZpeHR1cmUp
OwotICAgIGdfc2lnbmFsX2Nvbm5lY3QoY2xpZW50LCAicHJvdmlzaW9uYWwtbG9hZC1mYWlsZWQi
LCBHX0NBTExCQUNLKGxvYWRTdGF0dXNQcm92aXNpb25hbExvYWRGYWlsZWQpLCBmaXh0dXJlKTsK
LSAgICBnX3NpZ25hbF9jb25uZWN0KGNsaWVudCwgImxvYWQtY29tbWl0dGVkIiwgR19DQUxMQkFD
Syhsb2FkU3RhdHVzTG9hZENvbW1pdHRlZCksIGZpeHR1cmUpOwotICAgIGdfc2lnbmFsX2Nvbm5l
Y3QoY2xpZW50LCAibG9hZC1maW5pc2hlZCIsIEdfQ0FMTEJBQ0sobG9hZFN0YXR1c0xvYWRGaW5p
c2hlZCksIGZpeHR1cmUpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3QoY2xpZW50LCAibG9hZC1mYWls
ZWQiLCBHX0NBTExCQUNLKGxvYWRTdGF0dXNMb2FkRmFpbGVkKSwgZml4dHVyZSk7Ci0KLSAgICB1
cmlTdHJpbmcgPSBnZXRVUklGb3JQYXRoKCIvIik7Ci0gICAgd2Via2l0X3dlYl92aWV3X2xvYWRf
dXJpKGZpeHR1cmUtPndlYlZpZXcsIHVyaVN0cmluZyk7Ci0gICAgZ19mcmVlKHVyaVN0cmluZyk7
Ci0KLSAgICBnX21haW5fbG9vcF9ydW4oZml4dHVyZS0+bG9vcCk7Ci0KLSAgICBnX2Fzc2VydChm
aXh0dXJlLT5oYXNCZWVuUHJvdmlzaW9uYWwpOwotICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmhhc0Jl
ZW5SZWRpcmVjdCk7Ci0gICAgZ19hc3NlcnQoZml4dHVyZS0+aGFzQmVlbkNvbW1pdHRlZCk7Ci0g
ICAgZ19hc3NlcnQoZml4dHVyZS0+aGFzQmVlbkZpbmlzaGVkKTsKLX0KLQotLyogTG9hZCBFcnJv
ciAqLwotc3RhdGljIGdib29sZWFuIGxvYWRFcnJvclByb3Zpc2lvbmFsTG9hZFN0YXJ0ZWQoV2Vi
S2l0V2ViTG9hZGVyQ2xpZW50ICpjbGllbnQsIFdlYkxvYWRpbmdGaXh0dXJlICpmaXh0dXJlKQot
ewotICAgIGdfYXNzZXJ0KCFmaXh0dXJlLT5oYXNCZWVuUHJvdmlzaW9uYWwpOwotICAgIGZpeHR1
cmUtPmhhc0JlZW5Qcm92aXNpb25hbCA9IFRSVUU7Ci0KLSAgICByZXR1cm4gVFJVRTsKLX0KLQot
c3RhdGljIGdib29sZWFuIGxvYWRFcnJvclByb3Zpc2lvbmFsTG9hZEZhaWxlZChXZWJLaXRXZWJM
b2FkZXJDbGllbnQgKmNsaWVudCwgY29uc3QgZ2NoYXIgKmZhaWxpbmdVUkksIEdFcnJvciAqZXJy
b3IsIFdlYkxvYWRpbmdGaXh0dXJlICpmaXh0dXJlKQotewotICAgIGdfYXNzZXJ0KGZpeHR1cmUt
Pmhhc0JlZW5Qcm92aXNpb25hbCk7Ci0gICAgZ19hc3NlcnQoIWZpeHR1cmUtPmhhc0JlZW5GYWls
ZWQpOwotICAgIGZpeHR1cmUtPmhhc0JlZW5GYWlsZWQgPSBUUlVFOwotCi0gICAgZ19hc3NlcnQo
ZXJyb3IpOwotCi0gICAgZ19tYWluX2xvb3BfcXVpdChmaXh0dXJlLT5sb29wKTsKLQotICAgIHJl
dHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gbG9hZEVycm9yTG9hZEZpbmlzaGVkKFdl
YktpdFdlYkxvYWRlckNsaWVudCAqY2xpZW50LCBXZWJMb2FkaW5nRml4dHVyZSAqZml4dHVyZSkK
LXsKLSAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOwotICAgIHJldHVybiBUUlVFOwotfQotCi1z
dGF0aWMgdm9pZCB0ZXN0TG9hZGluZ0Vycm9yKFdlYkxvYWRpbmdGaXh0dXJlICpmaXh0dXJlLCBn
Y29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgY2hhciAqdXJpU3RyaW5nOwotICAgIFdlYktpdFdl
YkxvYWRlckNsaWVudCAqY2xpZW50ID0gd2Via2l0X3dlYl92aWV3X2dldF9sb2FkZXJfY2xpZW50
KGZpeHR1cmUtPndlYlZpZXcpOwotCi0gICAgZ19zaWduYWxfY29ubmVjdChjbGllbnQsICJwcm92
aXNpb25hbC1sb2FkLXN0YXJ0ZWQiLCBHX0NBTExCQUNLKGxvYWRFcnJvclByb3Zpc2lvbmFsTG9h
ZFN0YXJ0ZWQpLCBmaXh0dXJlKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KGNsaWVudCwgInByb3Zp
c2lvbmFsLWxvYWQtZmFpbGVkIiwgR19DQUxMQkFDSyhsb2FkRXJyb3JQcm92aXNpb25hbExvYWRG
YWlsZWQpLCBmaXh0dXJlKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KGNsaWVudCwgImxvYWQtZmlu
aXNoZWQiLCBHX0NBTExCQUNLKGxvYWRFcnJvckxvYWRGaW5pc2hlZCksIGZpeHR1cmUpOwotCi0g
ICAgdXJpU3RyaW5nID0gZ2V0VVJJRm9yUGF0aCgiL3Rlc3RfbG9hZF9lcnJvciIpOwotICAgIHdl
YmtpdF93ZWJfdmlld19sb2FkX3VyaShmaXh0dXJlLT53ZWJWaWV3LCB1cmlTdHJpbmcpOwotICAg
IGdfZnJlZSh1cmlTdHJpbmcpOwotCi0gICAgZ19tYWluX2xvb3BfcnVuKGZpeHR1cmUtPmxvb3Ap
OwotCi0gICAgZ19hc3NlcnQoZml4dHVyZS0+aGFzQmVlblByb3Zpc2lvbmFsKTsKLSAgICBnX2Fz
c2VydChmaXh0dXJlLT5oYXNCZWVuRmFpbGVkKTsKLX0KLQotc3RhdGljIGdib29sZWFuIGxvYWRB
bHRlcm5hdGVDb250ZW50TG9hZEZpbmlzaGVkKFdlYktpdFdlYkxvYWRlckNsaWVudCAqY2xpZW50
LCBXZWJMb2FkaW5nRml4dHVyZSAqZml4dHVyZSkKLXsKLSAgICBnX21haW5fbG9vcF9xdWl0KGZp
eHR1cmUtPmxvb3ApOwotCi0gICAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiBs
b2FkQWx0ZXJuYXRlQ29udGVudExvYWRGYWlsZWQoV2ViS2l0V2ViTG9hZGVyQ2xpZW50ICpjbGll
bnQsIGNvbnN0IGdjaGFyICpmYWlsaW5nVVJJLCBHRXJyb3IgKmVycm9yLCBXZWJMb2FkaW5nRml4
dHVyZSAqZml4dHVyZSkKLXsKLSAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOwotICAgIHJldHVy
biBUUlVFOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0TG9hZEFsdGVybmF0ZUNvbnRlbnQoV2ViTG9h
ZGluZ0ZpeHR1cmUgKmZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgICBjaGFyICp1
cmlTdHJpbmc7Ci0gICAgV2ViS2l0V2ViTG9hZGVyQ2xpZW50ICpjbGllbnQgPSB3ZWJraXRfd2Vi
X3ZpZXdfZ2V0X2xvYWRlcl9jbGllbnQoZml4dHVyZS0+d2ViVmlldyk7Ci0KLSAgICBnX3NpZ25h
bF9jb25uZWN0KGNsaWVudCwgImxvYWQtZmluaXNoZWQiLCBHX0NBTExCQUNLKGxvYWRBbHRlcm5h
dGVDb250ZW50TG9hZEZpbmlzaGVkKSwgZml4dHVyZSk7Ci0gICAgZ19zaWduYWxfY29ubmVjdChj
bGllbnQsICJwcm92aXNpb25hbC1sb2FkLWZhaWxlZCIsIEdfQ0FMTEJBQ0sobG9hZEFsdGVybmF0
ZUNvbnRlbnRMb2FkRmFpbGVkKSwgZml4dHVyZSk7Ci0gICAgZ19zaWduYWxfY29ubmVjdChjbGll
bnQsICJsb2FkLWZhaWxlZCIsIEdfQ0FMTEJBQ0sobG9hZEFsdGVybmF0ZUNvbnRlbnRMb2FkRmFp
bGVkKSwgZml4dHVyZSk7Ci0KLSAgICB1cmlTdHJpbmcgPSBnZXRVUklGb3JQYXRoKCIvYWx0ZXJu
YXRlIik7Ci0gICAgd2Via2l0X3dlYl92aWV3X2xvYWRfYWx0ZXJuYXRlX2h0bWwoZml4dHVyZS0+
d2ViVmlldywgIjxodG1sPjxib2R5PkFsdGVybmF0ZSBDb250ZW50PC9ib2R5PjwvaHRtbD4iLCBO
VUxMLCB1cmlTdHJpbmcpOwotICAgIGdfZnJlZSh1cmlTdHJpbmcpOwotCi0gICAgZ19tYWluX2xv
b3BfcnVuKGZpeHR1cmUtPmxvb3ApOwotfQotCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFy
Z3YpCi17Ci0gICAgU291cFNlcnZlciAqc2VydmVyOwotCi0gICAgZ190aHJlYWRfaW5pdChOVUxM
KTsKLSAgICBndGtfdGVzdF9pbml0KCZhcmdjLCAmYXJndiwgTlVMTCk7Ci0KLSAgICBnX3NldGVu
digiV0VCS0lUX0VYRUNfUEFUSCIsIFdFQktJVF9FWEVDX1BBVEgsIEZBTFNFKTsKLQotICAgIHNl
cnZlciA9IHNvdXBfc2VydmVyX25ldyhTT1VQX1NFUlZFUl9QT1JULCAwLCBOVUxMKTsKLSAgICBz
b3VwX3NlcnZlcl9ydW5fYXN5bmMoc2VydmVyKTsKLQotICAgIHNvdXBfc2VydmVyX2FkZF9oYW5k
bGVyKHNlcnZlciwgTlVMTCwgc2VydmVyQ2FsbGJhY2ssIE5VTEwsIE5VTEwpOwotCi0gICAgYmFz
ZVVSSSA9IHNvdXBfdXJpX25ldygiaHR0cDovLzEyNy4wLjAuMS8iKTsKLSAgICBzb3VwX3VyaV9z
ZXRfcG9ydChiYXNlVVJJLCBzb3VwX3NlcnZlcl9nZXRfcG9ydChzZXJ2ZXIpKTsKLQotICAgIGdf
dGVzdF9idWdfYmFzZSgiaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvIik7Ci0gICAgZ190ZXN0X2Fk
ZCgiL3dlYmtpdDIvbG9hZGluZy9zdGF0dXMiLAotICAgICAgICAgICAgICAgV2ViTG9hZGluZ0Zp
eHR1cmUsIE5VTEwsCi0gICAgICAgICAgICAgICB3ZWJMb2FkaW5nRml4dHVyZVNldHVwLAotICAg
ICAgICAgICAgICAgdGVzdExvYWRpbmdTdGF0dXMsCi0gICAgICAgICAgICAgICB3ZWJMb2FkaW5n
Rml4dHVyZVRlYXJkb3duKTsKLSAgICBnX3Rlc3RfYWRkKCIvd2Via2l0Mi9sb2FkaW5nL2Vycm9y
IiwKLSAgICAgICAgICAgICAgIFdlYkxvYWRpbmdGaXh0dXJlLCBOVUxMLAotICAgICAgICAgICAg
ICAgd2ViTG9hZGluZ0ZpeHR1cmVTZXR1cCwKLSAgICAgICAgICAgICAgIHRlc3RMb2FkaW5nRXJy
b3IsCi0gICAgICAgICAgICAgICB3ZWJMb2FkaW5nRml4dHVyZVRlYXJkb3duKTsKLSAgICBnX3Rl
c3RfYWRkKCIvd2Via2l0Mi9sb2FkaW5nL2FsdGVybmF0ZV9jb250ZW50IiwKLSAgICAgICAgICAg
ICAgIFdlYkxvYWRpbmdGaXh0dXJlLCBOVUxMLAotICAgICAgICAgICAgICAgd2ViTG9hZGluZ0Zp
eHR1cmVTZXR1cCwKLSAgICAgICAgICAgICAgIHRlc3RMb2FkQWx0ZXJuYXRlQ29udGVudCwKLSAg
ICAgICAgICAgICAgIHdlYkxvYWRpbmdGaXh0dXJlVGVhcmRvd24pOwotCi0gICAgcmV0dXJuIGdf
dGVzdF9ydW4oKTsKLX0KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvdGVzdHMvdGVzdGxvYWRpbmcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvdGVzdHMvdGVzdGxvYWRpbmcuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjdlZTk2OWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay90ZXN0cy90ZXN0bG9hZGluZy5jcHAKQEAgLTAsMCArMSwyMTMgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAgR3VzdGF2byBOb3JvbmhhIFNpbHZhCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDksIDIwMTEgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisj
aW5jbHVkZSAiVGVzdE1haW4uaCIKKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8bGli
c291cC9zb3VwLmg+CisjaW5jbHVkZSA8d2Via2l0Mi93ZWJraXQyLmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvQ1N0cmluZy5oPgorCitzdGF0aWMgU291cFVSSSoga0Jhc2VVUkk7CitzdGF0aWMgU291
cFNlcnZlcioga1NvdXBTZXJ2ZXI7CisKK3N0YXRpYyBDU3RyaW5nIGdldFVSSUZvclBhdGgoY29u
c3QgY2hhciogcGF0aCkKK3sKKyAgICBTb3VwVVJJKiB1cmkgPSBzb3VwX3VyaV9uZXdfd2l0aF9i
YXNlKGtCYXNlVVJJLCBwYXRoKTsKKyAgICBHT3duUHRyPGdjaGFyPiB1cmlTdHJpbmcoc291cF91
cmlfdG9fc3RyaW5nKHVyaSwgRkFMU0UpKTsKKyAgICBzb3VwX3VyaV9mcmVlKHVyaSk7CisgICAg
cmV0dXJuIHVyaVN0cmluZy5nZXQoKTsKK30KKworc3RhdGljIHZvaWQgc2VydmVyQ2FsbGJhY2so
U291cFNlcnZlciogc2VydmVyLCBTb3VwTWVzc2FnZSogbWVzc2FnZSwgY29uc3QgY2hhciogcGF0
aCwgR0hhc2hUYWJsZSosIFNvdXBDbGllbnRDb250ZXh0KiwgZ3BvaW50ZXIpCit7CisKKyAgICAv
LyBUaGlzIHN0cmluZyBoYXMgdG8gYmUgcmF0aGVyIGJpZyBiZWNhdXNlIG9mIHRoZSBjYW5jZWxs
ZWQgdGVzdCAtIGl0CisgICAgLy8gbG9va3MgbGlrZSBzb3VwIHJlZnVzZXMgdG8gc2VuZCBvciBy
ZWNlaXZlIGEgc21hbGwgY2h1bmsgb2YgZGF0YS4KKyAgICBzdGF0aWMgY29uc3QgY2hhciogcmVz
cG9uc2VTdHJpbmcgPSAiPGh0bWw+PGJvZHk+VGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGlu
ZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyEiCisgICAgICAgICJUZXN0aW5nIVRlc3RpbmchVGVz
dGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0
aW5nIVRlc3RpbmchVGVzdGluZyEiCisgICAgICAgICJUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFU
ZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRl
c3RpbmchVGVzdGluZyEiCisgICAgICAgICJUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5n
IVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3Rpbmch
VGVzdGluZyEiCisgICAgICAgICJUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3Rp
bmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGlu
ZyEiCisgICAgICAgICJUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVz
dGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyEiCisg
ICAgICAgICJUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFU
ZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyEiCisgICAgICAg
ICJUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5n
IVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyE8L2JvZHk+PC9odG1sPiI7
CisKKyAgICBpZiAobWVzc2FnZS0+bWV0aG9kICE9IFNPVVBfTUVUSE9EX0dFVCkgeworICAgICAg
ICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19OT1RfSU1QTEVN
RU5URUQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgc291cF9tZXNzYWdlX3NldF9z
dGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfT0spOworCisgICAgaWYgKGdfc3RyX2VxdWFsKHBh
dGgsICIvIikpIHsKKyAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09V
UF9TVEFUVVNfTU9WRURfUEVSTUFORU5UTFkpOworICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVy
c19hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfaGVhZGVycywgIkxvY2F0aW9uIiwgIi90ZXN0X2xv
YWRpbmdfc3RhdHVzIik7CisgICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL3Rlc3Rf
bG9hZGluZ19zdGF0dXMiKSB8fCBnX3N0cl9lcXVhbChwYXRoLCAiL3Rlc3RfbG9hZGluZ19zdGF0
dXMyIikpCisgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25z
ZV9ib2R5LCBTT1VQX01FTU9SWV9TVEFUSUMsIHJlc3BvbnNlU3RyaW5nLCBzdHJsZW4ocmVzcG9u
c2VTdHJpbmcpKTsKKyAgICBlbHNlIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL3Rlc3RfbG9hZF9l
cnJvciIpKSB7CisgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBf
U1RBVFVTX0NBTlRfQ09OTkVDVCk7CisgICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbChwYXRoLCAi
L3Rlc3RfbG9hZGluZ19jYW5jZWxsZWQiKSkgeworICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVy
c19zZXRfZW5jb2RpbmcobWVzc2FnZS0+cmVzcG9uc2VfaGVhZGVycywgU09VUF9FTkNPRElOR19D
SFVOS0VEKTsKKyAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3Bv
bnNlX2JvZHksIFNPVVBfTUVNT1JZX1NUQVRJQywgcmVzcG9uc2VTdHJpbmcsIHN0cmxlbihyZXNw
b25zZVN0cmluZykpOworICAgICAgICBzb3VwX3NlcnZlcl91bnBhdXNlX21lc3NhZ2Uoc2VydmVy
LCBtZXNzYWdlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHNvdXBfbWVzc2FnZV9i
b2R5X2NvbXBsZXRlKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHkpOworfQorCitjbGFzcyBUZXN0V2Vi
S2l0V2ViTG9hZGVyQ2xpZW50OiBwdWJsaWMgVGVzdAoreworcHVibGljOgorICAgIGVudW0gTG9h
ZEV2ZW50cyB7CisgICAgICAgIFByb3Zpc2lvbmFsTG9hZFN0YXJ0ZWQsCisgICAgICAgIFByb3Zp
c2lvbmFsTG9hZFJlY2VpdmVkU2VydmVyUmVkaXJlY3QsCisgICAgICAgIFByb3Zpc2lvbmFsTG9h
ZEZhaWxlZCwKKyAgICAgICAgTG9hZENvbW1pdHRlZCwKKyAgICAgICAgTG9hZEZpbmlzaGVkLAor
ICAgICAgICBMb2FkRmFpbGVkCisgICAgfTsKKworICAgIFRlc3RXZWJLaXRXZWJMb2FkZXJDbGll
bnQoKQorICAgICAgICA6IG1fd2ViVmlldyhXRUJLSVRfV0VCX1ZJRVcoZ19vYmplY3RfcmVmX3Np
bmsod2Via2l0X3dlYl92aWV3X25ldygpKSkpCisgICAgICAgICwgbV9tYWluTG9vcChnX21haW5f
bG9vcF9uZXcoMCwgVFJVRSkpCisgICAgeworICAgICAgICBXZWJLaXRXZWJMb2FkZXJDbGllbnQq
IGNsaWVudCA9IHdlYmtpdF93ZWJfdmlld19nZXRfbG9hZGVyX2NsaWVudChtX3dlYlZpZXcpOwor
ICAgICAgICBnX3NpZ25hbF9jb25uZWN0KGNsaWVudCwgInByb3Zpc2lvbmFsLWxvYWQtc3RhcnRl
ZCIsIEdfQ0FMTEJBQ0socHJvdmlzaW9uYWxMb2FkU3RhcnRlZENhbGxiYWNrKSwgdGhpcyk7Cisg
ICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QoY2xpZW50LCAicHJvdmlzaW9uYWwtbG9hZC1yZWNlaXZl
ZC1zZXJ2ZXItcmVkaXJlY3QiLCBHX0NBTExCQUNLKHByb3Zpc2lvbmFsTG9hZFJlY2VpdmVkU2Vy
dmVyUmVkaXJlY3RDYWxsYmFjayksIHRoaXMpOworICAgICAgICBnX3NpZ25hbF9jb25uZWN0KGNs
aWVudCwgInByb3Zpc2lvbmFsLWxvYWQtZmFpbGVkIiwgR19DQUxMQkFDSyhwcm92aXNpb25hbExv
YWRGYWlsZWRDYWxsYmFjayksIHRoaXMpOworICAgICAgICBnX3NpZ25hbF9jb25uZWN0KGNsaWVu
dCwgImxvYWQtY29tbWl0dGVkIiwgR19DQUxMQkFDSyhsb2FkQ29tbWl0dGVkQ2FsbGJhY2spLCB0
aGlzKTsKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdChjbGllbnQsICJsb2FkLWZpbmlzaGVkIiwg
R19DQUxMQkFDSyhsb2FkRmluaXNoZWRDYWxsYmFjayksIHRoaXMpOworICAgICAgICBnX3NpZ25h
bF9jb25uZWN0KGNsaWVudCwgImxvYWQtZmFpbGVkIiwgR19DQUxMQkFDSyhsb2FkRmFpbGVkQ2Fs
bGJhY2spLCB0aGlzKTsKKyAgICB9CisKKyAgICB+VGVzdFdlYktpdFdlYkxvYWRlckNsaWVudCgp
CisgICAgeworICAgICAgICBnX29iamVjdF91bnJlZihtX3dlYlZpZXcpOworICAgICAgICBnX21h
aW5fbG9vcF91bnJlZihtX21haW5Mb29wKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBiZWdp
bigpCisgICAgeworICAgICAgICBrQmFzZVVSSSA9IHNvdXBfdXJpX25ldygiaHR0cDovLzEyNy4w
LjAuMS8iKTsKKworICAgICAgICBrU291cFNlcnZlciA9IHNvdXBfc2VydmVyX25ldyhTT1VQX1NF
UlZFUl9QT1JULCAwLCBOVUxMKTsKKyAgICAgICAgc291cF91cmlfc2V0X3BvcnQoa0Jhc2VVUkks
IHNvdXBfc2VydmVyX2dldF9wb3J0KGtTb3VwU2VydmVyKSk7CisgICAgICAgIHNvdXBfc2VydmVy
X3J1bl9hc3luYyhrU291cFNlcnZlcik7CisgICAgICAgIHNvdXBfc2VydmVyX2FkZF9oYW5kbGVy
KGtTb3VwU2VydmVyLCBOVUxMLCBzZXJ2ZXJDYWxsYmFjaywgTlVMTCwgTlVMTCk7CisKKyAgICAg
ICAgYWRkKCJXZWJLaXRXZWJMb2FkZXJDbGllbnQiLCAibG9hZGluZy1zdGF0dXMiLCB0ZXN0TG9h
ZGluZ1N0YXR1cyk7CisgICAgICAgIGFkZCgiV2ViS2l0V2ViTG9hZGVyQ2xpZW50IiwgImxvYWRp
bmctZXJyb3IiLCB0ZXN0TG9hZGluZ0Vycm9yKTsKKyAgICAgICAgYWRkKCJXZWJLaXRXZWJMb2Fk
ZXJDbGllbnQiLCAibG9hZC1hbHRlcm5hdGUtY29udGVudCIsIHRlc3RMb2FkQWx0ZXJuYXRlQ29u
dGVudCk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgZW5kKCkKKyAgICB7CisgICAgICAgIHNv
dXBfdXJpX2ZyZWUoa0Jhc2VVUkkpOworICAgICAgICBnX29iamVjdF91bnJlZihrU291cFNlcnZl
cik7CisgICAgfQorCisgICAgc3RhdGljIGdib29sZWFuIHByb3Zpc2lvbmFsTG9hZFN0YXJ0ZWRD
YWxsYmFjayhXZWJLaXRXZWJMb2FkZXJDbGllbnQqIGNsaWVudCwgVGVzdFdlYktpdFdlYkxvYWRl
ckNsaWVudCogdGVzdCkKKyAgICB7CisgICAgICAgIHRlc3QtPm1fbG9hZEV2ZW50cy5hcHBlbmQo
UHJvdmlzaW9uYWxMb2FkU3RhcnRlZCk7CisgICAgICAgIHJldHVybiBUUlVFOworICAgIH0KKwor
ICAgIHN0YXRpYyBnYm9vbGVhbiBwcm92aXNpb25hbExvYWRSZWNlaXZlZFNlcnZlclJlZGlyZWN0
Q2FsbGJhY2soV2ViS2l0V2ViTG9hZGVyQ2xpZW50KiBjbGllbnQsIFRlc3RXZWJLaXRXZWJMb2Fk
ZXJDbGllbnQqIHRlc3QpCisgICAgeworICAgICAgICB0ZXN0LT5tX2xvYWRFdmVudHMuYXBwZW5k
KFByb3Zpc2lvbmFsTG9hZFJlY2VpdmVkU2VydmVyUmVkaXJlY3QpOworICAgICAgICByZXR1cm4g
VFJVRTsKKyAgICB9CisKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gcHJvdmlzaW9uYWxMb2FkRmFpbGVk
Q2FsbGJhY2soV2ViS2l0V2ViTG9hZGVyQ2xpZW50KiBjbGllbnQsIGNvbnN0IGdjaGFyKiBmYWls
aW5nVVJJLCBHRXJyb3IqIGVycm9yLCBUZXN0V2ViS2l0V2ViTG9hZGVyQ2xpZW50KiB0ZXN0KQor
ICAgIHsKKyAgICAgICAgdGVzdC0+bV9sb2FkRXZlbnRzLmFwcGVuZChQcm92aXNpb25hbExvYWRG
YWlsZWQpOworICAgICAgICBnX21haW5fbG9vcF9xdWl0KHRlc3QtPm1fbWFpbkxvb3ApOworICAg
ICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gbG9hZENvbW1p
dHRlZENhbGxiYWNrKFdlYktpdFdlYkxvYWRlckNsaWVudCogY2xpZW50LCBUZXN0V2ViS2l0V2Vi
TG9hZGVyQ2xpZW50KiB0ZXN0KQorICAgIHsKKyAgICAgICAgdGVzdC0+bV9sb2FkRXZlbnRzLmFw
cGVuZChMb2FkQ29tbWl0dGVkKTsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorCisgICAg
c3RhdGljIGdib29sZWFuIGxvYWRGaW5pc2hlZENhbGxiYWNrKFdlYktpdFdlYkxvYWRlckNsaWVu
dCogY2xpZW50LCBUZXN0V2ViS2l0V2ViTG9hZGVyQ2xpZW50KiB0ZXN0KQorICAgIHsKKyAgICAg
ICAgdGVzdC0+bV9sb2FkRXZlbnRzLmFwcGVuZChMb2FkRmluaXNoZWQpOworICAgICAgICBnX21h
aW5fbG9vcF9xdWl0KHRlc3QtPm1fbWFpbkxvb3ApOworICAgICAgICByZXR1cm4gVFJVRTsKKyAg
ICB9CisKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gbG9hZEZhaWxlZENhbGxiYWNrKFdlYktpdFdlYkxv
YWRlckNsaWVudCogY2xpZW50LCBjb25zdCBnY2hhciogZmFpbGluZ1VSSSwgR0Vycm9yKiBlcnJv
ciwgVGVzdFdlYktpdFdlYkxvYWRlckNsaWVudCogdGVzdCkKKyAgICB7CisgICAgICAgIHRlc3Qt
Pm1fbG9hZEV2ZW50cy5hcHBlbmQoTG9hZEZhaWxlZCk7CisgICAgICAgIGdfbWFpbl9sb29wX3F1
aXQodGVzdC0+bV9tYWluTG9vcCk7CisgICAgICAgIHJldHVybiBUUlVFOworICAgIH0KKworICAg
IHN0YXRpYyB2b2lkIHRlc3RMb2FkaW5nU3RhdHVzKFRlc3RXZWJLaXRXZWJMb2FkZXJDbGllbnQq
IHRlc3QsIGdjb25zdHBvaW50ZXIpCisgICAgeworICAgICAgICB3ZWJraXRfd2ViX3ZpZXdfbG9h
ZF91cmkodGVzdC0+bV93ZWJWaWV3LCBnZXRVUklGb3JQYXRoKCIvIikuZGF0YSgpKTsKKyAgICAg
ICAgZ19tYWluX2xvb3BfcnVuKHRlc3QtPm1fbWFpbkxvb3ApOworCisgICAgICAgIFZlY3RvcjxM
b2FkRXZlbnRzPiBldmVudHMgPSB0ZXN0LT5tX2xvYWRFdmVudHM7CisgICAgICAgIGdfYXNzZXJ0
X2NtcGludChldmVudHMuc2l6ZSgpLCA9PSwgNCk7CisgICAgICAgIGdfYXNzZXJ0X2NtcGludChl
dmVudHNbMF0sID09LCBQcm92aXNpb25hbExvYWRTdGFydGVkKTsKKyAgICAgICAgZ19hc3NlcnRf
Y21waW50KGV2ZW50c1sxXSwgPT0sIFByb3Zpc2lvbmFsTG9hZFJlY2VpdmVkU2VydmVyUmVkaXJl
Y3QpOworICAgICAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzJdLCA9PSwgTG9hZENvbW1pdHRl
ZCk7CisgICAgICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbM10sID09LCBMb2FkRmluaXNoZWQp
OworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIHRlc3RMb2FkaW5nRXJyb3IoVGVzdFdlYktpdFdl
YkxvYWRlckNsaWVudCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKKyAgICB7CisgICAgICAgIHdlYmtp
dF93ZWJfdmlld19sb2FkX3VyaSh0ZXN0LT5tX3dlYlZpZXcsIGdldFVSSUZvclBhdGgoIi90ZXN0
X2xvYWRfZXJyb3IiKS5kYXRhKCkpOworICAgICAgICBnX21haW5fbG9vcF9ydW4odGVzdC0+bV9t
YWluTG9vcCk7CisKKyAgICAgICAgVmVjdG9yPExvYWRFdmVudHM+IGV2ZW50cyA9IHRlc3QtPm1f
bG9hZEV2ZW50czsKKyAgICAgICAgZ19hc3NlcnRfY21waW50KGV2ZW50cy5zaXplKCksID09LCAy
KTsKKyAgICAgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1swXSwgPT0sIFByb3Zpc2lvbmFsTG9h
ZFN0YXJ0ZWQpOworICAgICAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzFdLCA9PSwgUHJvdmlz
aW9uYWxMb2FkRmFpbGVkKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCB0ZXN0TG9hZEFsdGVy
bmF0ZUNvbnRlbnQoVGVzdFdlYktpdFdlYkxvYWRlckNsaWVudCogdGVzdCwgZ2NvbnN0cG9pbnRl
cikKKyAgICB7CisgICAgICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX2FsdGVybmF0ZV9odG1sKHRl
c3QtPm1fd2ViVmlldywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIjxodG1sPjxib2R5PkFsdGVybmF0ZSBDb250ZW50PC9ib2R5PjwvaHRtbD4iLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBnZXRVUklGb3JQYXRoKCIv
YWx0ZXJuYXRlIikuZGF0YSgpKTsKKyAgICAgICAgZ19tYWluX2xvb3BfcnVuKHRlc3QtPm1fbWFp
bkxvb3ApOworCisgICAgICAgIFZlY3RvcjxMb2FkRXZlbnRzPiBldmVudHMgPSB0ZXN0LT5tX2xv
YWRFdmVudHM7CisgICAgICAgIGdfYXNzZXJ0X2NtcGludChldmVudHMuc2l6ZSgpLCA9PSwgMyk7
CisgICAgICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMF0sID09LCBQcm92aXNpb25hbExvYWRT
dGFydGVkKTsKKyAgICAgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1sxXSwgPT0sIExvYWRDb21t
aXR0ZWQpOworICAgICAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzJdLCA9PSwgTG9hZEZpbmlz
aGVkKTsKKyAgICB9CisKKyAgICBXRUJLSVRfVEVTVF9NQUtFX0dMSUJfRklYVFVSRShUZXN0V2Vi
S2l0V2ViTG9hZGVyQ2xpZW50KQorCisgICAgV2ViS2l0V2ViVmlldyogbV93ZWJWaWV3OworICAg
IEdNYWluTG9vcCogbV9tYWluTG9vcDsKKyAgICBWZWN0b3I8TG9hZEV2ZW50cz4gbV9sb2FkRXZl
bnRzOworfTsKKworV0VCS0lUX1RFU1RfTUFJTihUZXN0V2ViS2l0V2ViTG9hZGVyQ2xpZW50KQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvdGVzdHdl
YmNvbnRleHQuYyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL3Rlc3R3
ZWJjb250ZXh0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFiNTI1N2YuLjAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvdGVzdHdlYmNv
bnRleHQuYworKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTEgSWdhbGlhIFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNp
b24gMiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlIDxnbGliLmg+Ci0jaW5jbHVkZSA8Z3RrL2d0
ay5oPgotI2luY2x1ZGUgPHdlYmtpdDIvd2Via2l0Mi5oPgotCi1zdGF0aWMgdm9pZCB0ZXN0V2Vi
Q29udGV4dERlZmF1bHQodm9pZCkKLXsKLSAgICAvKiBDaGVjayB0aGVyZSdzIGEgc2luZ2xlIGlu
c3RhbmNlIG9mIHRoZSBkZWZhdWx0IHdlYiBjb250ZXh0LiAqLwotICAgIGdfYXNzZXJ0KHdlYmtp
dF93ZWJfY29udGV4dF9nZXRfZGVmYXVsdCgpID09IHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZGVm
YXVsdCgpKTsKLX0KLQotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotewotICAgIGdf
dGhyZWFkX2luaXQoTlVMTCk7Ci0gICAgZ3RrX3Rlc3RfaW5pdCgmYXJnYywgJmFyZ3YsIE5VTEwp
OwotCi0gICAgZ190ZXN0X2J1Z19iYXNlKCJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy8iKTsKLSAg
ICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQyL3dlYmNvbnRleHQvZGVmYXVsdF9jb250ZXh0IiwK
LSAgICAgICAgICAgICAgICAgICAgdGVzdFdlYkNvbnRleHREZWZhdWx0KTsKLQotICAgIHJldHVy
biBnX3Rlc3RfcnVuKCk7Ci19Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL3Rlc3RzL3Rlc3R3ZWJjb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL3Rlc3RzL3Rlc3R3ZWJjb250ZXh0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi4xZjliY2ZiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvdGVzdHdlYmNvbnRleHQuY3BwCkBAIC0wLDAgKzEs
NDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKworI2luY2x1ZGUgIlRlc3RNYWluLmgiCisjaW5jbHVkZSA8Z3RrL2d0ay5oPgor
I2luY2x1ZGUgPHdlYmtpdDIvd2Via2l0Mi5oPgorCitjbGFzcyBUZXN0V2ViS2l0V2ViQ29udGV4
dCA6IHB1YmxpYyBUZXN0Cit7CitwdWJsaWM6CisgICAgc3RhdGljIHZvaWQgYmVnaW4oKQorICAg
IHsKKyAgICAgICAgYWRkKCJXZWJLaXRXZWJDb250ZXh0IiwgImRlZmF1bHQtY29udGV4dCIsIHRl
c3RXZWJDb250ZXh0RGVmYXVsdCk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgdGVzdFdlYkNv
bnRleHREZWZhdWx0KFRlc3RXZWJLaXRXZWJDb250ZXh0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQor
ICAgIHsKKyAgICAgICAgLy8gQ2hlY2sgdGhlcmUncyBhIHNpbmdsZSBpbnN0YW5jZSBvZiB0aGUg
ZGVmYXVsdCB3ZWIgY29udGV4dC4KKyAgICAgICAgZ19hc3NlcnQod2Via2l0X3dlYl9jb250ZXh0
X2dldF9kZWZhdWx0KCkgPT0gd2Via2l0X3dlYl9jb250ZXh0X2dldF9kZWZhdWx0KCkpOworICAg
IH0KKworICAgIFdFQktJVF9URVNUX01BS0VfR0xJQl9GSVhUVVJFKFRlc3RXZWJLaXRXZWJDb250
ZXh0KQorfTsKKworV0VCS0lUX1RFU1RfTUFJTihUZXN0V2ViS2l0V2ViQ29udGV4dCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL3Rlc3R3ZWJ2aWV3
LmMgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy90ZXN0d2Vidmlldy5j
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YTI3YWZlLi4wMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL3Rlc3R3ZWJ2aWV3LmMKKysrIC9k
ZXYvbnVsbApAQCAtMSw0NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxp
YSBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIsMSBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
LSAqLwotCi0jaW5jbHVkZSA8Z2xpYi5oPgotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLSNpbmNsdWRl
IDx3ZWJraXQyL3dlYmtpdDIuaD4KLQotc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdEZWZhdWx0Q29u
dGV4dCh2b2lkKQotewotICAgIFdlYktpdFdlYlZpZXcgKnZpZXcgPSBXRUJLSVRfV0VCX1ZJRVco
d2Via2l0X3dlYl92aWV3X25ldygpKTsKLSAgICBnX29iamVjdF9yZWZfc2luayh2aWV3KTsKLSAg
ICBnX2Fzc2VydCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X2NvbnRleHQodmlldykgPT0gd2Via2l0X3dl
Yl9jb250ZXh0X2dldF9kZWZhdWx0KCkpOwotICAgIGdfb2JqZWN0X3VucmVmKHZpZXcpOwotfQot
Ci1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi17Ci0gICAgZ190aHJlYWRfaW5pdChO
VUxMKTsKLSAgICBndGtfdGVzdF9pbml0KCZhcmdjLCAmYXJndiwgTlVMTCk7Ci0KLSAgICBnX3Nl
dGVudigiV0VCS0lUX0VYRUNfUEFUSCIsIFdFQktJVF9FWEVDX1BBVEgsIEZBTFNFKTsKLQotICAg
IGdfdGVzdF9idWdfYmFzZSgiaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvIik7Ci0gICAgZ190ZXN0
X2FkZF9mdW5jKCIvd2Via2l0Mi93ZWJ2aWV3L2RlZmF1bHRfY29udGV4dCIsCi0gICAgICAgICAg
ICAgICAgICAgIHRlc3RXZWJWaWV3RGVmYXVsdENvbnRleHQpOwotCi0gICAgcmV0dXJuIGdfdGVz
dF9ydW4oKTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L3Rlc3RzL3Rlc3R3ZWJ2aWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L3Rlc3RzL3Rlc3R3ZWJ2aWV3LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li5lZmQzZjIzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvdGVzdHMvdGVzdHdlYnZpZXcuY3BwCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
IHZlcnNpb24gMiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1
ZGUgIlRlc3RNYWluLmgiCisjaW5jbHVkZSA8d2Via2l0Mi93ZWJraXQyLmg+CisKK2NsYXNzIFRl
c3RXZWJLaXRXZWJWaWV3IDogcHVibGljIFRlc3QKK3sKK3B1YmxpYzoKKyAgICBUZXN0V2ViS2l0
V2ViVmlldygpCisgICAgICAgIDogbV93ZWJWaWV3KFdFQktJVF9XRUJfVklFVyhnX29iamVjdF9y
ZWZfc2luayh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpKSkKKyAgICAgICAgLCBtX21haW5Mb29wKGdf
bWFpbl9sb29wX25ldygwLCBUUlVFKSkKKyAgICB7CisgICAgfQorCisgICAgflRlc3RXZWJLaXRX
ZWJWaWV3KCkKKyAgICB7CisgICAgICAgIGdfb2JqZWN0X3VucmVmKG1fd2ViVmlldyk7CisgICAg
ICAgIGdfbWFpbl9sb29wX3VucmVmKG1fbWFpbkxvb3ApOworICAgIH0KKworICAgIHN0YXRpYyB2
b2lkIGJlZ2luKCkKKyAgICB7CisgICAgICAgIGFkZCgiV2ViS2l0V2ViVmlldyIsICJkZWZhdWx0
LWNvbnRleHQiLCB0ZXN0V2ViVmlld0RlZmF1bHRDb250ZXh0KTsKKyAgICB9CisKKyAgICBzdGF0
aWMgdm9pZCB0ZXN0V2ViVmlld0RlZmF1bHRDb250ZXh0KFRlc3RXZWJLaXRXZWJWaWV3KiB0ZXN0
LCBnY29uc3Rwb2ludGVyKQorICAgIHsKKyAgICAgICAgZ19hc3NlcnQod2Via2l0X3dlYl92aWV3
X2dldF9jb250ZXh0KHRlc3QtPm1fd2ViVmlldykgPT0gd2Via2l0X3dlYl9jb250ZXh0X2dldF9k
ZWZhdWx0KCkpOworICAgIH0KKworICAgIFdFQktJVF9URVNUX01BS0VfR0xJQl9GSVhUVVJFKFRl
c3RXZWJLaXRXZWJWaWV3KQorCisgICAgV2ViS2l0V2ViVmlldyogbV93ZWJWaWV3OworICAgIEdN
YWluTG9vcCogbV9tYWluTG9vcDsKK307CisKK1dFQktJVF9URVNUX01BSU4oVGVzdFdlYktpdFdl
YlZpZXcpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>109808</attachid>
            <date>2011-10-05 09:05:21 -0700</date>
            <delta_ts>2011-10-10 17:16:53 -0700</delta_ts>
            <desc>My patch updated to fix run-gtk-tests</desc>
            <filename>unittest-overhaul.diff</filename>
            <type>text/plain</type>
            <size>44036</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0dOVW1ha2VmaWxlLmFtIGIvR05VbWFrZWZpbGUuYW0KaW5kZXggMmNlM2Uy
My4uZWI5ZDE3NyAxMDA2NDQKLS0tIGEvR05VbWFrZWZpbGUuYW0KKysrIGIvR05VbWFrZWZpbGUu
YW0KQEAgLTIwOCw2ICsyMDgsNyBAQCBpbmNsdWRlIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9H
TlVtYWtlZmlsZS5JbWFnZURpZmYuYW0KIAogaWYgRU5BQkxFX1dFQktJVDIKIGluY2x1ZGUgU291
cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0KK2luY2x1ZGUgU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvdGVzdHMvR05VbWFrZWZpbGUuYW0KIGluY2x1ZGUgVG9vbHMvTWluaUJyb3dz
ZXIvZ3RrL0dOVW1ha2VmaWxlLmFtCiBpbmNsdWRlIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvR05V
bWFrZWZpbGUuYW0KICMgW0dUS10gUmVmYWN0b3IgdGhlIHRyYW5zbGF0aW9ucyBub3cgdGhhdCB3
ZSBoYXZlIHdlYmtpdDIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFt
IGIvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0KaW5kZXggMmRmYTE5ZC4uN2UxOWY4NCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0KKysrIGIvU291cmNlL1dl
YktpdDIvR05VbWFrZWZpbGUuYW0KQEAgLTEwNzcsNTMgKzEwNzcsNiBAQCBDTEVBTkZJTEVTICs9
IFwKIERJU1RDTEVBTkZJTEVTICs9IFwKIAkkKHRvcF9idWlsZGRpcikvV2ViS2l0Mi93ZWJraXQy
Z3RrLUBXRUJLSVRHVEtfQVBJX1ZFUlNJT05ALnBjCiAKLSMgVW5pdCB0ZXN0cwotVEVTVF9QUk9H
UyArPSBcCi0JUHJvZ3JhbXMvdW5pdHRlc3RzL3dlYmtpdDIvdGVzdHdlYmNvbnRleHQgXAotCVBy
b2dyYW1zL3VuaXR0ZXN0cy93ZWJraXQyL3Rlc3R3ZWJ2aWV3IFwKLQlQcm9ncmFtcy91bml0dGVz
dHMvd2Via2l0Mi90ZXN0bG9hZGluZwotCi1ub2luc3RfUFJPR1JBTVMgKz0gJChURVNUX1BST0dT
KQotd2Via2l0Ml90ZXN0c19jZmxhZ3MgPSBcCi0JLURXRUJLSVRfRVhFQ19QQVRIPVwiJHtzaGVs
bCBwd2R9LyQodG9wX2J1aWxkZGlyKS9Qcm9ncmFtc1wiIFwKLQktSSQoc3JjZGlyKS9Tb3VyY2Ug
XAotCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJLaXQyIFwKLQktSSQodG9wX2J1aWxkZGlyKS9EZXJp
dmVkU291cmNlcy9XZWJLaXQyL2luY2x1ZGUgXAotCS1JJCh0b3BfYnVpbGRkaXIpL0Rlcml2ZWRT
b3VyY2VzL1dlYktpdDIvd2Via2l0Mmd0ayBcCi0JLUkkKHRvcF9idWlsZGRpcikvRGVyaXZlZFNv
dXJjZXMvV2ViS2l0Mi93ZWJraXQyZ3RrL2luY2x1ZGUgXAotCS1JJChzcmNkaXIpL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrIFwKLQkkKGdsb2JhbF9jZmxhZ3MpIFwKLQkkKGdsb2Jh
bF9jcHBmbGFncykgXAotCSQoR0xJQl9DRkxBR1MpIFwKLQkkKEdUS19DRkxBR1MpIFwKLQkkKExJ
QlNPVVBfQ0ZMQUdTKQotCi13ZWJraXQyX3Rlc3RzX2xkYWRkID0gXAotCWxpYmphdmFzY3JpcHRj
b3JlZ3RrLUBXRUJLSVRHVEtfQVBJX01BSk9SX1ZFUlNJT05ALkBXRUJLSVRHVEtfQVBJX01JTk9S
X1ZFUlNJT05ALmxhIFwKLQlsaWJ3ZWJraXQyZ3RrLUBXRUJLSVRHVEtfQVBJX01BSk9SX1ZFUlNJ
T05ALkBXRUJLSVRHVEtfQVBJX01JTk9SX1ZFUlNJT05ALmxhIFwKLQkkKEdMSUJfTElCUykgXAot
CSQoR1RLX0xJQlMpIFwKLQkkKExJQlNPVVBfTElCUykKLQotd2Via2l0Ml90ZXN0c19sZGZsYWdz
ID0gXAotCS1uby1pbnN0YWxsIFwKLQktbm8tZmFzdC1pbnN0YWxsCi0KLVByb2dyYW1zX3VuaXR0
ZXN0c193ZWJraXQyX3Rlc3R3ZWJjb250ZXh0X1NPVVJDRVMgPSBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay90ZXN0cy90ZXN0d2ViY29udGV4dC5jCi1Qcm9ncmFtc191bml0dGVzdHNf
d2Via2l0Ml90ZXN0d2ViY29udGV4dF9DRkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfY2ZsYWdzKQot
UHJvZ3JhbXNfdW5pdHRlc3RzX3dlYmtpdDJfdGVzdHdlYmNvbnRleHRfTERBREQgPSAkKHdlYmtp
dDJfdGVzdHNfbGRhZGQpCi1Qcm9ncmFtc191bml0dGVzdHNfd2Via2l0Ml90ZXN0d2ViY29udGV4
dF9MREZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2xkZmxhZ3MpCi0KLVByb2dyYW1zX3VuaXR0ZXN0
c193ZWJraXQyX3Rlc3R3ZWJ2aWV3X1NPVVJDRVMgPSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay90ZXN0cy90ZXN0d2Vidmlldy5jCi1Qcm9ncmFtc191bml0dGVzdHNfd2Via2l0Ml90
ZXN0d2Vidmlld19DRkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfY2ZsYWdzKQotUHJvZ3JhbXNfdW5p
dHRlc3RzX3dlYmtpdDJfdGVzdHdlYnZpZXdfTERBREQgPSAkKHdlYmtpdDJfdGVzdHNfbGRhZGQp
Ci1Qcm9ncmFtc191bml0dGVzdHNfd2Via2l0Ml90ZXN0d2Vidmlld19MREZMQUdTID0gJCh3ZWJr
aXQyX3Rlc3RzX2xkZmxhZ3MpCi0KLVByb2dyYW1zX3VuaXR0ZXN0c193ZWJraXQyX3Rlc3Rsb2Fk
aW5nX1NPVVJDRVMgPSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy90ZXN0
bG9hZGluZy5jCi1Qcm9ncmFtc191bml0dGVzdHNfd2Via2l0Ml90ZXN0bG9hZGluZ19DRkxBR1Mg
PSAkKHdlYmtpdDJfdGVzdHNfY2ZsYWdzKQotUHJvZ3JhbXNfdW5pdHRlc3RzX3dlYmtpdDJfdGVz
dGxvYWRpbmdfTERBREQgPSAkKHdlYmtpdDJfdGVzdHNfbGRhZGQpCi1Qcm9ncmFtc191bml0dGVz
dHNfd2Via2l0Ml90ZXN0bG9hZGluZ19MREZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2xkZmxhZ3Mp
Ci0KICMgV2ViS2l0V2ViUHJvY2VzcwogbGliZXhlY19QUk9HUkFNUyArPSBcCiAJUHJvZ3JhbXMv
V2ViS2l0V2ViUHJvY2VzcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvdGVzdHMvR05VbWFrZWZpbGUuYW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay90ZXN0cy9HTlVtYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi5mZTFhZGM5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvdGVzdHMvR05VbWFrZWZpbGUuYW0KQEAgLTAsMCArMSw2MiBAQAorVEVTVF9QUk9H
UyArPSBcCisJUHJvZ3JhbXMvV2ViS2l0MkFQSVRlc3RzL1Rlc3RXZWJLaXRXZWJDb250ZXh0IFwK
KwlQcm9ncmFtcy9XZWJLaXQyQVBJVGVzdHMvVGVzdFdlYktpdFdlYlZpZXcgXAorCVByb2dyYW1z
L1dlYktpdDJBUElUZXN0cy9UZXN0V2ViS2l0V2ViTG9hZGVyQ2xpZW50CisKK25vaW5zdF9QUk9H
UkFNUyArPSAkKFRFU1RfUFJPR1MpCit3ZWJraXQyX3Rlc3RzX2NwcGZsYWdzID0gXAorCS1EV0VC
S0lUX0VYRUNfUEFUSD1cIiR7c2hlbGwgcHdkfS8kKHRvcF9idWlsZGRpcikvUHJvZ3JhbXNcIiBc
CisJJChqYXZhc2NyaXB0Y29yZV9jcHBmbGFncykgXAorCS1JJChzcmNkaXIpL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZSBcCisJLUkkKHNyY2RpcikvU291cmNlIFwKKwktSSQoc3JjZGlyKS9Tb3VyY2Uv
V2ViS2l0MiBcCisJLUkkKHRvcF9idWlsZGRpcikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9pbmNs
dWRlIFwKKwktSSQodG9wX2J1aWxkZGlyKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL3dlYmtpdDJn
dGsgXAorCS1JJCh0b3BfYnVpbGRkaXIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvd2Via2l0Mmd0
ay9pbmNsdWRlIFwKKwktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ayBcCisJJChnbG9iYWxfY3BwZmxhZ3MpIFwKKwkkKEdMSUJfQ0ZMQUdTKSBcCisJJChHVEtfQ0ZM
QUdTKSBcCisJJChMSUJTT1VQX0NGTEFHUykKKword2Via2l0Ml90ZXN0c19sZGFkZCA9IFwKKwls
aWJqYXZhc2NyaXB0Y29yZWd0ay1AV0VCS0lUR1RLX0FQSV9NQUpPUl9WRVJTSU9OQC5AV0VCS0lU
R1RLX0FQSV9NSU5PUl9WRVJTSU9OQC5sYSBcCisJbGlid2Via2l0Mmd0ay1AV0VCS0lUR1RLX0FQ
SV9NQUpPUl9WRVJTSU9OQC5AV0VCS0lUR1RLX0FQSV9NSU5PUl9WRVJTSU9OQC5sYSBcCisJTGli
cmFyaWVzL2xpYldlYktpdDJBUElUZXN0Q29yZS5sYSBcCisJJChHRU9DTFVFX0xJQlMpIFwKKwkk
KEdMSUJfTElCUykgXAorCSQoR1RLX0xJQlMpIFwKKwkkKExJQlNPVVBfTElCUykKKword2Via2l0
Ml90ZXN0c19sZGZsYWdzID0gXAorCS1uby1pbnN0YWxsIFwKKwktbm8tZmFzdC1pbnN0YWxsCisK
K25vaW5zdF9MVExJQlJBUklFUyArPSBMaWJyYXJpZXMvbGliV2ViS2l0MkFQSVRlc3RDb3JlLmxh
CitMaWJyYXJpZXNfbGliV2ViS2l0MkFQSVRlc3RDb3JlX2xhX1NPVVJDRVMgPSBcCisJU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvTG9hZFRyYWNraW5nVGVzdC5jcHAgXAor
CVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0xvYWRUcmFja2luZ1Rlc3Qu
aCBcCisJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdE1haW4uY3Bw
IFwKKwlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0TWFpbi5oIFwK
KwlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJWaWV3VGVzdC5jcHAg
XAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlZpZXdUZXN0LmgK
K0xpYnJhcmllc19saWJXZWJLaXQyQVBJVGVzdENvcmVfbGFfQ1BQRkxBR1MgPSAkKHdlYmtpdDJf
dGVzdHNfY3BwZmxhZ3MpCisKK1Byb2dyYW1zX1dlYktpdDJBUElUZXN0c19UZXN0V2ViS2l0V2Vi
Q29udGV4dF9TT1VSQ0VTID0gXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rl
c3RzL1Rlc3RXZWJLaXRXZWJDb250ZXh0LmNwcAorUHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3RzX1Rl
c3RXZWJLaXRXZWJDb250ZXh0X0NQUEZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2NwcGZsYWdzKQor
UHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3RzX1Rlc3RXZWJLaXRXZWJDb250ZXh0X0xEQUREID0gJCh3
ZWJraXQyX3Rlc3RzX2xkYWRkKQorUHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3RzX1Rlc3RXZWJLaXRX
ZWJDb250ZXh0X0xERkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfbGRmbGFncykKKworUHJvZ3JhbXNf
V2ViS2l0MkFQSVRlc3RzX1Rlc3RXZWJLaXRXZWJWaWV3X1NPVVJDRVMgPSBcCisJU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdFdlYlZpZXcuY3BwCitQcm9n
cmFtc19XZWJLaXQyQVBJVGVzdHNfVGVzdFdlYktpdFdlYlZpZXdfQ1BQRkxBR1MgPSAkKHdlYmtp
dDJfdGVzdHNfY3BwZmxhZ3MpCitQcm9ncmFtc19XZWJLaXQyQVBJVGVzdHNfVGVzdFdlYktpdFdl
YlZpZXdfTERBREQgPSAkKHdlYmtpdDJfdGVzdHNfbGRhZGQpCitQcm9ncmFtc19XZWJLaXQyQVBJ
VGVzdHNfVGVzdFdlYktpdFdlYlZpZXdfTERGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19sZGZsYWdz
KQorCitQcm9ncmFtc19XZWJLaXQyQVBJVGVzdHNfVGVzdFdlYktpdFdlYkxvYWRlckNsaWVudF9T
T1VSQ0VTID0gXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RX
ZWJLaXRXZWJMb2FkZXJDbGllbnQuY3BwCitQcm9ncmFtc19XZWJLaXQyQVBJVGVzdHNfVGVzdFdl
YktpdFdlYkxvYWRlckNsaWVudF9DUFBGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19jcHBmbGFncykK
K1Byb2dyYW1zX1dlYktpdDJBUElUZXN0c19UZXN0V2ViS2l0V2ViTG9hZGVyQ2xpZW50X0xEQURE
ID0gJCh3ZWJraXQyX3Rlc3RzX2xkYWRkKQorUHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3RzX1Rlc3RX
ZWJLaXRXZWJMb2FkZXJDbGllbnRfTERGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19sZGZsYWdzKQor
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9Mb2Fk
VHJhY2tpbmdUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3Rz
L0xvYWRUcmFja2luZ1Rlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjYyYWIyNjIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay90ZXN0cy9Mb2FkVHJhY2tpbmdUZXN0LmNwcApAQCAtMCwwICsxLDExNyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiTG9hZFRyYWNraW5nVGVzdC5oIgorCisjaW5jbHVkZSA8d2Via2l0Mi93ZWJraXQyLmg+
CisKK3N0YXRpYyBnYm9vbGVhbiBwcm92aXNpb25hbExvYWRTdGFydGVkQ2FsbGJhY2soV2ViS2l0
V2ViTG9hZGVyQ2xpZW50KiBjbGllbnQsIExvYWRUcmFja2luZ1Rlc3QqIHRlc3QpCit7CisgICAg
dGVzdC0+cHJvdmlzaW9uYWxMb2FkU3RhcnRlZChjbGllbnQpOworICAgIHJldHVybiBUUlVFOwor
fQorCitzdGF0aWMgZ2Jvb2xlYW4gcHJvdmlzaW9uYWxMb2FkUmVjZWl2ZWRTZXJ2ZXJSZWRpcmVj
dENhbGxiYWNrKFdlYktpdFdlYkxvYWRlckNsaWVudCAqY2xpZW50LCBMb2FkVHJhY2tpbmdUZXN0
KiB0ZXN0KQoreworICAgIHRlc3QtPnByb3Zpc2lvbmFsTG9hZFJlY2VpdmVkU2VydmVyUmVkaXJl
Y3QoY2xpZW50KTsKKyAgICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIGdib29sZWFuIHByb3Zp
c2lvbmFsTG9hZEZhaWxlZENhbGxiYWNrKFdlYktpdFdlYkxvYWRlckNsaWVudCAqY2xpZW50LCBj
b25zdCBnY2hhciAqZmFpbGluZ1VSSSwgR0Vycm9yICplcnJvciwgTG9hZFRyYWNraW5nVGVzdCog
dGVzdCkKK3sKKyAgICB0ZXN0LT5wcm92aXNpb25hbExvYWRGYWlsZWQoY2xpZW50LCBmYWlsaW5n
VVJJLCBlcnJvcik7CisgICAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBsb2Fk
Q29tbWl0dGVkQ2FsbGJhY2soV2ViS2l0V2ViTG9hZGVyQ2xpZW50ICpjbGllbnQsIExvYWRUcmFj
a2luZ1Rlc3QqIHRlc3QpCit7CisgICAgdGVzdC0+bG9hZENvbW1pdHRlZChjbGllbnQpOworICAg
IHJldHVybiBUUlVFOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gbG9hZEZpbmlzaGVkQ2FsbGJhY2so
V2ViS2l0V2ViTG9hZGVyQ2xpZW50ICpjbGllbnQsIExvYWRUcmFja2luZ1Rlc3QqIHRlc3QpCit7
CisgICAgdGVzdC0+bG9hZEZpbmlzaGVkKGNsaWVudCk7CisgICAgcmV0dXJuIFRSVUU7Cit9CisK
K3N0YXRpYyBnYm9vbGVhbiBsb2FkRmFpbGVkQ2FsbGJhY2soV2ViS2l0V2ViTG9hZGVyQ2xpZW50
ICpjbGllbnQsIGNvbnN0IGdjaGFyICpmYWlsaW5nVVJJLCBHRXJyb3IgKmVycm9yLCBMb2FkVHJh
Y2tpbmdUZXN0KiB0ZXN0KQoreworICAgIHRlc3QtPmxvYWRGYWlsZWQoY2xpZW50LCBmYWlsaW5n
VVJJLCBlcnJvcik7CisgICAgcmV0dXJuIFRSVUU7Cit9CisKK0xvYWRUcmFja2luZ1Rlc3Q6Okxv
YWRUcmFja2luZ1Rlc3QoKQorICAgIDogbV9ydW5Mb2FkVW50aWxDb21wbGV0aW9uKGZhbHNlKQor
eworICAgIFdlYktpdFdlYkxvYWRlckNsaWVudCogY2xpZW50ID0gd2Via2l0X3dlYl92aWV3X2dl
dF9sb2FkZXJfY2xpZW50KG1fd2ViVmlldyk7CisgICAgZ19zaWduYWxfY29ubmVjdChjbGllbnQs
ICJwcm92aXNpb25hbC1sb2FkLXN0YXJ0ZWQiLCBHX0NBTExCQUNLKHByb3Zpc2lvbmFsTG9hZFN0
YXJ0ZWRDYWxsYmFjayksIHRoaXMpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QoY2xpZW50LCAicHJv
dmlzaW9uYWwtbG9hZC1yZWNlaXZlZC1zZXJ2ZXItcmVkaXJlY3QiLCBHX0NBTExCQUNLKHByb3Zp
c2lvbmFsTG9hZFJlY2VpdmVkU2VydmVyUmVkaXJlY3RDYWxsYmFjayksIHRoaXMpOworICAgIGdf
c2lnbmFsX2Nvbm5lY3QoY2xpZW50LCAicHJvdmlzaW9uYWwtbG9hZC1mYWlsZWQiLCBHX0NBTExC
QUNLKHByb3Zpc2lvbmFsTG9hZEZhaWxlZENhbGxiYWNrKSwgdGhpcyk7CisgICAgZ19zaWduYWxf
Y29ubmVjdChjbGllbnQsICJsb2FkLWNvbW1pdHRlZCIsIEdfQ0FMTEJBQ0sobG9hZENvbW1pdHRl
ZENhbGxiYWNrKSwgdGhpcyk7CisgICAgZ19zaWduYWxfY29ubmVjdChjbGllbnQsICJsb2FkLWZp
bmlzaGVkIiwgR19DQUxMQkFDSyhsb2FkRmluaXNoZWRDYWxsYmFjayksIHRoaXMpOworICAgIGdf
c2lnbmFsX2Nvbm5lY3QoY2xpZW50LCAibG9hZC1mYWlsZWQiLCBHX0NBTExCQUNLKGxvYWRGYWls
ZWRDYWxsYmFjayksIHRoaXMpOworfQorCitMb2FkVHJhY2tpbmdUZXN0Ojp+TG9hZFRyYWNraW5n
VGVzdCgpCit7Cit9CisKK3ZvaWQgTG9hZFRyYWNraW5nVGVzdDo6d2FpdFVudGlsTG9hZEZpbmlz
aGVkKCkKK3sKKyAgICBtX3J1bkxvYWRVbnRpbENvbXBsZXRpb24gPSB0cnVlOworICAgIGdfbWFp
bl9sb29wX3J1bihtX21haW5Mb29wKTsKK30KKwordm9pZCBMb2FkVHJhY2tpbmdUZXN0Ojpwcm92
aXNpb25hbExvYWRTdGFydGVkKFdlYktpdFdlYkxvYWRlckNsaWVudCogY2xpZW50KQoreworICAg
IG1fbG9hZEV2ZW50cy5hcHBlbmQoUHJvdmlzaW9uYWxMb2FkU3RhcnRlZCk7Cit9CisKK3ZvaWQg
TG9hZFRyYWNraW5nVGVzdDo6cHJvdmlzaW9uYWxMb2FkUmVjZWl2ZWRTZXJ2ZXJSZWRpcmVjdChX
ZWJLaXRXZWJMb2FkZXJDbGllbnQgKmNsaWVudCkKK3sKKyAgICBtX2xvYWRFdmVudHMuYXBwZW5k
KFByb3Zpc2lvbmFsTG9hZFJlY2VpdmVkU2VydmVyUmVkaXJlY3QpOworfQorCit2b2lkIExvYWRU
cmFja2luZ1Rlc3Q6OnByb3Zpc2lvbmFsTG9hZEZhaWxlZChXZWJLaXRXZWJMb2FkZXJDbGllbnQg
KmNsaWVudCwgY29uc3QgZ2NoYXIgKmZhaWxpbmdVUkksIEdFcnJvciAqZXJyb3IpCit7CisgICAg
bV9sb2FkRXZlbnRzLmFwcGVuZChQcm92aXNpb25hbExvYWRGYWlsZWQpOworICAgIGlmIChtX3J1
bkxvYWRVbnRpbENvbXBsZXRpb24pCisgICAgICAgIGdfbWFpbl9sb29wX3F1aXQobV9tYWluTG9v
cCk7Cit9CisKK3ZvaWQgTG9hZFRyYWNraW5nVGVzdDo6bG9hZENvbW1pdHRlZChXZWJLaXRXZWJM
b2FkZXJDbGllbnQgKmNsaWVudCkKK3sKKyAgICBtX2xvYWRFdmVudHMuYXBwZW5kKExvYWRDb21t
aXR0ZWQpOworfQorCit2b2lkIExvYWRUcmFja2luZ1Rlc3Q6OmxvYWRGaW5pc2hlZChXZWJLaXRX
ZWJMb2FkZXJDbGllbnQgKmNsaWVudCkKK3sKKyAgICBtX2xvYWRFdmVudHMuYXBwZW5kKExvYWRG
aW5pc2hlZCk7CisgICAgaWYgKG1fcnVuTG9hZFVudGlsQ29tcGxldGlvbikKKyAgICAgICAgZ19t
YWluX2xvb3BfcXVpdChtX21haW5Mb29wKTsKK30KKwordm9pZCBMb2FkVHJhY2tpbmdUZXN0Ojps
b2FkRmFpbGVkKFdlYktpdFdlYkxvYWRlckNsaWVudCAqY2xpZW50LCBjb25zdCBnY2hhciAqZmFp
bGluZ1VSSSwgR0Vycm9yICplcnJvcikKK3sKKyAgICBtX2xvYWRFdmVudHMuYXBwZW5kKExvYWRG
YWlsZWQpOworICAgIGlmIChtX3J1bkxvYWRVbnRpbENvbXBsZXRpb24pCisgICAgICAgIGdfbWFp
bl9sb29wX3F1aXQobV9tYWluTG9vcCk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9Mb2FkVHJhY2tpbmdUZXN0LmggYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9Mb2FkVHJhY2tpbmdUZXN0LmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWEzY2I2ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0xvYWRUcmFja2luZ1Rlc3QuaApAQCAt
MCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5k
ZWYgTG9hZFRyYWNraW5nVGVzdF9oCisjZGVmaW5lIExvYWRUcmFja2luZ1Rlc3RfaAorCisjaW5j
bHVkZSAiVGVzdE1haW4uaCIKKyNpbmNsdWRlICJXZWJWaWV3VGVzdC5oIgorI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KKworY2xhc3MgTG9hZFRyYWNraW5nVGVzdCA6IHB1YmxpYyBXZWJWaWV3VGVz
dCB7CitwdWJsaWM6CisgICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShMb2FkVHJhY2tpbmdUZXN0
KTsKKyAgICBMb2FkVHJhY2tpbmdUZXN0KCk7CisgICAgdmlydHVhbCB+TG9hZFRyYWNraW5nVGVz
dCgpOworICAgIHZvaWQgd2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICB2aXJ0dWFsIHZv
aWQgcHJvdmlzaW9uYWxMb2FkU3RhcnRlZChXZWJLaXRXZWJMb2FkZXJDbGllbnQqIGNsaWVudCk7
CisgICAgdmlydHVhbCB2b2lkIHByb3Zpc2lvbmFsTG9hZFJlY2VpdmVkU2VydmVyUmVkaXJlY3Qo
V2ViS2l0V2ViTG9hZGVyQ2xpZW50ICpjbGllbnQpOworICAgIHZpcnR1YWwgdm9pZCBwcm92aXNp
b25hbExvYWRGYWlsZWQoV2ViS2l0V2ViTG9hZGVyQ2xpZW50ICpjbGllbnQsIGNvbnN0IGdjaGFy
ICpmYWlsaW5nVVJJLCBHRXJyb3IgKmVycm9yKTsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZENvbW1p
dHRlZChXZWJLaXRXZWJMb2FkZXJDbGllbnQgKmNsaWVudCk7CisgICAgdmlydHVhbCB2b2lkIGxv
YWRGaW5pc2hlZChXZWJLaXRXZWJMb2FkZXJDbGllbnQgKmNsaWVudCk7CisgICAgdmlydHVhbCB2
b2lkIGxvYWRGYWlsZWQoV2ViS2l0V2ViTG9hZGVyQ2xpZW50ICpjbGllbnQsIGNvbnN0IGdjaGFy
ICpmYWlsaW5nVVJJLCBHRXJyb3IgKmVycm9yKTsKKworICAgIGVudW0gTG9hZEV2ZW50cyB7Cisg
ICAgICAgIFByb3Zpc2lvbmFsTG9hZFN0YXJ0ZWQsCisgICAgICAgIFByb3Zpc2lvbmFsTG9hZFJl
Y2VpdmVkU2VydmVyUmVkaXJlY3QsCisgICAgICAgIFByb3Zpc2lvbmFsTG9hZEZhaWxlZCwKKyAg
ICAgICAgTG9hZENvbW1pdHRlZCwKKyAgICAgICAgTG9hZEZpbmlzaGVkLAorICAgICAgICBMb2Fk
RmFpbGVkCisgICAgfTsKKyAgICBib29sIG1fcnVuTG9hZFVudGlsQ29tcGxldGlvbjsKKyAgICBW
ZWN0b3I8TG9hZEV2ZW50cz4gbV9sb2FkRXZlbnRzOworfTsKKworI2VuZGlmIC8vIExvYWRUcmFj
a2luZ1Rlc3RfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
dGVzdHMvVGVzdE1haW4uY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVz
dHMvVGVzdE1haW4uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViMTU3
NTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90
ZXN0cy9UZXN0TWFpbi5jcHAKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwOSwgMjAxMCBHdXN0YXZvIE5vcm9uaGEgU2lsdmEKKyAqIENvcHlyaWdodCAoQykgMjAwOSwg
MjAxMSBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdE1haW4u
aCIKKworI2luY2x1ZGUgPGd0ay9ndGsuaD4KKwordm9pZCBiZWZvcmVBbGwoKTsKK3ZvaWQgYWZ0
ZXJBbGwoKTsKKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworICAgIGdfdGhy
ZWFkX2luaXQoMCk7CisgICAgZ3RrX3Rlc3RfaW5pdCgmYXJnYywgJmFyZ3YsIDApOworICAgIGdf
c2V0ZW52KCJXRUJLSVRfRVhFQ19QQVRIIiwgV0VCS0lUX0VYRUNfUEFUSCwgRkFMU0UpOworICAg
IGdfdGVzdF9idWdfYmFzZSgiaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvIik7CisKKyAgICBiZWZv
cmVBbGwoKTsKKyAgICBpbnQgcmV0dXJuVmFsdWUgPSBnX3Rlc3RfcnVuKCk7CisgICAgYWZ0ZXJB
bGwoKTsKKworICAgIHJldHVybiByZXR1cm5WYWx1ZTsKK30KKwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdE1haW4uaCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RNYWluLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uMmFhYzE4YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RNYWluLmgKQEAgLTAsMCArMSw0NyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFRlc3RNYWluX2gK
KyNkZWZpbmUgVGVzdE1haW5faAorCisjaW5jbHVkZSA8Z2xpYi5oPgorI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0dPd25QdHIuaD4KKworI2RlZmluZSBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKENs
YXNzTmFtZSkgXAorICAgIHN0YXRpYyB2b2lkIHNldFVwKENsYXNzTmFtZSogZml4dHVyZSwgZ2Nv
bnN0cG9pbnRlciBkYXRhKSBcCisgICAgeyBcCisgICAgICAgIG5ldyAoZml4dHVyZSkgQ2xhc3NO
YW1lOyBcCisgICAgfSBcCisgICAgc3RhdGljIHZvaWQgdGVhckRvd24oQ2xhc3NOYW1lKiBmaXh0
dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpIFwKKyAgICB7IFwKKyAgICAgICAgZml4dHVyZS0+fkNs
YXNzTmFtZSgpOyBcCisgICAgfSBcCisgICAgc3RhdGljIHZvaWQgYWRkKGNvbnN0IGNoYXIqIHN1
aXRlTmFtZSwgY29uc3QgY2hhciogdGVzdE5hbWUsIHZvaWQgKCp0ZXN0RnVuYykoQ2xhc3NOYW1l
KiwgY29uc3Qgdm9pZCopKSBcCisgICAgeyBcCisgICAgICAgIEdPd25QdHI8Z2NoYXI+IHRlc3RQ
YXRoKGdfc3RyZHVwX3ByaW50ZigiL3dlYmtpdDIvJXMvJXMiLCBzdWl0ZU5hbWUsIHRlc3ROYW1l
KSk7IFwKKyAgICAgICAgZ190ZXN0X2FkZCh0ZXN0UGF0aC5nZXQoKSwgQ2xhc3NOYW1lLCAwLCBD
bGFzc05hbWU6OnNldFVwLCB0ZXN0RnVuYywgQ2xhc3NOYW1lOjp0ZWFyRG93bik7IFwKKyAgICB9
CisKK2NsYXNzIFRlc3QKK3sKK3B1YmxpYzoKKyAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKFRl
c3QpOworfTsKKworI2VuZGlmIC8vIFRlc3RNYWluX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRXZWJDb250ZXh0LmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRXZWJDb250ZXh0
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDdjZTViCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdl
YktpdFdlYkNvbnRleHQuY3BwCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIlRlc3RN
YWluLmgiCisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHdlYmtpdDIvd2Via2l0Mi5o
PgorCitzdGF0aWMgdm9pZCB0ZXN0V2ViQ29udGV4dERlZmF1bHQoVGVzdCogdGVzdCwgZ2NvbnN0
cG9pbnRlcikKK3sKKyAgICAvLyBDaGVjayB0aGVyZSdzIGEgc2luZ2xlIGluc3RhbmNlIG9mIHRo
ZSBkZWZhdWx0IHdlYiBjb250ZXh0LgorICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfY29udGV4dF9n
ZXRfZGVmYXVsdCgpID09IHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZGVmYXVsdCgpKTsKK30KKwor
dm9pZCBiZWZvcmVBbGwoKQoreworICAgIFRlc3Q6OmFkZCgiV2ViS2l0V2ViQ29udGV4dCIsICJk
ZWZhdWx0LWNvbnRleHQiLCB0ZXN0V2ViQ29udGV4dERlZmF1bHQpOworfQorCit2b2lkIGFmdGVy
QWxsKCkKK3sKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L3Rlc3RzL1Rlc3RXZWJLaXRXZWJMb2FkZXJDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdFdlYkxvYWRlckNsaWVudC5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjY4ZTM4NgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRXZWJMb2Fk
ZXJDbGllbnQuY3BwCkBAIC0wLDAgKzEsMTMxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5
LCAyMDEwIEd1c3Rhdm8gTm9yb25oYSBTaWx2YQorICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEx
IElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkxvYWRUcmFja2lu
Z1Rlc3QuaCIKKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8bGlic291cC9zb3VwLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCitzdGF0aWMgU291cFVSSSoga0Jhc2VV
UkkgPSAwOworc3RhdGljIFNvdXBTZXJ2ZXIqIGtTb3VwU2VydmVyID0gMDsKKworc3RhdGljIENT
dHJpbmcgZ2V0VVJJRm9yUGF0aChjb25zdCBjaGFyKiBwYXRoKQoreworICAgIFNvdXBVUkkqIHVy
aSA9IHNvdXBfdXJpX25ld193aXRoX2Jhc2Uoa0Jhc2VVUkksIHBhdGgpOworICAgIEdPd25QdHI8
Z2NoYXI+IHVyaVN0cmluZyhzb3VwX3VyaV90b19zdHJpbmcodXJpLCBGQUxTRSkpOworICAgIHNv
dXBfdXJpX2ZyZWUodXJpKTsKKyAgICByZXR1cm4gdXJpU3RyaW5nLmdldCgpOworfQorCitzdGF0
aWMgdm9pZCB0ZXN0TG9hZGluZ1N0YXR1cyhMb2FkVHJhY2tpbmdUZXN0KiB0ZXN0LCBnY29uc3Rw
b2ludGVyIGRhdGEpCit7CisgICAgd2Via2l0X3dlYl92aWV3X2xvYWRfdXJpKHRlc3QtPm1fd2Vi
VmlldywgZ2V0VVJJRm9yUGF0aCgiLyIpLmRhdGEoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9h
ZEZpbmlzaGVkKCk7CisKKyAgICBWZWN0b3I8TG9hZFRyYWNraW5nVGVzdDo6TG9hZEV2ZW50cz4g
ZXZlbnRzID0gdGVzdC0+bV9sb2FkRXZlbnRzOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHMu
c2l6ZSgpLCA9PSwgNCk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1swXSwgPT0sIExvYWRU
cmFja2luZ1Rlc3Q6OlByb3Zpc2lvbmFsTG9hZFN0YXJ0ZWQpOworICAgIGdfYXNzZXJ0X2NtcGlu
dChldmVudHNbMV0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpQcm92aXNpb25hbExvYWRSZWNlaXZl
ZFNlcnZlclJlZGlyZWN0KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzJdLCA9PSwgTG9h
ZFRyYWNraW5nVGVzdDo6TG9hZENvbW1pdHRlZCk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50
c1szXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRGaW5pc2hlZCk7Cit9CisKK3N0YXRpYyB2
b2lkIHRlc3RMb2FkaW5nRXJyb3IoTG9hZFRyYWNraW5nVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRl
cikKK3sKKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmkodGVzdC0+bV93ZWJWaWV3LCBnZXRV
UklGb3JQYXRoKCIvdGVzdF9sb2FkX2Vycm9yIikuZGF0YSgpKTsKKyAgICB0ZXN0LT53YWl0VW50
aWxMb2FkRmluaXNoZWQoKTsKKworICAgIFZlY3RvcjxMb2FkVHJhY2tpbmdUZXN0OjpMb2FkRXZl
bnRzPiBldmVudHMgPSB0ZXN0LT5tX2xvYWRFdmVudHM7CisgICAgZ19hc3NlcnRfY21waW50KGV2
ZW50cy5zaXplKCksID09LCAyKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzBdLCA9PSwg
TG9hZFRyYWNraW5nVGVzdDo6UHJvdmlzaW9uYWxMb2FkU3RhcnRlZCk7CisgICAgZ19hc3NlcnRf
Y21waW50KGV2ZW50c1sxXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OlByb3Zpc2lvbmFsTG9hZEZh
aWxlZCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RMb2FkQWx0ZXJuYXRlQ29udGVudChMb2FkVHJh
Y2tpbmdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHdlYmtpdF93ZWJfdmlld19s
b2FkX2FsdGVybmF0ZV9odG1sKHRlc3QtPm1fd2ViVmlldywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiPGh0bWw+PGJvZHk+QWx0ZXJuYXRlIENvbnRlbnQ8L2JvZHk+
PC9odG1sPiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgZ2V0
VVJJRm9yUGF0aCgiL2FsdGVybmF0ZSIpLmRhdGEoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9h
ZEZpbmlzaGVkKCk7CisKKyAgICBWZWN0b3I8TG9hZFRyYWNraW5nVGVzdDo6TG9hZEV2ZW50cz4g
ZXZlbnRzID0gdGVzdC0+bV9sb2FkRXZlbnRzOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHMu
c2l6ZSgpLCA9PSwgMyk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1swXSwgPT0sIExvYWRU
cmFja2luZ1Rlc3Q6OlByb3Zpc2lvbmFsTG9hZFN0YXJ0ZWQpOworICAgIGdfYXNzZXJ0X2NtcGlu
dChldmVudHNbMV0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpMb2FkQ29tbWl0dGVkKTsKKyAgICBn
X2Fzc2VydF9jbXBpbnQoZXZlbnRzWzJdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6TG9hZEZpbmlz
aGVkKTsKK30KKworc3RhdGljIHZvaWQgc2VydmVyQ2FsbGJhY2soU291cFNlcnZlciogc2VydmVy
LCBTb3VwTWVzc2FnZSogbWVzc2FnZSwgY29uc3QgY2hhciogcGF0aCwgR0hhc2hUYWJsZSosIFNv
dXBDbGllbnRDb250ZXh0KiwgZ3BvaW50ZXIpCit7CisKKyAgICAvLyBUaGlzIHN0cmluZyBoYXMg
dG8gYmUgcmF0aGVyIGJpZyBiZWNhdXNlIG9mIHRoZSBjYW5jZWxsZWQgdGVzdCAtIGl0CisgICAg
Ly8gbG9va3MgbGlrZSBzb3VwIHJlZnVzZXMgdG8gc2VuZCBvciByZWNlaXZlIGEgc21hbGwgY2h1
bmsgb2YgZGF0YS4KKyAgICBzdGF0aWMgY29uc3QgY2hhciogcmVzcG9uc2VTdHJpbmcgPSAiPGh0
bWw+PGJvZHk+VGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3Rpbmch
VGVzdGluZyEiCisgICAgICAgICJUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3Rp
bmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGlu
ZyEiCisgICAgICAgICJUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVz
dGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyEiCisg
ICAgICAgICJUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFU
ZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyEiCisgICAgICAg
ICJUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5n
IVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyEiCisgICAgICAgICJUZXN0
aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3Rp
bmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyEiCisgICAgICAgICJUZXN0aW5nIVRl
c3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVz
dGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyEiCisgICAgICAgICJUZXN0aW5nIVRlc3Rpbmch
VGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFU
ZXN0aW5nIVRlc3RpbmchVGVzdGluZyE8L2JvZHk+PC9odG1sPiI7CisKKyAgICBpZiAobWVzc2Fn
ZS0+bWV0aG9kICE9IFNPVVBfTUVUSE9EX0dFVCkgeworICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0
X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19OT1RfSU1QTEVNRU5URUQpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09V
UF9TVEFUVVNfT0spOworCisgICAgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvIikpIHsKKyAgICAg
ICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfTU9WRURfUEVS
TUFORU5UTFkpOworICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19hcHBlbmQobWVzc2FnZS0+
cmVzcG9uc2VfaGVhZGVycywgIkxvY2F0aW9uIiwgIi90ZXN0X2xvYWRpbmdfc3RhdHVzIik7Cisg
ICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL3Rlc3RfbG9hZGluZ19zdGF0dXMiKSB8
fCBnX3N0cl9lcXVhbChwYXRoLCAiL3Rlc3RfbG9hZGluZ19zdGF0dXMyIikpCisgICAgICAgIHNv
dXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9S
WV9TVEFUSUMsIHJlc3BvbnNlU3RyaW5nLCBzdHJsZW4ocmVzcG9uc2VTdHJpbmcpKTsKKyAgICBl
bHNlIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL3Rlc3RfbG9hZF9lcnJvciIpKSB7CisgICAgICAg
IHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX0NBTlRfQ09OTkVD
VCk7CisgICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL3Rlc3RfbG9hZGluZ19jYW5j
ZWxsZWQiKSkgeworICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19zZXRfZW5jb2RpbmcobWVz
c2FnZS0+cmVzcG9uc2VfaGVhZGVycywgU09VUF9FTkNPRElOR19DSFVOS0VEKTsKKyAgICAgICAg
c291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVN
T1JZX1NUQVRJQywgcmVzcG9uc2VTdHJpbmcsIHN0cmxlbihyZXNwb25zZVN0cmluZykpOworICAg
ICAgICBzb3VwX3NlcnZlcl91bnBhdXNlX21lc3NhZ2Uoc2VydmVyLCBtZXNzYWdlKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIHNvdXBfbWVzc2FnZV9ib2R5X2NvbXBsZXRlKG1lc3Nh
Z2UtPnJlc3BvbnNlX2JvZHkpOworfQorCit2b2lkIGJlZm9yZUFsbCgpCit7CisgICAga0Jhc2VV
UkkgPSBzb3VwX3VyaV9uZXcoImh0dHA6Ly8xMjcuMC4wLjEvIik7CisKKyAgICBrU291cFNlcnZl
ciA9IHNvdXBfc2VydmVyX25ldyhTT1VQX1NFUlZFUl9QT1JULCAwLCBOVUxMKTsKKyAgICBzb3Vw
X3VyaV9zZXRfcG9ydChrQmFzZVVSSSwgc291cF9zZXJ2ZXJfZ2V0X3BvcnQoa1NvdXBTZXJ2ZXIp
KTsKKyAgICBzb3VwX3NlcnZlcl9ydW5fYXN5bmMoa1NvdXBTZXJ2ZXIpOworICAgIHNvdXBfc2Vy
dmVyX2FkZF9oYW5kbGVyKGtTb3VwU2VydmVyLCBOVUxMLCBzZXJ2ZXJDYWxsYmFjaywgTlVMTCwg
TlVMTCk7CisKKyAgICBMb2FkVHJhY2tpbmdUZXN0OjphZGQoIldlYktpdFdlYkxvYWRlckNsaWVu
dCIsICJsb2FkaW5nLXN0YXR1cyIsIHRlc3RMb2FkaW5nU3RhdHVzKTsKKyAgICBMb2FkVHJhY2tp
bmdUZXN0OjphZGQoIldlYktpdFdlYkxvYWRlckNsaWVudCIsICJsb2FkaW5nLWVycm9yIiwgdGVz
dExvYWRpbmdFcnJvcik7CisgICAgTG9hZFRyYWNraW5nVGVzdDo6YWRkKCJXZWJLaXRXZWJMb2Fk
ZXJDbGllbnQiLCAibG9hZC1hbHRlcm5hdGUtY29udGVudCIsIHRlc3RMb2FkQWx0ZXJuYXRlQ29u
dGVudCk7Cit9CisKK3ZvaWQgYWZ0ZXJBbGwoKQoreworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdFdlYlZpZXcuY3BwIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdFdlYlZpZXcuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3MmM2NGYKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0
V2ViVmlldy5jcHAKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBJ
Z2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLDEgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYlZpZXdUZXN0Lmgi
CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJWaWV3RGVmYXVsdENvbnRleHQoV2ViVmlld1Rlc3QqIHRl
c3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgZ19hc3NlcnQod2Via2l0X3dlYl92aWV3X2dldF9j
b250ZXh0KHRlc3QtPm1fd2ViVmlldykgPT0gd2Via2l0X3dlYl9jb250ZXh0X2dldF9kZWZhdWx0
KCkpOworfQorCit2b2lkIGJlZm9yZUFsbCgpCit7CisgICAgV2ViVmlld1Rlc3Q6OmFkZCgiV2Vi
S2l0V2ViVmlldyIsICJkZWZhdWx0LWNvbnRleHQiLCB0ZXN0V2ViVmlld0RlZmF1bHRDb250ZXh0
KTsKK30KKwordm9pZCBhZnRlckFsbCgpCit7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJWaWV3VGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJWaWV3VGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uMzJiN2ZjNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlZpZXdUZXN0LmNwcApAQCAtMCwwICsx
LDMzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJXZWJWaWV3VGVzdC5oIgorCitXZWJWaWV3VGVzdDo6V2ViVmll
d1Rlc3QoKQorICAgIDogbV93ZWJWaWV3KFdFQktJVF9XRUJfVklFVyhnX29iamVjdF9yZWZfc2lu
ayh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpKSkKKyAgICAsIG1fbWFpbkxvb3AoZ19tYWluX2xvb3Bf
bmV3KDAsIFRSVUUpKQoreworfQorCitXZWJWaWV3VGVzdDo6fldlYlZpZXdUZXN0KCkKK3sKKyAg
ICBnX29iamVjdF91bnJlZihtX3dlYlZpZXcpOworICAgIGdfbWFpbl9sb29wX3VucmVmKG1fbWFp
bkxvb3ApOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
dGVzdHMvV2ViVmlld1Rlc3QuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rl
c3RzL1dlYlZpZXdUZXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTgx
ODA2NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L3Rlc3RzL1dlYlZpZXdUZXN0LmgKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMSBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYlZpZXdUZXN0X2gKKyNkZWZpbmUgV2ViVmll
d1Rlc3RfaAorCisjaW5jbHVkZSAiVGVzdE1haW4uaCIKKyNpbmNsdWRlIDx3ZWJraXQyL3dlYmtp
dDIuaD4KKworY2xhc3MgV2ViVmlld1Rlc3QgeworcHVibGljOgorICAgIE1BS0VfR0xJQl9URVNU
X0ZJWFRVUkUoV2ViVmlld1Rlc3QpOworICAgIFdlYlZpZXdUZXN0KCk7CisgICAgdmlydHVhbCB+
V2ViVmlld1Rlc3QoKTsKKworICAgIFdlYktpdFdlYlZpZXcqIG1fd2ViVmlldzsKKyAgICBHTWFp
bkxvb3AqIG1fbWFpbkxvb3A7Cit9OworCisjZW5kaWYgLy8gV2ViVmlld1Rlc3RfaApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvdGVzdGxvYWRpbmcu
YyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL3Rlc3Rsb2FkaW5nLmMK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1MGM4Y2MuLjAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvdGVzdGxvYWRpbmcuYworKysgL2Rl
di9udWxsCkBAIC0xLDI5MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEw
IEd1c3Rhdm8gTm9yb25oYSBTaWx2YQotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDExIElnYWxp
YSBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgot
ICovCi0KLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0jaW5jbHVkZSA8bGlic291cC9zb3VwLmg+Ci0j
aW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8d2Via2l0Mi93ZWJraXQyLmg+Ci0KLS8qIFRo
aXMgc3RyaW5nIGhhcyB0byBiZSByYXRoZXIgYmlnIGJlY2F1c2Ugb2YgdGhlIGNhbmNlbGxlZCB0
ZXN0IC0gaXQKLSAqIGxvb2tzIGxpa2Ugc291cCByZWZ1c2VzIHRvIHNlbmQgb3IgcmVjZWl2ZSBh
IHRvbyBzbWFsbCBjaHVuayAqLwotI2RlZmluZSBIVE1MX1NUUklORyAiPGh0bWw+PGJvZHk+VGVz
dGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0
aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3Rp
bmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGlu
ZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5n
IVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3Rpbmch
VGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFU
ZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRl
c3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVz
dGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0
aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3Rp
bmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGlu
ZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5n
ITwvYm9keT48L2h0bWw+IgotCi1Tb3VwVVJJICpiYXNlVVJJOwotCi0vKiBGb3IgcmVhbCByZXF1
ZXN0IHRlc3RpbmcgKi8KLXN0YXRpYyB2b2lkIHNlcnZlckNhbGxiYWNrKFNvdXBTZXJ2ZXIqIHNl
cnZlciwgU291cE1lc3NhZ2UqIG1zZywgY29uc3QgY2hhciogcGF0aCwgR0hhc2hUYWJsZSogcXVl
cnksIFNvdXBDbGllbnRDb250ZXh0KiBjb250ZXh0LCBncG9pbnRlciBkYXRhKQotewotICAgIGlm
IChtc2ctPm1ldGhvZCAhPSBTT1VQX01FVEhPRF9HRVQpIHsKLSAgICAgICAgc291cF9tZXNzYWdl
X3NldF9zdGF0dXMobXNnLCBTT1VQX1NUQVRVU19OT1RfSU1QTEVNRU5URUQpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobXNnLCBTT1VQX1NU
QVRVU19PSyk7Ci0KLSAgICBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi8iKSkgewotICAgICAgICBz
b3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtc2csIFNPVVBfU1RBVFVTX01PVkVEX1BFUk1BTkVOVExZ
KTsKLSAgICAgICAgc291cF9tZXNzYWdlX2hlYWRlcnNfYXBwZW5kKG1zZy0+cmVzcG9uc2VfaGVh
ZGVycywgIkxvY2F0aW9uIiwgIi90ZXN0X2xvYWRpbmdfc3RhdHVzIik7Ci0gICAgfSBlbHNlIGlm
IChnX3N0cl9lcXVhbChwYXRoLCAiL3Rlc3RfbG9hZGluZ19zdGF0dXMiKSB8fCBnX3N0cl9lcXVh
bChwYXRoLCAiL3Rlc3RfbG9hZGluZ19zdGF0dXMyIikpCi0gICAgICAgIHNvdXBfbWVzc2FnZV9i
b2R5X2FwcGVuZChtc2ctPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1NUQVRJQywgSFRNTF9T
VFJJTkcsIHN0cmxlbihIVE1MX1NUUklORykpOwotICAgIGVsc2UgaWYgKGdfc3RyX2VxdWFsKHBh
dGgsICIvdGVzdF9sb2FkX2Vycm9yIikpIHsKLSAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0
dXMobXNnLCBTT1VQX1NUQVRVU19DQU5UX0NPTk5FQ1QpOwotICAgIH0gZWxzZSBpZiAoZ19zdHJf
ZXF1YWwocGF0aCwgIi90ZXN0X2xvYWRpbmdfY2FuY2VsbGVkIikpIHsKLSAgICAgICAgc291cF9t
ZXNzYWdlX2hlYWRlcnNfc2V0X2VuY29kaW5nKG1zZy0+cmVzcG9uc2VfaGVhZGVycywgU09VUF9F
TkNPRElOR19DSFVOS0VEKTsKLSAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1zZy0+
cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfU1RBVElDLCBIVE1MX1NUUklORywgc3RybGVuKEhU
TUxfU1RSSU5HKSk7Ci0gICAgICAgIHNvdXBfc2VydmVyX3VucGF1c2VfbWVzc2FnZShzZXJ2ZXIs
IG1zZyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBzb3VwX21lc3NhZ2VfYm9keV9j
b21wbGV0ZShtc2ctPnJlc3BvbnNlX2JvZHkpOwotfQotCi10eXBlZGVmIHN0cnVjdCB7Ci0gICAg
V2ViS2l0V2ViVmlldyAqd2ViVmlldzsKLSAgICBHTWFpbkxvb3AgKmxvb3A7Ci0gICAgZ2Jvb2xl
YW4gaGFzQmVlblByb3Zpc2lvbmFsOwotICAgIGdib29sZWFuIGhhc0JlZW5SZWRpcmVjdDsKLSAg
ICBnYm9vbGVhbiBoYXNCZWVuQ29tbWl0dGVkOwotICAgIGdib29sZWFuIGhhc0JlZW5GaW5pc2hl
ZDsKLSAgICBnYm9vbGVhbiBoYXNCZWVuRmFpbGVkOwotfSBXZWJMb2FkaW5nRml4dHVyZTsKLQot
c3RhdGljIHZvaWQgd2ViTG9hZGluZ0ZpeHR1cmVTZXR1cChXZWJMb2FkaW5nRml4dHVyZSAqZml4
dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQotewotICAgIGZpeHR1cmUtPndlYlZpZXcgPSBXRUJL
SVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKLSAgICBmaXh0dXJlLT5sb29wID0g
Z19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOwotICAgIGdfb2JqZWN0X3JlZl9zaW5rKGZpeHR1
cmUtPndlYlZpZXcpOwotICAgIGZpeHR1cmUtPmhhc0JlZW5Qcm92aXNpb25hbCA9IEZBTFNFOwot
ICAgIGZpeHR1cmUtPmhhc0JlZW5SZWRpcmVjdCA9IEZBTFNFOwotICAgIGZpeHR1cmUtPmhhc0Jl
ZW5Db21taXR0ZWQgPSBGQUxTRTsKLSAgICBmaXh0dXJlLT5oYXNCZWVuRmluaXNoZWQgPSBGQUxT
RTsKLSAgICBmaXh0dXJlLT5oYXNCZWVuRmFpbGVkID0gRkFMU0U7Ci19Ci0KLXN0YXRpYyB2b2lk
IHdlYkxvYWRpbmdGaXh0dXJlVGVhcmRvd24oV2ViTG9hZGluZ0ZpeHR1cmUgKmZpeHR1cmUsIGdj
b25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgICBnX29iamVjdF91bnJlZihmaXh0dXJlLT53ZWJWaWV3
KTsKLSAgICBnX21haW5fbG9vcF91bnJlZihmaXh0dXJlLT5sb29wKTsKLX0KLQotc3RhdGljIGNo
YXIgKmdldFVSSUZvclBhdGgoY29uc3QgY2hhciogcGF0aCkKLXsKLSAgICBTb3VwVVJJICp1cmk7
Ci0gICAgY2hhciAqdXJpU3RyaW5nOwotCi0gICAgdXJpID0gc291cF91cmlfbmV3X3dpdGhfYmFz
ZShiYXNlVVJJLCBwYXRoKTsKLSAgICB1cmlTdHJpbmcgPSBzb3VwX3VyaV90b19zdHJpbmcodXJp
LCBGQUxTRSk7Ci0gICAgc291cF91cmlfZnJlZSh1cmkpOwotCi0gICAgcmV0dXJuIHVyaVN0cmlu
ZzsKLX0KLQotLyogTG9hZCBTdGF0dXMgKi8KLXN0YXRpYyBnYm9vbGVhbiBsb2FkU3RhdHVzUHJv
dmlzaW9uYWxMb2FkU3RhcnRlZChXZWJLaXRXZWJMb2FkZXJDbGllbnQgKmNsaWVudCwgV2ViTG9h
ZGluZ0ZpeHR1cmUgKmZpeHR1cmUpCi17Ci0gICAgZ19hc3NlcnQoIWZpeHR1cmUtPmhhc0JlZW5Q
cm92aXNpb25hbCk7Ci0gICAgZ19hc3NlcnQoIWZpeHR1cmUtPmhhc0JlZW5SZWRpcmVjdCk7Ci0g
ICAgZ19hc3NlcnQoIWZpeHR1cmUtPmhhc0JlZW5Db21taXR0ZWQpOwotICAgIGZpeHR1cmUtPmhh
c0JlZW5Qcm92aXNpb25hbCA9IFRSVUU7Ci0KLSAgICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGlj
IGdib29sZWFuIGxvYWRTdGF0dXNQcm92aXNpb25hbExvYWRSZWNlaXZlZFNlcnZlclJlZGlyZWN0
KFdlYktpdFdlYkxvYWRlckNsaWVudCAqY2xpZW50LCBXZWJMb2FkaW5nRml4dHVyZSAqZml4dHVy
ZSkKLXsKLSAgICBnX2Fzc2VydChmaXh0dXJlLT5oYXNCZWVuUHJvdmlzaW9uYWwpOwotICAgIGdf
YXNzZXJ0KCFmaXh0dXJlLT5oYXNCZWVuUmVkaXJlY3QpOwotICAgIGdfYXNzZXJ0KCFmaXh0dXJl
LT5oYXNCZWVuQ29tbWl0dGVkKTsKLSAgICBmaXh0dXJlLT5oYXNCZWVuUmVkaXJlY3QgPSBUUlVF
OwotCi0gICAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiBsb2FkU3RhdHVzUHJv
dmlzaW9uYWxMb2FkRmFpbGVkKFdlYktpdFdlYkxvYWRlckNsaWVudCAqY2xpZW50LCBjb25zdCBn
Y2hhciAqZmFpbGluZ1VSSSwgR0Vycm9yICplcnJvciwgV2ViTG9hZGluZ0ZpeHR1cmUgKmZpeHR1
cmUpCi17Ci0gICAgZ19hc3NlcnRfbm90X3JlYWNoZWQoKTsKLSAgICByZXR1cm4gVFJVRTsKLX0K
LQotc3RhdGljIGdib29sZWFuIGxvYWRTdGF0dXNMb2FkQ29tbWl0dGVkKFdlYktpdFdlYkxvYWRl
ckNsaWVudCAqY2xpZW50LCBXZWJMb2FkaW5nRml4dHVyZSAqZml4dHVyZSkKLXsKLSAgICBnX2Fz
c2VydChmaXh0dXJlLT5oYXNCZWVuUHJvdmlzaW9uYWwpOwotICAgIGdfYXNzZXJ0KGZpeHR1cmUt
Pmhhc0JlZW5SZWRpcmVjdCk7Ci0gICAgZ19hc3NlcnQoIWZpeHR1cmUtPmhhc0JlZW5Db21taXR0
ZWQpOwotICAgIGZpeHR1cmUtPmhhc0JlZW5Db21taXR0ZWQgPSBUUlVFOwotCi0gICAgcmV0dXJu
IFRSVUU7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiBsb2FkU3RhdHVzTG9hZEZpbmlzaGVkKFdlYktp
dFdlYkxvYWRlckNsaWVudCAqY2xpZW50LCBXZWJMb2FkaW5nRml4dHVyZSAqZml4dHVyZSkKLXsK
LSAgICBnX2Fzc2VydChmaXh0dXJlLT5oYXNCZWVuUHJvdmlzaW9uYWwpOwotICAgIGdfYXNzZXJ0
KGZpeHR1cmUtPmhhc0JlZW5SZWRpcmVjdCk7Ci0gICAgZ19hc3NlcnQoZml4dHVyZS0+aGFzQmVl
bkNvbW1pdHRlZCk7Ci0gICAgZ19hc3NlcnQoIWZpeHR1cmUtPmhhc0JlZW5GaW5pc2hlZCk7Ci0g
ICAgZml4dHVyZS0+aGFzQmVlbkZpbmlzaGVkID0gVFJVRTsKLQotICAgIGdfbWFpbl9sb29wX3F1
aXQoZml4dHVyZS0+bG9vcCk7Ci0KLSAgICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29s
ZWFuIGxvYWRTdGF0dXNMb2FkRmFpbGVkKFdlYktpdFdlYkxvYWRlckNsaWVudCAqY2xpZW50LCBj
b25zdCBnY2hhciAqZmFpbGluZ1VSSSwgR0Vycm9yICplcnJvciwgV2ViTG9hZGluZ0ZpeHR1cmUg
KmZpeHR1cmUpCi17Ci0gICAgZ19hc3NlcnRfbm90X3JlYWNoZWQoKTsKLSAgICByZXR1cm4gVFJV
RTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdExvYWRpbmdTdGF0dXMoV2ViTG9hZGluZ0ZpeHR1cmUg
KmZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgICBjaGFyICp1cmlTdHJpbmc7Ci0g
ICAgV2ViS2l0V2ViTG9hZGVyQ2xpZW50ICpjbGllbnQgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2xv
YWRlcl9jbGllbnQoZml4dHVyZS0+d2ViVmlldyk7Ci0KLSAgICBnX3NpZ25hbF9jb25uZWN0KGNs
aWVudCwgInByb3Zpc2lvbmFsLWxvYWQtc3RhcnRlZCIsIEdfQ0FMTEJBQ0sobG9hZFN0YXR1c1By
b3Zpc2lvbmFsTG9hZFN0YXJ0ZWQpLCBmaXh0dXJlKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KGNs
aWVudCwgInByb3Zpc2lvbmFsLWxvYWQtcmVjZWl2ZWQtc2VydmVyLXJlZGlyZWN0IiwgR19DQUxM
QkFDSyhsb2FkU3RhdHVzUHJvdmlzaW9uYWxMb2FkUmVjZWl2ZWRTZXJ2ZXJSZWRpcmVjdCksIGZp
eHR1cmUpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3QoY2xpZW50LCAicHJvdmlzaW9uYWwtbG9hZC1m
YWlsZWQiLCBHX0NBTExCQUNLKGxvYWRTdGF0dXNQcm92aXNpb25hbExvYWRGYWlsZWQpLCBmaXh0
dXJlKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KGNsaWVudCwgImxvYWQtY29tbWl0dGVkIiwgR19D
QUxMQkFDSyhsb2FkU3RhdHVzTG9hZENvbW1pdHRlZCksIGZpeHR1cmUpOwotICAgIGdfc2lnbmFs
X2Nvbm5lY3QoY2xpZW50LCAibG9hZC1maW5pc2hlZCIsIEdfQ0FMTEJBQ0sobG9hZFN0YXR1c0xv
YWRGaW5pc2hlZCksIGZpeHR1cmUpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3QoY2xpZW50LCAibG9h
ZC1mYWlsZWQiLCBHX0NBTExCQUNLKGxvYWRTdGF0dXNMb2FkRmFpbGVkKSwgZml4dHVyZSk7Ci0K
LSAgICB1cmlTdHJpbmcgPSBnZXRVUklGb3JQYXRoKCIvIik7Ci0gICAgd2Via2l0X3dlYl92aWV3
X2xvYWRfdXJpKGZpeHR1cmUtPndlYlZpZXcsIHVyaVN0cmluZyk7Ci0gICAgZ19mcmVlKHVyaVN0
cmluZyk7Ci0KLSAgICBnX21haW5fbG9vcF9ydW4oZml4dHVyZS0+bG9vcCk7Ci0KLSAgICBnX2Fz
c2VydChmaXh0dXJlLT5oYXNCZWVuUHJvdmlzaW9uYWwpOwotICAgIGdfYXNzZXJ0KGZpeHR1cmUt
Pmhhc0JlZW5SZWRpcmVjdCk7Ci0gICAgZ19hc3NlcnQoZml4dHVyZS0+aGFzQmVlbkNvbW1pdHRl
ZCk7Ci0gICAgZ19hc3NlcnQoZml4dHVyZS0+aGFzQmVlbkZpbmlzaGVkKTsKLX0KLQotLyogTG9h
ZCBFcnJvciAqLwotc3RhdGljIGdib29sZWFuIGxvYWRFcnJvclByb3Zpc2lvbmFsTG9hZFN0YXJ0
ZWQoV2ViS2l0V2ViTG9hZGVyQ2xpZW50ICpjbGllbnQsIFdlYkxvYWRpbmdGaXh0dXJlICpmaXh0
dXJlKQotewotICAgIGdfYXNzZXJ0KCFmaXh0dXJlLT5oYXNCZWVuUHJvdmlzaW9uYWwpOwotICAg
IGZpeHR1cmUtPmhhc0JlZW5Qcm92aXNpb25hbCA9IFRSVUU7Ci0KLSAgICByZXR1cm4gVFJVRTsK
LX0KLQotc3RhdGljIGdib29sZWFuIGxvYWRFcnJvclByb3Zpc2lvbmFsTG9hZEZhaWxlZChXZWJL
aXRXZWJMb2FkZXJDbGllbnQgKmNsaWVudCwgY29uc3QgZ2NoYXIgKmZhaWxpbmdVUkksIEdFcnJv
ciAqZXJyb3IsIFdlYkxvYWRpbmdGaXh0dXJlICpmaXh0dXJlKQotewotICAgIGdfYXNzZXJ0KGZp
eHR1cmUtPmhhc0JlZW5Qcm92aXNpb25hbCk7Ci0gICAgZ19hc3NlcnQoIWZpeHR1cmUtPmhhc0Jl
ZW5GYWlsZWQpOwotICAgIGZpeHR1cmUtPmhhc0JlZW5GYWlsZWQgPSBUUlVFOwotCi0gICAgZ19h
c3NlcnQoZXJyb3IpOwotCi0gICAgZ19tYWluX2xvb3BfcXVpdChmaXh0dXJlLT5sb29wKTsKLQot
ICAgIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gbG9hZEVycm9yTG9hZEZpbmlz
aGVkKFdlYktpdFdlYkxvYWRlckNsaWVudCAqY2xpZW50LCBXZWJMb2FkaW5nRml4dHVyZSAqZml4
dHVyZSkKLXsKLSAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOwotICAgIHJldHVybiBUUlVFOwot
fQotCi1zdGF0aWMgdm9pZCB0ZXN0TG9hZGluZ0Vycm9yKFdlYkxvYWRpbmdGaXh0dXJlICpmaXh0
dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgY2hhciAqdXJpU3RyaW5nOwotICAgIFdl
YktpdFdlYkxvYWRlckNsaWVudCAqY2xpZW50ID0gd2Via2l0X3dlYl92aWV3X2dldF9sb2FkZXJf
Y2xpZW50KGZpeHR1cmUtPndlYlZpZXcpOwotCi0gICAgZ19zaWduYWxfY29ubmVjdChjbGllbnQs
ICJwcm92aXNpb25hbC1sb2FkLXN0YXJ0ZWQiLCBHX0NBTExCQUNLKGxvYWRFcnJvclByb3Zpc2lv
bmFsTG9hZFN0YXJ0ZWQpLCBmaXh0dXJlKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KGNsaWVudCwg
InByb3Zpc2lvbmFsLWxvYWQtZmFpbGVkIiwgR19DQUxMQkFDSyhsb2FkRXJyb3JQcm92aXNpb25h
bExvYWRGYWlsZWQpLCBmaXh0dXJlKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KGNsaWVudCwgImxv
YWQtZmluaXNoZWQiLCBHX0NBTExCQUNLKGxvYWRFcnJvckxvYWRGaW5pc2hlZCksIGZpeHR1cmUp
OwotCi0gICAgdXJpU3RyaW5nID0gZ2V0VVJJRm9yUGF0aCgiL3Rlc3RfbG9hZF9lcnJvciIpOwot
ICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3VyaShmaXh0dXJlLT53ZWJWaWV3LCB1cmlTdHJpbmcp
OwotICAgIGdfZnJlZSh1cmlTdHJpbmcpOwotCi0gICAgZ19tYWluX2xvb3BfcnVuKGZpeHR1cmUt
Pmxvb3ApOwotCi0gICAgZ19hc3NlcnQoZml4dHVyZS0+aGFzQmVlblByb3Zpc2lvbmFsKTsKLSAg
ICBnX2Fzc2VydChmaXh0dXJlLT5oYXNCZWVuRmFpbGVkKTsKLX0KLQotc3RhdGljIGdib29sZWFu
IGxvYWRBbHRlcm5hdGVDb250ZW50TG9hZEZpbmlzaGVkKFdlYktpdFdlYkxvYWRlckNsaWVudCAq
Y2xpZW50LCBXZWJMb2FkaW5nRml4dHVyZSAqZml4dHVyZSkKLXsKLSAgICBnX21haW5fbG9vcF9x
dWl0KGZpeHR1cmUtPmxvb3ApOwotCi0gICAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnYm9v
bGVhbiBsb2FkQWx0ZXJuYXRlQ29udGVudExvYWRGYWlsZWQoV2ViS2l0V2ViTG9hZGVyQ2xpZW50
ICpjbGllbnQsIGNvbnN0IGdjaGFyICpmYWlsaW5nVVJJLCBHRXJyb3IgKmVycm9yLCBXZWJMb2Fk
aW5nRml4dHVyZSAqZml4dHVyZSkKLXsKLSAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOwotICAg
IHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0TG9hZEFsdGVybmF0ZUNvbnRlbnQo
V2ViTG9hZGluZ0ZpeHR1cmUgKmZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgICBj
aGFyICp1cmlTdHJpbmc7Ci0gICAgV2ViS2l0V2ViTG9hZGVyQ2xpZW50ICpjbGllbnQgPSB3ZWJr
aXRfd2ViX3ZpZXdfZ2V0X2xvYWRlcl9jbGllbnQoZml4dHVyZS0+d2ViVmlldyk7Ci0KLSAgICBn
X3NpZ25hbF9jb25uZWN0KGNsaWVudCwgImxvYWQtZmluaXNoZWQiLCBHX0NBTExCQUNLKGxvYWRB
bHRlcm5hdGVDb250ZW50TG9hZEZpbmlzaGVkKSwgZml4dHVyZSk7Ci0gICAgZ19zaWduYWxfY29u
bmVjdChjbGllbnQsICJwcm92aXNpb25hbC1sb2FkLWZhaWxlZCIsIEdfQ0FMTEJBQ0sobG9hZEFs
dGVybmF0ZUNvbnRlbnRMb2FkRmFpbGVkKSwgZml4dHVyZSk7Ci0gICAgZ19zaWduYWxfY29ubmVj
dChjbGllbnQsICJsb2FkLWZhaWxlZCIsIEdfQ0FMTEJBQ0sobG9hZEFsdGVybmF0ZUNvbnRlbnRM
b2FkRmFpbGVkKSwgZml4dHVyZSk7Ci0KLSAgICB1cmlTdHJpbmcgPSBnZXRVUklGb3JQYXRoKCIv
YWx0ZXJuYXRlIik7Ci0gICAgd2Via2l0X3dlYl92aWV3X2xvYWRfYWx0ZXJuYXRlX2h0bWwoZml4
dHVyZS0+d2ViVmlldywgIjxodG1sPjxib2R5PkFsdGVybmF0ZSBDb250ZW50PC9ib2R5PjwvaHRt
bD4iLCBOVUxMLCB1cmlTdHJpbmcpOwotICAgIGdfZnJlZSh1cmlTdHJpbmcpOwotCi0gICAgZ19t
YWluX2xvb3BfcnVuKGZpeHR1cmUtPmxvb3ApOwotfQotCi1pbnQgbWFpbihpbnQgYXJnYywgY2hh
ciAqKmFyZ3YpCi17Ci0gICAgU291cFNlcnZlciAqc2VydmVyOwotCi0gICAgZ190aHJlYWRfaW5p
dChOVUxMKTsKLSAgICBndGtfdGVzdF9pbml0KCZhcmdjLCAmYXJndiwgTlVMTCk7Ci0KLSAgICBn
X3NldGVudigiV0VCS0lUX0VYRUNfUEFUSCIsIFdFQktJVF9FWEVDX1BBVEgsIEZBTFNFKTsKLQot
ICAgIHNlcnZlciA9IHNvdXBfc2VydmVyX25ldyhTT1VQX1NFUlZFUl9QT1JULCAwLCBOVUxMKTsK
LSAgICBzb3VwX3NlcnZlcl9ydW5fYXN5bmMoc2VydmVyKTsKLQotICAgIHNvdXBfc2VydmVyX2Fk
ZF9oYW5kbGVyKHNlcnZlciwgTlVMTCwgc2VydmVyQ2FsbGJhY2ssIE5VTEwsIE5VTEwpOwotCi0g
ICAgYmFzZVVSSSA9IHNvdXBfdXJpX25ldygiaHR0cDovLzEyNy4wLjAuMS8iKTsKLSAgICBzb3Vw
X3VyaV9zZXRfcG9ydChiYXNlVVJJLCBzb3VwX3NlcnZlcl9nZXRfcG9ydChzZXJ2ZXIpKTsKLQot
ICAgIGdfdGVzdF9idWdfYmFzZSgiaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvIik7Ci0gICAgZ190
ZXN0X2FkZCgiL3dlYmtpdDIvbG9hZGluZy9zdGF0dXMiLAotICAgICAgICAgICAgICAgV2ViTG9h
ZGluZ0ZpeHR1cmUsIE5VTEwsCi0gICAgICAgICAgICAgICB3ZWJMb2FkaW5nRml4dHVyZVNldHVw
LAotICAgICAgICAgICAgICAgdGVzdExvYWRpbmdTdGF0dXMsCi0gICAgICAgICAgICAgICB3ZWJM
b2FkaW5nRml4dHVyZVRlYXJkb3duKTsKLSAgICBnX3Rlc3RfYWRkKCIvd2Via2l0Mi9sb2FkaW5n
L2Vycm9yIiwKLSAgICAgICAgICAgICAgIFdlYkxvYWRpbmdGaXh0dXJlLCBOVUxMLAotICAgICAg
ICAgICAgICAgd2ViTG9hZGluZ0ZpeHR1cmVTZXR1cCwKLSAgICAgICAgICAgICAgIHRlc3RMb2Fk
aW5nRXJyb3IsCi0gICAgICAgICAgICAgICB3ZWJMb2FkaW5nRml4dHVyZVRlYXJkb3duKTsKLSAg
ICBnX3Rlc3RfYWRkKCIvd2Via2l0Mi9sb2FkaW5nL2FsdGVybmF0ZV9jb250ZW50IiwKLSAgICAg
ICAgICAgICAgIFdlYkxvYWRpbmdGaXh0dXJlLCBOVUxMLAotICAgICAgICAgICAgICAgd2ViTG9h
ZGluZ0ZpeHR1cmVTZXR1cCwKLSAgICAgICAgICAgICAgIHRlc3RMb2FkQWx0ZXJuYXRlQ29udGVu
dCwKLSAgICAgICAgICAgICAgIHdlYkxvYWRpbmdGaXh0dXJlVGVhcmRvd24pOwotCi0gICAgcmV0
dXJuIGdfdGVzdF9ydW4oKTsKLX0KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvdGVzdHMvdGVzdHdlYmNvbnRleHQuYyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL3Rlc3RzL3Rlc3R3ZWJjb250ZXh0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDFiNTI1N2YuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvdGVzdHMvdGVzdHdlYmNvbnRleHQuYworKysgL2Rldi9udWxsCkBAIC0xLDQxICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KLSAqCi0gKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
Ci0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlIDxn
bGliLmg+Ci0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotI2luY2x1ZGUgPHdlYmtpdDIvd2Via2l0Mi5o
PgotCi1zdGF0aWMgdm9pZCB0ZXN0V2ViQ29udGV4dERlZmF1bHQodm9pZCkKLXsKLSAgICAvKiBD
aGVjayB0aGVyZSdzIGEgc2luZ2xlIGluc3RhbmNlIG9mIHRoZSBkZWZhdWx0IHdlYiBjb250ZXh0
LiAqLwotICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZGVmYXVsdCgpID09IHdl
YmtpdF93ZWJfY29udGV4dF9nZXRfZGVmYXVsdCgpKTsKLX0KLQotaW50IG1haW4oaW50IGFyZ2Ms
IGNoYXIgKiphcmd2KQotewotICAgIGdfdGhyZWFkX2luaXQoTlVMTCk7Ci0gICAgZ3RrX3Rlc3Rf
aW5pdCgmYXJnYywgJmFyZ3YsIE5VTEwpOwotCi0gICAgZ190ZXN0X2J1Z19iYXNlKCJodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy8iKTsKLSAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQyL3dlYmNv
bnRleHQvZGVmYXVsdF9jb250ZXh0IiwKLSAgICAgICAgICAgICAgICAgICAgdGVzdFdlYkNvbnRl
eHREZWZhdWx0KTsKLQotICAgIHJldHVybiBnX3Rlc3RfcnVuKCk7Ci19Ci0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL3Rlc3R3ZWJ2aWV3LmMgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy90ZXN0d2Vidmlldy5jCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YTI3YWZlLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL3Rlc3R3ZWJ2aWV3LmMKKysrIC9kZXYvbnVs
bApAQCAtMSw0NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwu
Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
LSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwot
Ci0jaW5jbHVkZSA8Z2xpYi5oPgotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLSNpbmNsdWRlIDx3ZWJr
aXQyL3dlYmtpdDIuaD4KLQotc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdEZWZhdWx0Q29udGV4dCh2
b2lkKQotewotICAgIFdlYktpdFdlYlZpZXcgKnZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0
X3dlYl92aWV3X25ldygpKTsKLSAgICBnX29iamVjdF9yZWZfc2luayh2aWV3KTsKLSAgICBnX2Fz
c2VydCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X2NvbnRleHQodmlldykgPT0gd2Via2l0X3dlYl9jb250
ZXh0X2dldF9kZWZhdWx0KCkpOwotICAgIGdfb2JqZWN0X3VucmVmKHZpZXcpOwotfQotCi1pbnQg
bWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi17Ci0gICAgZ190aHJlYWRfaW5pdChOVUxMKTsK
LSAgICBndGtfdGVzdF9pbml0KCZhcmdjLCAmYXJndiwgTlVMTCk7Ci0KLSAgICBnX3NldGVudigi
V0VCS0lUX0VYRUNfUEFUSCIsIFdFQktJVF9FWEVDX1BBVEgsIEZBTFNFKTsKLQotICAgIGdfdGVz
dF9idWdfYmFzZSgiaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvIik7Ci0gICAgZ190ZXN0X2FkZF9m
dW5jKCIvd2Via2l0Mi93ZWJ2aWV3L2RlZmF1bHRfY29udGV4dCIsCi0gICAgICAgICAgICAgICAg
ICAgIHRlc3RXZWJWaWV3RGVmYXVsdENvbnRleHQpOwotCi0gICAgcmV0dXJuIGdfdGVzdF9ydW4o
KTsKLX0KZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvcnVuLWd0ay10ZXN0cyBiL1Rvb2xzL1Nj
cmlwdHMvcnVuLWd0ay10ZXN0cwppbmRleCAyZmI2NWI3Li4xZGI5YWUyIDEwMDc1NQotLS0gYS9U
b29scy9TY3JpcHRzL3J1bi1ndGstdGVzdHMKKysrIGIvVG9vbHMvU2NyaXB0cy9ydW4tZ3RrLXRl
c3RzCkBAIC0yNywxMyArMjcsMTMgQEAgdXNlIHdlYmtpdGRpcnM7CiAjIFRoaXMgaW5pdGlhbGl6
ZXMgdGhlIGNvcnJlY3QgY29uZmlndXJhdGlvbiAoUmVsZWFzZS9EZWJ1ZykKIHNldENvbmZpZ3Vy
YXRpb24oKTsKIAotbXkgJHByb2R1Y3REaXIgPSBwcm9kdWN0RGlyKCk7Ci1teSAkdGVzdHNEaXIg
PSAkcHJvZHVjdERpciAuICIvUHJvZ3JhbXMvdW5pdHRlc3RzIiA7Ci1teSBAdW5pdFRlc3RzID0g
Z2xvYiAgJHRlc3RzRGlyIC4gIi90ZXN0KiI7Ci1teSBAd2Via2l0MlVuaXRUZXN0cyA9IGdsb2Ig
ICR0ZXN0c0RpciAuICIvd2Via2l0Mi90ZXN0KiI7Ci1wdXNoIEB1bml0VGVzdHMsIEB3ZWJraXQy
VW5pdFRlc3RzOworbXkgQHVuaXRUZXN0czsKK215ICRwcm9ncmFtc0RpcmVjdG9yeSA9IHByb2R1
Y3REaXIoKSAuICIvUHJvZ3JhbXMiOworcHVzaChAdW5pdFRlc3RzLCBnbG9iKCRwcm9ncmFtc0Rp
cmVjdG9yeSAuICIvdW5pdHRlc3RzLyoiKSk7CitwdXNoKEB1bml0VGVzdHMsIGdsb2IoJHByb2dy
YW1zRGlyZWN0b3J5IC4gIi9XZWJLaXQyQVBJVGVzdHMvKiIpKTsKKwogaWYgKCQjdW5pdFRlc3Rz
IDwgMSkgewotICAgIGRpZSAiRVJST1I6IHRlc3RzIG5vdCBmb3VuZCBpbiAkcHJvZHVjdERpci5c
biI7CisgICAgZGllICJFUlJPUjogdGVzdHMgbm90IGZvdW5kIGluICRwcm9ncmFtc0RpcmVjdG9y
eS5cbiI7CiB9CiAKIG15ICRwaWQgPSBmb3JrKCk7CkBAIC01Miw2ICs1Miw4IEBAICRFTlZ7IkRJ
U1BMQVkifSA9ICc6MzEnOwogbXkgJGV4aXRTdGF0dXMgPSAwOwogZm9yZWFjaCBteSAkdW5pdFRl
c3QgKEB1bml0VGVzdHMpCiB7CisgICAgbmV4dCB1bmxlc3MgKC1mICR1bml0VGVzdCBhbmQgLXgg
JHVuaXRUZXN0KTsKKwogICAgIHN5c3RlbSAiZ3Rlc3RlciAkdW5pdFRlc3QiOwogICAgIGlmICgk
PykgewogICAgICAgICAkZXhpdFN0YXR1cyA9ICQ/Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110445</attachid>
            <date>2011-10-10 17:16:59 -0700</date>
            <delta_ts>2011-10-10 22:08:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-69409-20111010171658.patch</filename>
            <type>text/plain</type>
            <size>51294</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTcwMTIKZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5n
ZUxvZwppbmRleCBmZWNmYTk1MGI5YjQ0OTgwMDg2YmUyM2FlNTVjNzM5Y2Q3NzIzMDNlLi42ZmEy
OGQ4ZWRkODdlOTkyMGUyYjU5YWEwMGE0NDU4NTNhMDkwMDYyIDEwMDY0NAotLS0gYS9DaGFuZ2VM
b2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTEtMTAtMTAgIE1hcnRpbiBS
b2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdIFtXZWJLaXQy
XSBNYWtlIGFkZGluZyBhbm90aGVyIHVuaXQgdGVzdCBlYXNpZXIKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY5NDA5CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbTogSW5jbHVkZSB0
aGUgbmV3IHRlc3RpbmcgbWFrZWZpbGUuCisKIDIwMTEtMTAtMDYgIEZhZHkgU2FtdWVsICA8ZnNh
bXVlbEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgQ29kZSBjbGVhbi11cDogTWFrZSBSZW5kZXJP
YmplY3Q6OmFic29sdXRlQm91bmRpbmdCb3hSZWN0IGFuZCBhc3NvY2lhdGVkIG1ldGhvZHMgY29u
c3QgYW5kIG1ha2UgaXRzIHBhcmFtZXRlciB1c2VUcmFuc2Zvcm1zIG5vIGxvbmdlciBkZWZhdWx0
IHRvIGZhbHNlCmRpZmYgLS1naXQgYS9HTlVtYWtlZmlsZS5hbSBiL0dOVW1ha2VmaWxlLmFtCmlu
ZGV4IDFmZTY3NGJlOTEzN2FiM2E5MGQzM2NjYWQ2OGQ2NjgzYzMxMTUyZmIuLjA2ZmNjN2Q0MTE5
M2IxYjVmZGUyNzI2NzdkYWI0ZTM5MTE5ODkwNDAgMTAwNjQ0Ci0tLSBhL0dOVW1ha2VmaWxlLmFt
CisrKyBiL0dOVW1ha2VmaWxlLmFtCkBAIC0yMTAsNiArMjEwLDcgQEAgaW5jbHVkZSBUb29scy9E
dW1wUmVuZGVyVHJlZS9ndGsvR05VbWFrZWZpbGUuSW1hZ2VEaWZmLmFtCiAKIGlmIEVOQUJMRV9X
RUJLSVQyCiBpbmNsdWRlIFNvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtCitpbmNsdWRlIFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0dOVW1ha2VmaWxlLmFtCiBpbmNs
dWRlIFRvb2xzL01pbmlCcm93c2VyL2d0ay9HTlVtYWtlZmlsZS5hbQogaW5jbHVkZSBUb29scy9X
ZWJLaXRUZXN0UnVubmVyL0dOVW1ha2VmaWxlLmFtCiAjIFtHVEtdIFJlZmFjdG9yIHRoZSB0cmFu
c2xhdGlvbnMgbm93IHRoYXQgd2UgaGF2ZSB3ZWJraXQyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggNjY3ZWM5YjBj
YjJlYWEyMTA0ZTAzMTgwMjcwNWFiMTg3YWRkNWRlMy4uYTJlOTU1NGEwNDE2NzdlMWQ3Nzk1MGJm
YThhNWY1ODVlODk2YTYyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI1IEBACisyMDExLTEwLTEw
ICBNYXJ0aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RL
XSBbV2ViS2l0Ml0gTWFrZSBhZGRpbmcgYW5vdGhlciB1bml0IHRlc3QgZWFzaWVyCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02OTQwOQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06
IEFkZCB0aGUgbmV3IFdlYktpdDIgQVBJIHRlc3RzLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
Z3RrL3Rlc3RzL0dOVW1ha2VmaWxlLmFtOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L2d0ay90ZXN0cy9Mb2FkVHJhY2tpbmdUZXN0LmNwcDogQWRkZWQuIEEgZml4dHVyZSBmb3IgY3Jl
YXRpbmcgbG9hZCB0cmFja2luZyB0ZXN0cy4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay90
ZXN0cy9Mb2FkVHJhY2tpbmdUZXN0Lmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
Z3RrL3Rlc3RzL1Rlc3RNYWluLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvdGVzdHMvdGVzdHdlYnZpZXcuYy4KKyAgICAgICAgKG1haW4pOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RNYWluLmg6IEFkZGVkLgorICAgICAgICAq
IFVJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRXZWJDb250ZXh0LmNwcDogQ29waWVk
IGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvdGVzdHdlYnZpZXcu
Yy4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0V2ViTG9hZGVy
Q2xpZW50LmNwcDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVz
dFdlYktpdFdlYlZpZXcuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvdGVzdHMvdGVzdHdlYnZpZXcuYy4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0
ay90ZXN0cy9XZWJWaWV3VGVzdC5jcHA6IEFkZGVkLiBBIGZpeHR1cmUgZm9yIGdlbmVyaWMgV2Vi
VmlldyB0ZXN0cy4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJWaWV3VGVz
dC5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy90ZXN0bG9hZGlu
Zy5jOiBSZW1vdmVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL3Rlc3R3ZWJj
b250ZXh0LmM6IFJlbW92ZWQuCisKIDIwMTEtMTAtMDMgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8
Y2dhcmNpYUBpZ2FsaWEuY29tPiBhbmQgTWFydGluIFJvYmluc29uICA8bXJvYmluc29uQGlnYWxp
YS5jb20+CiAKICAgICAgICAgW0dUS10gSW1wbGVtZW50IGRyYWcgYW5kIGRyb3Agc3VwcG9ydCBp
biBXZWJLaXQyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbSBiL1Nv
dXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtCmluZGV4IGUzZjk4NDY4ZDU1NTU1YmNjMjJlMjk4
Zjk3ZTU4YTg0MDdmMmU0OTIuLjM2MDQ3MmNmNzdmNmFlYjZmZDQ3MDZmMTkxNTdlN2NmYzk3NDg4
MmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtCkBAIC0xMDgyLDUzICsxMDgyLDYgQEAgQ0xFQU5GSUxF
UyArPSBcCiBESVNUQ0xFQU5GSUxFUyArPSBcCiAJJCh0b3BfYnVpbGRkaXIpL1dlYktpdDIvd2Vi
a2l0Mmd0ay1AV0VCS0lUR1RLX0FQSV9WRVJTSU9OQC5wYwogCi0jIFVuaXQgdGVzdHMKLVRFU1Rf
UFJPR1MgKz0gXAotCVByb2dyYW1zL3VuaXR0ZXN0cy93ZWJraXQyL3Rlc3R3ZWJjb250ZXh0IFwK
LQlQcm9ncmFtcy91bml0dGVzdHMvd2Via2l0Mi90ZXN0d2VidmlldyBcCi0JUHJvZ3JhbXMvdW5p
dHRlc3RzL3dlYmtpdDIvdGVzdGxvYWRpbmcKLQotbm9pbnN0X1BST0dSQU1TICs9ICQoVEVTVF9Q
Uk9HUykKLXdlYmtpdDJfdGVzdHNfY2ZsYWdzID0gXAotCS1EV0VCS0lUX0VYRUNfUEFUSD1cIiR7
c2hlbGwgcHdkfS8kKHRvcF9idWlsZGRpcikvUHJvZ3JhbXNcIiBcCi0JLUkkKHNyY2RpcikvU291
cmNlIFwKLQktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViS2l0MiBcCi0JLUkkKHRvcF9idWlsZGRpcikv
RGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9pbmNsdWRlIFwKLQktSSQodG9wX2J1aWxkZGlyKS9EZXJp
dmVkU291cmNlcy9XZWJLaXQyL3dlYmtpdDJndGsgXAotCS1JJCh0b3BfYnVpbGRkaXIpL0Rlcml2
ZWRTb3VyY2VzL1dlYktpdDIvd2Via2l0Mmd0ay9pbmNsdWRlIFwKLQktSSQoc3JjZGlyKS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ayBcCi0JJChnbG9iYWxfY2ZsYWdzKSBcCi0JJChn
bG9iYWxfY3BwZmxhZ3MpIFwKLQkkKEdMSUJfQ0ZMQUdTKSBcCi0JJChHVEtfQ0ZMQUdTKSBcCi0J
JChMSUJTT1VQX0NGTEFHUykKLQotd2Via2l0Ml90ZXN0c19sZGFkZCA9IFwKLQlsaWJqYXZhc2Ny
aXB0Y29yZWd0ay1AV0VCS0lUR1RLX0FQSV9NQUpPUl9WRVJTSU9OQC5AV0VCS0lUR1RLX0FQSV9N
SU5PUl9WRVJTSU9OQC5sYSBcCi0JbGlid2Via2l0Mmd0ay1AV0VCS0lUR1RLX0FQSV9NQUpPUl9W
RVJTSU9OQC5AV0VCS0lUR1RLX0FQSV9NSU5PUl9WRVJTSU9OQC5sYSBcCi0JJChHTElCX0xJQlMp
IFwKLQkkKEdUS19MSUJTKSBcCi0JJChMSUJTT1VQX0xJQlMpCi0KLXdlYmtpdDJfdGVzdHNfbGRm
bGFncyA9IFwKLQktbm8taW5zdGFsbCBcCi0JLW5vLWZhc3QtaW5zdGFsbAotCi1Qcm9ncmFtc191
bml0dGVzdHNfd2Via2l0Ml90ZXN0d2ViY29udGV4dF9TT1VSQ0VTID0gU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvdGVzdHdlYmNvbnRleHQuYwotUHJvZ3JhbXNfdW5pdHRl
c3RzX3dlYmtpdDJfdGVzdHdlYmNvbnRleHRfQ0ZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2NmbGFn
cykKLVByb2dyYW1zX3VuaXR0ZXN0c193ZWJraXQyX3Rlc3R3ZWJjb250ZXh0X0xEQUREID0gJCh3
ZWJraXQyX3Rlc3RzX2xkYWRkKQotUHJvZ3JhbXNfdW5pdHRlc3RzX3dlYmtpdDJfdGVzdHdlYmNv
bnRleHRfTERGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19sZGZsYWdzKQotCi1Qcm9ncmFtc191bml0
dGVzdHNfd2Via2l0Ml90ZXN0d2Vidmlld19TT1VSQ0VTID0gU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvdGVzdHMvdGVzdHdlYnZpZXcuYwotUHJvZ3JhbXNfdW5pdHRlc3RzX3dlYmtp
dDJfdGVzdHdlYnZpZXdfQ0ZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2NmbGFncykKLVByb2dyYW1z
X3VuaXR0ZXN0c193ZWJraXQyX3Rlc3R3ZWJ2aWV3X0xEQUREID0gJCh3ZWJraXQyX3Rlc3RzX2xk
YWRkKQotUHJvZ3JhbXNfdW5pdHRlc3RzX3dlYmtpdDJfdGVzdHdlYnZpZXdfTERGTEFHUyA9ICQo
d2Via2l0Ml90ZXN0c19sZGZsYWdzKQotCi1Qcm9ncmFtc191bml0dGVzdHNfd2Via2l0Ml90ZXN0
bG9hZGluZ19TT1VSQ0VTID0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMv
dGVzdGxvYWRpbmcuYwotUHJvZ3JhbXNfdW5pdHRlc3RzX3dlYmtpdDJfdGVzdGxvYWRpbmdfQ0ZM
QUdTID0gJCh3ZWJraXQyX3Rlc3RzX2NmbGFncykKLVByb2dyYW1zX3VuaXR0ZXN0c193ZWJraXQy
X3Rlc3Rsb2FkaW5nX0xEQUREID0gJCh3ZWJraXQyX3Rlc3RzX2xkYWRkKQotUHJvZ3JhbXNfdW5p
dHRlc3RzX3dlYmtpdDJfdGVzdGxvYWRpbmdfTERGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19sZGZs
YWdzKQotCiAjIFdlYktpdFdlYlByb2Nlc3MKIGxpYmV4ZWNfUFJPR1JBTVMgKz0gXAogCVByb2dy
YW1zL1dlYktpdFdlYlByb2Nlc3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL3Rlc3RzL0dOVW1ha2VmaWxlLmFtIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvdGVzdHMvR05VbWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmUxYWRjOTNmYzgyYTZj
MDZhYzk0NDUyODJiMGEzYTE3OTM3ZmQ1NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0dOVW1ha2VmaWxlLmFtCkBAIC0wLDAgKzEsNjIg
QEAKK1RFU1RfUFJPR1MgKz0gXAorCVByb2dyYW1zL1dlYktpdDJBUElUZXN0cy9UZXN0V2ViS2l0
V2ViQ29udGV4dCBcCisJUHJvZ3JhbXMvV2ViS2l0MkFQSVRlc3RzL1Rlc3RXZWJLaXRXZWJWaWV3
IFwKKwlQcm9ncmFtcy9XZWJLaXQyQVBJVGVzdHMvVGVzdFdlYktpdFdlYkxvYWRlckNsaWVudAor
Citub2luc3RfUFJPR1JBTVMgKz0gJChURVNUX1BST0dTKQord2Via2l0Ml90ZXN0c19jcHBmbGFn
cyA9IFwKKwktRFdFQktJVF9FWEVDX1BBVEg9XCIke3NoZWxsIHB3ZH0vJCh0b3BfYnVpbGRkaXIp
L1Byb2dyYW1zXCIgXAorCSQoamF2YXNjcmlwdGNvcmVfY3BwZmxhZ3MpIFwKKwktSSQoc3JjZGly
KS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUgXAorCS1JJChzcmNkaXIpL1NvdXJjZSBcCisJLUkkKHNy
Y2RpcikvU291cmNlL1dlYktpdDIgXAorCS1JJCh0b3BfYnVpbGRkaXIpL0Rlcml2ZWRTb3VyY2Vz
L1dlYktpdDIvaW5jbHVkZSBcCisJLUkkKHRvcF9idWlsZGRpcikvRGVyaXZlZFNvdXJjZXMvV2Vi
S2l0Mi93ZWJraXQyZ3RrIFwKKwktSSQodG9wX2J1aWxkZGlyKS9EZXJpdmVkU291cmNlcy9XZWJL
aXQyL3dlYmtpdDJndGsvaW5jbHVkZSBcCisJLUkkKHNyY2RpcikvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsgXAorCSQoZ2xvYmFsX2NwcGZsYWdzKSBcCisJJChHTElCX0NGTEFHUykg
XAorCSQoR1RLX0NGTEFHUykgXAorCSQoTElCU09VUF9DRkxBR1MpCisKK3dlYmtpdDJfdGVzdHNf
bGRhZGQgPSBcCisJbGliamF2YXNjcmlwdGNvcmVndGstQFdFQktJVEdUS19BUElfTUFKT1JfVkVS
U0lPTkAuQFdFQktJVEdUS19BUElfTUlOT1JfVkVSU0lPTkAubGEgXAorCWxpYndlYmtpdDJndGst
QFdFQktJVEdUS19BUElfTUFKT1JfVkVSU0lPTkAuQFdFQktJVEdUS19BUElfTUlOT1JfVkVSU0lP
TkAubGEgXAorCUxpYnJhcmllcy9saWJXZWJLaXQyQVBJVGVzdENvcmUubGEgXAorCSQoR0VPQ0xV
RV9MSUJTKSBcCisJJChHTElCX0xJQlMpIFwKKwkkKEdUS19MSUJTKSBcCisJJChMSUJTT1VQX0xJ
QlMpCisKK3dlYmtpdDJfdGVzdHNfbGRmbGFncyA9IFwKKwktbm8taW5zdGFsbCBcCisJLW5vLWZh
c3QtaW5zdGFsbAorCitub2luc3RfTFRMSUJSQVJJRVMgKz0gTGlicmFyaWVzL2xpYldlYktpdDJB
UElUZXN0Q29yZS5sYQorTGlicmFyaWVzX2xpYldlYktpdDJBUElUZXN0Q29yZV9sYV9TT1VSQ0VT
ID0gXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0xvYWRUcmFja2lu
Z1Rlc3QuY3BwIFwKKwlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9Mb2Fk
VHJhY2tpbmdUZXN0LmggXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3Rz
L1Rlc3RNYWluLmNwcCBcCisJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMv
VGVzdE1haW4uaCBcCisJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2Vi
Vmlld1Rlc3QuY3BwIFwKKwlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9X
ZWJWaWV3VGVzdC5oCitMaWJyYXJpZXNfbGliV2ViS2l0MkFQSVRlc3RDb3JlX2xhX0NQUEZMQUdT
ID0gJCh3ZWJraXQyX3Rlc3RzX2NwcGZsYWdzKQorCitQcm9ncmFtc19XZWJLaXQyQVBJVGVzdHNf
VGVzdFdlYktpdFdlYkNvbnRleHRfU09VUkNFUyA9IFwKKwlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0V2ViQ29udGV4dC5jcHAKK1Byb2dyYW1zX1dlYktp
dDJBUElUZXN0c19UZXN0V2ViS2l0V2ViQ29udGV4dF9DUFBGTEFHUyA9ICQod2Via2l0Ml90ZXN0
c19jcHBmbGFncykKK1Byb2dyYW1zX1dlYktpdDJBUElUZXN0c19UZXN0V2ViS2l0V2ViQ29udGV4
dF9MREFERCA9ICQod2Via2l0Ml90ZXN0c19sZGFkZCkKK1Byb2dyYW1zX1dlYktpdDJBUElUZXN0
c19UZXN0V2ViS2l0V2ViQ29udGV4dF9MREZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2xkZmxhZ3Mp
CisKK1Byb2dyYW1zX1dlYktpdDJBUElUZXN0c19UZXN0V2ViS2l0V2ViVmlld19TT1VSQ0VTID0g
XAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRXZWJW
aWV3LmNwcAorUHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3RzX1Rlc3RXZWJLaXRXZWJWaWV3X0NQUEZM
QUdTID0gJCh3ZWJraXQyX3Rlc3RzX2NwcGZsYWdzKQorUHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3Rz
X1Rlc3RXZWJLaXRXZWJWaWV3X0xEQUREID0gJCh3ZWJraXQyX3Rlc3RzX2xkYWRkKQorUHJvZ3Jh
bXNfV2ViS2l0MkFQSVRlc3RzX1Rlc3RXZWJLaXRXZWJWaWV3X0xERkxBR1MgPSAkKHdlYmtpdDJf
dGVzdHNfbGRmbGFncykKKworUHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3RzX1Rlc3RXZWJLaXRXZWJM
b2FkZXJDbGllbnRfU09VUkNFUyA9IFwKKwlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay90ZXN0cy9UZXN0V2ViS2l0V2ViTG9hZGVyQ2xpZW50LmNwcAorUHJvZ3JhbXNfV2ViS2l0MkFQ
SVRlc3RzX1Rlc3RXZWJLaXRXZWJMb2FkZXJDbGllbnRfQ1BQRkxBR1MgPSAkKHdlYmtpdDJfdGVz
dHNfY3BwZmxhZ3MpCitQcm9ncmFtc19XZWJLaXQyQVBJVGVzdHNfVGVzdFdlYktpdFdlYkxvYWRl
ckNsaWVudF9MREFERCA9ICQod2Via2l0Ml90ZXN0c19sZGFkZCkKK1Byb2dyYW1zX1dlYktpdDJB
UElUZXN0c19UZXN0V2ViS2l0V2ViTG9hZGVyQ2xpZW50X0xERkxBR1MgPSAkKHdlYmtpdDJfdGVz
dHNfbGRmbGFncykKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvdGVzdHMvTG9hZFRyYWNraW5nVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay90ZXN0cy9Mb2FkVHJhY2tpbmdUZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kZmU1MWI1ZjY2
NDRhN2FhZmMzNjExZmY3YTQ4M2YxMGQzOTkxMjI3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvTG9hZFRyYWNraW5nVGVzdC5jcHAKQEAg
LTAsMCArMSwxMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkxvYWRUcmFja2luZ1Rlc3QuaCIKKworI2luY2x1
ZGUgPHdlYmtpdDIvd2Via2l0Mi5oPgorCitzdGF0aWMgZ2Jvb2xlYW4gcHJvdmlzaW9uYWxMb2Fk
U3RhcnRlZENhbGxiYWNrKFdlYktpdFdlYkxvYWRlckNsaWVudCogY2xpZW50LCBMb2FkVHJhY2tp
bmdUZXN0KiB0ZXN0KQoreworICAgIHRlc3QtPnByb3Zpc2lvbmFsTG9hZFN0YXJ0ZWQoY2xpZW50
KTsKKyAgICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIGdib29sZWFuIHByb3Zpc2lvbmFsTG9h
ZFJlY2VpdmVkU2VydmVyUmVkaXJlY3RDYWxsYmFjayhXZWJLaXRXZWJMb2FkZXJDbGllbnQgKmNs
aWVudCwgTG9hZFRyYWNraW5nVGVzdCogdGVzdCkKK3sKKyAgICB0ZXN0LT5wcm92aXNpb25hbExv
YWRSZWNlaXZlZFNlcnZlclJlZGlyZWN0KGNsaWVudCk7CisgICAgcmV0dXJuIFRSVUU7Cit9CisK
K3N0YXRpYyBnYm9vbGVhbiBwcm92aXNpb25hbExvYWRGYWlsZWRDYWxsYmFjayhXZWJLaXRXZWJM
b2FkZXJDbGllbnQgKmNsaWVudCwgY29uc3QgZ2NoYXIgKmZhaWxpbmdVUkksIEdFcnJvciAqZXJy
b3IsIExvYWRUcmFja2luZ1Rlc3QqIHRlc3QpCit7CisgICAgdGVzdC0+cHJvdmlzaW9uYWxMb2Fk
RmFpbGVkKGNsaWVudCwgZmFpbGluZ1VSSSwgZXJyb3IpOworICAgIHJldHVybiBUUlVFOworfQor
CitzdGF0aWMgZ2Jvb2xlYW4gbG9hZENvbW1pdHRlZENhbGxiYWNrKFdlYktpdFdlYkxvYWRlckNs
aWVudCAqY2xpZW50LCBMb2FkVHJhY2tpbmdUZXN0KiB0ZXN0KQoreworICAgIHRlc3QtPmxvYWRD
b21taXR0ZWQoY2xpZW50KTsKKyAgICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIGdib29sZWFu
IGxvYWRGaW5pc2hlZENhbGxiYWNrKFdlYktpdFdlYkxvYWRlckNsaWVudCAqY2xpZW50LCBMb2Fk
VHJhY2tpbmdUZXN0KiB0ZXN0KQoreworICAgIHRlc3QtPmxvYWRGaW5pc2hlZChjbGllbnQpOwor
ICAgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gbG9hZEZhaWxlZENhbGxiYWNr
KFdlYktpdFdlYkxvYWRlckNsaWVudCAqY2xpZW50LCBjb25zdCBnY2hhciAqZmFpbGluZ1VSSSwg
R0Vycm9yICplcnJvciwgTG9hZFRyYWNraW5nVGVzdCogdGVzdCkKK3sKKyAgICB0ZXN0LT5sb2Fk
RmFpbGVkKGNsaWVudCwgZmFpbGluZ1VSSSwgZXJyb3IpOworICAgIHJldHVybiBUUlVFOworfQor
CitzdGF0aWMgdm9pZCBlc3RpbWF0ZWRQcm9ncmVzc0NoYW5nZWRDYWxsYmFjayhHT2JqZWN0ICpv
YmplY3QsIEdQYXJhbVNwZWMgKnBzcGVjLCBMb2FkVHJhY2tpbmdUZXN0KiB0ZXN0KQoreworICAg
IHRlc3QtPmVzdGltYXRlZFByb2dyZXNzQ2hhbmdlZCgpOworfQorCitMb2FkVHJhY2tpbmdUZXN0
OjpMb2FkVHJhY2tpbmdUZXN0KCkKKyAgICA6IG1fcnVuTG9hZFVudGlsQ29tcGxldGlvbihmYWxz
ZSkKK3sKKyAgICBXZWJLaXRXZWJMb2FkZXJDbGllbnQqIGNsaWVudCA9IHdlYmtpdF93ZWJfdmll
d19nZXRfbG9hZGVyX2NsaWVudChtX3dlYlZpZXcpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QoY2xp
ZW50LCAicHJvdmlzaW9uYWwtbG9hZC1zdGFydGVkIiwgR19DQUxMQkFDSyhwcm92aXNpb25hbExv
YWRTdGFydGVkQ2FsbGJhY2spLCB0aGlzKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KGNsaWVudCwg
InByb3Zpc2lvbmFsLWxvYWQtcmVjZWl2ZWQtc2VydmVyLXJlZGlyZWN0IiwgR19DQUxMQkFDSyhw
cm92aXNpb25hbExvYWRSZWNlaXZlZFNlcnZlclJlZGlyZWN0Q2FsbGJhY2spLCB0aGlzKTsKKyAg
ICBnX3NpZ25hbF9jb25uZWN0KGNsaWVudCwgInByb3Zpc2lvbmFsLWxvYWQtZmFpbGVkIiwgR19D
QUxMQkFDSyhwcm92aXNpb25hbExvYWRGYWlsZWRDYWxsYmFjayksIHRoaXMpOworICAgIGdfc2ln
bmFsX2Nvbm5lY3QoY2xpZW50LCAibG9hZC1jb21taXR0ZWQiLCBHX0NBTExCQUNLKGxvYWRDb21t
aXR0ZWRDYWxsYmFjayksIHRoaXMpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QoY2xpZW50LCAibG9h
ZC1maW5pc2hlZCIsIEdfQ0FMTEJBQ0sobG9hZEZpbmlzaGVkQ2FsbGJhY2spLCB0aGlzKTsKKyAg
ICBnX3NpZ25hbF9jb25uZWN0KGNsaWVudCwgImxvYWQtZmFpbGVkIiwgR19DQUxMQkFDSyhsb2Fk
RmFpbGVkQ2FsbGJhY2spLCB0aGlzKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KGNsaWVudCwgIm5v
dGlmeTo6ZXN0aW1hdGVkLXByb2dyZXNzIiwgR19DQUxMQkFDSyhlc3RpbWF0ZWRQcm9ncmVzc0No
YW5nZWRDYWxsYmFjayksIHRoaXMpOworfQorCitMb2FkVHJhY2tpbmdUZXN0Ojp+TG9hZFRyYWNr
aW5nVGVzdCgpCit7Cit9CisKK3ZvaWQgTG9hZFRyYWNraW5nVGVzdDo6d2FpdFVudGlsTG9hZEZp
bmlzaGVkKCkKK3sKKyAgICBtX2VzdGltYXRlZFByb2dyZXNzID0gMDsKKyAgICBtX3J1bkxvYWRV
bnRpbENvbXBsZXRpb24gPSB0cnVlOworICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsK
K30KKwordm9pZCBMb2FkVHJhY2tpbmdUZXN0Ojpwcm92aXNpb25hbExvYWRTdGFydGVkKFdlYktp
dFdlYkxvYWRlckNsaWVudCogY2xpZW50KQoreworICAgIG1fbG9hZEV2ZW50cy5hcHBlbmQoUHJv
dmlzaW9uYWxMb2FkU3RhcnRlZCk7Cit9CisKK3ZvaWQgTG9hZFRyYWNraW5nVGVzdDo6cHJvdmlz
aW9uYWxMb2FkUmVjZWl2ZWRTZXJ2ZXJSZWRpcmVjdChXZWJLaXRXZWJMb2FkZXJDbGllbnQgKmNs
aWVudCkKK3sKKyAgICBtX2xvYWRFdmVudHMuYXBwZW5kKFByb3Zpc2lvbmFsTG9hZFJlY2VpdmVk
U2VydmVyUmVkaXJlY3QpOworfQorCit2b2lkIExvYWRUcmFja2luZ1Rlc3Q6OnByb3Zpc2lvbmFs
TG9hZEZhaWxlZChXZWJLaXRXZWJMb2FkZXJDbGllbnQgKmNsaWVudCwgY29uc3QgZ2NoYXIgKmZh
aWxpbmdVUkksIEdFcnJvciAqZXJyb3IpCit7CisgICAgbV9sb2FkRXZlbnRzLmFwcGVuZChQcm92
aXNpb25hbExvYWRGYWlsZWQpOworICAgIGlmIChtX3J1bkxvYWRVbnRpbENvbXBsZXRpb24pCisg
ICAgICAgIGdfbWFpbl9sb29wX3F1aXQobV9tYWluTG9vcCk7Cit9CisKK3ZvaWQgTG9hZFRyYWNr
aW5nVGVzdDo6bG9hZENvbW1pdHRlZChXZWJLaXRXZWJMb2FkZXJDbGllbnQgKmNsaWVudCkKK3sK
KyAgICBtX2xvYWRFdmVudHMuYXBwZW5kKExvYWRDb21taXR0ZWQpOworfQorCit2b2lkIExvYWRU
cmFja2luZ1Rlc3Q6OmxvYWRGaW5pc2hlZChXZWJLaXRXZWJMb2FkZXJDbGllbnQgKmNsaWVudCkK
K3sKKyAgICBtX2xvYWRFdmVudHMuYXBwZW5kKExvYWRGaW5pc2hlZCk7CisgICAgaWYgKG1fcnVu
TG9hZFVudGlsQ29tcGxldGlvbikKKyAgICAgICAgZ19tYWluX2xvb3BfcXVpdChtX21haW5Mb29w
KTsKK30KKwordm9pZCBMb2FkVHJhY2tpbmdUZXN0Ojpsb2FkRmFpbGVkKFdlYktpdFdlYkxvYWRl
ckNsaWVudCAqY2xpZW50LCBjb25zdCBnY2hhciAqZmFpbGluZ1VSSSwgR0Vycm9yICplcnJvcikK
K3sKKyAgICBtX2xvYWRFdmVudHMuYXBwZW5kKExvYWRGYWlsZWQpOworICAgIGlmIChtX3J1bkxv
YWRVbnRpbENvbXBsZXRpb24pCisgICAgICAgIGdfbWFpbl9sb29wX3F1aXQobV9tYWluTG9vcCk7
Cit9CisKK3ZvaWQgTG9hZFRyYWNraW5nVGVzdDo6ZXN0aW1hdGVkUHJvZ3Jlc3NDaGFuZ2VkKCkK
K3sKKyAgICBXZWJLaXRXZWJMb2FkZXJDbGllbnQqIGNsaWVudCA9IHdlYmtpdF93ZWJfdmlld19n
ZXRfbG9hZGVyX2NsaWVudChtX3dlYlZpZXcpOworICAgIGRvdWJsZSBwcm9ncmVzcyA9IHdlYmtp
dF93ZWJfbG9hZGVyX2NsaWVudF9nZXRfZXN0aW1hdGVkX3Byb2dyZXNzKGNsaWVudCk7CisgICAg
Z19hc3NlcnRfY21wZmxvYXQobV9lc3RpbWF0ZWRQcm9ncmVzcywgPCwgcHJvZ3Jlc3MpOworICAg
IG1fZXN0aW1hdGVkUHJvZ3Jlc3MgPSBwcm9ncmVzczsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0xvYWRUcmFja2luZ1Rlc3QuaCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0xvYWRUcmFja2luZ1Rlc3QuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi45OGZmMjExYTY1NTY0ZTljYTI2N2VhZTUyZTUxZGJjNjlhMzQ4OGQ1Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvTG9hZFRy
YWNraW5nVGVzdC5oCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEg
SWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKi8KKworI2lmbmRlZiBMb2FkVHJhY2tpbmdUZXN0X2gKKyNkZWZpbmUgTG9hZFRyYWNr
aW5nVGVzdF9oCisKKyNpbmNsdWRlICJUZXN0TWFpbi5oIgorI2luY2x1ZGUgIldlYlZpZXdUZXN0
LmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCitjbGFzcyBMb2FkVHJhY2tpbmdUZXN0IDog
cHVibGljIFdlYlZpZXdUZXN0IHsKK3B1YmxpYzoKKyAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJF
KExvYWRUcmFja2luZ1Rlc3QpOworICAgIExvYWRUcmFja2luZ1Rlc3QoKTsKKyAgICB2aXJ0dWFs
IH5Mb2FkVHJhY2tpbmdUZXN0KCk7CisgICAgdm9pZCB3YWl0VW50aWxMb2FkRmluaXNoZWQoKTsK
KworICAgIHZpcnR1YWwgdm9pZCBwcm92aXNpb25hbExvYWRTdGFydGVkKFdlYktpdFdlYkxvYWRl
ckNsaWVudCopOworICAgIHZpcnR1YWwgdm9pZCBwcm92aXNpb25hbExvYWRSZWNlaXZlZFNlcnZl
clJlZGlyZWN0KFdlYktpdFdlYkxvYWRlckNsaWVudCopOworICAgIHZpcnR1YWwgdm9pZCBwcm92
aXNpb25hbExvYWRGYWlsZWQoV2ViS2l0V2ViTG9hZGVyQ2xpZW50KiwgY29uc3QgZ2NoYXIqIGZh
aWxpbmdVUkksIEdFcnJvciopOworICAgIHZpcnR1YWwgdm9pZCBsb2FkQ29tbWl0dGVkKFdlYktp
dFdlYkxvYWRlckNsaWVudCopOworICAgIHZpcnR1YWwgdm9pZCBsb2FkRmluaXNoZWQoV2ViS2l0
V2ViTG9hZGVyQ2xpZW50Kik7CisgICAgdmlydHVhbCB2b2lkIGxvYWRGYWlsZWQoV2ViS2l0V2Vi
TG9hZGVyQ2xpZW50KiwgY29uc3QgY2hhciogZmFpbGluZ1VSSSwgR0Vycm9yKik7CisgICAgdmly
dHVhbCB2b2lkIGVzdGltYXRlZFByb2dyZXNzQ2hhbmdlZCgpOworCisgICAgZW51bSBMb2FkRXZl
bnRzIHsKKyAgICAgICAgUHJvdmlzaW9uYWxMb2FkU3RhcnRlZCwKKyAgICAgICAgUHJvdmlzaW9u
YWxMb2FkUmVjZWl2ZWRTZXJ2ZXJSZWRpcmVjdCwKKyAgICAgICAgUHJvdmlzaW9uYWxMb2FkRmFp
bGVkLAorICAgICAgICBMb2FkQ29tbWl0dGVkLAorICAgICAgICBMb2FkRmluaXNoZWQsCisgICAg
ICAgIExvYWRGYWlsZWQKKyAgICB9OworICAgIGJvb2wgbV9ydW5Mb2FkVW50aWxDb21wbGV0aW9u
OworICAgIFZlY3RvcjxMb2FkRXZlbnRzPiBtX2xvYWRFdmVudHM7CisgICAgZmxvYXQgbV9lc3Rp
bWF0ZWRQcm9ncmVzczsKK307CisKKyNlbmRpZiAvLyBMb2FkVHJhY2tpbmdUZXN0X2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RNYWluLmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RNYWluLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5kNjlhOTYwMjZkOTRhZTczYTY1ZDQwZjljNDczNDRiZWQzMmUxOThlCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVz
dE1haW4uY3BwCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdh
bGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RNYWluLmgiCisKKyNp
bmNsdWRlIDxndGsvZ3RrLmg+CisKK3ZvaWQgYmVmb3JlQWxsKCk7Cit2b2lkIGFmdGVyQWxsKCk7
CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKK3sKKyAgICBnX3RocmVhZF9pbml0
KDApOworICAgIGd0a190ZXN0X2luaXQoJmFyZ2MsICZhcmd2LCAwKTsKKyAgICBnX3NldGVudigi
V0VCS0lUX0VYRUNfUEFUSCIsIFdFQktJVF9FWEVDX1BBVEgsIEZBTFNFKTsKKyAgICBnX3Rlc3Rf
YnVnX2Jhc2UoImh0dHBzOi8vYnVncy53ZWJraXQub3JnLyIpOworCisgICAgYmVmb3JlQWxsKCk7
CisgICAgaW50IHJldHVyblZhbHVlID0gZ190ZXN0X3J1bigpOworICAgIGFmdGVyQWxsKCk7CisK
KyAgICByZXR1cm4gcmV0dXJuVmFsdWU7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0TWFpbi5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvdGVzdHMvVGVzdE1haW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yYWFjMThjNTdmODk1NDhh
YjM2Yjk1YThiNTRiNTVkZDM2MmU1NGZhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdE1haW4uaApAQCAtMCwwICsxLDQ3IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgVGVzdE1haW5faAor
I2RlZmluZSBUZXN0TWFpbl9oCisKKyNpbmNsdWRlIDxnbGliLmg+CisjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvR093blB0ci5oPgorCisjZGVmaW5lIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoQ2xh
c3NOYW1lKSBcCisgICAgc3RhdGljIHZvaWQgc2V0VXAoQ2xhc3NOYW1lKiBmaXh0dXJlLCBnY29u
c3Rwb2ludGVyIGRhdGEpIFwKKyAgICB7IFwKKyAgICAgICAgbmV3IChmaXh0dXJlKSBDbGFzc05h
bWU7IFwKKyAgICB9IFwKKyAgICBzdGF0aWMgdm9pZCB0ZWFyRG93bihDbGFzc05hbWUqIGZpeHR1
cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkgXAorICAgIHsgXAorICAgICAgICBmaXh0dXJlLT5+Q2xh
c3NOYW1lKCk7IFwKKyAgICB9IFwKKyAgICBzdGF0aWMgdm9pZCBhZGQoY29uc3QgY2hhciogc3Vp
dGVOYW1lLCBjb25zdCBjaGFyKiB0ZXN0TmFtZSwgdm9pZCAoKnRlc3RGdW5jKShDbGFzc05hbWUq
LCBjb25zdCB2b2lkKikpIFwKKyAgICB7IFwKKyAgICAgICAgR093blB0cjxnY2hhcj4gdGVzdFBh
dGgoZ19zdHJkdXBfcHJpbnRmKCIvd2Via2l0Mi8lcy8lcyIsIHN1aXRlTmFtZSwgdGVzdE5hbWUp
KTsgXAorICAgICAgICBnX3Rlc3RfYWRkKHRlc3RQYXRoLmdldCgpLCBDbGFzc05hbWUsIDAsIENs
YXNzTmFtZTo6c2V0VXAsIHRlc3RGdW5jLCBDbGFzc05hbWU6OnRlYXJEb3duKTsgXAorICAgIH0K
KworY2xhc3MgVGVzdAoreworcHVibGljOgorICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoVGVz
dCk7Cit9OworCisjZW5kaWYgLy8gVGVzdE1haW5faApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdFdlYkNvbnRleHQuY3BwIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdFdlYkNvbnRleHQu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmFkN2NlNWI4Yjc4Njc5MDQ5Y2Q3MzEyOGMxYTAxZTEyZWFkMzUyMWEK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0
cy9UZXN0V2ViS2l0V2ViQ29udGV4dC5jcHAKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
dmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVk
ZSAiVGVzdE1haW4uaCIKKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8d2Via2l0Mi93
ZWJraXQyLmg+CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJDb250ZXh0RGVmYXVsdChUZXN0KiB0ZXN0
LCBnY29uc3Rwb2ludGVyKQoreworICAgIC8vIENoZWNrIHRoZXJlJ3MgYSBzaW5nbGUgaW5zdGFu
Y2Ugb2YgdGhlIGRlZmF1bHQgd2ViIGNvbnRleHQuCisgICAgZ19hc3NlcnQod2Via2l0X3dlYl9j
b250ZXh0X2dldF9kZWZhdWx0KCkgPT0gd2Via2l0X3dlYl9jb250ZXh0X2dldF9kZWZhdWx0KCkp
OworfQorCit2b2lkIGJlZm9yZUFsbCgpCit7CisgICAgVGVzdDo6YWRkKCJXZWJLaXRXZWJDb250
ZXh0IiwgImRlZmF1bHQtY29udGV4dCIsIHRlc3RXZWJDb250ZXh0RGVmYXVsdCk7Cit9CisKK3Zv
aWQgYWZ0ZXJBbGwoKQoreworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdFdlYkxvYWRlckNsaWVudC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0V2ViTG9hZGVyQ2xpZW50LmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5lNWJiZWViMGJkY2VhN2I1ZDNhYWY2NGZlNWQ4MTE5NDlmMGUyNmIxCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMv
VGVzdFdlYktpdFdlYkxvYWRlckNsaWVudC5jcHAKQEAgLTAsMCArMSwxMzkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDksIDIwMTAgR3VzdGF2byBOb3JvbmhhIFNpbHZhCisgKiBDb3B5cmln
aHQgKEMpIDIwMDksIDIwMTEgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5j
bHVkZSAiTG9hZFRyYWNraW5nVGVzdC5oIgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNpbmNsdWRl
IDxsaWJzb3VwL3NvdXAuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK3N0YXRp
YyBTb3VwVVJJKiBrQmFzZVVSSSA9IDA7CitzdGF0aWMgU291cFNlcnZlcioga1NvdXBTZXJ2ZXIg
PSAwOworCitzdGF0aWMgQ1N0cmluZyBnZXRVUklGb3JQYXRoKGNvbnN0IGNoYXIqIHBhdGgpCit7
CisgICAgU291cFVSSSogdXJpID0gc291cF91cmlfbmV3X3dpdGhfYmFzZShrQmFzZVVSSSwgcGF0
aCk7CisgICAgR093blB0cjxnY2hhcj4gdXJpU3RyaW5nKHNvdXBfdXJpX3RvX3N0cmluZyh1cmks
IEZBTFNFKSk7CisgICAgc291cF91cmlfZnJlZSh1cmkpOworICAgIHJldHVybiB1cmlTdHJpbmcu
Z2V0KCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RMb2FkaW5nU3RhdHVzKExvYWRUcmFja2luZ1Rl
c3QqIHRlc3QsIGdjb25zdHBvaW50ZXIgZGF0YSkKK3sKKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9h
ZF91cmkodGVzdC0+bV93ZWJWaWV3LCBnZXRVUklGb3JQYXRoKCIvIikuZGF0YSgpKTsKKyAgICB0
ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIFZlY3RvcjxMb2FkVHJhY2tpbmdU
ZXN0OjpMb2FkRXZlbnRzPiBldmVudHMgPSB0ZXN0LT5tX2xvYWRFdmVudHM7CisgICAgZ19hc3Nl
cnRfY21waW50KGV2ZW50cy5zaXplKCksID09LCA0KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZl
bnRzWzBdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6UHJvdmlzaW9uYWxMb2FkU3RhcnRlZCk7Cisg
ICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1sxXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OlByb3Zp
c2lvbmFsTG9hZFJlY2VpdmVkU2VydmVyUmVkaXJlY3QpOworICAgIGdfYXNzZXJ0X2NtcGludChl
dmVudHNbMl0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpMb2FkQ29tbWl0dGVkKTsKKyAgICBnX2Fz
c2VydF9jbXBpbnQoZXZlbnRzWzNdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6TG9hZEZpbmlzaGVk
KTsKK30KKworc3RhdGljIHZvaWQgdGVzdExvYWRpbmdFcnJvcihMb2FkVHJhY2tpbmdUZXN0KiB0
ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3VyaSh0ZXN0
LT5tX3dlYlZpZXcsIGdldFVSSUZvclBhdGgoIi90ZXN0X2xvYWRfZXJyb3IiKS5kYXRhKCkpOwor
ICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgVmVjdG9yPExvYWRUcmFj
a2luZ1Rlc3Q6OkxvYWRFdmVudHM+IGV2ZW50cyA9IHRlc3QtPm1fbG9hZEV2ZW50czsKKyAgICBn
X2Fzc2VydF9jbXBpbnQoZXZlbnRzLnNpemUoKSwgPT0sIDIpOworICAgIGdfYXNzZXJ0X2NtcGlu
dChldmVudHNbMF0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpQcm92aXNpb25hbExvYWRTdGFydGVk
KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzFdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6
UHJvdmlzaW9uYWxMb2FkRmFpbGVkKTsKK30KKworc3RhdGljIHZvaWQgdGVzdExvYWRBbHRlcm5h
dGVDb250ZW50KExvYWRUcmFja2luZ1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAg
d2Via2l0X3dlYl92aWV3X2xvYWRfYWx0ZXJuYXRlX2h0bWwodGVzdC0+bV93ZWJWaWV3LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8aHRtbD48Ym9keT5BbHRlcm5h
dGUgQ29udGVudDwvYm9keT48L2h0bWw+IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAwLCBnZXRVUklGb3JQYXRoKCIvYWx0ZXJuYXRlIikuZGF0YSgpKTsKKyAgICB0
ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIFZlY3RvcjxMb2FkVHJhY2tpbmdU
ZXN0OjpMb2FkRXZlbnRzPiBldmVudHMgPSB0ZXN0LT5tX2xvYWRFdmVudHM7CisgICAgZ19hc3Nl
cnRfY21waW50KGV2ZW50cy5zaXplKCksID09LCAzKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZl
bnRzWzBdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6UHJvdmlzaW9uYWxMb2FkU3RhcnRlZCk7Cisg
ICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1sxXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRD
b21taXR0ZWQpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMl0sID09LCBMb2FkVHJhY2tp
bmdUZXN0OjpMb2FkRmluaXNoZWQpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0TG9hZFByb2dyZXNz
KExvYWRUcmFja2luZ1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgd2Via2l0X3dl
Yl92aWV3X2xvYWRfdXJpKHRlc3QtPm1fd2ViVmlldywgZ2V0VVJJRm9yUGF0aCgiLyIpLmRhdGEo
KSk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisgICAgZ19hc3NlcnRfY21w
ZmxvYXQodGVzdC0+bV9lc3RpbWF0ZWRQcm9ncmVzcywgPT0sIDEpOworfQorCitzdGF0aWMgdm9p
ZCBzZXJ2ZXJDYWxsYmFjayhTb3VwU2VydmVyKiBzZXJ2ZXIsIFNvdXBNZXNzYWdlKiBtZXNzYWdl
LCBjb25zdCBjaGFyKiBwYXRoLCBHSGFzaFRhYmxlKiwgU291cENsaWVudENvbnRleHQqLCBncG9p
bnRlcikKK3sKKworICAgIC8vIFRoaXMgc3RyaW5nIGhhcyB0byBiZSByYXRoZXIgYmlnIGJlY2F1
c2Ugb2YgdGhlIGNhbmNlbGxlZCB0ZXN0IC0gaXQKKyAgICAvLyBsb29rcyBsaWtlIHNvdXAgcmVm
dXNlcyB0byBzZW5kIG9yIHJlY2VpdmUgYSBzbWFsbCBjaHVuayBvZiBkYXRhLgorICAgIHN0YXRp
YyBjb25zdCBjaGFyKiByZXNwb25zZVN0cmluZyA9ICI8aHRtbD48Ym9keT5UZXN0aW5nIVRlc3Rp
bmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nISIKKyAgICAgICAgIlRl
c3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVz
dGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nISIKKyAgICAgICAgIlRlc3Rpbmch
VGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFU
ZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nISIKKyAgICAgICAgIlRlc3RpbmchVGVzdGlu
ZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5n
IVRlc3RpbmchVGVzdGluZyFUZXN0aW5nISIKKyAgICAgICAgIlRlc3RpbmchVGVzdGluZyFUZXN0
aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3Rp
bmchVGVzdGluZyFUZXN0aW5nISIKKyAgICAgICAgIlRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRl
c3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVz
dGluZyFUZXN0aW5nISIKKyAgICAgICAgIlRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3Rpbmch
VGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFU
ZXN0aW5nISIKKyAgICAgICAgIlRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGlu
ZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5n
ITwvYm9keT48L2h0bWw+IjsKKworICAgIGlmIChtZXNzYWdlLT5tZXRob2QgIT0gU09VUF9NRVRI
T0RfR0VUKSB7CisgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBf
U1RBVFVTX05PVF9JTVBMRU1FTlRFRCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBz
b3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19PSyk7CisKKyAgICBp
ZiAoZ19zdHJfZXF1YWwocGF0aCwgIi8iKSkgeworICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0
YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19NT1ZFRF9QRVJNQU5FTlRMWSk7CisgICAgICAgIHNv
dXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9oZWFkZXJzLCAiTG9j
YXRpb24iLCAiL3Rlc3RfbG9hZGluZ19zdGF0dXMiKTsKKyAgICB9IGVsc2UgaWYgKGdfc3RyX2Vx
dWFsKHBhdGgsICIvdGVzdF9sb2FkaW5nX3N0YXR1cyIpIHx8IGdfc3RyX2VxdWFsKHBhdGgsICIv
dGVzdF9sb2FkaW5nX3N0YXR1czIiKSkKKyAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5k
KG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1NUQVRJQywgcmVzcG9uc2VTdHJp
bmcsIHN0cmxlbihyZXNwb25zZVN0cmluZykpOworICAgIGVsc2UgaWYgKGdfc3RyX2VxdWFsKHBh
dGgsICIvdGVzdF9sb2FkX2Vycm9yIikpIHsKKyAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0
dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfQ0FOVF9DT05ORUNUKTsKKyAgICB9IGVsc2UgaWYgKGdf
c3RyX2VxdWFsKHBhdGgsICIvdGVzdF9sb2FkaW5nX2NhbmNlbGxlZCIpKSB7CisgICAgICAgIHNv
dXBfbWVzc2FnZV9oZWFkZXJzX3NldF9lbmNvZGluZyhtZXNzYWdlLT5yZXNwb25zZV9oZWFkZXJz
LCBTT1VQX0VOQ09ESU5HX0NIVU5LRUQpOworICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBl
bmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfU1RBVElDLCByZXNwb25zZVN0
cmluZywgc3RybGVuKHJlc3BvbnNlU3RyaW5nKSk7CisgICAgICAgIHNvdXBfc2VydmVyX3VucGF1
c2VfbWVzc2FnZShzZXJ2ZXIsIG1lc3NhZ2UpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgc291cF9tZXNzYWdlX2JvZHlfY29tcGxldGUobWVzc2FnZS0+cmVzcG9uc2VfYm9keSk7Cit9
CisKK3ZvaWQgYmVmb3JlQWxsKCkKK3sKKyAgICBrQmFzZVVSSSA9IHNvdXBfdXJpX25ldygiaHR0
cDovLzEyNy4wLjAuMS8iKTsKKworICAgIGtTb3VwU2VydmVyID0gc291cF9zZXJ2ZXJfbmV3KFNP
VVBfU0VSVkVSX1BPUlQsIDAsIE5VTEwpOworICAgIHNvdXBfdXJpX3NldF9wb3J0KGtCYXNlVVJJ
LCBzb3VwX3NlcnZlcl9nZXRfcG9ydChrU291cFNlcnZlcikpOworICAgIHNvdXBfc2VydmVyX3J1
bl9hc3luYyhrU291cFNlcnZlcik7CisgICAgc291cF9zZXJ2ZXJfYWRkX2hhbmRsZXIoa1NvdXBT
ZXJ2ZXIsIDAsIHNlcnZlckNhbGxiYWNrLCAwLCAwKTsKKworICAgIExvYWRUcmFja2luZ1Rlc3Q6
OmFkZCgiV2ViS2l0V2ViTG9hZGVyQ2xpZW50IiwgImxvYWRpbmctc3RhdHVzIiwgdGVzdExvYWRp
bmdTdGF0dXMpOworICAgIExvYWRUcmFja2luZ1Rlc3Q6OmFkZCgiV2ViS2l0V2ViTG9hZGVyQ2xp
ZW50IiwgImxvYWRpbmctZXJyb3IiLCB0ZXN0TG9hZGluZ0Vycm9yKTsKKyAgICBMb2FkVHJhY2tp
bmdUZXN0OjphZGQoIldlYktpdFdlYkxvYWRlckNsaWVudCIsICJsb2FkLWFsdGVybmF0ZS1jb250
ZW50IiwgdGVzdExvYWRBbHRlcm5hdGVDb250ZW50KTsKKyAgICBMb2FkVHJhY2tpbmdUZXN0Ojph
ZGQoIldlYktpdFdlYkxvYWRlckNsaWVudCIsICJwcm9ncmVzcyIsIHRlc3RMb2FkUHJvZ3Jlc3Mp
OworfQorCit2b2lkIGFmdGVyQWxsKCkKK3sKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRXZWJWaWV3LmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRXZWJWaWV3LmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5jNzJjNjRmZmY3YzljMDQzNWY1MDg1MThjNTBlODRkNTVhOTAwM2ZiCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdl
YktpdFdlYlZpZXcuY3BwCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiwx
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJWaWV3VGVz
dC5oIgorCitzdGF0aWMgdm9pZCB0ZXN0V2ViVmlld0RlZmF1bHRDb250ZXh0KFdlYlZpZXdUZXN0
KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfdmlld19n
ZXRfY29udGV4dCh0ZXN0LT5tX3dlYlZpZXcpID09IHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZGVm
YXVsdCgpKTsKK30KKwordm9pZCBiZWZvcmVBbGwoKQoreworICAgIFdlYlZpZXdUZXN0OjphZGQo
IldlYktpdFdlYlZpZXciLCAiZGVmYXVsdC1jb250ZXh0IiwgdGVzdFdlYlZpZXdEZWZhdWx0Q29u
dGV4dCk7Cit9CisKK3ZvaWQgYWZ0ZXJBbGwoKQoreworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViVmlld1Rlc3QuY3BwIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViVmlld1Rlc3QuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjMyYjdmYzVkYjg2Y2MzNmM2NTkxMGIyODQyZGI0NWY4NjU4NzZjMWUKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJWaWV3VGVzdC5j
cHAKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5M
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViVmlld1Rlc3QuaCIKKworV2ViVmll
d1Rlc3Q6OldlYlZpZXdUZXN0KCkKKyAgICA6IG1fd2ViVmlldyhXRUJLSVRfV0VCX1ZJRVcoZ19v
YmplY3RfcmVmX3Npbmsod2Via2l0X3dlYl92aWV3X25ldygpKSkpCisgICAgLCBtX21haW5Mb29w
KGdfbWFpbl9sb29wX25ldygwLCBUUlVFKSkKK3sKK30KKworV2ViVmlld1Rlc3Q6On5XZWJWaWV3
VGVzdCgpCit7CisgICAgZ19vYmplY3RfdW5yZWYobV93ZWJWaWV3KTsKKyAgICBnX21haW5fbG9v
cF91bnJlZihtX21haW5Mb29wKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlZpZXdUZXN0LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay90ZXN0cy9XZWJWaWV3VGVzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU4MTgwNjY3NDdlYzYz
OGM0ZGZhZjFhOTI3YmE0ZTcwMDc3MmQwY2QKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJWaWV3VGVzdC5oCkBAIC0wLDAgKzEsMzYg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJWaWV3
VGVzdF9oCisjZGVmaW5lIFdlYlZpZXdUZXN0X2gKKworI2luY2x1ZGUgIlRlc3RNYWluLmgiCisj
aW5jbHVkZSA8d2Via2l0Mi93ZWJraXQyLmg+CisKK2NsYXNzIFdlYlZpZXdUZXN0IHsKK3B1Ymxp
YzoKKyAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKFdlYlZpZXdUZXN0KTsKKyAgICBXZWJWaWV3
VGVzdCgpOworICAgIHZpcnR1YWwgfldlYlZpZXdUZXN0KCk7CisKKyAgICBXZWJLaXRXZWJWaWV3
KiBtX3dlYlZpZXc7CisgICAgR01haW5Mb29wKiBtX21haW5Mb29wOworfTsKKworI2VuZGlmIC8v
IFdlYlZpZXdUZXN0X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL3Rlc3RzL3Rlc3Rsb2FkaW5nLmMgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay90ZXN0cy90ZXN0bG9hZGluZy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ODEz
YjIzYWYyMWZiMGZjYTg3NzUwMzc5YjNjZmY5ODNhM2I5MjE3Li4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL3Rlc3RzL3Rlc3Rsb2FkaW5nLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMjkgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCBHdXN0YXZvIE5vcm9uaGEgU2lsdmEKLSAq
IENvcHlyaWdodCAoQykgMjAwOSwgMjAxMSBJZ2FsaWEgUy5MLgotICoKLSAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
Ci0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0g
KgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0g
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSA8Z3RrL2d0ay5o
PgotI2luY2x1ZGUgPGxpYnNvdXAvc291cC5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1
ZGUgPHdlYmtpdDIvd2Via2l0Mi5oPgotCi0vKiBUaGlzIHN0cmluZyBoYXMgdG8gYmUgcmF0aGVy
IGJpZyBiZWNhdXNlIG9mIHRoZSBjYW5jZWxsZWQgdGVzdCAtIGl0Ci0gKiBsb29rcyBsaWtlIHNv
dXAgcmVmdXNlcyB0byBzZW5kIG9yIHJlY2VpdmUgYSB0b28gc21hbGwgY2h1bmsgKi8KLSNkZWZp
bmUgSFRNTF9TVFJJTkcgIjxodG1sPjxib2R5PlRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3Rp
bmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGlu
ZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5n
IVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3Rpbmch
VGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFU
ZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRl
c3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVz
dGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0
aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3Rp
bmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGlu
ZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5n
IVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3Rpbmch
VGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyE8L2JvZHk+PC9odG1sPiIKLQotU291cFVS
SSAqYmFzZVVSSTsKLQotLyogRm9yIHJlYWwgcmVxdWVzdCB0ZXN0aW5nICovCi1zdGF0aWMgdm9p
ZCBzZXJ2ZXJDYWxsYmFjayhTb3VwU2VydmVyKiBzZXJ2ZXIsIFNvdXBNZXNzYWdlKiBtc2csIGNv
bnN0IGNoYXIqIHBhdGgsIEdIYXNoVGFibGUqIHF1ZXJ5LCBTb3VwQ2xpZW50Q29udGV4dCogY29u
dGV4dCwgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgICBpZiAobXNnLT5tZXRob2QgIT0gU09VUF9NRVRI
T0RfR0VUKSB7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1zZywgU09VUF9TVEFU
VVNfTk9UX0lNUExFTUVOVEVEKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHNvdXBf
bWVzc2FnZV9zZXRfc3RhdHVzKG1zZywgU09VUF9TVEFUVVNfT0spOwotCi0gICAgaWYgKGdfc3Ry
X2VxdWFsKHBhdGgsICIvIikpIHsKLSAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobXNn
LCBTT1VQX1NUQVRVU19NT1ZFRF9QRVJNQU5FTlRMWSk7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9o
ZWFkZXJzX2FwcGVuZChtc2ctPnJlc3BvbnNlX2hlYWRlcnMsICJMb2NhdGlvbiIsICIvdGVzdF9s
b2FkaW5nX3N0YXR1cyIpOwotICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi90ZXN0
X2xvYWRpbmdfc3RhdHVzIikgfHwgZ19zdHJfZXF1YWwocGF0aCwgIi90ZXN0X2xvYWRpbmdfc3Rh
dHVzMiIpKQotICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobXNnLT5yZXNwb25zZV9i
b2R5LCBTT1VQX01FTU9SWV9TVEFUSUMsIEhUTUxfU1RSSU5HLCBzdHJsZW4oSFRNTF9TVFJJTkcp
KTsKLSAgICBlbHNlIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL3Rlc3RfbG9hZF9lcnJvciIpKSB7
Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1zZywgU09VUF9TVEFUVVNfQ0FOVF9D
T05ORUNUKTsKLSAgICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvdGVzdF9sb2FkaW5n
X2NhbmNlbGxlZCIpKSB7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX3NldF9lbmNvZGlu
Zyhtc2ctPnJlc3BvbnNlX2hlYWRlcnMsIFNPVVBfRU5DT0RJTkdfQ0hVTktFRCk7Ci0gICAgICAg
IHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtc2ctPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZ
X1NUQVRJQywgSFRNTF9TVFJJTkcsIHN0cmxlbihIVE1MX1NUUklORykpOwotICAgICAgICBzb3Vw
X3NlcnZlcl91bnBhdXNlX21lc3NhZ2Uoc2VydmVyLCBtc2cpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgc291cF9tZXNzYWdlX2JvZHlfY29tcGxldGUobXNnLT5yZXNwb25zZV9ib2R5
KTsKLX0KLQotdHlwZWRlZiBzdHJ1Y3QgewotICAgIFdlYktpdFdlYlZpZXcgKndlYlZpZXc7Ci0g
ICAgR01haW5Mb29wICpsb29wOwotICAgIGdib29sZWFuIGhhc0JlZW5Qcm92aXNpb25hbDsKLSAg
ICBnYm9vbGVhbiBoYXNCZWVuUmVkaXJlY3Q7Ci0gICAgZ2Jvb2xlYW4gaGFzQmVlbkNvbW1pdHRl
ZDsKLSAgICBnYm9vbGVhbiBoYXNCZWVuRmluaXNoZWQ7Ci0gICAgZ2Jvb2xlYW4gaGFzQmVlbkZh
aWxlZDsKLSAgICBnZG91YmxlIHByb2dyZXNzOwotfSBXZWJMb2FkaW5nRml4dHVyZTsKLQotc3Rh
dGljIHZvaWQgd2ViTG9hZGluZ0ZpeHR1cmVTZXR1cChXZWJMb2FkaW5nRml4dHVyZSAqZml4dHVy
ZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQotewotICAgIGZpeHR1cmUtPndlYlZpZXcgPSBXRUJLSVRf
V0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKLSAgICBmaXh0dXJlLT5sb29wID0gZ19t
YWluX2xvb3BfbmV3KE5VTEwsIFRSVUUpOwotICAgIGdfb2JqZWN0X3JlZl9zaW5rKGZpeHR1cmUt
PndlYlZpZXcpOwotICAgIGZpeHR1cmUtPmhhc0JlZW5Qcm92aXNpb25hbCA9IEZBTFNFOwotICAg
IGZpeHR1cmUtPmhhc0JlZW5SZWRpcmVjdCA9IEZBTFNFOwotICAgIGZpeHR1cmUtPmhhc0JlZW5D
b21taXR0ZWQgPSBGQUxTRTsKLSAgICBmaXh0dXJlLT5oYXNCZWVuRmluaXNoZWQgPSBGQUxTRTsK
LSAgICBmaXh0dXJlLT5oYXNCZWVuRmFpbGVkID0gRkFMU0U7Ci0gICAgZml4dHVyZS0+cHJvZ3Jl
c3MgPSAwOwotfQotCi1zdGF0aWMgdm9pZCB3ZWJMb2FkaW5nRml4dHVyZVRlYXJkb3duKFdlYkxv
YWRpbmdGaXh0dXJlICpmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgZ19vYmpl
Y3RfdW5yZWYoZml4dHVyZS0+d2ViVmlldyk7Ci0gICAgZ19tYWluX2xvb3BfdW5yZWYoZml4dHVy
ZS0+bG9vcCk7Ci19Ci0KLXN0YXRpYyBjaGFyICpnZXRVUklGb3JQYXRoKGNvbnN0IGNoYXIqIHBh
dGgpCi17Ci0gICAgU291cFVSSSAqdXJpOwotICAgIGNoYXIgKnVyaVN0cmluZzsKLQotICAgIHVy
aSA9IHNvdXBfdXJpX25ld193aXRoX2Jhc2UoYmFzZVVSSSwgcGF0aCk7Ci0gICAgdXJpU3RyaW5n
ID0gc291cF91cmlfdG9fc3RyaW5nKHVyaSwgRkFMU0UpOwotICAgIHNvdXBfdXJpX2ZyZWUodXJp
KTsKLQotICAgIHJldHVybiB1cmlTdHJpbmc7Ci19Ci0KLS8qIExvYWQgU3RhdHVzICovCi1zdGF0
aWMgZ2Jvb2xlYW4gbG9hZFN0YXR1c1Byb3Zpc2lvbmFsTG9hZFN0YXJ0ZWQoV2ViS2l0V2ViTG9h
ZGVyQ2xpZW50ICpjbGllbnQsIFdlYkxvYWRpbmdGaXh0dXJlICpmaXh0dXJlKQotewotICAgIGdf
YXNzZXJ0KCFmaXh0dXJlLT5oYXNCZWVuUHJvdmlzaW9uYWwpOwotICAgIGdfYXNzZXJ0KCFmaXh0
dXJlLT5oYXNCZWVuUmVkaXJlY3QpOwotICAgIGdfYXNzZXJ0KCFmaXh0dXJlLT5oYXNCZWVuQ29t
bWl0dGVkKTsKLSAgICBmaXh0dXJlLT5oYXNCZWVuUHJvdmlzaW9uYWwgPSBUUlVFOwotCi0gICAg
cmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiBsb2FkU3RhdHVzUHJvdmlzaW9uYWxM
b2FkUmVjZWl2ZWRTZXJ2ZXJSZWRpcmVjdChXZWJLaXRXZWJMb2FkZXJDbGllbnQgKmNsaWVudCwg
V2ViTG9hZGluZ0ZpeHR1cmUgKmZpeHR1cmUpCi17Ci0gICAgZ19hc3NlcnQoZml4dHVyZS0+aGFz
QmVlblByb3Zpc2lvbmFsKTsKLSAgICBnX2Fzc2VydCghZml4dHVyZS0+aGFzQmVlblJlZGlyZWN0
KTsKLSAgICBnX2Fzc2VydCghZml4dHVyZS0+aGFzQmVlbkNvbW1pdHRlZCk7Ci0gICAgZml4dHVy
ZS0+aGFzQmVlblJlZGlyZWN0ID0gVFJVRTsKLQotICAgIHJldHVybiBUUlVFOwotfQotCi1zdGF0
aWMgZ2Jvb2xlYW4gbG9hZFN0YXR1c1Byb3Zpc2lvbmFsTG9hZEZhaWxlZChXZWJLaXRXZWJMb2Fk
ZXJDbGllbnQgKmNsaWVudCwgY29uc3QgZ2NoYXIgKmZhaWxpbmdVUkksIEdFcnJvciAqZXJyb3Is
IFdlYkxvYWRpbmdGaXh0dXJlICpmaXh0dXJlKQotewotICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVk
KCk7Ci0gICAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiBsb2FkU3RhdHVzTG9h
ZENvbW1pdHRlZChXZWJLaXRXZWJMb2FkZXJDbGllbnQgKmNsaWVudCwgV2ViTG9hZGluZ0ZpeHR1
cmUgKmZpeHR1cmUpCi17Ci0gICAgZ19hc3NlcnQoZml4dHVyZS0+aGFzQmVlblByb3Zpc2lvbmFs
KTsKLSAgICBnX2Fzc2VydChmaXh0dXJlLT5oYXNCZWVuUmVkaXJlY3QpOwotICAgIGdfYXNzZXJ0
KCFmaXh0dXJlLT5oYXNCZWVuQ29tbWl0dGVkKTsKLSAgICBmaXh0dXJlLT5oYXNCZWVuQ29tbWl0
dGVkID0gVFJVRTsKLQotICAgIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gbG9h
ZFN0YXR1c0xvYWRGaW5pc2hlZChXZWJLaXRXZWJMb2FkZXJDbGllbnQgKmNsaWVudCwgV2ViTG9h
ZGluZ0ZpeHR1cmUgKmZpeHR1cmUpCi17Ci0gICAgZ19hc3NlcnQoZml4dHVyZS0+aGFzQmVlblBy
b3Zpc2lvbmFsKTsKLSAgICBnX2Fzc2VydChmaXh0dXJlLT5oYXNCZWVuUmVkaXJlY3QpOwotICAg
IGdfYXNzZXJ0KGZpeHR1cmUtPmhhc0JlZW5Db21taXR0ZWQpOwotICAgIGdfYXNzZXJ0KCFmaXh0
dXJlLT5oYXNCZWVuRmluaXNoZWQpOwotICAgIGZpeHR1cmUtPmhhc0JlZW5GaW5pc2hlZCA9IFRS
VUU7Ci0KLSAgICBnX21haW5fbG9vcF9xdWl0KGZpeHR1cmUtPmxvb3ApOwotCi0gICAgcmV0dXJu
IFRSVUU7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiBsb2FkU3RhdHVzTG9hZEZhaWxlZChXZWJLaXRX
ZWJMb2FkZXJDbGllbnQgKmNsaWVudCwgY29uc3QgZ2NoYXIgKmZhaWxpbmdVUkksIEdFcnJvciAq
ZXJyb3IsIFdlYkxvYWRpbmdGaXh0dXJlICpmaXh0dXJlKQotewotICAgIGdfYXNzZXJ0X25vdF9y
ZWFjaGVkKCk7Ci0gICAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RMb2FkaW5n
U3RhdHVzKFdlYkxvYWRpbmdGaXh0dXJlICpmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17
Ci0gICAgY2hhciAqdXJpU3RyaW5nOwotICAgIFdlYktpdFdlYkxvYWRlckNsaWVudCAqY2xpZW50
ID0gd2Via2l0X3dlYl92aWV3X2dldF9sb2FkZXJfY2xpZW50KGZpeHR1cmUtPndlYlZpZXcpOwot
Ci0gICAgZ19zaWduYWxfY29ubmVjdChjbGllbnQsICJwcm92aXNpb25hbC1sb2FkLXN0YXJ0ZWQi
LCBHX0NBTExCQUNLKGxvYWRTdGF0dXNQcm92aXNpb25hbExvYWRTdGFydGVkKSwgZml4dHVyZSk7
Ci0gICAgZ19zaWduYWxfY29ubmVjdChjbGllbnQsICJwcm92aXNpb25hbC1sb2FkLXJlY2VpdmVk
LXNlcnZlci1yZWRpcmVjdCIsIEdfQ0FMTEJBQ0sobG9hZFN0YXR1c1Byb3Zpc2lvbmFsTG9hZFJl
Y2VpdmVkU2VydmVyUmVkaXJlY3QpLCBmaXh0dXJlKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KGNs
aWVudCwgInByb3Zpc2lvbmFsLWxvYWQtZmFpbGVkIiwgR19DQUxMQkFDSyhsb2FkU3RhdHVzUHJv
dmlzaW9uYWxMb2FkRmFpbGVkKSwgZml4dHVyZSk7Ci0gICAgZ19zaWduYWxfY29ubmVjdChjbGll
bnQsICJsb2FkLWNvbW1pdHRlZCIsIEdfQ0FMTEJBQ0sobG9hZFN0YXR1c0xvYWRDb21taXR0ZWQp
LCBmaXh0dXJlKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KGNsaWVudCwgImxvYWQtZmluaXNoZWQi
LCBHX0NBTExCQUNLKGxvYWRTdGF0dXNMb2FkRmluaXNoZWQpLCBmaXh0dXJlKTsKLSAgICBnX3Np
Z25hbF9jb25uZWN0KGNsaWVudCwgImxvYWQtZmFpbGVkIiwgR19DQUxMQkFDSyhsb2FkU3RhdHVz
TG9hZEZhaWxlZCksIGZpeHR1cmUpOwotCi0gICAgdXJpU3RyaW5nID0gZ2V0VVJJRm9yUGF0aCgi
LyIpOwotICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3VyaShmaXh0dXJlLT53ZWJWaWV3LCB1cmlT
dHJpbmcpOwotICAgIGdfZnJlZSh1cmlTdHJpbmcpOwotCi0gICAgZ19tYWluX2xvb3BfcnVuKGZp
eHR1cmUtPmxvb3ApOwotCi0gICAgZ19hc3NlcnQoZml4dHVyZS0+aGFzQmVlblByb3Zpc2lvbmFs
KTsKLSAgICBnX2Fzc2VydChmaXh0dXJlLT5oYXNCZWVuUmVkaXJlY3QpOwotICAgIGdfYXNzZXJ0
KGZpeHR1cmUtPmhhc0JlZW5Db21taXR0ZWQpOwotICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmhhc0Jl
ZW5GaW5pc2hlZCk7Ci19Ci0KLS8qIExvYWQgRXJyb3IgKi8KLXN0YXRpYyBnYm9vbGVhbiBsb2Fk
RXJyb3JQcm92aXNpb25hbExvYWRTdGFydGVkKFdlYktpdFdlYkxvYWRlckNsaWVudCAqY2xpZW50
LCBXZWJMb2FkaW5nRml4dHVyZSAqZml4dHVyZSkKLXsKLSAgICBnX2Fzc2VydCghZml4dHVyZS0+
aGFzQmVlblByb3Zpc2lvbmFsKTsKLSAgICBmaXh0dXJlLT5oYXNCZWVuUHJvdmlzaW9uYWwgPSBU
UlVFOwotCi0gICAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiBsb2FkRXJyb3JQ
cm92aXNpb25hbExvYWRGYWlsZWQoV2ViS2l0V2ViTG9hZGVyQ2xpZW50ICpjbGllbnQsIGNvbnN0
IGdjaGFyICpmYWlsaW5nVVJJLCBHRXJyb3IgKmVycm9yLCBXZWJMb2FkaW5nRml4dHVyZSAqZml4
dHVyZSkKLXsKLSAgICBnX2Fzc2VydChmaXh0dXJlLT5oYXNCZWVuUHJvdmlzaW9uYWwpOwotICAg
IGdfYXNzZXJ0KCFmaXh0dXJlLT5oYXNCZWVuRmFpbGVkKTsKLSAgICBmaXh0dXJlLT5oYXNCZWVu
RmFpbGVkID0gVFJVRTsKLQotICAgIGdfYXNzZXJ0KGVycm9yKTsKLQotICAgIGdfbWFpbl9sb29w
X3F1aXQoZml4dHVyZS0+bG9vcCk7Ci0KLSAgICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdi
b29sZWFuIGxvYWRFcnJvckxvYWRGaW5pc2hlZChXZWJLaXRXZWJMb2FkZXJDbGllbnQgKmNsaWVu
dCwgV2ViTG9hZGluZ0ZpeHR1cmUgKmZpeHR1cmUpCi17Ci0gICAgZ19hc3NlcnRfbm90X3JlYWNo
ZWQoKTsKLSAgICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdExvYWRpbmdFcnJv
cihXZWJMb2FkaW5nRml4dHVyZSAqZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQotewotICAg
IGNoYXIgKnVyaVN0cmluZzsKLSAgICBXZWJLaXRXZWJMb2FkZXJDbGllbnQgKmNsaWVudCA9IHdl
YmtpdF93ZWJfdmlld19nZXRfbG9hZGVyX2NsaWVudChmaXh0dXJlLT53ZWJWaWV3KTsKLQotICAg
IGdfc2lnbmFsX2Nvbm5lY3QoY2xpZW50LCAicHJvdmlzaW9uYWwtbG9hZC1zdGFydGVkIiwgR19D
QUxMQkFDSyhsb2FkRXJyb3JQcm92aXNpb25hbExvYWRTdGFydGVkKSwgZml4dHVyZSk7Ci0gICAg
Z19zaWduYWxfY29ubmVjdChjbGllbnQsICJwcm92aXNpb25hbC1sb2FkLWZhaWxlZCIsIEdfQ0FM
TEJBQ0sobG9hZEVycm9yUHJvdmlzaW9uYWxMb2FkRmFpbGVkKSwgZml4dHVyZSk7Ci0gICAgZ19z
aWduYWxfY29ubmVjdChjbGllbnQsICJsb2FkLWZpbmlzaGVkIiwgR19DQUxMQkFDSyhsb2FkRXJy
b3JMb2FkRmluaXNoZWQpLCBmaXh0dXJlKTsKLQotICAgIHVyaVN0cmluZyA9IGdldFVSSUZvclBh
dGgoIi90ZXN0X2xvYWRfZXJyb3IiKTsKLSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmkoZml4
dHVyZS0+d2ViVmlldywgdXJpU3RyaW5nKTsKLSAgICBnX2ZyZWUodXJpU3RyaW5nKTsKLQotICAg
IGdfbWFpbl9sb29wX3J1bihmaXh0dXJlLT5sb29wKTsKLQotICAgIGdfYXNzZXJ0KGZpeHR1cmUt
Pmhhc0JlZW5Qcm92aXNpb25hbCk7Ci0gICAgZ19hc3NlcnQoZml4dHVyZS0+aGFzQmVlbkZhaWxl
ZCk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiBsb2FkQWx0ZXJuYXRlQ29udGVudExvYWRGaW5pc2hl
ZChXZWJLaXRXZWJMb2FkZXJDbGllbnQgKmNsaWVudCwgV2ViTG9hZGluZ0ZpeHR1cmUgKmZpeHR1
cmUpCi17Ci0gICAgZ19tYWluX2xvb3BfcXVpdChmaXh0dXJlLT5sb29wKTsKLQotICAgIHJldHVy
biBUUlVFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gbG9hZEFsdGVybmF0ZUNvbnRlbnRMb2FkRmFp
bGVkKFdlYktpdFdlYkxvYWRlckNsaWVudCAqY2xpZW50LCBjb25zdCBnY2hhciAqZmFpbGluZ1VS
SSwgR0Vycm9yICplcnJvciwgV2ViTG9hZGluZ0ZpeHR1cmUgKmZpeHR1cmUpCi17Ci0gICAgZ19h
c3NlcnRfbm90X3JlYWNoZWQoKTsKLSAgICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIHZvaWQg
dGVzdExvYWRBbHRlcm5hdGVDb250ZW50KFdlYkxvYWRpbmdGaXh0dXJlICpmaXh0dXJlLCBnY29u
c3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgY2hhciAqdXJpU3RyaW5nOwotICAgIFdlYktpdFdlYkxv
YWRlckNsaWVudCAqY2xpZW50ID0gd2Via2l0X3dlYl92aWV3X2dldF9sb2FkZXJfY2xpZW50KGZp
eHR1cmUtPndlYlZpZXcpOwotCi0gICAgZ19zaWduYWxfY29ubmVjdChjbGllbnQsICJsb2FkLWZp
bmlzaGVkIiwgR19DQUxMQkFDSyhsb2FkQWx0ZXJuYXRlQ29udGVudExvYWRGaW5pc2hlZCksIGZp
eHR1cmUpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3QoY2xpZW50LCAicHJvdmlzaW9uYWwtbG9hZC1m
YWlsZWQiLCBHX0NBTExCQUNLKGxvYWRBbHRlcm5hdGVDb250ZW50TG9hZEZhaWxlZCksIGZpeHR1
cmUpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3QoY2xpZW50LCAibG9hZC1mYWlsZWQiLCBHX0NBTExC
QUNLKGxvYWRBbHRlcm5hdGVDb250ZW50TG9hZEZhaWxlZCksIGZpeHR1cmUpOwotCi0gICAgdXJp
U3RyaW5nID0gZ2V0VVJJRm9yUGF0aCgiL2FsdGVybmF0ZSIpOwotICAgIHdlYmtpdF93ZWJfdmll
d19sb2FkX2FsdGVybmF0ZV9odG1sKGZpeHR1cmUtPndlYlZpZXcsICI8aHRtbD48Ym9keT5BbHRl
cm5hdGUgQ29udGVudDwvYm9keT48L2h0bWw+IiwgTlVMTCwgdXJpU3RyaW5nKTsKLSAgICBnX2Zy
ZWUodXJpU3RyaW5nKTsKLQotICAgIGdfbWFpbl9sb29wX3J1bihmaXh0dXJlLT5sb29wKTsKLX0K
LQotc3RhdGljIHZvaWQgbG9hZFByb2dyZXNzRXN0aW1hdGVkUHJvZ3Jlc3NDaGFuZ2VkKEdPYmpl
Y3QgKm9iamVjdCwgR1BhcmFtU3BlYyAqcHNwZWMsIFdlYkxvYWRpbmdGaXh0dXJlICpmaXh0dXJl
KQotewotICAgIGdkb3VibGUgcHJvZ3Jlc3MgPSB3ZWJraXRfd2ViX2xvYWRlcl9jbGllbnRfZ2V0
X2VzdGltYXRlZF9wcm9ncmVzcyhXRUJLSVRfV0VCX0xPQURFUl9DTElFTlQob2JqZWN0KSk7Ci0K
LSAgICBnX2Fzc2VydF9jbXBmbG9hdChmaXh0dXJlLT5wcm9ncmVzcywgPCwgcHJvZ3Jlc3MpOwot
ICAgIGZpeHR1cmUtPnByb2dyZXNzID0gcHJvZ3Jlc3M7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiBs
b2FkUHJvZ3Jlc3NMb2FkRmluaXNoZWQoV2ViS2l0V2ViTG9hZGVyQ2xpZW50ICpjbGllbnQsIFdl
YkxvYWRpbmdGaXh0dXJlICpmaXh0dXJlKQotewotICAgIGdfYXNzZXJ0X2NtcGZsb2F0KGZpeHR1
cmUtPnByb2dyZXNzLCA9PSwgMS4wKTsKLSAgICBnX21haW5fbG9vcF9xdWl0KGZpeHR1cmUtPmxv
b3ApOwotCi0gICAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RMb2FkUHJvZ3Jl
c3MoV2ViTG9hZGluZ0ZpeHR1cmUgKmZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsKLSAg
ICBjaGFyICp1cmlTdHJpbmc7Ci0gICAgV2ViS2l0V2ViTG9hZGVyQ2xpZW50ICpjbGllbnQgPSB3
ZWJraXRfd2ViX3ZpZXdfZ2V0X2xvYWRlcl9jbGllbnQoZml4dHVyZS0+d2ViVmlldyk7Ci0KLSAg
ICBnX3NpZ25hbF9jb25uZWN0KGNsaWVudCwgImxvYWQtZmluaXNoZWQiLCBHX0NBTExCQUNLKGxv
YWRQcm9ncmVzc0xvYWRGaW5pc2hlZCksIGZpeHR1cmUpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3Qo
Y2xpZW50LCAibm90aWZ5Ojplc3RpbWF0ZWQtcHJvZ3Jlc3MiLCBHX0NBTExCQUNLKGxvYWRQcm9n
cmVzc0VzdGltYXRlZFByb2dyZXNzQ2hhbmdlZCksIGZpeHR1cmUpOwotCi0gICAgdXJpU3RyaW5n
ID0gZ2V0VVJJRm9yUGF0aCgiLyIpOwotICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3VyaShmaXh0
dXJlLT53ZWJWaWV3LCB1cmlTdHJpbmcpOwotICAgIGdfZnJlZSh1cmlTdHJpbmcpOwotCi0gICAg
Z19tYWluX2xvb3BfcnVuKGZpeHR1cmUtPmxvb3ApOwotfQotCi1pbnQgbWFpbihpbnQgYXJnYywg
Y2hhciAqKmFyZ3YpCi17Ci0gICAgU291cFNlcnZlciAqc2VydmVyOwotCi0gICAgZ190aHJlYWRf
aW5pdChOVUxMKTsKLSAgICBndGtfdGVzdF9pbml0KCZhcmdjLCAmYXJndiwgTlVMTCk7Ci0KLSAg
ICBnX3NldGVudigiV0VCS0lUX0VYRUNfUEFUSCIsIFdFQktJVF9FWEVDX1BBVEgsIEZBTFNFKTsK
LQotICAgIHNlcnZlciA9IHNvdXBfc2VydmVyX25ldyhTT1VQX1NFUlZFUl9QT1JULCAwLCBOVUxM
KTsKLSAgICBzb3VwX3NlcnZlcl9ydW5fYXN5bmMoc2VydmVyKTsKLQotICAgIHNvdXBfc2VydmVy
X2FkZF9oYW5kbGVyKHNlcnZlciwgTlVMTCwgc2VydmVyQ2FsbGJhY2ssIE5VTEwsIE5VTEwpOwot
Ci0gICAgYmFzZVVSSSA9IHNvdXBfdXJpX25ldygiaHR0cDovLzEyNy4wLjAuMS8iKTsKLSAgICBz
b3VwX3VyaV9zZXRfcG9ydChiYXNlVVJJLCBzb3VwX3NlcnZlcl9nZXRfcG9ydChzZXJ2ZXIpKTsK
LQotICAgIGdfdGVzdF9idWdfYmFzZSgiaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvIik7Ci0gICAg
Z190ZXN0X2FkZCgiL3dlYmtpdDIvbG9hZGluZy9zdGF0dXMiLAotICAgICAgICAgICAgICAgV2Vi
TG9hZGluZ0ZpeHR1cmUsIE5VTEwsCi0gICAgICAgICAgICAgICB3ZWJMb2FkaW5nRml4dHVyZVNl
dHVwLAotICAgICAgICAgICAgICAgdGVzdExvYWRpbmdTdGF0dXMsCi0gICAgICAgICAgICAgICB3
ZWJMb2FkaW5nRml4dHVyZVRlYXJkb3duKTsKLSAgICBnX3Rlc3RfYWRkKCIvd2Via2l0Mi9sb2Fk
aW5nL2Vycm9yIiwKLSAgICAgICAgICAgICAgIFdlYkxvYWRpbmdGaXh0dXJlLCBOVUxMLAotICAg
ICAgICAgICAgICAgd2ViTG9hZGluZ0ZpeHR1cmVTZXR1cCwKLSAgICAgICAgICAgICAgIHRlc3RM
b2FkaW5nRXJyb3IsCi0gICAgICAgICAgICAgICB3ZWJMb2FkaW5nRml4dHVyZVRlYXJkb3duKTsK
LSAgICBnX3Rlc3RfYWRkKCIvd2Via2l0Mi9sb2FkaW5nL2FsdGVybmF0ZV9jb250ZW50IiwKLSAg
ICAgICAgICAgICAgIFdlYkxvYWRpbmdGaXh0dXJlLCBOVUxMLAotICAgICAgICAgICAgICAgd2Vi
TG9hZGluZ0ZpeHR1cmVTZXR1cCwKLSAgICAgICAgICAgICAgIHRlc3RMb2FkQWx0ZXJuYXRlQ29u
dGVudCwKLSAgICAgICAgICAgICAgIHdlYkxvYWRpbmdGaXh0dXJlVGVhcmRvd24pOwotICAgIGdf
dGVzdF9hZGQoIi93ZWJraXQyL2xvYWRpbmcvcHJvZ3Jlc3MiLAotICAgICAgICAgICAgICAgV2Vi
TG9hZGluZ0ZpeHR1cmUsIE5VTEwsCi0gICAgICAgICAgICAgICB3ZWJMb2FkaW5nRml4dHVyZVNl
dHVwLAotICAgICAgICAgICAgICAgdGVzdExvYWRQcm9ncmVzcywKLSAgICAgICAgICAgICAgIHdl
YkxvYWRpbmdGaXh0dXJlVGVhcmRvd24pOwotCi0gICAgcmV0dXJuIGdfdGVzdF9ydW4oKTsKLX0K
LQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvdGVz
dHdlYmNvbnRleHQuYyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL3Rl
c3R3ZWJjb250ZXh0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmY2U1YWM5Yjlh
Mjg0NGEzZjRkZWE0ZWZkNWM1ODZlMWVjMDAwYWQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVz
dHMvdGVzdHdlYmNvbnRleHQuYworKysgL2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKLSAqIHZlcnNpb24gMiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0g
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0g
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlIDxnbGliLmg+Ci0jaW5j
bHVkZSA8Z3RrL2d0ay5oPgotI2luY2x1ZGUgPHdlYmtpdDIvd2Via2l0Mi5oPgotCi1zdGF0aWMg
dm9pZCB0ZXN0V2ViQ29udGV4dERlZmF1bHQodm9pZCkKLXsKLSAgICAvKiBDaGVjayB0aGVyZSdz
IGEgc2luZ2xlIGluc3RhbmNlIG9mIHRoZSBkZWZhdWx0IHdlYiBjb250ZXh0LiAqLwotICAgIGdf
YXNzZXJ0KHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZGVmYXVsdCgpID09IHdlYmtpdF93ZWJfY29u
dGV4dF9nZXRfZGVmYXVsdCgpKTsKLX0KLQotc3RhdGljIHZvaWQgdGVzdFdlYkNvbnRleHRDYWNo
ZU1vZGVsKHZvaWQpCi17Ci0gICAgV2ViS2l0V2ViQ29udGV4dCAqY29udGV4dCA9IHdlYmtpdF93
ZWJfY29udGV4dF9nZXRfZGVmYXVsdCgpOwotCi0gICAgLyogQ2hlY2sgZGVmYXVsdCBjYWNoZSBt
b2RlbCBpcyB3ZWIgYnJvd3Nlci4gKi8KLSAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX2NvbnRleHRf
Z2V0X2NhY2hlX21vZGVsKGNvbnRleHQpID09IFdFQktJVF9DQUNIRV9NT0RFTF9XRUJfQlJPV1NF
Uik7Ci0KLSAgICB3ZWJraXRfd2ViX2NvbnRleHRfc2V0X2NhY2hlX21vZGVsKGNvbnRleHQsIFdF
QktJVF9DQUNIRV9NT0RFTF9ET0NVTUVOVF9WSUVXRVIpOwotICAgIGdfYXNzZXJ0KHdlYmtpdF93
ZWJfY29udGV4dF9nZXRfY2FjaGVfbW9kZWwoY29udGV4dCkgPT0gV0VCS0lUX0NBQ0hFX01PREVM
X0RPQ1VNRU5UX1ZJRVdFUik7Ci0KLSAgICB3ZWJraXRfd2ViX2NvbnRleHRfc2V0X2NhY2hlX21v
ZGVsKGNvbnRleHQsIFdFQktJVF9DQUNIRV9NT0RFTF9ET0NVTUVOVF9CUk9XU0VSKTsKLSAgICBn
X2Fzc2VydCh3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2NhY2hlX21vZGVsKGNvbnRleHQpID09IFdF
QktJVF9DQUNIRV9NT0RFTF9ET0NVTUVOVF9CUk9XU0VSKTsKLQotICAgIHdlYmtpdF93ZWJfY29u
dGV4dF9zZXRfY2FjaGVfbW9kZWwoY29udGV4dCwgV0VCS0lUX0NBQ0hFX01PREVMX1dFQl9CUk9X
U0VSKTsKLSAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2NhY2hlX21vZGVsKGNv
bnRleHQpID09IFdFQktJVF9DQUNIRV9NT0RFTF9XRUJfQlJPV1NFUik7Ci19Ci0KLWludCBtYWlu
KGludCBhcmdjLCBjaGFyICoqYXJndikKLXsKLSAgICBnX3RocmVhZF9pbml0KE5VTEwpOwotICAg
IGd0a190ZXN0X2luaXQoJmFyZ2MsICZhcmd2LCBOVUxMKTsKLQotICAgIGdfdGVzdF9idWdfYmFz
ZSgiaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvIik7Ci0gICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Vi
a2l0Mi93ZWJjb250ZXh0L2RlZmF1bHRfY29udGV4dCIsCi0gICAgICAgICAgICAgICAgICAgIHRl
c3RXZWJDb250ZXh0RGVmYXVsdCk7Ci0gICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0Mi93ZWJj
b250ZXh0L2NhY2hlX21vZGVsIiwKLSAgICAgICAgICAgICAgICAgICAgdGVzdFdlYkNvbnRleHRD
YWNoZU1vZGVsKTsKLQotICAgIHJldHVybiBnX3Rlc3RfcnVuKCk7Ci19Ci0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL3Rlc3R3ZWJ2aWV3LmMgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy90ZXN0d2Vidmlldy5jCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YTI3YWZlNjIzNzkxM2JiNDJiODI5ZTk4ZTA3YTli
ZDA4ZWE4NzhmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL3Rlc3R3ZWJ2aWV3LmMKKysr
IC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEln
YWxpYSBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIsMSBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0g
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICog
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KLSAqLwotCi0jaW5jbHVkZSA8Z2xpYi5oPgotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLSNpbmNs
dWRlIDx3ZWJraXQyL3dlYmtpdDIuaD4KLQotc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdEZWZhdWx0
Q29udGV4dCh2b2lkKQotewotICAgIFdlYktpdFdlYlZpZXcgKnZpZXcgPSBXRUJLSVRfV0VCX1ZJ
RVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKLSAgICBnX29iamVjdF9yZWZfc2luayh2aWV3KTsK
LSAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X2NvbnRleHQodmlldykgPT0gd2Via2l0
X3dlYl9jb250ZXh0X2dldF9kZWZhdWx0KCkpOwotICAgIGdfb2JqZWN0X3VucmVmKHZpZXcpOwot
fQotCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi17Ci0gICAgZ190aHJlYWRfaW5p
dChOVUxMKTsKLSAgICBndGtfdGVzdF9pbml0KCZhcmdjLCAmYXJndiwgTlVMTCk7Ci0KLSAgICBn
X3NldGVudigiV0VCS0lUX0VYRUNfUEFUSCIsIFdFQktJVF9FWEVDX1BBVEgsIEZBTFNFKTsKLQot
ICAgIGdfdGVzdF9idWdfYmFzZSgiaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvIik7Ci0gICAgZ190
ZXN0X2FkZF9mdW5jKCIvd2Via2l0Mi93ZWJ2aWV3L2RlZmF1bHRfY29udGV4dCIsCi0gICAgICAg
ICAgICAgICAgICAgIHRlc3RXZWJWaWV3RGVmYXVsdENvbnRleHQpOwotCi0gICAgcmV0dXJuIGdf
dGVzdF9ydW4oKTsKLX0KZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5n
ZUxvZwppbmRleCA5Yzc2OGI0NzI4ODRkNzgyOWE5NzFkNTk5MzI2ZDIzMzkzNjgxOGMxLi44ZTk4
ZTQwZTI0NDcxY2YzZjM1ZGYzODFiYTk0MmE3MThkZjU0MmIzIDEwMDY0NAotLS0gYS9Ub29scy9D
aGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTEtMTAt
MTAgIE1hcnRpbiBSb2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2FsaWEuY29tPgorCisgICAgICAgIFtH
VEtdIFtXZWJLaXQyXSBNYWtlIGFkZGluZyBhbm90aGVyIHVuaXQgdGVzdCBlYXNpZXIKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY5NDA5CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTY3JpcHRzL3J1bi1n
dGstdGVzdHM6IFVwZGF0ZSBydW4tZ3RrLXRlc3RzIHRvIGJlIGFibGUgdG8gZXhlY3V0ZQorICAg
ICAgICBuZXcgV2ViS2l0MiB0ZXN0cy4KKwogMjAxMS0xMC0wNyAgQWRhbSBCYXJ0aCAgPGFiYXJ0
aEB3ZWJraXQub3JnPgogCiAgICAgICAgIEFkZCBhIENvbnRlbnQtU2VjdXJpdHktUG9saWN5IHRv
IGdhcmRlbi1vLW1hdGljCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3J1bi1ndGstdGVzdHMg
Yi9Ub29scy9TY3JpcHRzL3J1bi1ndGstdGVzdHMKaW5kZXggMmZiNjViNzM3MjA3ZjhiNjMzZDVl
ZTE0NjY3MzVjN2I1NmRkNjgxNS4uMWRiOWFlMjhiODRmODAwYjAxZGMxZDJkNmViZDdlOTE3MmEz
ZTEzMiAxMDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy9ydW4tZ3RrLXRlc3RzCisrKyBiL1Rvb2xz
L1NjcmlwdHMvcnVuLWd0ay10ZXN0cwpAQCAtMjcsMTMgKzI3LDEzIEBAIHVzZSB3ZWJraXRkaXJz
OwogIyBUaGlzIGluaXRpYWxpemVzIHRoZSBjb3JyZWN0IGNvbmZpZ3VyYXRpb24gKFJlbGVhc2Uv
RGVidWcpCiBzZXRDb25maWd1cmF0aW9uKCk7CiAKLW15ICRwcm9kdWN0RGlyID0gcHJvZHVjdERp
cigpOwotbXkgJHRlc3RzRGlyID0gJHByb2R1Y3REaXIgLiAiL1Byb2dyYW1zL3VuaXR0ZXN0cyIg
OwotbXkgQHVuaXRUZXN0cyA9IGdsb2IgICR0ZXN0c0RpciAuICIvdGVzdCoiOwotbXkgQHdlYmtp
dDJVbml0VGVzdHMgPSBnbG9iICAkdGVzdHNEaXIgLiAiL3dlYmtpdDIvdGVzdCoiOwotcHVzaCBA
dW5pdFRlc3RzLCBAd2Via2l0MlVuaXRUZXN0czsKK215IEB1bml0VGVzdHM7CitteSAkcHJvZ3Jh
bXNEaXJlY3RvcnkgPSBwcm9kdWN0RGlyKCkgLiAiL1Byb2dyYW1zIjsKK3B1c2goQHVuaXRUZXN0
cywgZ2xvYigkcHJvZ3JhbXNEaXJlY3RvcnkgLiAiL3VuaXR0ZXN0cy8qIikpOworcHVzaChAdW5p
dFRlc3RzLCBnbG9iKCRwcm9ncmFtc0RpcmVjdG9yeSAuICIvV2ViS2l0MkFQSVRlc3RzLyoiKSk7
CisKIGlmICgkI3VuaXRUZXN0cyA8IDEpIHsKLSAgICBkaWUgIkVSUk9SOiB0ZXN0cyBub3QgZm91
bmQgaW4gJHByb2R1Y3REaXIuXG4iOworICAgIGRpZSAiRVJST1I6IHRlc3RzIG5vdCBmb3VuZCBp
biAkcHJvZ3JhbXNEaXJlY3RvcnkuXG4iOwogfQogCiBteSAkcGlkID0gZm9yaygpOwpAQCAtNTIs
NiArNTIsOCBAQCAkRU5WeyJESVNQTEFZIn0gPSAnOjMxJzsKIG15ICRleGl0U3RhdHVzID0gMDsK
IGZvcmVhY2ggbXkgJHVuaXRUZXN0IChAdW5pdFRlc3RzKQogeworICAgIG5leHQgdW5sZXNzICgt
ZiAkdW5pdFRlc3QgYW5kIC14ICR1bml0VGVzdCk7CisKICAgICBzeXN0ZW0gImd0ZXN0ZXIgJHVu
aXRUZXN0IjsKICAgICBpZiAoJD8pIHsKICAgICAgICAgJGV4aXRTdGF0dXMgPSAkPzsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110472</attachid>
            <date>2011-10-10 22:08:50 -0700</date>
            <delta_ts>2011-10-11 21:22:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-69409-20111010220849.patch</filename>
            <type>text/plain</type>
            <size>51454</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTcwMTIKZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5n
ZUxvZwppbmRleCBmZWNmYTk1MGI5YjQ0OTgwMDg2YmUyM2FlNTVjNzM5Y2Q3NzIzMDNlLi42ZmEy
OGQ4ZWRkODdlOTkyMGUyYjU5YWEwMGE0NDU4NTNhMDkwMDYyIDEwMDY0NAotLS0gYS9DaGFuZ2VM
b2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTEtMTAtMTAgIE1hcnRpbiBS
b2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdIFtXZWJLaXQy
XSBNYWtlIGFkZGluZyBhbm90aGVyIHVuaXQgdGVzdCBlYXNpZXIKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY5NDA5CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbTogSW5jbHVkZSB0
aGUgbmV3IHRlc3RpbmcgbWFrZWZpbGUuCisKIDIwMTEtMTAtMDYgIEZhZHkgU2FtdWVsICA8ZnNh
bXVlbEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgQ29kZSBjbGVhbi11cDogTWFrZSBSZW5kZXJP
YmplY3Q6OmFic29sdXRlQm91bmRpbmdCb3hSZWN0IGFuZCBhc3NvY2lhdGVkIG1ldGhvZHMgY29u
c3QgYW5kIG1ha2UgaXRzIHBhcmFtZXRlciB1c2VUcmFuc2Zvcm1zIG5vIGxvbmdlciBkZWZhdWx0
IHRvIGZhbHNlCmRpZmYgLS1naXQgYS9HTlVtYWtlZmlsZS5hbSBiL0dOVW1ha2VmaWxlLmFtCmlu
ZGV4IDFmZTY3NGJlOTEzN2FiM2E5MGQzM2NjYWQ2OGQ2NjgzYzMxMTUyZmIuLjA2ZmNjN2Q0MTE5
M2IxYjVmZGUyNzI2NzdkYWI0ZTM5MTE5ODkwNDAgMTAwNjQ0Ci0tLSBhL0dOVW1ha2VmaWxlLmFt
CisrKyBiL0dOVW1ha2VmaWxlLmFtCkBAIC0yMTAsNiArMjEwLDcgQEAgaW5jbHVkZSBUb29scy9E
dW1wUmVuZGVyVHJlZS9ndGsvR05VbWFrZWZpbGUuSW1hZ2VEaWZmLmFtCiAKIGlmIEVOQUJMRV9X
RUJLSVQyCiBpbmNsdWRlIFNvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtCitpbmNsdWRlIFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0dOVW1ha2VmaWxlLmFtCiBpbmNs
dWRlIFRvb2xzL01pbmlCcm93c2VyL2d0ay9HTlVtYWtlZmlsZS5hbQogaW5jbHVkZSBUb29scy9X
ZWJLaXRUZXN0UnVubmVyL0dOVW1ha2VmaWxlLmFtCiAjIFtHVEtdIFJlZmFjdG9yIHRoZSB0cmFu
c2xhdGlvbnMgbm93IHRoYXQgd2UgaGF2ZSB3ZWJraXQyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggNjY3ZWM5YjBj
YjJlYWEyMTA0ZTAzMTgwMjcwNWFiMTg3YWRkNWRlMy4uYTJlOTU1NGEwNDE2NzdlMWQ3Nzk1MGJm
YThhNWY1ODVlODk2YTYyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI1IEBACisyMDExLTEwLTEw
ICBNYXJ0aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RL
XSBbV2ViS2l0Ml0gTWFrZSBhZGRpbmcgYW5vdGhlciB1bml0IHRlc3QgZWFzaWVyCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02OTQwOQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06
IEFkZCB0aGUgbmV3IFdlYktpdDIgQVBJIHRlc3RzLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
Z3RrL3Rlc3RzL0dOVW1ha2VmaWxlLmFtOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L2d0ay90ZXN0cy9Mb2FkVHJhY2tpbmdUZXN0LmNwcDogQWRkZWQuIEEgZml4dHVyZSBmb3IgY3Jl
YXRpbmcgbG9hZCB0cmFja2luZyB0ZXN0cy4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay90
ZXN0cy9Mb2FkVHJhY2tpbmdUZXN0Lmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
Z3RrL3Rlc3RzL1Rlc3RNYWluLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvdGVzdHMvdGVzdHdlYnZpZXcuYy4KKyAgICAgICAgKG1haW4pOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RNYWluLmg6IEFkZGVkLgorICAgICAgICAq
IFVJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRXZWJDb250ZXh0LmNwcDogQ29waWVk
IGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvdGVzdHdlYnZpZXcu
Yy4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0V2ViTG9hZGVy
Q2xpZW50LmNwcDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVz
dFdlYktpdFdlYlZpZXcuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvdGVzdHMvdGVzdHdlYnZpZXcuYy4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0
ay90ZXN0cy9XZWJWaWV3VGVzdC5jcHA6IEFkZGVkLiBBIGZpeHR1cmUgZm9yIGdlbmVyaWMgV2Vi
VmlldyB0ZXN0cy4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJWaWV3VGVz
dC5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy90ZXN0bG9hZGlu
Zy5jOiBSZW1vdmVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL3Rlc3R3ZWJj
b250ZXh0LmM6IFJlbW92ZWQuCisKIDIwMTEtMTAtMDMgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8
Y2dhcmNpYUBpZ2FsaWEuY29tPiBhbmQgTWFydGluIFJvYmluc29uICA8bXJvYmluc29uQGlnYWxp
YS5jb20+CiAKICAgICAgICAgW0dUS10gSW1wbGVtZW50IGRyYWcgYW5kIGRyb3Agc3VwcG9ydCBp
biBXZWJLaXQyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbSBiL1Nv
dXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtCmluZGV4IGUzZjk4NDY4ZDU1NTU1YmNjMjJlMjk4
Zjk3ZTU4YTg0MDdmMmU0OTIuLjM2MDQ3MmNmNzdmNmFlYjZmZDQ3MDZmMTkxNTdlN2NmYzk3NDg4
MmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtCkBAIC0xMDgyLDUzICsxMDgyLDYgQEAgQ0xFQU5GSUxF
UyArPSBcCiBESVNUQ0xFQU5GSUxFUyArPSBcCiAJJCh0b3BfYnVpbGRkaXIpL1dlYktpdDIvd2Vi
a2l0Mmd0ay1AV0VCS0lUR1RLX0FQSV9WRVJTSU9OQC5wYwogCi0jIFVuaXQgdGVzdHMKLVRFU1Rf
UFJPR1MgKz0gXAotCVByb2dyYW1zL3VuaXR0ZXN0cy93ZWJraXQyL3Rlc3R3ZWJjb250ZXh0IFwK
LQlQcm9ncmFtcy91bml0dGVzdHMvd2Via2l0Mi90ZXN0d2VidmlldyBcCi0JUHJvZ3JhbXMvdW5p
dHRlc3RzL3dlYmtpdDIvdGVzdGxvYWRpbmcKLQotbm9pbnN0X1BST0dSQU1TICs9ICQoVEVTVF9Q
Uk9HUykKLXdlYmtpdDJfdGVzdHNfY2ZsYWdzID0gXAotCS1EV0VCS0lUX0VYRUNfUEFUSD1cIiR7
c2hlbGwgcHdkfS8kKHRvcF9idWlsZGRpcikvUHJvZ3JhbXNcIiBcCi0JLUkkKHNyY2RpcikvU291
cmNlIFwKLQktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViS2l0MiBcCi0JLUkkKHRvcF9idWlsZGRpcikv
RGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9pbmNsdWRlIFwKLQktSSQodG9wX2J1aWxkZGlyKS9EZXJp
dmVkU291cmNlcy9XZWJLaXQyL3dlYmtpdDJndGsgXAotCS1JJCh0b3BfYnVpbGRkaXIpL0Rlcml2
ZWRTb3VyY2VzL1dlYktpdDIvd2Via2l0Mmd0ay9pbmNsdWRlIFwKLQktSSQoc3JjZGlyKS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ayBcCi0JJChnbG9iYWxfY2ZsYWdzKSBcCi0JJChn
bG9iYWxfY3BwZmxhZ3MpIFwKLQkkKEdMSUJfQ0ZMQUdTKSBcCi0JJChHVEtfQ0ZMQUdTKSBcCi0J
JChMSUJTT1VQX0NGTEFHUykKLQotd2Via2l0Ml90ZXN0c19sZGFkZCA9IFwKLQlsaWJqYXZhc2Ny
aXB0Y29yZWd0ay1AV0VCS0lUR1RLX0FQSV9NQUpPUl9WRVJTSU9OQC5AV0VCS0lUR1RLX0FQSV9N
SU5PUl9WRVJTSU9OQC5sYSBcCi0JbGlid2Via2l0Mmd0ay1AV0VCS0lUR1RLX0FQSV9NQUpPUl9W
RVJTSU9OQC5AV0VCS0lUR1RLX0FQSV9NSU5PUl9WRVJTSU9OQC5sYSBcCi0JJChHTElCX0xJQlMp
IFwKLQkkKEdUS19MSUJTKSBcCi0JJChMSUJTT1VQX0xJQlMpCi0KLXdlYmtpdDJfdGVzdHNfbGRm
bGFncyA9IFwKLQktbm8taW5zdGFsbCBcCi0JLW5vLWZhc3QtaW5zdGFsbAotCi1Qcm9ncmFtc191
bml0dGVzdHNfd2Via2l0Ml90ZXN0d2ViY29udGV4dF9TT1VSQ0VTID0gU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvdGVzdHdlYmNvbnRleHQuYwotUHJvZ3JhbXNfdW5pdHRl
c3RzX3dlYmtpdDJfdGVzdHdlYmNvbnRleHRfQ0ZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2NmbGFn
cykKLVByb2dyYW1zX3VuaXR0ZXN0c193ZWJraXQyX3Rlc3R3ZWJjb250ZXh0X0xEQUREID0gJCh3
ZWJraXQyX3Rlc3RzX2xkYWRkKQotUHJvZ3JhbXNfdW5pdHRlc3RzX3dlYmtpdDJfdGVzdHdlYmNv
bnRleHRfTERGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19sZGZsYWdzKQotCi1Qcm9ncmFtc191bml0
dGVzdHNfd2Via2l0Ml90ZXN0d2Vidmlld19TT1VSQ0VTID0gU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvdGVzdHMvdGVzdHdlYnZpZXcuYwotUHJvZ3JhbXNfdW5pdHRlc3RzX3dlYmtp
dDJfdGVzdHdlYnZpZXdfQ0ZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2NmbGFncykKLVByb2dyYW1z
X3VuaXR0ZXN0c193ZWJraXQyX3Rlc3R3ZWJ2aWV3X0xEQUREID0gJCh3ZWJraXQyX3Rlc3RzX2xk
YWRkKQotUHJvZ3JhbXNfdW5pdHRlc3RzX3dlYmtpdDJfdGVzdHdlYnZpZXdfTERGTEFHUyA9ICQo
d2Via2l0Ml90ZXN0c19sZGZsYWdzKQotCi1Qcm9ncmFtc191bml0dGVzdHNfd2Via2l0Ml90ZXN0
bG9hZGluZ19TT1VSQ0VTID0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMv
dGVzdGxvYWRpbmcuYwotUHJvZ3JhbXNfdW5pdHRlc3RzX3dlYmtpdDJfdGVzdGxvYWRpbmdfQ0ZM
QUdTID0gJCh3ZWJraXQyX3Rlc3RzX2NmbGFncykKLVByb2dyYW1zX3VuaXR0ZXN0c193ZWJraXQy
X3Rlc3Rsb2FkaW5nX0xEQUREID0gJCh3ZWJraXQyX3Rlc3RzX2xkYWRkKQotUHJvZ3JhbXNfdW5p
dHRlc3RzX3dlYmtpdDJfdGVzdGxvYWRpbmdfTERGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19sZGZs
YWdzKQotCiAjIFdlYktpdFdlYlByb2Nlc3MKIGxpYmV4ZWNfUFJPR1JBTVMgKz0gXAogCVByb2dy
YW1zL1dlYktpdFdlYlByb2Nlc3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL3Rlc3RzL0dOVW1ha2VmaWxlLmFtIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvdGVzdHMvR05VbWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmUxYWRjOTNmYzgyYTZj
MDZhYzk0NDUyODJiMGEzYTE3OTM3ZmQ1NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0dOVW1ha2VmaWxlLmFtCkBAIC0wLDAgKzEsNjIg
QEAKK1RFU1RfUFJPR1MgKz0gXAorCVByb2dyYW1zL1dlYktpdDJBUElUZXN0cy9UZXN0V2ViS2l0
V2ViQ29udGV4dCBcCisJUHJvZ3JhbXMvV2ViS2l0MkFQSVRlc3RzL1Rlc3RXZWJLaXRXZWJWaWV3
IFwKKwlQcm9ncmFtcy9XZWJLaXQyQVBJVGVzdHMvVGVzdFdlYktpdFdlYkxvYWRlckNsaWVudAor
Citub2luc3RfUFJPR1JBTVMgKz0gJChURVNUX1BST0dTKQord2Via2l0Ml90ZXN0c19jcHBmbGFn
cyA9IFwKKwktRFdFQktJVF9FWEVDX1BBVEg9XCIke3NoZWxsIHB3ZH0vJCh0b3BfYnVpbGRkaXIp
L1Byb2dyYW1zXCIgXAorCSQoamF2YXNjcmlwdGNvcmVfY3BwZmxhZ3MpIFwKKwktSSQoc3JjZGly
KS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUgXAorCS1JJChzcmNkaXIpL1NvdXJjZSBcCisJLUkkKHNy
Y2RpcikvU291cmNlL1dlYktpdDIgXAorCS1JJCh0b3BfYnVpbGRkaXIpL0Rlcml2ZWRTb3VyY2Vz
L1dlYktpdDIvaW5jbHVkZSBcCisJLUkkKHRvcF9idWlsZGRpcikvRGVyaXZlZFNvdXJjZXMvV2Vi
S2l0Mi93ZWJraXQyZ3RrIFwKKwktSSQodG9wX2J1aWxkZGlyKS9EZXJpdmVkU291cmNlcy9XZWJL
aXQyL3dlYmtpdDJndGsvaW5jbHVkZSBcCisJLUkkKHNyY2RpcikvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsgXAorCSQoZ2xvYmFsX2NwcGZsYWdzKSBcCisJJChHTElCX0NGTEFHUykg
XAorCSQoR1RLX0NGTEFHUykgXAorCSQoTElCU09VUF9DRkxBR1MpCisKK3dlYmtpdDJfdGVzdHNf
bGRhZGQgPSBcCisJbGliamF2YXNjcmlwdGNvcmVndGstQFdFQktJVEdUS19BUElfTUFKT1JfVkVS
U0lPTkAuQFdFQktJVEdUS19BUElfTUlOT1JfVkVSU0lPTkAubGEgXAorCWxpYndlYmtpdDJndGst
QFdFQktJVEdUS19BUElfTUFKT1JfVkVSU0lPTkAuQFdFQktJVEdUS19BUElfTUlOT1JfVkVSU0lP
TkAubGEgXAorCUxpYnJhcmllcy9saWJXZWJLaXQyQVBJVGVzdENvcmUubGEgXAorCSQoR0VPQ0xV
RV9MSUJTKSBcCisJJChHTElCX0xJQlMpIFwKKwkkKEdUS19MSUJTKSBcCisJJChMSUJTT1VQX0xJ
QlMpCisKK3dlYmtpdDJfdGVzdHNfbGRmbGFncyA9IFwKKwktbm8taW5zdGFsbCBcCisJLW5vLWZh
c3QtaW5zdGFsbAorCitub2luc3RfTFRMSUJSQVJJRVMgKz0gTGlicmFyaWVzL2xpYldlYktpdDJB
UElUZXN0Q29yZS5sYQorTGlicmFyaWVzX2xpYldlYktpdDJBUElUZXN0Q29yZV9sYV9TT1VSQ0VT
ID0gXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0xvYWRUcmFja2lu
Z1Rlc3QuY3BwIFwKKwlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9Mb2Fk
VHJhY2tpbmdUZXN0LmggXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3Rz
L1Rlc3RNYWluLmNwcCBcCisJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMv
VGVzdE1haW4uaCBcCisJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2Vi
Vmlld1Rlc3QuY3BwIFwKKwlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9X
ZWJWaWV3VGVzdC5oCitMaWJyYXJpZXNfbGliV2ViS2l0MkFQSVRlc3RDb3JlX2xhX0NQUEZMQUdT
ID0gJCh3ZWJraXQyX3Rlc3RzX2NwcGZsYWdzKQorCitQcm9ncmFtc19XZWJLaXQyQVBJVGVzdHNf
VGVzdFdlYktpdFdlYkNvbnRleHRfU09VUkNFUyA9IFwKKwlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0V2ViQ29udGV4dC5jcHAKK1Byb2dyYW1zX1dlYktp
dDJBUElUZXN0c19UZXN0V2ViS2l0V2ViQ29udGV4dF9DUFBGTEFHUyA9ICQod2Via2l0Ml90ZXN0
c19jcHBmbGFncykKK1Byb2dyYW1zX1dlYktpdDJBUElUZXN0c19UZXN0V2ViS2l0V2ViQ29udGV4
dF9MREFERCA9ICQod2Via2l0Ml90ZXN0c19sZGFkZCkKK1Byb2dyYW1zX1dlYktpdDJBUElUZXN0
c19UZXN0V2ViS2l0V2ViQ29udGV4dF9MREZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2xkZmxhZ3Mp
CisKK1Byb2dyYW1zX1dlYktpdDJBUElUZXN0c19UZXN0V2ViS2l0V2ViVmlld19TT1VSQ0VTID0g
XAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRXZWJW
aWV3LmNwcAorUHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3RzX1Rlc3RXZWJLaXRXZWJWaWV3X0NQUEZM
QUdTID0gJCh3ZWJraXQyX3Rlc3RzX2NwcGZsYWdzKQorUHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3Rz
X1Rlc3RXZWJLaXRXZWJWaWV3X0xEQUREID0gJCh3ZWJraXQyX3Rlc3RzX2xkYWRkKQorUHJvZ3Jh
bXNfV2ViS2l0MkFQSVRlc3RzX1Rlc3RXZWJLaXRXZWJWaWV3X0xERkxBR1MgPSAkKHdlYmtpdDJf
dGVzdHNfbGRmbGFncykKKworUHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3RzX1Rlc3RXZWJLaXRXZWJM
b2FkZXJDbGllbnRfU09VUkNFUyA9IFwKKwlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay90ZXN0cy9UZXN0V2ViS2l0V2ViTG9hZGVyQ2xpZW50LmNwcAorUHJvZ3JhbXNfV2ViS2l0MkFQ
SVRlc3RzX1Rlc3RXZWJLaXRXZWJMb2FkZXJDbGllbnRfQ1BQRkxBR1MgPSAkKHdlYmtpdDJfdGVz
dHNfY3BwZmxhZ3MpCitQcm9ncmFtc19XZWJLaXQyQVBJVGVzdHNfVGVzdFdlYktpdFdlYkxvYWRl
ckNsaWVudF9MREFERCA9ICQod2Via2l0Ml90ZXN0c19sZGFkZCkKK1Byb2dyYW1zX1dlYktpdDJB
UElUZXN0c19UZXN0V2ViS2l0V2ViTG9hZGVyQ2xpZW50X0xERkxBR1MgPSAkKHdlYmtpdDJfdGVz
dHNfbGRmbGFncykKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvdGVzdHMvTG9hZFRyYWNraW5nVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay90ZXN0cy9Mb2FkVHJhY2tpbmdUZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44MDIxNDBiOGIy
ZGU4MDUyNjFhODlmNmNkYmUwYjRhYzE3MDI4OWI3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvTG9hZFRyYWNraW5nVGVzdC5jcHAKQEAg
LTAsMCArMSwxMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkxvYWRUcmFja2luZ1Rlc3QuaCIKKworI2luY2x1
ZGUgPHdlYmtpdDIvd2Via2l0Mi5oPgorCitzdGF0aWMgZ2Jvb2xlYW4gcHJvdmlzaW9uYWxMb2Fk
U3RhcnRlZENhbGxiYWNrKFdlYktpdFdlYkxvYWRlckNsaWVudCogY2xpZW50LCBMb2FkVHJhY2tp
bmdUZXN0KiB0ZXN0KQoreworICAgIHRlc3QtPnByb3Zpc2lvbmFsTG9hZFN0YXJ0ZWQoY2xpZW50
KTsKKyAgICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIGdib29sZWFuIHByb3Zpc2lvbmFsTG9h
ZFJlY2VpdmVkU2VydmVyUmVkaXJlY3RDYWxsYmFjayhXZWJLaXRXZWJMb2FkZXJDbGllbnQqIGNs
aWVudCwgTG9hZFRyYWNraW5nVGVzdCogdGVzdCkKK3sKKyAgICB0ZXN0LT5wcm92aXNpb25hbExv
YWRSZWNlaXZlZFNlcnZlclJlZGlyZWN0KGNsaWVudCk7CisgICAgcmV0dXJuIFRSVUU7Cit9CisK
K3N0YXRpYyBnYm9vbGVhbiBwcm92aXNpb25hbExvYWRGYWlsZWRDYWxsYmFjayhXZWJLaXRXZWJM
b2FkZXJDbGllbnQqIGNsaWVudCwgY29uc3QgZ2NoYXIqIGZhaWxpbmdVUkksIEdFcnJvciogZXJy
b3IsIExvYWRUcmFja2luZ1Rlc3QqIHRlc3QpCit7CisgICAgdGVzdC0+cHJvdmlzaW9uYWxMb2Fk
RmFpbGVkKGNsaWVudCwgZmFpbGluZ1VSSSwgZXJyb3IpOworICAgIHJldHVybiBUUlVFOworfQor
CitzdGF0aWMgZ2Jvb2xlYW4gbG9hZENvbW1pdHRlZENhbGxiYWNrKFdlYktpdFdlYkxvYWRlckNs
aWVudCogY2xpZW50LCBMb2FkVHJhY2tpbmdUZXN0KiB0ZXN0KQoreworICAgIHRlc3QtPmxvYWRD
b21taXR0ZWQoY2xpZW50KTsKKyAgICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIGdib29sZWFu
IGxvYWRGaW5pc2hlZENhbGxiYWNrKFdlYktpdFdlYkxvYWRlckNsaWVudCogY2xpZW50LCBMb2Fk
VHJhY2tpbmdUZXN0KiB0ZXN0KQoreworICAgIHRlc3QtPmxvYWRGaW5pc2hlZChjbGllbnQpOwor
ICAgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gbG9hZEZhaWxlZENhbGxiYWNr
KFdlYktpdFdlYkxvYWRlckNsaWVudCogY2xpZW50LCBjb25zdCBnY2hhciogZmFpbGluZ1VSSSwg
R0Vycm9yKiBlcnJvciwgTG9hZFRyYWNraW5nVGVzdCogdGVzdCkKK3sKKyAgICB0ZXN0LT5sb2Fk
RmFpbGVkKGNsaWVudCwgZmFpbGluZ1VSSSwgZXJyb3IpOworICAgIHJldHVybiBUUlVFOworfQor
CitzdGF0aWMgdm9pZCBlc3RpbWF0ZWRQcm9ncmVzc0NoYW5nZWRDYWxsYmFjayhHT2JqZWN0Kiwg
R1BhcmFtU3BlYyosIExvYWRUcmFja2luZ1Rlc3QqIHRlc3QpCit7CisgICAgdGVzdC0+ZXN0aW1h
dGVkUHJvZ3Jlc3NDaGFuZ2VkKCk7Cit9CisKK0xvYWRUcmFja2luZ1Rlc3Q6OkxvYWRUcmFja2lu
Z1Rlc3QoKQorICAgIDogbV9ydW5Mb2FkVW50aWxDb21wbGV0aW9uKGZhbHNlKQoreworICAgIFdl
YktpdFdlYkxvYWRlckNsaWVudCogY2xpZW50ID0gd2Via2l0X3dlYl92aWV3X2dldF9sb2FkZXJf
Y2xpZW50KG1fd2ViVmlldyk7CisgICAgZ19zaWduYWxfY29ubmVjdChjbGllbnQsICJwcm92aXNp
b25hbC1sb2FkLXN0YXJ0ZWQiLCBHX0NBTExCQUNLKHByb3Zpc2lvbmFsTG9hZFN0YXJ0ZWRDYWxs
YmFjayksIHRoaXMpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QoY2xpZW50LCAicHJvdmlzaW9uYWwt
bG9hZC1yZWNlaXZlZC1zZXJ2ZXItcmVkaXJlY3QiLCBHX0NBTExCQUNLKHByb3Zpc2lvbmFsTG9h
ZFJlY2VpdmVkU2VydmVyUmVkaXJlY3RDYWxsYmFjayksIHRoaXMpOworICAgIGdfc2lnbmFsX2Nv
bm5lY3QoY2xpZW50LCAicHJvdmlzaW9uYWwtbG9hZC1mYWlsZWQiLCBHX0NBTExCQUNLKHByb3Zp
c2lvbmFsTG9hZEZhaWxlZENhbGxiYWNrKSwgdGhpcyk7CisgICAgZ19zaWduYWxfY29ubmVjdChj
bGllbnQsICJsb2FkLWNvbW1pdHRlZCIsIEdfQ0FMTEJBQ0sobG9hZENvbW1pdHRlZENhbGxiYWNr
KSwgdGhpcyk7CisgICAgZ19zaWduYWxfY29ubmVjdChjbGllbnQsICJsb2FkLWZpbmlzaGVkIiwg
R19DQUxMQkFDSyhsb2FkRmluaXNoZWRDYWxsYmFjayksIHRoaXMpOworICAgIGdfc2lnbmFsX2Nv
bm5lY3QoY2xpZW50LCAibG9hZC1mYWlsZWQiLCBHX0NBTExCQUNLKGxvYWRGYWlsZWRDYWxsYmFj
ayksIHRoaXMpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QoY2xpZW50LCAibm90aWZ5Ojplc3RpbWF0
ZWQtcHJvZ3Jlc3MiLCBHX0NBTExCQUNLKGVzdGltYXRlZFByb2dyZXNzQ2hhbmdlZENhbGxiYWNr
KSwgdGhpcyk7Cit9CisKK0xvYWRUcmFja2luZ1Rlc3Q6On5Mb2FkVHJhY2tpbmdUZXN0KCkKK3sK
KyAgICBXZWJLaXRXZWJMb2FkZXJDbGllbnQqIGNsaWVudCA9IHdlYmtpdF93ZWJfdmlld19nZXRf
bG9hZGVyX2NsaWVudChtX3dlYlZpZXcpOworICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5l
Y3RfbWF0Y2hlZChjbGllbnQsIEdfU0lHTkFMX01BVENIX0RBVEEsIDAsIDAsIDAsIDAsIHRoaXMp
OworfQorCit2b2lkIExvYWRUcmFja2luZ1Rlc3Q6OndhaXRVbnRpbExvYWRGaW5pc2hlZCgpCit7
CisgICAgbV9lc3RpbWF0ZWRQcm9ncmVzcyA9IDA7CisgICAgbV9ydW5Mb2FkVW50aWxDb21wbGV0
aW9uID0gdHJ1ZTsKKyAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7Cit9CisKK3ZvaWQg
TG9hZFRyYWNraW5nVGVzdDo6cHJvdmlzaW9uYWxMb2FkU3RhcnRlZChXZWJLaXRXZWJMb2FkZXJD
bGllbnQqIGNsaWVudCkKK3sKKyAgICBtX2xvYWRFdmVudHMuYXBwZW5kKFByb3Zpc2lvbmFsTG9h
ZFN0YXJ0ZWQpOworfQorCit2b2lkIExvYWRUcmFja2luZ1Rlc3Q6OnByb3Zpc2lvbmFsTG9hZFJl
Y2VpdmVkU2VydmVyUmVkaXJlY3QoV2ViS2l0V2ViTG9hZGVyQ2xpZW50KiBjbGllbnQpCit7Cisg
ICAgbV9sb2FkRXZlbnRzLmFwcGVuZChQcm92aXNpb25hbExvYWRSZWNlaXZlZFNlcnZlclJlZGly
ZWN0KTsKK30KKwordm9pZCBMb2FkVHJhY2tpbmdUZXN0Ojpwcm92aXNpb25hbExvYWRGYWlsZWQo
V2ViS2l0V2ViTG9hZGVyQ2xpZW50KiBjbGllbnQsIGNvbnN0IGdjaGFyKiBmYWlsaW5nVVJJLCBH
RXJyb3IqIGVycm9yKQoreworICAgIG1fbG9hZEV2ZW50cy5hcHBlbmQoUHJvdmlzaW9uYWxMb2Fk
RmFpbGVkKTsKKyAgICBpZiAobV9ydW5Mb2FkVW50aWxDb21wbGV0aW9uKQorICAgICAgICBnX21h
aW5fbG9vcF9xdWl0KG1fbWFpbkxvb3ApOworfQorCit2b2lkIExvYWRUcmFja2luZ1Rlc3Q6Omxv
YWRDb21taXR0ZWQoV2ViS2l0V2ViTG9hZGVyQ2xpZW50KiBjbGllbnQpCit7CisgICAgbV9sb2Fk
RXZlbnRzLmFwcGVuZChMb2FkQ29tbWl0dGVkKTsKK30KKwordm9pZCBMb2FkVHJhY2tpbmdUZXN0
Ojpsb2FkRmluaXNoZWQoV2ViS2l0V2ViTG9hZGVyQ2xpZW50KiBjbGllbnQpCit7CisgICAgbV9s
b2FkRXZlbnRzLmFwcGVuZChMb2FkRmluaXNoZWQpOworICAgIGlmIChtX3J1bkxvYWRVbnRpbENv
bXBsZXRpb24pCisgICAgICAgIGdfbWFpbl9sb29wX3F1aXQobV9tYWluTG9vcCk7Cit9CisKK3Zv
aWQgTG9hZFRyYWNraW5nVGVzdDo6bG9hZEZhaWxlZChXZWJLaXRXZWJMb2FkZXJDbGllbnQqIGNs
aWVudCwgY29uc3QgZ2NoYXIqIGZhaWxpbmdVUkksIEdFcnJvciogZXJyb3IpCit7CisgICAgbV9s
b2FkRXZlbnRzLmFwcGVuZChMb2FkRmFpbGVkKTsKKyAgICBpZiAobV9ydW5Mb2FkVW50aWxDb21w
bGV0aW9uKQorICAgICAgICBnX21haW5fbG9vcF9xdWl0KG1fbWFpbkxvb3ApOworfQorCit2b2lk
IExvYWRUcmFja2luZ1Rlc3Q6OmVzdGltYXRlZFByb2dyZXNzQ2hhbmdlZCgpCit7CisgICAgV2Vi
S2l0V2ViTG9hZGVyQ2xpZW50KiBjbGllbnQgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2xvYWRlcl9j
bGllbnQobV93ZWJWaWV3KTsKKyAgICBkb3VibGUgcHJvZ3Jlc3MgPSB3ZWJraXRfd2ViX2xvYWRl
cl9jbGllbnRfZ2V0X2VzdGltYXRlZF9wcm9ncmVzcyhjbGllbnQpOworICAgIGdfYXNzZXJ0X2Nt
cGZsb2F0KG1fZXN0aW1hdGVkUHJvZ3Jlc3MsIDwsIHByb2dyZXNzKTsKKyAgICBtX2VzdGltYXRl
ZFByb2dyZXNzID0gcHJvZ3Jlc3M7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay90ZXN0cy9Mb2FkVHJhY2tpbmdUZXN0LmggYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9Mb2FkVHJhY2tpbmdUZXN0LmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOThm
ZjIxMWE2NTU2NGU5Y2EyNjdlYWU1MmU1MWRiYzY5YTM0ODhkNQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0xvYWRUcmFja2luZ1Rlc3Qu
aApAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwu
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisK
KyNpZm5kZWYgTG9hZFRyYWNraW5nVGVzdF9oCisjZGVmaW5lIExvYWRUcmFja2luZ1Rlc3RfaAor
CisjaW5jbHVkZSAiVGVzdE1haW4uaCIKKyNpbmNsdWRlICJXZWJWaWV3VGVzdC5oIgorI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KKworY2xhc3MgTG9hZFRyYWNraW5nVGVzdCA6IHB1YmxpYyBXZWJW
aWV3VGVzdCB7CitwdWJsaWM6CisgICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShMb2FkVHJhY2tp
bmdUZXN0KTsKKyAgICBMb2FkVHJhY2tpbmdUZXN0KCk7CisgICAgdmlydHVhbCB+TG9hZFRyYWNr
aW5nVGVzdCgpOworICAgIHZvaWQgd2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICB2aXJ0
dWFsIHZvaWQgcHJvdmlzaW9uYWxMb2FkU3RhcnRlZChXZWJLaXRXZWJMb2FkZXJDbGllbnQqKTsK
KyAgICB2aXJ0dWFsIHZvaWQgcHJvdmlzaW9uYWxMb2FkUmVjZWl2ZWRTZXJ2ZXJSZWRpcmVjdChX
ZWJLaXRXZWJMb2FkZXJDbGllbnQqKTsKKyAgICB2aXJ0dWFsIHZvaWQgcHJvdmlzaW9uYWxMb2Fk
RmFpbGVkKFdlYktpdFdlYkxvYWRlckNsaWVudCosIGNvbnN0IGdjaGFyKiBmYWlsaW5nVVJJLCBH
RXJyb3IqKTsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZENvbW1pdHRlZChXZWJLaXRXZWJMb2FkZXJD
bGllbnQqKTsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZEZpbmlzaGVkKFdlYktpdFdlYkxvYWRlckNs
aWVudCopOworICAgIHZpcnR1YWwgdm9pZCBsb2FkRmFpbGVkKFdlYktpdFdlYkxvYWRlckNsaWVu
dCosIGNvbnN0IGNoYXIqIGZhaWxpbmdVUkksIEdFcnJvciopOworICAgIHZpcnR1YWwgdm9pZCBl
c3RpbWF0ZWRQcm9ncmVzc0NoYW5nZWQoKTsKKworICAgIGVudW0gTG9hZEV2ZW50cyB7CisgICAg
ICAgIFByb3Zpc2lvbmFsTG9hZFN0YXJ0ZWQsCisgICAgICAgIFByb3Zpc2lvbmFsTG9hZFJlY2Vp
dmVkU2VydmVyUmVkaXJlY3QsCisgICAgICAgIFByb3Zpc2lvbmFsTG9hZEZhaWxlZCwKKyAgICAg
ICAgTG9hZENvbW1pdHRlZCwKKyAgICAgICAgTG9hZEZpbmlzaGVkLAorICAgICAgICBMb2FkRmFp
bGVkCisgICAgfTsKKyAgICBib29sIG1fcnVuTG9hZFVudGlsQ29tcGxldGlvbjsKKyAgICBWZWN0
b3I8TG9hZEV2ZW50cz4gbV9sb2FkRXZlbnRzOworICAgIGZsb2F0IG1fZXN0aW1hdGVkUHJvZ3Jl
c3M7Cit9OworCisjZW5kaWYgLy8gTG9hZFRyYWNraW5nVGVzdF9oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0TWFpbi5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0TWFpbi5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ZDY5YTk2MDI2ZDk0YWU3M2E2NWQ0MGY5YzQ3MzQ0YmVkMzJlMTk4ZQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RNYWluLmNwcApA
QCAtMCwwICsxLDQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0TWFpbi5oIgorCisjaW5jbHVkZSA8Z3Rr
L2d0ay5oPgorCit2b2lkIGJlZm9yZUFsbCgpOwordm9pZCBhZnRlckFsbCgpOworCitpbnQgbWFp
bihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCit7CisgICAgZ190aHJlYWRfaW5pdCgwKTsKKyAgICBn
dGtfdGVzdF9pbml0KCZhcmdjLCAmYXJndiwgMCk7CisgICAgZ19zZXRlbnYoIldFQktJVF9FWEVD
X1BBVEgiLCBXRUJLSVRfRVhFQ19QQVRILCBGQUxTRSk7CisgICAgZ190ZXN0X2J1Z19iYXNlKCJo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy8iKTsKKworICAgIGJlZm9yZUFsbCgpOworICAgIGludCBy
ZXR1cm5WYWx1ZSA9IGdfdGVzdF9ydW4oKTsKKyAgICBhZnRlckFsbCgpOworCisgICAgcmV0dXJu
IHJldHVyblZhbHVlOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvdGVzdHMvVGVzdE1haW4uaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L3Rlc3RzL1Rlc3RNYWluLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmFhYzE4YzU3Zjg5NTQ4YWIzNmI5NWE4YjU0
YjU1ZGQzNjJlNTRmYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL3Rlc3RzL1Rlc3RNYWluLmgKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFRlc3RNYWluX2gKKyNkZWZpbmUgVGVz
dE1haW5faAorCisjaW5jbHVkZSA8Z2xpYi5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0dP
d25QdHIuaD4KKworI2RlZmluZSBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKENsYXNzTmFtZSkgXAor
ICAgIHN0YXRpYyB2b2lkIHNldFVwKENsYXNzTmFtZSogZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBk
YXRhKSBcCisgICAgeyBcCisgICAgICAgIG5ldyAoZml4dHVyZSkgQ2xhc3NOYW1lOyBcCisgICAg
fSBcCisgICAgc3RhdGljIHZvaWQgdGVhckRvd24oQ2xhc3NOYW1lKiBmaXh0dXJlLCBnY29uc3Rw
b2ludGVyIGRhdGEpIFwKKyAgICB7IFwKKyAgICAgICAgZml4dHVyZS0+fkNsYXNzTmFtZSgpOyBc
CisgICAgfSBcCisgICAgc3RhdGljIHZvaWQgYWRkKGNvbnN0IGNoYXIqIHN1aXRlTmFtZSwgY29u
c3QgY2hhciogdGVzdE5hbWUsIHZvaWQgKCp0ZXN0RnVuYykoQ2xhc3NOYW1lKiwgY29uc3Qgdm9p
ZCopKSBcCisgICAgeyBcCisgICAgICAgIEdPd25QdHI8Z2NoYXI+IHRlc3RQYXRoKGdfc3RyZHVw
X3ByaW50ZigiL3dlYmtpdDIvJXMvJXMiLCBzdWl0ZU5hbWUsIHRlc3ROYW1lKSk7IFwKKyAgICAg
ICAgZ190ZXN0X2FkZCh0ZXN0UGF0aC5nZXQoKSwgQ2xhc3NOYW1lLCAwLCBDbGFzc05hbWU6OnNl
dFVwLCB0ZXN0RnVuYywgQ2xhc3NOYW1lOjp0ZWFyRG93bik7IFwKKyAgICB9CisKK2NsYXNzIFRl
c3QKK3sKK3B1YmxpYzoKKyAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKFRlc3QpOworfTsKKwor
I2VuZGlmIC8vIFRlc3RNYWluX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRXZWJDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRXZWJDb250ZXh0LmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5hZDdjZTViOGI3ODY3OTA0OWNkNzMxMjhjMWEwMWUxMmVhZDM1MjFhCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktp
dFdlYkNvbnRleHQuY3BwCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiwx
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIlRlc3RNYWlu
LmgiCisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHdlYmtpdDIvd2Via2l0Mi5oPgor
CitzdGF0aWMgdm9pZCB0ZXN0V2ViQ29udGV4dERlZmF1bHQoVGVzdCogdGVzdCwgZ2NvbnN0cG9p
bnRlcikKK3sKKyAgICAvLyBDaGVjayB0aGVyZSdzIGEgc2luZ2xlIGluc3RhbmNlIG9mIHRoZSBk
ZWZhdWx0IHdlYiBjb250ZXh0LgorICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfY29udGV4dF9nZXRf
ZGVmYXVsdCgpID09IHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZGVmYXVsdCgpKTsKK30KKwordm9p
ZCBiZWZvcmVBbGwoKQoreworICAgIFRlc3Q6OmFkZCgiV2ViS2l0V2ViQ29udGV4dCIsICJkZWZh
dWx0LWNvbnRleHQiLCB0ZXN0V2ViQ29udGV4dERlZmF1bHQpOworfQorCit2b2lkIGFmdGVyQWxs
KCkKK3sKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rl
c3RzL1Rlc3RXZWJLaXRXZWJMb2FkZXJDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdFdlYkxvYWRlckNsaWVudC5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uZTViYmVlYjBiZGNlYTdiNWQzYWFmNjRmZTVkODExOTQ5ZjBlMjZiMQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRX
ZWJMb2FkZXJDbGllbnQuY3BwCkBAIC0wLDAgKzEsMTM5IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA5LCAyMDEwIEd1c3Rhdm8gTm9yb25oYSBTaWx2YQorICogQ29weXJpZ2h0IChDKSAyMDA5
LCAyMDExIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkxvYWRU
cmFja2luZ1Rlc3QuaCIKKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8bGlic291cC9z
b3VwLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCitzdGF0aWMgU291cFVSSSog
a0Jhc2VVUkkgPSAwOworc3RhdGljIFNvdXBTZXJ2ZXIqIGtTb3VwU2VydmVyID0gMDsKKworc3Rh
dGljIENTdHJpbmcgZ2V0VVJJRm9yUGF0aChjb25zdCBjaGFyKiBwYXRoKQoreworICAgIFNvdXBV
UkkqIHVyaSA9IHNvdXBfdXJpX25ld193aXRoX2Jhc2Uoa0Jhc2VVUkksIHBhdGgpOworICAgIEdP
d25QdHI8Z2NoYXI+IHVyaVN0cmluZyhzb3VwX3VyaV90b19zdHJpbmcodXJpLCBGQUxTRSkpOwor
ICAgIHNvdXBfdXJpX2ZyZWUodXJpKTsKKyAgICByZXR1cm4gdXJpU3RyaW5nLmdldCgpOworfQor
CitzdGF0aWMgdm9pZCB0ZXN0TG9hZGluZ1N0YXR1cyhMb2FkVHJhY2tpbmdUZXN0KiB0ZXN0LCBn
Y29uc3Rwb2ludGVyIGRhdGEpCit7CisgICAgd2Via2l0X3dlYl92aWV3X2xvYWRfdXJpKHRlc3Qt
Pm1fd2ViVmlldywgZ2V0VVJJRm9yUGF0aCgiLyIpLmRhdGEoKSk7CisgICAgdGVzdC0+d2FpdFVu
dGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICBWZWN0b3I8TG9hZFRyYWNraW5nVGVzdDo6TG9hZEV2
ZW50cz4gZXZlbnRzID0gdGVzdC0+bV9sb2FkRXZlbnRzOworICAgIGdfYXNzZXJ0X2NtcGludChl
dmVudHMuc2l6ZSgpLCA9PSwgNCk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1swXSwgPT0s
IExvYWRUcmFja2luZ1Rlc3Q6OlByb3Zpc2lvbmFsTG9hZFN0YXJ0ZWQpOworICAgIGdfYXNzZXJ0
X2NtcGludChldmVudHNbMV0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpQcm92aXNpb25hbExvYWRS
ZWNlaXZlZFNlcnZlclJlZGlyZWN0KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzJdLCA9
PSwgTG9hZFRyYWNraW5nVGVzdDo6TG9hZENvbW1pdHRlZCk7CisgICAgZ19hc3NlcnRfY21waW50
KGV2ZW50c1szXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRGaW5pc2hlZCk7Cit9CisKK3N0
YXRpYyB2b2lkIHRlc3RMb2FkaW5nRXJyb3IoTG9hZFRyYWNraW5nVGVzdCogdGVzdCwgZ2NvbnN0
cG9pbnRlcikKK3sKKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmkodGVzdC0+bV93ZWJWaWV3
LCBnZXRVUklGb3JQYXRoKCIvdGVzdF9sb2FkX2Vycm9yIikuZGF0YSgpKTsKKyAgICB0ZXN0LT53
YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIFZlY3RvcjxMb2FkVHJhY2tpbmdUZXN0OjpM
b2FkRXZlbnRzPiBldmVudHMgPSB0ZXN0LT5tX2xvYWRFdmVudHM7CisgICAgZ19hc3NlcnRfY21w
aW50KGV2ZW50cy5zaXplKCksID09LCAyKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzBd
LCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6UHJvdmlzaW9uYWxMb2FkU3RhcnRlZCk7CisgICAgZ19h
c3NlcnRfY21waW50KGV2ZW50c1sxXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OlByb3Zpc2lvbmFs
TG9hZEZhaWxlZCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RMb2FkQWx0ZXJuYXRlQ29udGVudChM
b2FkVHJhY2tpbmdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHdlYmtpdF93ZWJf
dmlld19sb2FkX2FsdGVybmF0ZV9odG1sKHRlc3QtPm1fd2ViVmlldywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiPGh0bWw+PGJvZHk+QWx0ZXJuYXRlIENvbnRlbnQ8
L2JvZHk+PC9odG1sPiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MCwgZ2V0VVJJRm9yUGF0aCgiL2FsdGVybmF0ZSIpLmRhdGEoKSk7CisgICAgdGVzdC0+d2FpdFVu
dGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICBWZWN0b3I8TG9hZFRyYWNraW5nVGVzdDo6TG9hZEV2
ZW50cz4gZXZlbnRzID0gdGVzdC0+bV9sb2FkRXZlbnRzOworICAgIGdfYXNzZXJ0X2NtcGludChl
dmVudHMuc2l6ZSgpLCA9PSwgMyk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1swXSwgPT0s
IExvYWRUcmFja2luZ1Rlc3Q6OlByb3Zpc2lvbmFsTG9hZFN0YXJ0ZWQpOworICAgIGdfYXNzZXJ0
X2NtcGludChldmVudHNbMV0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpMb2FkQ29tbWl0dGVkKTsK
KyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzJdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6TG9h
ZEZpbmlzaGVkKTsKK30KKworc3RhdGljIHZvaWQgdGVzdExvYWRQcm9ncmVzcyhMb2FkVHJhY2tp
bmdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHdlYmtpdF93ZWJfdmlld19sb2Fk
X3VyaSh0ZXN0LT5tX3dlYlZpZXcsIGdldFVSSUZvclBhdGgoIi8iKS5kYXRhKCkpOworICAgIHRl
c3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworICAgIGdfYXNzZXJ0X2NtcGZsb2F0KHRlc3Qt
Pm1fZXN0aW1hdGVkUHJvZ3Jlc3MsID09LCAxKTsKK30KKworc3RhdGljIHZvaWQgc2VydmVyQ2Fs
bGJhY2soU291cFNlcnZlciogc2VydmVyLCBTb3VwTWVzc2FnZSogbWVzc2FnZSwgY29uc3QgY2hh
ciogcGF0aCwgR0hhc2hUYWJsZSosIFNvdXBDbGllbnRDb250ZXh0KiwgZ3BvaW50ZXIpCit7CisK
KyAgICAvLyBUaGlzIHN0cmluZyBoYXMgdG8gYmUgcmF0aGVyIGJpZyBiZWNhdXNlIG9mIHRoZSBj
YW5jZWxsZWQgdGVzdCAtIGl0CisgICAgLy8gbG9va3MgbGlrZSBzb3VwIHJlZnVzZXMgdG8gc2Vu
ZCBvciByZWNlaXZlIGEgc21hbGwgY2h1bmsgb2YgZGF0YS4KKyAgICBzdGF0aWMgY29uc3QgY2hh
ciogcmVzcG9uc2VTdHJpbmcgPSAiPGh0bWw+PGJvZHk+VGVzdGluZyFUZXN0aW5nIVRlc3Rpbmch
VGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyEiCisgICAgICAgICJUZXN0aW5nIVRlc3Rp
bmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGlu
ZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyEiCisgICAgICAgICJUZXN0aW5nIVRlc3RpbmchVGVz
dGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0
aW5nIVRlc3RpbmchVGVzdGluZyEiCisgICAgICAgICJUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFU
ZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRl
c3RpbmchVGVzdGluZyEiCisgICAgICAgICJUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5n
IVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3Rpbmch
VGVzdGluZyEiCisgICAgICAgICJUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3Rp
bmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGlu
ZyEiCisgICAgICAgICJUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVz
dGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyEiCisg
ICAgICAgICJUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFU
ZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyE8L2JvZHk+PC9o
dG1sPiI7CisKKyAgICBpZiAobWVzc2FnZS0+bWV0aG9kICE9IFNPVVBfTUVUSE9EX0dFVCkgewor
ICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19OT1Rf
SU1QTEVNRU5URUQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgc291cF9tZXNzYWdl
X3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfT0spOworCisgICAgaWYgKGdfc3RyX2Vx
dWFsKHBhdGgsICIvIikpIHsKKyAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2Fn
ZSwgU09VUF9TVEFUVVNfTU9WRURfUEVSTUFORU5UTFkpOworICAgICAgICBzb3VwX21lc3NhZ2Vf
aGVhZGVyc19hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfaGVhZGVycywgIkxvY2F0aW9uIiwgIi90
ZXN0X2xvYWRpbmdfc3RhdHVzIik7CisgICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbChwYXRoLCAi
L3Rlc3RfbG9hZGluZ19zdGF0dXMiKSB8fCBnX3N0cl9lcXVhbChwYXRoLCAiL3Rlc3RfbG9hZGlu
Z19zdGF0dXMyIikpCisgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5y
ZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9TVEFUSUMsIHJlc3BvbnNlU3RyaW5nLCBzdHJsZW4o
cmVzcG9uc2VTdHJpbmcpKTsKKyAgICBlbHNlIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL3Rlc3Rf
bG9hZF9lcnJvciIpKSB7CisgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2Us
IFNPVVBfU1RBVFVTX0NBTlRfQ09OTkVDVCk7CisgICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbChw
YXRoLCAiL3Rlc3RfbG9hZGluZ19jYW5jZWxsZWQiKSkgeworICAgICAgICBzb3VwX21lc3NhZ2Vf
aGVhZGVyc19zZXRfZW5jb2RpbmcobWVzc2FnZS0+cmVzcG9uc2VfaGVhZGVycywgU09VUF9FTkNP
RElOR19DSFVOS0VEKTsKKyAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2Ut
PnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1NUQVRJQywgcmVzcG9uc2VTdHJpbmcsIHN0cmxl
bihyZXNwb25zZVN0cmluZykpOworICAgICAgICBzb3VwX3NlcnZlcl91bnBhdXNlX21lc3NhZ2Uo
c2VydmVyLCBtZXNzYWdlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHNvdXBfbWVz
c2FnZV9ib2R5X2NvbXBsZXRlKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHkpOworfQorCit2b2lkIGJl
Zm9yZUFsbCgpCit7CisgICAga0Jhc2VVUkkgPSBzb3VwX3VyaV9uZXcoImh0dHA6Ly8xMjcuMC4w
LjEvIik7CisKKyAgICBrU291cFNlcnZlciA9IHNvdXBfc2VydmVyX25ldyhTT1VQX1NFUlZFUl9Q
T1JULCAwLCBOVUxMKTsKKyAgICBzb3VwX3VyaV9zZXRfcG9ydChrQmFzZVVSSSwgc291cF9zZXJ2
ZXJfZ2V0X3BvcnQoa1NvdXBTZXJ2ZXIpKTsKKyAgICBzb3VwX3NlcnZlcl9ydW5fYXN5bmMoa1Nv
dXBTZXJ2ZXIpOworICAgIHNvdXBfc2VydmVyX2FkZF9oYW5kbGVyKGtTb3VwU2VydmVyLCAwLCBz
ZXJ2ZXJDYWxsYmFjaywgMCwgMCk7CisKKyAgICBMb2FkVHJhY2tpbmdUZXN0OjphZGQoIldlYktp
dFdlYkxvYWRlckNsaWVudCIsICJsb2FkaW5nLXN0YXR1cyIsIHRlc3RMb2FkaW5nU3RhdHVzKTsK
KyAgICBMb2FkVHJhY2tpbmdUZXN0OjphZGQoIldlYktpdFdlYkxvYWRlckNsaWVudCIsICJsb2Fk
aW5nLWVycm9yIiwgdGVzdExvYWRpbmdFcnJvcik7CisgICAgTG9hZFRyYWNraW5nVGVzdDo6YWRk
KCJXZWJLaXRXZWJMb2FkZXJDbGllbnQiLCAibG9hZC1hbHRlcm5hdGUtY29udGVudCIsIHRlc3RM
b2FkQWx0ZXJuYXRlQ29udGVudCk7CisgICAgTG9hZFRyYWNraW5nVGVzdDo6YWRkKCJXZWJLaXRX
ZWJMb2FkZXJDbGllbnQiLCAicHJvZ3Jlc3MiLCB0ZXN0TG9hZFByb2dyZXNzKTsKK30KKwordm9p
ZCBhZnRlckFsbCgpCit7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0V2ViVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0V2ViVmlldy5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzcy
YzY0ZmZmN2M5YzA0MzVmNTA4NTE4YzUwZTg0ZDU1YTkwMDNmYgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRXZWJWaWV3
LmNwcApAQCAtMCwwICsxLDM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBT
LkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViVmlld1Rlc3QuaCIKKworc3Rh
dGljIHZvaWQgdGVzdFdlYlZpZXdEZWZhdWx0Q29udGV4dChXZWJWaWV3VGVzdCogdGVzdCwgZ2Nv
bnN0cG9pbnRlcikKK3sKKyAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X2NvbnRleHQo
dGVzdC0+bV93ZWJWaWV3KSA9PSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2RlZmF1bHQoKSk7Cit9
CisKK3ZvaWQgYmVmb3JlQWxsKCkKK3sKKyAgICBXZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRXZWJW
aWV3IiwgImRlZmF1bHQtY29udGV4dCIsIHRlc3RXZWJWaWV3RGVmYXVsdENvbnRleHQpOworfQor
Cit2b2lkIGFmdGVyQWxsKCkKK3sKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlZpZXdUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlZpZXdUZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zMmI3ZmM1ZGI4
NmNjMzZjNjU5MTBiMjg0MmRiNDVmODY1ODc2YzFlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViVmlld1Rlc3QuY3BwCkBAIC0wLDAg
KzEsMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYlZpZXdUZXN0LmgiCisKK1dlYlZpZXdUZXN0OjpXZWJW
aWV3VGVzdCgpCisgICAgOiBtX3dlYlZpZXcoV0VCS0lUX1dFQl9WSUVXKGdfb2JqZWN0X3JlZl9z
aW5rKHdlYmtpdF93ZWJfdmlld19uZXcoKSkpKQorICAgICwgbV9tYWluTG9vcChnX21haW5fbG9v
cF9uZXcoMCwgVFJVRSkpCit7Cit9CisKK1dlYlZpZXdUZXN0Ojp+V2ViVmlld1Rlc3QoKQorewor
ICAgIGdfb2JqZWN0X3VucmVmKG1fd2ViVmlldyk7CisgICAgZ19tYWluX2xvb3BfdW5yZWYobV9t
YWluTG9vcCk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay90ZXN0cy9XZWJWaWV3VGVzdC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
dGVzdHMvV2ViVmlld1Rlc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41ODE4MDY2NzQ3ZWM2MzhjNGRmYWYxYTky
N2JhNGU3MDA3NzJkMGNkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvdGVzdHMvV2ViVmlld1Rlc3QuaApAQCAtMCwwICsxLDM2IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViVmlld1Rlc3RfaAorI2Rl
ZmluZSBXZWJWaWV3VGVzdF9oCisKKyNpbmNsdWRlICJUZXN0TWFpbi5oIgorI2luY2x1ZGUgPHdl
YmtpdDIvd2Via2l0Mi5oPgorCitjbGFzcyBXZWJWaWV3VGVzdCB7CitwdWJsaWM6CisgICAgTUFL
RV9HTElCX1RFU1RfRklYVFVSRShXZWJWaWV3VGVzdCk7CisgICAgV2ViVmlld1Rlc3QoKTsKKyAg
ICB2aXJ0dWFsIH5XZWJWaWV3VGVzdCgpOworCisgICAgV2ViS2l0V2ViVmlldyogbV93ZWJWaWV3
OworICAgIEdNYWluTG9vcCogbV9tYWluTG9vcDsKK307CisKKyNlbmRpZiAvLyBXZWJWaWV3VGVz
dF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy90
ZXN0bG9hZGluZy5jIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvdGVz
dGxvYWRpbmcuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjgxM2IyM2FmMjFmYjBm
Y2E4Nzc1MDM3OWIzY2ZmOTgzYTNiOTIxNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy90
ZXN0bG9hZGluZy5jCisrKyAvZGV2L251bGwKQEAgLTEsMzI5ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDksIDIwMTAgR3VzdGF2byBOb3JvbmhhIFNpbHZhCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDksIDIwMTEgSWdhbGlhIFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0g
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLSNpbmNsdWRl
IDxsaWJzb3VwL3NvdXAuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDx3ZWJraXQy
L3dlYmtpdDIuaD4KLQotLyogVGhpcyBzdHJpbmcgaGFzIHRvIGJlIHJhdGhlciBiaWcgYmVjYXVz
ZSBvZiB0aGUgY2FuY2VsbGVkIHRlc3QgLSBpdAotICogbG9va3MgbGlrZSBzb3VwIHJlZnVzZXMg
dG8gc2VuZCBvciByZWNlaXZlIGEgdG9vIHNtYWxsIGNodW5rICovCi0jZGVmaW5lIEhUTUxfU1RS
SU5HICI8aHRtbD48Ym9keT5UZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3Rpbmch
VGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFU
ZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRl
c3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVz
dGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0
aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3Rp
bmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGlu
ZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5n
IVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3Rpbmch
VGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFU
ZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRl
c3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVzdGluZyFUZXN0aW5nIVRlc3RpbmchVGVz
dGluZyFUZXN0aW5nIVRlc3RpbmchPC9ib2R5PjwvaHRtbD4iCi0KLVNvdXBVUkkgKmJhc2VVUkk7
Ci0KLS8qIEZvciByZWFsIHJlcXVlc3QgdGVzdGluZyAqLwotc3RhdGljIHZvaWQgc2VydmVyQ2Fs
bGJhY2soU291cFNlcnZlciogc2VydmVyLCBTb3VwTWVzc2FnZSogbXNnLCBjb25zdCBjaGFyKiBw
YXRoLCBHSGFzaFRhYmxlKiBxdWVyeSwgU291cENsaWVudENvbnRleHQqIGNvbnRleHQsIGdwb2lu
dGVyIGRhdGEpCi17Ci0gICAgaWYgKG1zZy0+bWV0aG9kICE9IFNPVVBfTUVUSE9EX0dFVCkgewot
ICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtc2csIFNPVVBfU1RBVFVTX05PVF9JTVBM
RU1FTlRFRCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBzb3VwX21lc3NhZ2Vfc2V0
X3N0YXR1cyhtc2csIFNPVVBfU1RBVFVTX09LKTsKLQotICAgIGlmIChnX3N0cl9lcXVhbChwYXRo
LCAiLyIpKSB7Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1zZywgU09VUF9TVEFU
VVNfTU9WRURfUEVSTUFORU5UTFkpOwotICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19hcHBl
bmQobXNnLT5yZXNwb25zZV9oZWFkZXJzLCAiTG9jYXRpb24iLCAiL3Rlc3RfbG9hZGluZ19zdGF0
dXMiKTsKLSAgICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvdGVzdF9sb2FkaW5nX3N0
YXR1cyIpIHx8IGdfc3RyX2VxdWFsKHBhdGgsICIvdGVzdF9sb2FkaW5nX3N0YXR1czIiKSkKLSAg
ICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1zZy0+cmVzcG9uc2VfYm9keSwgU09VUF9N
RU1PUllfU1RBVElDLCBIVE1MX1NUUklORywgc3RybGVuKEhUTUxfU1RSSU5HKSk7Ci0gICAgZWxz
ZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi90ZXN0X2xvYWRfZXJyb3IiKSkgewotICAgICAgICBz
b3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtc2csIFNPVVBfU1RBVFVTX0NBTlRfQ09OTkVDVCk7Ci0g
ICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL3Rlc3RfbG9hZGluZ19jYW5jZWxsZWQi
KSkgewotICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19zZXRfZW5jb2RpbmcobXNnLT5yZXNw
b25zZV9oZWFkZXJzLCBTT1VQX0VOQ09ESU5HX0NIVU5LRUQpOwotICAgICAgICBzb3VwX21lc3Nh
Z2VfYm9keV9hcHBlbmQobXNnLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9TVEFUSUMsIEhU
TUxfU1RSSU5HLCBzdHJsZW4oSFRNTF9TVFJJTkcpKTsKLSAgICAgICAgc291cF9zZXJ2ZXJfdW5w
YXVzZV9tZXNzYWdlKHNlcnZlciwgbXNnKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IHNvdXBfbWVzc2FnZV9ib2R5X2NvbXBsZXRlKG1zZy0+cmVzcG9uc2VfYm9keSk7Ci19Ci0KLXR5
cGVkZWYgc3RydWN0IHsKLSAgICBXZWJLaXRXZWJWaWV3ICp3ZWJWaWV3OwotICAgIEdNYWluTG9v
cCAqbG9vcDsKLSAgICBnYm9vbGVhbiBoYXNCZWVuUHJvdmlzaW9uYWw7Ci0gICAgZ2Jvb2xlYW4g
aGFzQmVlblJlZGlyZWN0OwotICAgIGdib29sZWFuIGhhc0JlZW5Db21taXR0ZWQ7Ci0gICAgZ2Jv
b2xlYW4gaGFzQmVlbkZpbmlzaGVkOwotICAgIGdib29sZWFuIGhhc0JlZW5GYWlsZWQ7Ci0gICAg
Z2RvdWJsZSBwcm9ncmVzczsKLX0gV2ViTG9hZGluZ0ZpeHR1cmU7Ci0KLXN0YXRpYyB2b2lkIHdl
YkxvYWRpbmdGaXh0dXJlU2V0dXAoV2ViTG9hZGluZ0ZpeHR1cmUgKmZpeHR1cmUsIGdjb25zdHBv
aW50ZXIgZGF0YSkKLXsKLSAgICBmaXh0dXJlLT53ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdl
YmtpdF93ZWJfdmlld19uZXcoKSk7Ci0gICAgZml4dHVyZS0+bG9vcCA9IGdfbWFpbl9sb29wX25l
dyhOVUxMLCBUUlVFKTsKLSAgICBnX29iamVjdF9yZWZfc2luayhmaXh0dXJlLT53ZWJWaWV3KTsK
LSAgICBmaXh0dXJlLT5oYXNCZWVuUHJvdmlzaW9uYWwgPSBGQUxTRTsKLSAgICBmaXh0dXJlLT5o
YXNCZWVuUmVkaXJlY3QgPSBGQUxTRTsKLSAgICBmaXh0dXJlLT5oYXNCZWVuQ29tbWl0dGVkID0g
RkFMU0U7Ci0gICAgZml4dHVyZS0+aGFzQmVlbkZpbmlzaGVkID0gRkFMU0U7Ci0gICAgZml4dHVy
ZS0+aGFzQmVlbkZhaWxlZCA9IEZBTFNFOwotICAgIGZpeHR1cmUtPnByb2dyZXNzID0gMDsKLX0K
LQotc3RhdGljIHZvaWQgd2ViTG9hZGluZ0ZpeHR1cmVUZWFyZG93bihXZWJMb2FkaW5nRml4dHVy
ZSAqZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQotewotICAgIGdfb2JqZWN0X3VucmVmKGZp
eHR1cmUtPndlYlZpZXcpOwotICAgIGdfbWFpbl9sb29wX3VucmVmKGZpeHR1cmUtPmxvb3ApOwot
fQotCi1zdGF0aWMgY2hhciAqZ2V0VVJJRm9yUGF0aChjb25zdCBjaGFyKiBwYXRoKQotewotICAg
IFNvdXBVUkkgKnVyaTsKLSAgICBjaGFyICp1cmlTdHJpbmc7Ci0KLSAgICB1cmkgPSBzb3VwX3Vy
aV9uZXdfd2l0aF9iYXNlKGJhc2VVUkksIHBhdGgpOwotICAgIHVyaVN0cmluZyA9IHNvdXBfdXJp
X3RvX3N0cmluZyh1cmksIEZBTFNFKTsKLSAgICBzb3VwX3VyaV9mcmVlKHVyaSk7Ci0KLSAgICBy
ZXR1cm4gdXJpU3RyaW5nOwotfQotCi0vKiBMb2FkIFN0YXR1cyAqLwotc3RhdGljIGdib29sZWFu
IGxvYWRTdGF0dXNQcm92aXNpb25hbExvYWRTdGFydGVkKFdlYktpdFdlYkxvYWRlckNsaWVudCAq
Y2xpZW50LCBXZWJMb2FkaW5nRml4dHVyZSAqZml4dHVyZSkKLXsKLSAgICBnX2Fzc2VydCghZml4
dHVyZS0+aGFzQmVlblByb3Zpc2lvbmFsKTsKLSAgICBnX2Fzc2VydCghZml4dHVyZS0+aGFzQmVl
blJlZGlyZWN0KTsKLSAgICBnX2Fzc2VydCghZml4dHVyZS0+aGFzQmVlbkNvbW1pdHRlZCk7Ci0g
ICAgZml4dHVyZS0+aGFzQmVlblByb3Zpc2lvbmFsID0gVFJVRTsKLQotICAgIHJldHVybiBUUlVF
OwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gbG9hZFN0YXR1c1Byb3Zpc2lvbmFsTG9hZFJlY2VpdmVk
U2VydmVyUmVkaXJlY3QoV2ViS2l0V2ViTG9hZGVyQ2xpZW50ICpjbGllbnQsIFdlYkxvYWRpbmdG
aXh0dXJlICpmaXh0dXJlKQotewotICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmhhc0JlZW5Qcm92aXNp
b25hbCk7Ci0gICAgZ19hc3NlcnQoIWZpeHR1cmUtPmhhc0JlZW5SZWRpcmVjdCk7Ci0gICAgZ19h
c3NlcnQoIWZpeHR1cmUtPmhhc0JlZW5Db21taXR0ZWQpOwotICAgIGZpeHR1cmUtPmhhc0JlZW5S
ZWRpcmVjdCA9IFRSVUU7Ci0KLSAgICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFu
IGxvYWRTdGF0dXNQcm92aXNpb25hbExvYWRGYWlsZWQoV2ViS2l0V2ViTG9hZGVyQ2xpZW50ICpj
bGllbnQsIGNvbnN0IGdjaGFyICpmYWlsaW5nVVJJLCBHRXJyb3IgKmVycm9yLCBXZWJMb2FkaW5n
Rml4dHVyZSAqZml4dHVyZSkKLXsKLSAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOwotICAgIHJl
dHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gbG9hZFN0YXR1c0xvYWRDb21taXR0ZWQo
V2ViS2l0V2ViTG9hZGVyQ2xpZW50ICpjbGllbnQsIFdlYkxvYWRpbmdGaXh0dXJlICpmaXh0dXJl
KQotewotICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmhhc0JlZW5Qcm92aXNpb25hbCk7Ci0gICAgZ19h
c3NlcnQoZml4dHVyZS0+aGFzQmVlblJlZGlyZWN0KTsKLSAgICBnX2Fzc2VydCghZml4dHVyZS0+
aGFzQmVlbkNvbW1pdHRlZCk7Ci0gICAgZml4dHVyZS0+aGFzQmVlbkNvbW1pdHRlZCA9IFRSVUU7
Ci0KLSAgICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuIGxvYWRTdGF0dXNMb2Fk
RmluaXNoZWQoV2ViS2l0V2ViTG9hZGVyQ2xpZW50ICpjbGllbnQsIFdlYkxvYWRpbmdGaXh0dXJl
ICpmaXh0dXJlKQotewotICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmhhc0JlZW5Qcm92aXNpb25hbCk7
Ci0gICAgZ19hc3NlcnQoZml4dHVyZS0+aGFzQmVlblJlZGlyZWN0KTsKLSAgICBnX2Fzc2VydChm
aXh0dXJlLT5oYXNCZWVuQ29tbWl0dGVkKTsKLSAgICBnX2Fzc2VydCghZml4dHVyZS0+aGFzQmVl
bkZpbmlzaGVkKTsKLSAgICBmaXh0dXJlLT5oYXNCZWVuRmluaXNoZWQgPSBUUlVFOwotCi0gICAg
Z19tYWluX2xvb3BfcXVpdChmaXh0dXJlLT5sb29wKTsKLQotICAgIHJldHVybiBUUlVFOwotfQot
Ci1zdGF0aWMgZ2Jvb2xlYW4gbG9hZFN0YXR1c0xvYWRGYWlsZWQoV2ViS2l0V2ViTG9hZGVyQ2xp
ZW50ICpjbGllbnQsIGNvbnN0IGdjaGFyICpmYWlsaW5nVVJJLCBHRXJyb3IgKmVycm9yLCBXZWJM
b2FkaW5nRml4dHVyZSAqZml4dHVyZSkKLXsKLSAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOwot
ICAgIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0TG9hZGluZ1N0YXR1cyhXZWJM
b2FkaW5nRml4dHVyZSAqZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBkYXRhKQotewotICAgIGNoYXIg
KnVyaVN0cmluZzsKLSAgICBXZWJLaXRXZWJMb2FkZXJDbGllbnQgKmNsaWVudCA9IHdlYmtpdF93
ZWJfdmlld19nZXRfbG9hZGVyX2NsaWVudChmaXh0dXJlLT53ZWJWaWV3KTsKLQotICAgIGdfc2ln
bmFsX2Nvbm5lY3QoY2xpZW50LCAicHJvdmlzaW9uYWwtbG9hZC1zdGFydGVkIiwgR19DQUxMQkFD
Syhsb2FkU3RhdHVzUHJvdmlzaW9uYWxMb2FkU3RhcnRlZCksIGZpeHR1cmUpOwotICAgIGdfc2ln
bmFsX2Nvbm5lY3QoY2xpZW50LCAicHJvdmlzaW9uYWwtbG9hZC1yZWNlaXZlZC1zZXJ2ZXItcmVk
aXJlY3QiLCBHX0NBTExCQUNLKGxvYWRTdGF0dXNQcm92aXNpb25hbExvYWRSZWNlaXZlZFNlcnZl
clJlZGlyZWN0KSwgZml4dHVyZSk7Ci0gICAgZ19zaWduYWxfY29ubmVjdChjbGllbnQsICJwcm92
aXNpb25hbC1sb2FkLWZhaWxlZCIsIEdfQ0FMTEJBQ0sobG9hZFN0YXR1c1Byb3Zpc2lvbmFsTG9h
ZEZhaWxlZCksIGZpeHR1cmUpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3QoY2xpZW50LCAibG9hZC1j
b21taXR0ZWQiLCBHX0NBTExCQUNLKGxvYWRTdGF0dXNMb2FkQ29tbWl0dGVkKSwgZml4dHVyZSk7
Ci0gICAgZ19zaWduYWxfY29ubmVjdChjbGllbnQsICJsb2FkLWZpbmlzaGVkIiwgR19DQUxMQkFD
Syhsb2FkU3RhdHVzTG9hZEZpbmlzaGVkKSwgZml4dHVyZSk7Ci0gICAgZ19zaWduYWxfY29ubmVj
dChjbGllbnQsICJsb2FkLWZhaWxlZCIsIEdfQ0FMTEJBQ0sobG9hZFN0YXR1c0xvYWRGYWlsZWQp
LCBmaXh0dXJlKTsKLQotICAgIHVyaVN0cmluZyA9IGdldFVSSUZvclBhdGgoIi8iKTsKLSAgICB3
ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmkoZml4dHVyZS0+d2ViVmlldywgdXJpU3RyaW5nKTsKLSAg
ICBnX2ZyZWUodXJpU3RyaW5nKTsKLQotICAgIGdfbWFpbl9sb29wX3J1bihmaXh0dXJlLT5sb29w
KTsKLQotICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmhhc0JlZW5Qcm92aXNpb25hbCk7Ci0gICAgZ19h
c3NlcnQoZml4dHVyZS0+aGFzQmVlblJlZGlyZWN0KTsKLSAgICBnX2Fzc2VydChmaXh0dXJlLT5o
YXNCZWVuQ29tbWl0dGVkKTsKLSAgICBnX2Fzc2VydChmaXh0dXJlLT5oYXNCZWVuRmluaXNoZWQp
OwotfQotCi0vKiBMb2FkIEVycm9yICovCi1zdGF0aWMgZ2Jvb2xlYW4gbG9hZEVycm9yUHJvdmlz
aW9uYWxMb2FkU3RhcnRlZChXZWJLaXRXZWJMb2FkZXJDbGllbnQgKmNsaWVudCwgV2ViTG9hZGlu
Z0ZpeHR1cmUgKmZpeHR1cmUpCi17Ci0gICAgZ19hc3NlcnQoIWZpeHR1cmUtPmhhc0JlZW5Qcm92
aXNpb25hbCk7Ci0gICAgZml4dHVyZS0+aGFzQmVlblByb3Zpc2lvbmFsID0gVFJVRTsKLQotICAg
IHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gbG9hZEVycm9yUHJvdmlzaW9uYWxM
b2FkRmFpbGVkKFdlYktpdFdlYkxvYWRlckNsaWVudCAqY2xpZW50LCBjb25zdCBnY2hhciAqZmFp
bGluZ1VSSSwgR0Vycm9yICplcnJvciwgV2ViTG9hZGluZ0ZpeHR1cmUgKmZpeHR1cmUpCi17Ci0g
ICAgZ19hc3NlcnQoZml4dHVyZS0+aGFzQmVlblByb3Zpc2lvbmFsKTsKLSAgICBnX2Fzc2VydCgh
Zml4dHVyZS0+aGFzQmVlbkZhaWxlZCk7Ci0gICAgZml4dHVyZS0+aGFzQmVlbkZhaWxlZCA9IFRS
VUU7Ci0KLSAgICBnX2Fzc2VydChlcnJvcik7Ci0KLSAgICBnX21haW5fbG9vcF9xdWl0KGZpeHR1
cmUtPmxvb3ApOwotCi0gICAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiBsb2Fk
RXJyb3JMb2FkRmluaXNoZWQoV2ViS2l0V2ViTG9hZGVyQ2xpZW50ICpjbGllbnQsIFdlYkxvYWRp
bmdGaXh0dXJlICpmaXh0dXJlKQotewotICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7Ci0gICAg
cmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RMb2FkaW5nRXJyb3IoV2ViTG9hZGlu
Z0ZpeHR1cmUgKmZpeHR1cmUsIGdjb25zdHBvaW50ZXIgZGF0YSkKLXsKLSAgICBjaGFyICp1cmlT
dHJpbmc7Ci0gICAgV2ViS2l0V2ViTG9hZGVyQ2xpZW50ICpjbGllbnQgPSB3ZWJraXRfd2ViX3Zp
ZXdfZ2V0X2xvYWRlcl9jbGllbnQoZml4dHVyZS0+d2ViVmlldyk7Ci0KLSAgICBnX3NpZ25hbF9j
b25uZWN0KGNsaWVudCwgInByb3Zpc2lvbmFsLWxvYWQtc3RhcnRlZCIsIEdfQ0FMTEJBQ0sobG9h
ZEVycm9yUHJvdmlzaW9uYWxMb2FkU3RhcnRlZCksIGZpeHR1cmUpOwotICAgIGdfc2lnbmFsX2Nv
bm5lY3QoY2xpZW50LCAicHJvdmlzaW9uYWwtbG9hZC1mYWlsZWQiLCBHX0NBTExCQUNLKGxvYWRF
cnJvclByb3Zpc2lvbmFsTG9hZEZhaWxlZCksIGZpeHR1cmUpOwotICAgIGdfc2lnbmFsX2Nvbm5l
Y3QoY2xpZW50LCAibG9hZC1maW5pc2hlZCIsIEdfQ0FMTEJBQ0sobG9hZEVycm9yTG9hZEZpbmlz
aGVkKSwgZml4dHVyZSk7Ci0KLSAgICB1cmlTdHJpbmcgPSBnZXRVUklGb3JQYXRoKCIvdGVzdF9s
b2FkX2Vycm9yIik7Ci0gICAgd2Via2l0X3dlYl92aWV3X2xvYWRfdXJpKGZpeHR1cmUtPndlYlZp
ZXcsIHVyaVN0cmluZyk7Ci0gICAgZ19mcmVlKHVyaVN0cmluZyk7Ci0KLSAgICBnX21haW5fbG9v
cF9ydW4oZml4dHVyZS0+bG9vcCk7Ci0KLSAgICBnX2Fzc2VydChmaXh0dXJlLT5oYXNCZWVuUHJv
dmlzaW9uYWwpOwotICAgIGdfYXNzZXJ0KGZpeHR1cmUtPmhhc0JlZW5GYWlsZWQpOwotfQotCi1z
dGF0aWMgZ2Jvb2xlYW4gbG9hZEFsdGVybmF0ZUNvbnRlbnRMb2FkRmluaXNoZWQoV2ViS2l0V2Vi
TG9hZGVyQ2xpZW50ICpjbGllbnQsIFdlYkxvYWRpbmdGaXh0dXJlICpmaXh0dXJlKQotewotICAg
IGdfbWFpbl9sb29wX3F1aXQoZml4dHVyZS0+bG9vcCk7Ci0KLSAgICByZXR1cm4gVFJVRTsKLX0K
LQotc3RhdGljIGdib29sZWFuIGxvYWRBbHRlcm5hdGVDb250ZW50TG9hZEZhaWxlZChXZWJLaXRX
ZWJMb2FkZXJDbGllbnQgKmNsaWVudCwgY29uc3QgZ2NoYXIgKmZhaWxpbmdVUkksIEdFcnJvciAq
ZXJyb3IsIFdlYkxvYWRpbmdGaXh0dXJlICpmaXh0dXJlKQotewotICAgIGdfYXNzZXJ0X25vdF9y
ZWFjaGVkKCk7Ci0gICAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RMb2FkQWx0
ZXJuYXRlQ29udGVudChXZWJMb2FkaW5nRml4dHVyZSAqZml4dHVyZSwgZ2NvbnN0cG9pbnRlciBk
YXRhKQotewotICAgIGNoYXIgKnVyaVN0cmluZzsKLSAgICBXZWJLaXRXZWJMb2FkZXJDbGllbnQg
KmNsaWVudCA9IHdlYmtpdF93ZWJfdmlld19nZXRfbG9hZGVyX2NsaWVudChmaXh0dXJlLT53ZWJW
aWV3KTsKLQotICAgIGdfc2lnbmFsX2Nvbm5lY3QoY2xpZW50LCAibG9hZC1maW5pc2hlZCIsIEdf
Q0FMTEJBQ0sobG9hZEFsdGVybmF0ZUNvbnRlbnRMb2FkRmluaXNoZWQpLCBmaXh0dXJlKTsKLSAg
ICBnX3NpZ25hbF9jb25uZWN0KGNsaWVudCwgInByb3Zpc2lvbmFsLWxvYWQtZmFpbGVkIiwgR19D
QUxMQkFDSyhsb2FkQWx0ZXJuYXRlQ29udGVudExvYWRGYWlsZWQpLCBmaXh0dXJlKTsKLSAgICBn
X3NpZ25hbF9jb25uZWN0KGNsaWVudCwgImxvYWQtZmFpbGVkIiwgR19DQUxMQkFDSyhsb2FkQWx0
ZXJuYXRlQ29udGVudExvYWRGYWlsZWQpLCBmaXh0dXJlKTsKLQotICAgIHVyaVN0cmluZyA9IGdl
dFVSSUZvclBhdGgoIi9hbHRlcm5hdGUiKTsKLSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9hbHRl
cm5hdGVfaHRtbChmaXh0dXJlLT53ZWJWaWV3LCAiPGh0bWw+PGJvZHk+QWx0ZXJuYXRlIENvbnRl
bnQ8L2JvZHk+PC9odG1sPiIsIE5VTEwsIHVyaVN0cmluZyk7Ci0gICAgZ19mcmVlKHVyaVN0cmlu
Zyk7Ci0KLSAgICBnX21haW5fbG9vcF9ydW4oZml4dHVyZS0+bG9vcCk7Ci19Ci0KLXN0YXRpYyB2
b2lkIGxvYWRQcm9ncmVzc0VzdGltYXRlZFByb2dyZXNzQ2hhbmdlZChHT2JqZWN0ICpvYmplY3Qs
IEdQYXJhbVNwZWMgKnBzcGVjLCBXZWJMb2FkaW5nRml4dHVyZSAqZml4dHVyZSkKLXsKLSAgICBn
ZG91YmxlIHByb2dyZXNzID0gd2Via2l0X3dlYl9sb2FkZXJfY2xpZW50X2dldF9lc3RpbWF0ZWRf
cHJvZ3Jlc3MoV0VCS0lUX1dFQl9MT0FERVJfQ0xJRU5UKG9iamVjdCkpOwotCi0gICAgZ19hc3Nl
cnRfY21wZmxvYXQoZml4dHVyZS0+cHJvZ3Jlc3MsIDwsIHByb2dyZXNzKTsKLSAgICBmaXh0dXJl
LT5wcm9ncmVzcyA9IHByb2dyZXNzOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gbG9hZFByb2dyZXNz
TG9hZEZpbmlzaGVkKFdlYktpdFdlYkxvYWRlckNsaWVudCAqY2xpZW50LCBXZWJMb2FkaW5nRml4
dHVyZSAqZml4dHVyZSkKLXsKLSAgICBnX2Fzc2VydF9jbXBmbG9hdChmaXh0dXJlLT5wcm9ncmVz
cywgPT0sIDEuMCk7Ci0gICAgZ19tYWluX2xvb3BfcXVpdChmaXh0dXJlLT5sb29wKTsKLQotICAg
IHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0TG9hZFByb2dyZXNzKFdlYkxvYWRp
bmdGaXh0dXJlICpmaXh0dXJlLCBnY29uc3Rwb2ludGVyIGRhdGEpCi17Ci0gICAgY2hhciAqdXJp
U3RyaW5nOwotICAgIFdlYktpdFdlYkxvYWRlckNsaWVudCAqY2xpZW50ID0gd2Via2l0X3dlYl92
aWV3X2dldF9sb2FkZXJfY2xpZW50KGZpeHR1cmUtPndlYlZpZXcpOwotCi0gICAgZ19zaWduYWxf
Y29ubmVjdChjbGllbnQsICJsb2FkLWZpbmlzaGVkIiwgR19DQUxMQkFDSyhsb2FkUHJvZ3Jlc3NM
b2FkRmluaXNoZWQpLCBmaXh0dXJlKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KGNsaWVudCwgIm5v
dGlmeTo6ZXN0aW1hdGVkLXByb2dyZXNzIiwgR19DQUxMQkFDSyhsb2FkUHJvZ3Jlc3NFc3RpbWF0
ZWRQcm9ncmVzc0NoYW5nZWQpLCBmaXh0dXJlKTsKLQotICAgIHVyaVN0cmluZyA9IGdldFVSSUZv
clBhdGgoIi8iKTsKLSAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmkoZml4dHVyZS0+d2ViVmll
dywgdXJpU3RyaW5nKTsKLSAgICBnX2ZyZWUodXJpU3RyaW5nKTsKLQotICAgIGdfbWFpbl9sb29w
X3J1bihmaXh0dXJlLT5sb29wKTsKLX0KLQotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2
KQotewotICAgIFNvdXBTZXJ2ZXIgKnNlcnZlcjsKLQotICAgIGdfdGhyZWFkX2luaXQoTlVMTCk7
Ci0gICAgZ3RrX3Rlc3RfaW5pdCgmYXJnYywgJmFyZ3YsIE5VTEwpOwotCi0gICAgZ19zZXRlbnYo
IldFQktJVF9FWEVDX1BBVEgiLCBXRUJLSVRfRVhFQ19QQVRILCBGQUxTRSk7Ci0KLSAgICBzZXJ2
ZXIgPSBzb3VwX3NlcnZlcl9uZXcoU09VUF9TRVJWRVJfUE9SVCwgMCwgTlVMTCk7Ci0gICAgc291
cF9zZXJ2ZXJfcnVuX2FzeW5jKHNlcnZlcik7Ci0KLSAgICBzb3VwX3NlcnZlcl9hZGRfaGFuZGxl
cihzZXJ2ZXIsIE5VTEwsIHNlcnZlckNhbGxiYWNrLCBOVUxMLCBOVUxMKTsKLQotICAgIGJhc2VV
UkkgPSBzb3VwX3VyaV9uZXcoImh0dHA6Ly8xMjcuMC4wLjEvIik7Ci0gICAgc291cF91cmlfc2V0
X3BvcnQoYmFzZVVSSSwgc291cF9zZXJ2ZXJfZ2V0X3BvcnQoc2VydmVyKSk7Ci0KLSAgICBnX3Rl
c3RfYnVnX2Jhc2UoImh0dHBzOi8vYnVncy53ZWJraXQub3JnLyIpOwotICAgIGdfdGVzdF9hZGQo
Ii93ZWJraXQyL2xvYWRpbmcvc3RhdHVzIiwKLSAgICAgICAgICAgICAgIFdlYkxvYWRpbmdGaXh0
dXJlLCBOVUxMLAotICAgICAgICAgICAgICAgd2ViTG9hZGluZ0ZpeHR1cmVTZXR1cCwKLSAgICAg
ICAgICAgICAgIHRlc3RMb2FkaW5nU3RhdHVzLAotICAgICAgICAgICAgICAgd2ViTG9hZGluZ0Zp
eHR1cmVUZWFyZG93bik7Ci0gICAgZ190ZXN0X2FkZCgiL3dlYmtpdDIvbG9hZGluZy9lcnJvciIs
Ci0gICAgICAgICAgICAgICBXZWJMb2FkaW5nRml4dHVyZSwgTlVMTCwKLSAgICAgICAgICAgICAg
IHdlYkxvYWRpbmdGaXh0dXJlU2V0dXAsCi0gICAgICAgICAgICAgICB0ZXN0TG9hZGluZ0Vycm9y
LAotICAgICAgICAgICAgICAgd2ViTG9hZGluZ0ZpeHR1cmVUZWFyZG93bik7Ci0gICAgZ190ZXN0
X2FkZCgiL3dlYmtpdDIvbG9hZGluZy9hbHRlcm5hdGVfY29udGVudCIsCi0gICAgICAgICAgICAg
ICBXZWJMb2FkaW5nRml4dHVyZSwgTlVMTCwKLSAgICAgICAgICAgICAgIHdlYkxvYWRpbmdGaXh0
dXJlU2V0dXAsCi0gICAgICAgICAgICAgICB0ZXN0TG9hZEFsdGVybmF0ZUNvbnRlbnQsCi0gICAg
ICAgICAgICAgICB3ZWJMb2FkaW5nRml4dHVyZVRlYXJkb3duKTsKLSAgICBnX3Rlc3RfYWRkKCIv
d2Via2l0Mi9sb2FkaW5nL3Byb2dyZXNzIiwKLSAgICAgICAgICAgICAgIFdlYkxvYWRpbmdGaXh0
dXJlLCBOVUxMLAotICAgICAgICAgICAgICAgd2ViTG9hZGluZ0ZpeHR1cmVTZXR1cCwKLSAgICAg
ICAgICAgICAgIHRlc3RMb2FkUHJvZ3Jlc3MsCi0gICAgICAgICAgICAgICB3ZWJMb2FkaW5nRml4
dHVyZVRlYXJkb3duKTsKLQotICAgIHJldHVybiBnX3Rlc3RfcnVuKCk7Ci19Ci0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL3Rlc3R3ZWJjb250ZXh0
LmMgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy90ZXN0d2ViY29udGV4
dC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZmNlNWFjOWI5YTI4NDRhM2Y0ZGVh
NGVmZDVjNTg2ZTFlYzAwMGFkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL3Rlc3R3ZWJj
b250ZXh0LmMKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDExIElnYWxpYSBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJz
aW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSA8Z2xpYi5oPgotI2luY2x1ZGUgPGd0ay9n
dGsuaD4KLSNpbmNsdWRlIDx3ZWJraXQyL3dlYmtpdDIuaD4KLQotc3RhdGljIHZvaWQgdGVzdFdl
YkNvbnRleHREZWZhdWx0KHZvaWQpCi17Ci0gICAgLyogQ2hlY2sgdGhlcmUncyBhIHNpbmdsZSBp
bnN0YW5jZSBvZiB0aGUgZGVmYXVsdCB3ZWIgY29udGV4dC4gKi8KLSAgICBnX2Fzc2VydCh3ZWJr
aXRfd2ViX2NvbnRleHRfZ2V0X2RlZmF1bHQoKSA9PSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2Rl
ZmF1bHQoKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJDb250ZXh0Q2FjaGVNb2RlbCh2b2lk
KQotewotICAgIFdlYktpdFdlYkNvbnRleHQgKmNvbnRleHQgPSB3ZWJraXRfd2ViX2NvbnRleHRf
Z2V0X2RlZmF1bHQoKTsKLQotICAgIC8qIENoZWNrIGRlZmF1bHQgY2FjaGUgbW9kZWwgaXMgd2Vi
IGJyb3dzZXIuICovCi0gICAgZ19hc3NlcnQod2Via2l0X3dlYl9jb250ZXh0X2dldF9jYWNoZV9t
b2RlbChjb250ZXh0KSA9PSBXRUJLSVRfQ0FDSEVfTU9ERUxfV0VCX0JST1dTRVIpOwotCi0gICAg
d2Via2l0X3dlYl9jb250ZXh0X3NldF9jYWNoZV9tb2RlbChjb250ZXh0LCBXRUJLSVRfQ0FDSEVf
TU9ERUxfRE9DVU1FTlRfVklFV0VSKTsKLSAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX2NvbnRleHRf
Z2V0X2NhY2hlX21vZGVsKGNvbnRleHQpID09IFdFQktJVF9DQUNIRV9NT0RFTF9ET0NVTUVOVF9W
SUVXRVIpOwotCi0gICAgd2Via2l0X3dlYl9jb250ZXh0X3NldF9jYWNoZV9tb2RlbChjb250ZXh0
LCBXRUJLSVRfQ0FDSEVfTU9ERUxfRE9DVU1FTlRfQlJPV1NFUik7Ci0gICAgZ19hc3NlcnQod2Vi
a2l0X3dlYl9jb250ZXh0X2dldF9jYWNoZV9tb2RlbChjb250ZXh0KSA9PSBXRUJLSVRfQ0FDSEVf
TU9ERUxfRE9DVU1FTlRfQlJPV1NFUik7Ci0KLSAgICB3ZWJraXRfd2ViX2NvbnRleHRfc2V0X2Nh
Y2hlX21vZGVsKGNvbnRleHQsIFdFQktJVF9DQUNIRV9NT0RFTF9XRUJfQlJPV1NFUik7Ci0gICAg
Z19hc3NlcnQod2Via2l0X3dlYl9jb250ZXh0X2dldF9jYWNoZV9tb2RlbChjb250ZXh0KSA9PSBX
RUJLSVRfQ0FDSEVfTU9ERUxfV0VCX0JST1dTRVIpOwotfQotCi1pbnQgbWFpbihpbnQgYXJnYywg
Y2hhciAqKmFyZ3YpCi17Ci0gICAgZ190aHJlYWRfaW5pdChOVUxMKTsKLSAgICBndGtfdGVzdF9p
bml0KCZhcmdjLCAmYXJndiwgTlVMTCk7Ci0KLSAgICBnX3Rlc3RfYnVnX2Jhc2UoImh0dHBzOi8v
YnVncy53ZWJraXQub3JnLyIpOwotICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdDIvd2ViY29u
dGV4dC9kZWZhdWx0X2NvbnRleHQiLAotICAgICAgICAgICAgICAgICAgICB0ZXN0V2ViQ29udGV4
dERlZmF1bHQpOwotICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdDIvd2ViY29udGV4dC9jYWNo
ZV9tb2RlbCIsCi0gICAgICAgICAgICAgICAgICAgIHRlc3RXZWJDb250ZXh0Q2FjaGVNb2RlbCk7
Ci0KLSAgICByZXR1cm4gZ190ZXN0X3J1bigpOwotfQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy90ZXN0d2Vidmlldy5jIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvdGVzdHdlYnZpZXcuYwpkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggOWEyN2FmZTYyMzc5MTNiYjQyYjgyOWU5OGUwN2E5YmQwOGVhODc4Zi4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy90ZXN0d2Vidmlldy5jCisrKyAvZGV2L251bGwK
QEAgLTEsNDQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgot
ICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0g
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQot
I2luY2x1ZGUgPGdsaWIuaD4KLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0jaW5jbHVkZSA8d2Via2l0
Mi93ZWJraXQyLmg+Ci0KLXN0YXRpYyB2b2lkIHRlc3RXZWJWaWV3RGVmYXVsdENvbnRleHQodm9p
ZCkKLXsKLSAgICBXZWJLaXRXZWJWaWV3ICp2aWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93
ZWJfdmlld19uZXcoKSk7Ci0gICAgZ19vYmplY3RfcmVmX3Npbmsodmlldyk7Ci0gICAgZ19hc3Nl
cnQod2Via2l0X3dlYl92aWV3X2dldF9jb250ZXh0KHZpZXcpID09IHdlYmtpdF93ZWJfY29udGV4
dF9nZXRfZGVmYXVsdCgpKTsKLSAgICBnX29iamVjdF91bnJlZih2aWV3KTsKLX0KLQotaW50IG1h
aW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotewotICAgIGdfdGhyZWFkX2luaXQoTlVMTCk7Ci0g
ICAgZ3RrX3Rlc3RfaW5pdCgmYXJnYywgJmFyZ3YsIE5VTEwpOwotCi0gICAgZ19zZXRlbnYoIldF
QktJVF9FWEVDX1BBVEgiLCBXRUJLSVRfRVhFQ19QQVRILCBGQUxTRSk7Ci0KLSAgICBnX3Rlc3Rf
YnVnX2Jhc2UoImh0dHBzOi8vYnVncy53ZWJraXQub3JnLyIpOwotICAgIGdfdGVzdF9hZGRfZnVu
YygiL3dlYmtpdDIvd2Vidmlldy9kZWZhdWx0X2NvbnRleHQiLAotICAgICAgICAgICAgICAgICAg
ICB0ZXN0V2ViVmlld0RlZmF1bHRDb250ZXh0KTsKLQotICAgIHJldHVybiBnX3Rlc3RfcnVuKCk7
Ci19CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXgg
OWM3NjhiNDcyODg0ZDc4MjlhOTcxZDU5OTMyNmQyMzM5MzY4MThjMS4uOGU5OGU0MGUyNDQ3MWNm
M2YzNWRmMzgxYmE5NDJhNzE4ZGY1NDJiMyAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisr
KyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDExLTEwLTEwICBNYXJ0aW4g
Um9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBbV2ViS2l0
Ml0gTWFrZSBhZGRpbmcgYW5vdGhlciB1bml0IHRlc3QgZWFzaWVyCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02OTQwOQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogU2NyaXB0cy9ydW4tZ3RrLXRlc3RzOiBV
cGRhdGUgcnVuLWd0ay10ZXN0cyB0byBiZSBhYmxlIHRvIGV4ZWN1dGUKKyAgICAgICAgbmV3IFdl
YktpdDIgdGVzdHMuCisKIDIwMTEtMTAtMDcgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9y
Zz4KIAogICAgICAgICBBZGQgYSBDb250ZW50LVNlY3VyaXR5LVBvbGljeSB0byBnYXJkZW4tby1t
YXRpYwpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy9ydW4tZ3RrLXRlc3RzIGIvVG9vbHMvU2Ny
aXB0cy9ydW4tZ3RrLXRlc3RzCmluZGV4IDJmYjY1YjczNzIwN2Y4YjYzM2Q1ZWUxNDY2NzM1Yzdi
NTZkZDY4MTUuLjFkYjlhZTI4Yjg0ZjgwMGIwMWRjMWQyZDZlYmQ3ZTkxNzJhM2UxMzIgMTAwNzU1
Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvcnVuLWd0ay10ZXN0cworKysgYi9Ub29scy9TY3JpcHRzL3J1
bi1ndGstdGVzdHMKQEAgLTI3LDEzICsyNywxMyBAQCB1c2Ugd2Via2l0ZGlyczsKICMgVGhpcyBp
bml0aWFsaXplcyB0aGUgY29ycmVjdCBjb25maWd1cmF0aW9uIChSZWxlYXNlL0RlYnVnKQogc2V0
Q29uZmlndXJhdGlvbigpOwogCi1teSAkcHJvZHVjdERpciA9IHByb2R1Y3REaXIoKTsKLW15ICR0
ZXN0c0RpciA9ICRwcm9kdWN0RGlyIC4gIi9Qcm9ncmFtcy91bml0dGVzdHMiIDsKLW15IEB1bml0
VGVzdHMgPSBnbG9iICAkdGVzdHNEaXIgLiAiL3Rlc3QqIjsKLW15IEB3ZWJraXQyVW5pdFRlc3Rz
ID0gZ2xvYiAgJHRlc3RzRGlyIC4gIi93ZWJraXQyL3Rlc3QqIjsKLXB1c2ggQHVuaXRUZXN0cywg
QHdlYmtpdDJVbml0VGVzdHM7CitteSBAdW5pdFRlc3RzOworbXkgJHByb2dyYW1zRGlyZWN0b3J5
ID0gcHJvZHVjdERpcigpIC4gIi9Qcm9ncmFtcyI7CitwdXNoKEB1bml0VGVzdHMsIGdsb2IoJHBy
b2dyYW1zRGlyZWN0b3J5IC4gIi91bml0dGVzdHMvKiIpKTsKK3B1c2goQHVuaXRUZXN0cywgZ2xv
YigkcHJvZ3JhbXNEaXJlY3RvcnkgLiAiL1dlYktpdDJBUElUZXN0cy8qIikpOworCiBpZiAoJCN1
bml0VGVzdHMgPCAxKSB7Ci0gICAgZGllICJFUlJPUjogdGVzdHMgbm90IGZvdW5kIGluICRwcm9k
dWN0RGlyLlxuIjsKKyAgICBkaWUgIkVSUk9SOiB0ZXN0cyBub3QgZm91bmQgaW4gJHByb2dyYW1z
RGlyZWN0b3J5LlxuIjsKIH0KIAogbXkgJHBpZCA9IGZvcmsoKTsKQEAgLTUyLDYgKzUyLDggQEAg
JEVOVnsiRElTUExBWSJ9ID0gJzozMSc7CiBteSAkZXhpdFN0YXR1cyA9IDA7CiBmb3JlYWNoIG15
ICR1bml0VGVzdCAoQHVuaXRUZXN0cykKIHsKKyAgICBuZXh0IHVubGVzcyAoLWYgJHVuaXRUZXN0
IGFuZCAteCAkdW5pdFRlc3QpOworCiAgICAgc3lzdGVtICJndGVzdGVyICR1bml0VGVzdCI7CiAg
ICAgaWYgKCQ/KSB7CiAgICAgICAgICRleGl0U3RhdHVzID0gJD87Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>